using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading; using MySystem.Models; using Library; namespace MySystem { /// /// 过期机具执行扣费 /// public class TimeOutPosChargeService { public readonly static TimeOutPosChargeService Instance = new TimeOutPosChargeService(); private TimeOutPosChargeService() { } public void Start() { Thread th = new Thread(doSomething); th.IsBackground = true; th.Start(); } public void doSomething() { while (true) { if (DateTime.Now.Hour < 20) { try { string check = function.ReadInstance("/TimeOutPosCharge/check" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"); if (string.IsNullOrEmpty(check)) { function.WritePage("/TimeOutPosCharge/", "check" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", DateTime.Now.ToString("HH:mm:ss")); WebCMSEntities db = new WebCMSEntities(); var date = DateTime.Now.AddDays(-15).ToString("yyyy-MM-dd 00:00:00");//过期限制时间 var time = DateTime.Parse(date);//过期限制时间 DataTable dt = CustomerSqlConn.dtable("SELECT BuyUserId FROM PosMachinesTwo WHERE `Status`>-1 AND BuyUserId>0 AND BindingState=0 AND ActivationState=0 AND ScanQrTrade=0 AND RecycEndDate <'" + date + "' GROUP BY BuyUserId", MysqlConn.connstr);//扣费创客 var query = db.PosMachinesTwo.Where(m => m.Status > -1 && m.BuyUserId > 0 && m.BindingState == 0 && m.ActivationState == 0 && m.ScanQrTrade == 0 && m.RecycEndDate < time).ToList();//循环过期超过15天机具 var brandInfo = db.KqProducts.ToList(); foreach (DataRow item in dt.Rows) { int BuyUserId = int.Parse(item["BuyUserId"].ToString()); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---48:", "过期机具执行扣费时间"); var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == BuyUserId) ?? new UserAccount(); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---50:", "过期机具执行扣费时间"); var posInfo = query.Where(m => m.BuyUserId == BuyUserId); var amount = 0; foreach (var pos in posInfo) { function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---56:", "过期机具执行扣费时间"); var poss = db.PosMachinesTwo.FirstOrDefault(m => m.Id == pos.Id) ?? new PosMachinesTwo(); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---57:", "过期机具执行扣费时间"); poss.ScanQrTrade = 999; function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---59:", "过期机具执行扣费时间"); var Brand = brandInfo.FirstOrDefault(m => m.Id == pos.BrandId); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---61:", "过期机具执行扣费时间"); if (Brand.Name.Contains("电签")) { amount = 200; } if (Brand.Name.Contains("大POS")) { amount = 300; } userAccount.ToChargeAmount += amount;//增加预扣款 function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---71:", "过期机具执行扣费时间"); var toChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord { CreateDate = DateTime.Now, UserId = BuyUserId, ChargeAmount = amount, ChargeType = 124,//过期机具货款扣费 Remark = pos.PosSn, }).Entity; function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---82:", "过期机具执行扣费时间"); } } db.SaveChanges(); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---85:", "过期机具执行扣费时间"); var info = db.ToChargeBackRecord.Where(m => m.Status == 0).ToList();//过期机具扣费记录 function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---87:", "过期机具执行扣费时间"); foreach (var items in info) { function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---90:", "过期机具执行扣费时间"); var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == items.UserId) ?? new UserAccount(); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---92:", "过期机具执行扣费时间"); var record = info.FirstOrDefault(m => m.Id == items.Id); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---94:", "过期机具执行扣费时间"); if (userAccount.BalanceAmount >= record.ChargeAmount) { function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---97:", "过期机具执行扣费时间"); var userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord { CreateDate = DateTime.Now, UserId = items.UserId, BeforeBalanceAmount = userAccount.BalanceAmount, AfterBalanceAmount = userAccount.BalanceAmount - record.ChargeAmount, ChangeAmount = record.ChargeAmount, ChangeType = 124,//过期机具货款扣费 Remark = "扣机具货款", }).Entity; record.Status = 1; if (userAccount.ToChargeAmount >= record.ChargeAmount) { userAccount.ToChargeAmount -= record.ChargeAmount;//扣减预扣款 } userAccount.BalanceAmount -= record.ChargeAmount;//扣减余额 function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---116:", "过期机具执行扣费时间"); } } db.SaveChanges(); } } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "过期机具执行扣费异常"); } } Thread.Sleep(1000); } } } }