using System; using System.Collections.Generic; using Library; using LitJson; using System.Linq; using System.Data; using System.Threading; using MySystem.PxcModels; namespace MySystem { public class PosWithholdService { public readonly static PosWithholdService Instance = new PosWithholdService(); private PosWithholdService() { } // ·若扣款已扣,则返还创客余额 // ·若扣款未扣,则删除该条扣款 public void Start() { Thread th = new Thread(StartDo); th.IsBackground = true; th.Start(); } public void StartDo() { while (true) { try { string content = RedisDbconn.Instance.RPop("PosWithholdQueue"); if(!string.IsNullOrEmpty(content)) { function.WriteLog("content:" + content, "过期机具扣款机具申请"); JsonData jsonObj = JsonMapper.ToObject(content); int UserId = int.Parse(function.CheckInt(jsonObj["UserId"].ToString())); string SnNo = jsonObj["SnNo"].ToString(); WebCMSEntities db = new WebCMSEntities(); decimal ChargeAmount = 0; bool doBack = true; //是否减少账户预扣总额 ToChargeBackRecord back = db.ToChargeBackRecord.FirstOrDefault(m => m.UserId == UserId && m.Field1 == SnNo && m.ChargeType == 124 && m.Remark.StartsWith("循环过期")); if(back != null) { function.WriteLog("扣款数据:" + Newtonsoft.Json.JsonConvert.SerializeObject(back), "过期机具扣款机具申请"); ChargeAmount = back.ChargeAmount; function.WriteLog("扣款是否已扣:" + back.Status, "过期机具扣款机具申请"); if(back.Status == 1) { Utils.Instance.OpAccount(back.UserId, ChargeAmount, 138, false); doBack = false; } db.ToChargeBackRecord.Remove(back); db.SaveChanges(); //减少账户预扣总额 function.WriteLog("是否减少账户预扣总额:" + doBack, "过期机具扣款机具申请"); if(doBack) { Utils.Instance.ToChargeAmount(UserId, -ChargeAmount); function.WriteLog("减少账户预扣总额:" + ChargeAmount, "过期机具扣款机具申请"); } } db.Dispose(); Thread.Sleep(500); } else { Thread.Sleep(30000); } } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "过期机具扣款机具申请异常"); Thread.Sleep(300000); } } } } }