using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading; using MySystem.Models; using Library; namespace MySystem { /// /// 分期扣款(每月20号执行) /// public class InstallmentDeductionService { public readonly static InstallmentDeductionService Instance = new InstallmentDeductionService(); private InstallmentDeductionService() { } public void Start() { Thread th = new Thread(doSomething); th.IsBackground = true; th.Start(); } public void doSomething() { while (true) { if (DateTime.Now.Day == 20 && DateTime.Now.Hour > 2 && DateTime.Now.Hour < 19) { try { string check = function.ReadInstance("/InstallmentDeduction/check" + DateTime.Now.ToString("yyyy-MM-20") + ".txt"); if (string.IsNullOrEmpty(check)) { function.WritePage("/InstallmentDeduction/", "check" + DateTime.Now.ToString("yyyy-MM-20") + ".txt", DateTime.Now.ToString("HH:mm:ss")); WebCMSEntities db = new WebCMSEntities(); var startdate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-20 00:00:00")); var enddate = startdate.AddDays(1); // var info = db.ToChargeBackRecordSub.Where(m => m.Status == 0 && m.StartDate >= startdate && m.StartDate < enddate).ToList();//分期扣款记录明细 var info = db.ToChargeByStage.Where(m => m.Status == 0).ToList();//分期扣款记录 foreach (var item in info) { var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Status == 0 && m.ParentId == item.Id && m.StartDate >= startdate && m.StartDate < enddate) ?? new ToChargeBackRecordSub(); if (toChargeBackRecordSub.Id > 0) { var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == item.UserId); if (userAccount == null) { userAccount = db.UserAccount.Add(new UserAccount() { Id = item.UserId, UserId = item.UserId, }).Entity; db.SaveChanges(); } toChargeBackRecordSub.Status = 2; userAccount.ToChargeAmount += toChargeBackRecordSub.ChargeAmount;//增加预扣款 var toChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord { CreateDate = DateTime.Now, Sort = toChargeBackRecordSub.Id, UserId = item.UserId, ChargeAmount = toChargeBackRecordSub.ChargeAmount, ChargeType = 2,//分期预扣款 Remark = toChargeBackRecordSub.Remark, }).Entity; } // //只能存在一笔分期扣款记录(先前有的但是余额不够未扣除的则不添加新的) // var checks = db.ToChargeBackRecord.Any(m => m.Sort > 0 && (m.Status == 0 || m.Status == 3) && m.ChargeType == 2 && m.UserId == item.UserId); // if (!checks) // { // string checkAdd = RedisDbconn.Instance.Get("InstallmentDeductionAddRecord:" + item.UserId); // if (string.IsNullOrEmpty(check)) // { // var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Status == 0 && m.ParentId == item.Id && m.StartDate >= startdate && m.StartDate < enddate) ?? new ToChargeBackRecordSub(); // if (toChargeBackRecordSub.Id > 0) // { // var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == item.UserId); // if (userAccount == null) // { // userAccount = db.UserAccount.Add(new UserAccount() // { // Id = item.UserId, // UserId = item.UserId, // }).Entity; // db.SaveChanges(); // } // userAccount.ToChargeAmount += toChargeBackRecordSub.ChargeAmount;//增加预扣款 // var toChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord // { // CreateDate = DateTime.Now, // Sort = toChargeBackRecordSub.Id, // UserId = item.UserId, // ChargeAmount = toChargeBackRecordSub.ChargeAmount, // ChargeType = 2,//分期预扣款 // Remark = "分期预扣款", // }).Entity; // } // } // RedisDbconn.Instance.Set("InstallmentDeductionAddRecord:" + item.UserId, "wait"); // RedisDbconn.Instance.SetExpire("InstallmentDeductionAddRecord:" + item.UserId, 300); // } } db.SaveChanges(); } } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "执行分期扣费异常"); } } Thread.Sleep(10000); } } } }