using System; using System.Collections.Generic; using System.Threading; using System.Linq; using System.Data; using MySystem; using MySystem.PxcModels; using Library; using LitJson; public class ResetSmallStoreHelper { public readonly static ResetSmallStoreHelper Instance = new ResetSmallStoreHelper(); private ResetSmallStoreHelper() { } public void Start() { Thread th = new Thread(DoWorks); th.IsBackground = true; th.Start(); } // 每月1号小分仓额度,额度为上个月实际发放的总分润 private void DoWorks() { while (true) { function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "计算小分仓额度日志"); WebCMSEntities db = new WebCMSEntities(); OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString(); try { if(DateTime.Now.Day == 1 && DateTime.Now.Hour > 0 && DateTime.Now.Hour < 3) { string check = function.ReadInstance("/ResetSmallStore/" + DateTime.Now.ToString("yyyyMM") + ".txt"); if(string.IsNullOrEmpty(check)) { function.WritePage("/ResetSmallStore/", DateTime.Now.ToString("yyyyMM") + ".txt", DateTime.Now.ToString()); string Month = DateTime.Now.ToString("yyyyMM"); DataTable dt = OtherMySqlConn.dtable("select UserId,sum(ProfitAmount) from ProfitRecord where SeoTitle='" + Month + "' group by UserId"); foreach(DataRow dr in dt.Rows) { int UserId = int.Parse(function.CheckInt(dr["UserId"].ToString())); decimal ProfitAmount = decimal.Parse(function.CheckNum(dr[1].ToString())); UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = UserId, UserId = UserId, }).Entity; db.SaveChanges(); } account.ThisMonthPreAmount = ProfitAmount; account.ValidPreAmount = ProfitAmount; } db.SaveChanges(); } } } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "计算小分仓额度异常"); } db.Dispose(); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "计算小分仓额度日志"); Thread.Sleep(60000); } } public void StartEverTime() { Thread th = new Thread(StartEverTimeDo); th.IsBackground = true; th.Start(); } private void StartEverTimeDo() { while (true) { WebCMSEntities db = new WebCMSEntities(); try { string data = RedisDbconn.Instance.RPop("StoreApplyQueue"); if(!string.IsNullOrEmpty(data)) { function.WriteLog("data:" + data, "分仓向总仓申请机具日志"); JsonData jsonObj = JsonMapper.ToObject(data); if(jsonObj["Kind"].ToString() == "1") // 购买临时额度 { int OrderId = int.Parse(jsonObj["Data"]["OrderId"].ToString()); Orders order = db.Orders.FirstOrDefault(m => m.Id == OrderId); if(order != null) { decimal TotalPrice = order.TotalPrice * 2; AddAmount2(db, 1, order.UserId, TotalPrice, 1, order.Id); } } else if(jsonObj["Kind"].ToString() == "2") // 增减分仓临时额度 { int UserId = int.Parse(jsonObj["Data"]["UserId"].ToString()); decimal Amount = decimal.Parse(jsonObj["Data"]["Amount"].ToString()); int OperateType = int.Parse(jsonObj["Data"]["OperateType"].ToString()); AddAmount(db, 2, UserId, Amount, OperateType); } else if(jsonObj["Kind"].ToString() == "3") // 调低额度返回余额 { int UserId = int.Parse(jsonObj["Data"]["UserId"].ToString()); decimal Amount = decimal.Parse(jsonObj["Data"]["Amount"].ToString()); AddAmount2(db, 3, UserId, Amount, 0); decimal BalanceAmount = Amount / 2; UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = UserId, UserId = UserId, }).Entity; db.SaveChanges(); } decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额 decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额 decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额 account.BalanceAmount += BalanceAmount; decimal AfterTotalAmount = account.TotalAmount; //变更后总金额 decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额 decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额 UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, UserId = UserId, //创客 ChangeType = 119, //变动类型 ChangeAmount = BalanceAmount, //变更金额 BeforeTotalAmount = BeforeTotalAmount, //变更前总金额 AfterTotalAmount = AfterTotalAmount, //变更后总金额 BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额 AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额 AfterBalanceAmount = AfterBalanceAmount, //变更后余额 }).Entity; } else if(jsonObj["Kind"].ToString() == "4") // 仓库发货,预发机申请 { int StoreId = int.Parse(jsonObj["Data"]["StoreId"].ToString()); string SnIds = jsonObj["Data"]["SnIds"].ToString(); StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId); if(store != null) { decimal Amount = 0; string[] SnIdList = SnIds.Split(','); foreach(string SnIdString in SnIdList) { int SnId = int.Parse(SnIdString); PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == SnId) ?? new PosMachinesTwo(); if(pos.BrandId == 1 || pos.BrandId == 2 || pos.BrandId == 4 || pos.BrandId == 6 || pos.BrandId == 7 || pos.BrandId == 8) { Amount += 200; } else if(pos.BrandId == 3 || pos.BrandId == 5 || pos.BrandId == 9) { Amount += 300; } } if(Amount > 0) { AddAmount(db, 4, store.UserId, Amount, 1); } } } else if(jsonObj["Kind"].ToString() == "5") // 后台仓库调拨 { int StoreId = int.Parse(jsonObj["Data"]["StoreId"].ToString()); int BrandId = int.Parse(jsonObj["Data"]["BrandId"].ToString()); string OpStorrString = jsonObj["Data"]["OpStoreNum"].ToString(); int OpType = OpStorrString.StartsWith("-") ? 0 : 1; int OpStoreNum = int.Parse(OpStorrString.Replace("-", "")); StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId); if(store != null) { decimal Amount = 0; if(BrandId == 1 || BrandId == 2 || BrandId == 4 || BrandId == 6 || BrandId == 7 || BrandId == 8) { Amount += 200 * OpStoreNum; } else if(BrandId == 3 || BrandId == 5 || BrandId == 9) { Amount += 300 * OpStoreNum; } if(Amount > 0) { AddAmount(db, 5, store.UserId, Amount, OpType); } } } db.SaveChanges(); } else { Thread.Sleep(5000); } } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "分仓向总仓申请机具线程异常"); } db.Dispose(); } } public void AddAmount(WebCMSEntities db, int Kind, int UserId, decimal Amount, int OperateType = 1, int OrderId = 0) { UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = UserId, UserId = UserId, }).Entity; db.SaveChanges(); } decimal BeforeTotalAmount = account.ValidAmount; //变更前总金额 if(OperateType == 1) { account.ValidAmount += Amount; } else { account.ValidAmount -= Amount; } decimal AfterTotalAmount = account.ValidAmount; //变更后总金额 StoreHouseAmountRecord record = db.StoreHouseAmountRecord.Add(new StoreHouseAmountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, OperateType = OperateType, AmountType = 1, AfterAmount = AfterTotalAmount, BeforeAmount = BeforeTotalAmount, UseAmount = Amount, UserId = UserId, QueryCount = OrderId, Sort = Kind, }).Entity; db.SaveChanges(); } public void AddAmount2(WebCMSEntities db, int Kind, int UserId, decimal Amount, int OperateType = 1, int OrderId = 0) { UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = UserId, UserId = UserId, }).Entity; db.SaveChanges(); } decimal BeforeTotalAmount = account.ValidAmount; //变更前总金额 if(OperateType == 1) { account.TempAmount += Amount; account.ValidAmount += Amount; } else { account.TempAmount -= Amount; account.ValidAmount -= Amount; } decimal AfterTotalAmount = account.ValidAmount; //变更后总金额 StoreHouseAmountRecord record = db.StoreHouseAmountRecord.Add(new StoreHouseAmountRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, OperateType = OperateType, AmountType = 1, AfterAmount = AfterTotalAmount, BeforeAmount = BeforeTotalAmount, UseAmount = Amount, UserId = UserId, QueryCount = OrderId, Sort = Kind, }).Entity; db.SaveChanges(); } private List SpecialUsers10000() { List ids = new List(); ids.Add(13185); ids.Add(514); ids.Add(24302); ids.Add(548); ids.Add(37887); ids.Add(33002); ids.Add(730); ids.Add(40950); ids.Add(72099); ids.Add(6898); ids.Add(46284); ids.Add(127884); ids.Add(3596); ids.Add(32630); ids.Add(11211); return ids; } private List SpecialUsers0() { List ids = new List(); ids.Add(21135); ids.Add(598); ids.Add(109913); ids.Add(609); ids.Add(588); ids.Add(12107); ids.Add(7641); ids.Add(4317); ids.Add(560); ids.Add(120998); ids.Add(3905); ids.Add(959); ids.Add(2502); ids.Add(1001); ids.Add(68868); ids.Add(11718); ids.Add(15493); ids.Add(459); ids.Add(97952); ids.Add(10719); ids.Add(16453); ids.Add(1337); ids.Add(110198); ids.Add(582); ids.Add(89); ids.Add(9319); ids.Add(128525); ids.Add(1109); ids.Add(28538); ids.Add(2927); ids.Add(584); return ids; } }