using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using System.Linq; using Microsoft.Extensions.Hosting; using MySystem; using MySystem.PxcModels; using LitJson; using Library; public class ChangePosTimer { public readonly static ChangePosTimer Instance = new ChangePosTimer(); private ChangePosTimer() { } public void Start() { Thread th = new Thread(DoWorks); th.IsBackground = true; th.Start(); } private void DoWorks() { while (true) { string content = RedisDbconn.Instance.RPop("ChangePosTimerQueue"); if (!string.IsNullOrEmpty(content)) { JsonData jsonObj = JsonMapper.ToObject(content); string OldSnNum = jsonObj["OldSn"].ToString(); string NewSnNum = jsonObj["NewSn"].ToString(); string MerNo = jsonObj["MerNo"].ToString(); WebCMSEntities db = new WebCMSEntities(); MachineForSnNo oldForSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == OldSnNum) ?? new MachineForSnNo(); MachineForSnNo newForSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == NewSnNum) ?? new MachineForSnNo(); PosMachinesTwo oldpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == oldForSnNo.SnId); if (oldpos == null) { return; } if (oldpos.BindingState != 1) { return; } PosMachinesTwo newpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == newForSnNo.SnId); if (oldpos == null) { return; } KqProducts oldPosBrand = db.KqProducts.FirstOrDefault(m => m.Id == oldpos.BrandId) ?? new KqProducts(); KqProducts newPosBrand = db.KqProducts.FirstOrDefault(m => m.Id == newpos.BrandId) ?? new KqProducts(); PosMerchantInfo merchant = new PosMerchantInfo(); if (!string.IsNullOrEmpty(MerNo)) { merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo) ?? new PosMerchantInfo(); } else { merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == oldpos.BindMerchantId) ?? new PosMerchantInfo(); } newpos.BindMerchantId = merchant.Id; newpos.BuyUserId = oldpos.BuyUserId; newpos.UserId = oldpos.UserId; newpos.RecycEndDate = oldpos.RecycEndDate; newpos.ScanQrTrade = oldpos.ScanQrTrade; newpos.DebitCardTrade = oldpos.DebitCardTrade; newpos.CreditTrade = oldpos.CreditTrade; newpos.PosSnType = oldpos.PosSnType; newpos.TransferTime = oldpos.TransferTime; newpos.IsPurchase = oldpos.IsPurchase; newpos.BindingState = oldpos.BindingState; newpos.ActivationState = oldpos.ActivationState; newpos.BindingTime = oldpos.BindingTime; newpos.ActivationTime = oldpos.ActivationTime; bool checkActReward = db.ActiveReward.Any(m => m.KqMerNo == merchant.KqMerNo); if (!checkActReward) { newpos.SeoKeyword = oldpos.SeoKeyword; } oldpos.UserId = 0; MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.KqMerNo); if (forMerNo != null) { forMerNo.SnId = newpos.Id; } merchant.KqSnNo = NewSnNum; RedisDbconn.Instance.Clear("PosMachinesTwo:" + oldpos.Id); RedisDbconn.Instance.Clear("PosMachinesTwo:" + newpos.Id); RedisDbconn.Instance.Clear("PosMerchantInfo:" + merchant.Id); db.SaveChanges(); db.Dispose(); } else { Thread.Sleep(5000); } } } }