using System; using System.Collections.Generic; using System.Linq; using MySystem.SpModels; using Library; using LitJson; using System.Threading; namespace MySystem { public class SycnSpMerchantService { public readonly static SycnSpMerchantService Instance = new SycnSpMerchantService(); private SycnSpMerchantService() { } public void Start() { Thread th = new Thread(StartDo); th.IsBackground = true; th.Start(); } public void StartDo() { while (true) { try { WebCMSEntities spdb = new WebCMSEntities(); PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities(); DateTime start = DateTime.Now.AddDays(-60); DateTime end = DateTime.Now.AddMinutes(-2); int StartId = int.Parse(function.CheckInt(function.ReadInstance("/SycnSp/MerchantsId.txt"))); var Mers = spdb.Merchants.Where(m => m.Id >= StartId && m.CreateTime >= start && m.CreateTime <= end && m.Status == 1).OrderByDescending(m => m.Id).Take(20).ToList(); // var Mers = spdb.Merchants.Where(m => m.Id == 765841).ToList(); foreach (var Mer in Mers) { var tran = db.Database.BeginTransaction(); try { if(Mer.Field2 != "解绑" && Mer.Field2 != "UNBIND") { if(Utils.Instance.IsWifi(int.Parse(Mer.ProductType))) { Mer.MerNo = Mer.SnNo; PosPushDataNewHelper.Bind(Mer); } else if(Mer.ProductType == "12" || Mer.ProductType == "30") { MerchantRecord merInfo = new MerchantRecord(); if(Mer.ProductType == "12") merInfo = spdb.MerchantRecord.FirstOrDefault(m => m.MerNo == Mer.MerNo); if(Mer.ProductType == "30") { merInfo = spdb.MerchantRecord.FirstOrDefault(m => m.Field3 == Mer.MerNo); if(merInfo == null) merInfo = spdb.MerchantRecord.FirstOrDefault(m => m.MerNo == Mer.MerNo); } if(merInfo != null) { Mer.MerNo = merInfo.MerNo; Mer.MerIdcardNo = merInfo.LegalIdCard; Mer.MerName = merInfo.MerName; if(Mer.ProductType == "30") { Mer.MerMobile = merInfo.Field2; } PosPushDataNewHelper.Bind(Mer); } } else { PosPushDataNewHelper.Bind(Mer); } } Merchants edit = spdb.Merchants.FirstOrDefault(m => m.Id == Mer.Id); if (edit != null) { edit.Status = 2; spdb.SaveChanges(); } tran.Commit(); } catch (Exception ex) { tran.Rollback(); function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString() + "\n" + Mer.Id, "同步SP商户数据到MAIN异常"); } tran.Dispose(); } spdb.SaveChanges(); spdb.Dispose(); db.SaveChanges(); db.Dispose(); } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP商户数据到MAIN异常"); } Thread.Sleep(1000); } } public void WifiSendPrize(PxcModels.WebCMSEntities db, PxcModels.PosMachinesTwo pos, PxcModels.PosMerchantInfo add) { PxcModels.WifiTradeRecord trade = db.WifiTradeRecord.FirstOrDefault(m => m.SnNo == pos.PosSn && m.Status == 0); if (trade != null) { trade.Status = 1; db.SaveChanges(); decimal Prize = trade.TradeAmount * 0.15M; StatService.Instance.doActiveReward(db, add, pos, pos.BuyUserId, "", 1, Prize); if (pos.CardType < 100) { RedisDbconn.Instance.AddList("OpenRewardQueue", pos.Id.ToString()); } if (pos.LeaderUserId > 0 && db.Leaders.Any(m => m.Id == pos.LeaderUserId && m.ExpiredDate > DateTime.Now) && pos.CardType < 100) { RedisDbconn.Instance.AddList("LeaderPrizeQueue", pos.Id); } if (pos.CardType < 100) { RedisDbconn.Instance.AddList("OperatePrizeQueue", pos.Id); } } } } }