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 StoreApplyHelper { public readonly static StoreApplyHelper Instance = new StoreApplyHelper(); private StoreApplyHelper() { } public void Start() { Thread th = new Thread(DoWorks); th.IsBackground = true; th.Start(); } // 每月1号重置仓库额度 private void DoWorks() { while (true) { 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("/StoreApply/" + DateTime.Now.ToString("yyyyMM") + ".txt"); if(string.IsNullOrEmpty(check)) { function.WritePage("/StoreApply/", DateTime.Now.ToString("yyyyMM") + ".txt", DateTime.Now.ToString()); Dictionary dataDic = new Dictionary(); string start = DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00"; string end = DateTime.Parse(start).ToString("yyyy-MM-dd HH:mm:ss"); DataTable dt = OtherMySqlConn.dtable("select StoreId,count(Id) from PosMachinesTwo where TransferTime>='" + start + "' and TransferTime<'" + end + "' and BrandId in (1,2,4,6,7,8) and Status>-1 group by StoreId"); foreach(DataRow dr in dt.Rows) { int StoreId = int.Parse(function.CheckInt(dr["StoreId"].ToString())); int Count = int.Parse(function.CheckInt(dr[1].ToString())); StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse(); if(dataDic.ContainsKey(store.UserId)) { dataDic.Add(store.UserId, Count * 200); } } dt = OtherMySqlConn.dtable("select StoreId,count(Id) from PosMachinesTwo where TransferTime>='" + start + "' and TransferTime<'" + end + "' and BrandId in (3,5,9) and Status>-1 group by StoreId"); foreach(DataRow dr in dt.Rows) { int StoreId = int.Parse(function.CheckInt(dr["StoreId"].ToString())); int Count = int.Parse(function.CheckInt(dr[1].ToString())); StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse(); if(dataDic.ContainsKey(store.UserId)) { dataDic.Add(store.UserId, Count * 300); } else { dataDic[store.UserId] += Count * 300; } } foreach(int UserId in dataDic.Keys) { decimal Amount = dataDic[UserId]; 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.FixedAmount = Amount; account.ValidAmount = Amount + account.TempAmount; } 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, 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, UserId, Amount, OperateType); } else if(jsonObj["Kind"].ToString() == "3") // 调低额度返回余额 { int ApplyId = int.Parse(jsonObj["Data"]["ApplyId"].ToString()); StoreHouseAmountRecord record = db.StoreHouseAmountRecord.FirstOrDefault(m => m.Id == ApplyId); if(record != null) { int GetUserId = record.UserId; decimal Amount = record.UseAmount / 2; UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == GetUserId); if (account == null) { account = db.UserAccount.Add(new UserAccount() { Id = GetUserId, UserId = GetUserId, }).Entity; db.SaveChanges(); } decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额 decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额 decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额 account.BalanceAmount += Amount; account.TotalAmount += Amount; 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 = GetUserId, //创客 ChangeType = 119, //变动类型 ChangeAmount = Amount, //变更金额 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, 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()); int OpStoreNum = int.Parse(jsonObj["Data"]["OpStoreNum"].ToString()); 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; } else if(BrandId == 3 || BrandId == 5 || BrandId == 9) { Amount += 300; } if(Amount > 0) { AddAmount(db, store.UserId, Amount, 1); } } } 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 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, }).Entity; db.SaveChanges(); } public void AddAmount2(WebCMSEntities db, 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, }).Entity; db.SaveChanges(); } }