ExcelHelper.cs 104 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317
  1. using System;
  2. using System.Threading;
  3. using System.Linq;
  4. using System.Data;
  5. using Library;
  6. using MySystem.Models;
  7. using System.Collections.Generic;
  8. namespace MySystem
  9. {
  10. public class ExcelHelper
  11. {
  12. public readonly static ExcelHelper Instance = new ExcelHelper();
  13. private ExcelHelper()
  14. {
  15. }
  16. public void Start()//启动
  17. {
  18. Thread thread = new Thread(ImportPostDo);
  19. thread.IsBackground = true;
  20. thread.Start();
  21. }
  22. public void ImportPostDo()
  23. {
  24. while (true)
  25. {
  26. string data = RedisDbconn.Instance.RPop<string>("ExcelImportV2");
  27. // string data = RedisDbconn.Instance.RPop<string>("ExcelImportV3");
  28. if (!string.IsNullOrEmpty(data))
  29. {
  30. string[] dataList = data.Split("#cut#");
  31. string _ExcelPath = dataList[0];
  32. string _Kind = dataList[1];
  33. string checkKey = dataList[2];
  34. string Operator = dataList[3];
  35. int SuccessCount = 0;
  36. int DoCount = 0;
  37. string FullExcelPath = function.getPath(_ExcelPath);
  38. FullExcelPath = FullExcelPath.Replace("//", "/");
  39. DataTable list = new PublicFunction().ExcelToDataTable(FullExcelPath);
  40. int TotalCount = list.Rows.Count;
  41. while (DoCount < list.Rows.Count)
  42. {
  43. WebCMSEntities db = new WebCMSEntities();
  44. if (_Kind == "1")
  45. {
  46. var tran = db.Database.BeginTransaction();
  47. try
  48. {
  49. int Size = 100;
  50. if (list.Rows.Count - DoCount < 100)
  51. {
  52. Size = list.Rows.Count - DoCount;
  53. }
  54. Dictionary<string, int> storeData = new Dictionary<string, int>();
  55. for (int i = DoCount; i < DoCount + Size; i++)
  56. {
  57. DataRow dr = list.Rows[i];
  58. string BatchNo = dr[0].ToString(); // 业务批次号
  59. string SnNo = dr[1].ToString(); // SN编号
  60. SnNo = SnNo.Replace(" ", "");
  61. string DeviceName = dr[2].ToString(); // 设备厂商
  62. string DeviceKind = dr[3].ToString(); // 设备型号
  63. string DeviceType = dr[4].ToString(); // 设备类型区分(客小爽电签POS填写:KysSignPos/KssSignPos)
  64. string StoreNo = dr[5].ToString(); // 收货仓库编号
  65. string BrandIdString = dr[6].ToString(); // 产品类型(5-客小爽Mpos,6-客小爽大POS,61-客小爽电签POS,8-客小爽超级Mpos)
  66. string InputMan = dr[7].ToString(); // 入库操作人
  67. string InputNote = dr[8].ToString(); // 入库备注
  68. MachineForSnNo machinefor = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo);
  69. if (machinefor == null)
  70. {
  71. int BrandId = int.Parse(function.CheckInt(BrandIdString));
  72. KqProducts kqProduct = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  73. if (kqProduct.Id > 0)
  74. {
  75. StoreForCode storefor = db.StoreForCode.FirstOrDefault(m => m.Code == StoreNo) ?? new StoreForCode();
  76. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == storefor.StoreId) ?? new StoreHouse();
  77. PosMachinesTwo pos = db.PosMachinesTwo.Add(new PosMachinesTwo()
  78. {
  79. CreateDate = DateTime.Now,
  80. PosSn = SnNo, //SN编号
  81. BrandId = BrandId, //产品类型
  82. StoreId = storefor.StoreId, //所在仓库
  83. DeviceType = DeviceType, //设备类型
  84. BatchNo = BatchNo,
  85. DeviceName = DeviceName,
  86. DeviceKind = DeviceKind,
  87. SourceStoreId = storefor.StoreId, //源仓库
  88. }).Entity;
  89. store.ProductName = kqProduct.Name;
  90. store.BrandId = BrandId.ToString();
  91. StoreStockChange stockchange = db.StoreStockChange.Add(new StoreStockChange()
  92. {
  93. CreateDate = DateTime.Now,
  94. CreateMan = Operator,
  95. StoreId = storefor.StoreId, //仓库
  96. BrandId = BrandId, //产品类型
  97. ProductName = RelationClass.GetKqProductBrandInfo(BrandId), //产品名称
  98. BizBatchNo = BatchNo, //业务批次号
  99. TransType = 0, //交易类型
  100. SnNo = SnNo, //SN编号
  101. StockOpDirect = 0, //库存操作方向
  102. SnStatus = 0, //SN状态
  103. DeviceVendor = DeviceName, //设备厂商
  104. DeviceModel = DeviceKind, //设备型号
  105. DeviceType = DeviceType, //设备类型
  106. ToDate = DateTime.Now, //入库时间
  107. ToRemark = InputNote, //入库备注
  108. BrandType = DeviceType, //品牌类型
  109. SourceStoreId = storefor.StoreId, //源仓库
  110. }).Entity;
  111. db.SaveChanges();
  112. string ChangeNo = "SC";
  113. int StoreStockChangeId = stockchange.Id;
  114. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  115. for (int j = 0; j < 18 - StoreStockChangeId.ToString().Length; j++)
  116. {
  117. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  118. }
  119. ChangeNo += StoreStockChangeIdString;
  120. stockchange.ChangeNo = ChangeNo; //交易流水编号
  121. db.StoreChangeHistory.Add(new StoreChangeHistory()
  122. {
  123. CreateDate = DateTime.Now,
  124. CreateMan = Operator,
  125. UserId = store.UserId, //创客
  126. BrandId = BrandId, //产品类型
  127. ChangeRecordNo = ChangeNo, //变更记录单号
  128. BizBatchNo = BatchNo, //业务批次号
  129. TransType = 0, //交易类型
  130. SnNo = SnNo, //SN编号
  131. StockOpDirect = 0, //库存操作方向
  132. DeviceVendor = DeviceName, //设备厂商
  133. DeviceType = DeviceType, //设备类型
  134. DeviceModel = DeviceKind, //设备型号
  135. ToUserId = store.UserId, //收货创客
  136. ToStoreId = store.Id, //创客退货收货仓库
  137. ToDate = DateTime.Now, //入库时间
  138. ToRemark = InputNote, //入库备注
  139. SourceStoreId = storefor.StoreId, //源仓库
  140. StoreId = storefor.StoreId, //仓库
  141. });
  142. machinefor = db.MachineForSnNo.Add(new MachineForSnNo()
  143. {
  144. SnNo = SnNo,
  145. SnId = pos.Id
  146. }).Entity;
  147. RedisDbconn.Instance.Set("MachineForSnNo:" + SnNo, machinefor);
  148. db.SaveChanges();
  149. RedisDbconn.Instance.Set("PosMachinesTwo:" + pos.Id, pos);
  150. RedisDbconn.Instance.AddList("PosMachineList:" + storefor.StoreId, pos);
  151. RedisDbconn.Instance.AddList("PosMachinesTwo:" + store.UserId + ":" + BrandId, new PosMachineList()
  152. {
  153. Id = pos.Id,
  154. SnNo = SnNo,
  155. });
  156. if (!storeData.ContainsKey(storefor.StoreId + "_" + BrandId))
  157. {
  158. storeData.Add(storefor.StoreId + "_" + BrandId, 1);
  159. }
  160. else
  161. {
  162. storeData[storefor.StoreId + "_" + BrandId] += 1;
  163. }
  164. SuccessCount += 1;
  165. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  166. }
  167. else
  168. {
  169. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  170. }
  171. }
  172. else
  173. {
  174. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "已存在,请勿重复录入");
  175. }
  176. }
  177. DoCount += Size;
  178. foreach (string key in storeData.Keys)
  179. {
  180. string[] keylist = key.Split('_');
  181. int StoreId = int.Parse(keylist[0]);
  182. int BrandId = int.Parse(keylist[1]);
  183. int OpStoreNum = storeData[key];
  184. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  185. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  186. {
  187. CreateDate = DateTime.Now,
  188. CreateMan = Operator,
  189. StoreId = StoreId, //仓库
  190. TransType = 0, //交易类型
  191. BrandId = BrandId, //产品类型
  192. OpStoreNum = OpStoreNum, //操作库存数
  193. OpSymbol = "+", //操作符
  194. BeforeTotalNum = store.TotalNum, //操作前总库存数
  195. AfterTotalNum = store.TotalNum + OpStoreNum, //操作后总库存数
  196. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  197. AfterLaveNum = store.LaveNum + OpStoreNum, //操作后剩余库存数
  198. BeforeOutNum = store.OutNum, //操作前出库数
  199. AfterOutNum = store.OutNum, //操作后出库数
  200. }).Entity;
  201. db.SaveChanges();
  202. string ChangeNo = "SC";
  203. int StoreStockChangeId = balance.Id;
  204. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  205. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  206. {
  207. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  208. }
  209. ChangeNo += StoreStockChangeIdString;
  210. balance.TransRecordNo = ChangeNo; //交易流水编号
  211. store.TotalNum += OpStoreNum;
  212. store.LaveNum += OpStoreNum;
  213. db.SaveChanges();
  214. RedisDbconn.Instance.Clear("StoreHouse:" + StoreId);
  215. RedisDbconn.Instance.Clear("StoreHouseList:" + store.UserId);
  216. }
  217. db.SaveChanges();
  218. tran.Commit();
  219. RedisDbconn.Instance.Clear("StoreHouse");
  220. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  221. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  222. }
  223. catch (Exception ex)
  224. {
  225. DoCount = list.Rows.Count;
  226. function.WriteLog(ex.ToString(), "机具导入异常");
  227. tran.Rollback();
  228. ErrorMsg msg = new ErrorMsg()
  229. {
  230. Time = DateTime.Now,
  231. ErrorContent = ex.ToString(),
  232. };
  233. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  234. }
  235. tran.Dispose();
  236. }
  237. else if (_Kind == "2")
  238. {
  239. Dictionary<string, int> storeData = new Dictionary<string, int>();
  240. Dictionary<string, int> toStoreData = new Dictionary<string, int>();
  241. using (var tran = db.Database.BeginTransaction())
  242. {
  243. try
  244. {
  245. int Size = 100;
  246. if (list.Rows.Count - DoCount < 100)
  247. {
  248. Size = list.Rows.Count - DoCount;
  249. }
  250. for (int i = DoCount; i < DoCount + Size; i++)
  251. {
  252. DataRow dr = list.Rows[i];
  253. string BatchNo = dr[0].ToString(); // 业务批次号
  254. string OutStoreNo = dr[1].ToString(); // 出货仓库编号
  255. string OutOperator = dr[2].ToString(); // 出库操作人
  256. string SnNo = dr[3].ToString(); // SN编号
  257. SnNo = SnNo.Replace(" ", "");
  258. string StoreNo = dr[4].ToString(); // 收货仓库编号
  259. string BrandIdString = dr[5].ToString(); // 产品类型
  260. string OutNote = "";
  261. if (list.Columns.Count > 6)
  262. {
  263. OutNote = dr[6].ToString(); // 出库备注
  264. }
  265. int BrandId = int.Parse(function.CheckInt(BrandIdString));
  266. KqProducts kqProduct = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  267. if (kqProduct.Id > 0)
  268. {
  269. StoreForCode storefor = db.StoreForCode.FirstOrDefault(m => m.Code == OutStoreNo) ?? new StoreForCode();
  270. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == storefor.StoreId) ?? new StoreHouse();
  271. if (store.LaveNum > 0)
  272. {
  273. StoreForCode tostorefor = db.StoreForCode.FirstOrDefault(m => m.Code == StoreNo) ?? new StoreForCode();
  274. StoreHouse tostore = db.StoreHouse.FirstOrDefault(m => m.Id == tostorefor.StoreId) ?? new StoreHouse();
  275. if (tostore.Id > 0)
  276. {
  277. MachineForSnNo machinefor = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
  278. PosMachinesTwo machine = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machinefor.SnId && m.StoreId != tostore.Id && m.BuyUserId == 0 && m.UserId == 0) ?? new PosMachinesTwo();
  279. if (machine.Id > 0)
  280. {
  281. if(machine.BrandId == BrandId)
  282. {
  283. StoreStockChange stockchange = db.StoreStockChange.Add(new StoreStockChange()
  284. {
  285. CreateDate = DateTime.Now,
  286. CreateMan = Operator,
  287. StoreId = storefor.StoreId, //仓库
  288. BrandId = BrandId, //产品类型
  289. ProductName = RelationClass.GetKqProductBrandInfo(BrandId), //产品名称
  290. BizBatchNo = BatchNo, //业务批次号
  291. TransType = 1, //交易类型
  292. SnNo = SnNo, //SN编号
  293. StockOpDirect = 1, //库存操作方向
  294. SnStatus = 1, //SN状态
  295. DeviceVendor = machine.DeviceName, //设备厂商
  296. DeviceModel = machine.DeviceKind, //设备型号
  297. DeviceType = machine.DeviceType, //设备类型
  298. FromUserId = store.UserId, //出货人
  299. FromDate = DateTime.Now, //出库时间
  300. FromRemark = OutNote, //出库备注
  301. ToUserId = tostore.UserId, //收货人
  302. ToStoreId = tostorefor.StoreId, //退货收货仓库
  303. SourceStoreId = machine.SourceStoreId, //源仓库编号
  304. BrandType = machine.DeviceType, //品牌类型
  305. }).Entity;
  306. db.SaveChanges();
  307. string ChangeNo = "SC";
  308. int StoreStockChangeId = stockchange.Id;
  309. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  310. for (int j = 0; j < 18 - StoreStockChangeId.ToString().Length; j++)
  311. {
  312. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  313. }
  314. ChangeNo += StoreStockChangeIdString;
  315. stockchange.ChangeNo = ChangeNo; //交易流水编号
  316. machine.StoreId = tostorefor.StoreId;
  317. db.StoreChangeHistory.Add(new StoreChangeHistory()
  318. {
  319. CreateDate = DateTime.Now,
  320. CreateMan = Operator,
  321. UserId = store.UserId, //创客
  322. BrandId = BrandId, //产品类型
  323. ChangeRecordNo = ChangeNo, //变更记录单号
  324. BizBatchNo = BatchNo, //业务批次号
  325. TransType = 1, //交易类型
  326. SnNo = SnNo, //SN编号
  327. SnType = machine.PosSnType, //SN机具类型
  328. StockOpDirect = 1, //库存操作方向
  329. DeviceVendor = machine.DeviceName, //设备厂商
  330. DeviceModel = machine.DeviceKind, //设备型号
  331. DeviceType = machine.DeviceType, //设备类型
  332. FromUserId = store.UserId, //出货创客
  333. FromDate = DateTime.Now, //出库时间
  334. FromRemark = OutNote, //出库备注
  335. SourceStoreId = machine.SourceStoreId, //源仓库
  336. StoreId = store.Id, //仓库
  337. });
  338. db.StoreChangeHistory.Add(new StoreChangeHistory()
  339. {
  340. CreateDate = DateTime.Now,
  341. CreateMan = Operator,
  342. UserId = tostore.UserId, //创客
  343. BrandId = BrandId, //产品类型
  344. ChangeRecordNo = ChangeNo, //变更记录单号
  345. BizBatchNo = BatchNo, //业务批次号
  346. TransType = 1, //交易类型
  347. SnNo = SnNo, //SN编号
  348. SnType = machine.PosSnType, //SN机具类型
  349. StockOpDirect = 0, //库存操作方向
  350. DeviceVendor = machine.DeviceName, //设备厂商
  351. DeviceModel = machine.DeviceKind, //设备型号
  352. DeviceType = machine.DeviceType, //设备类型
  353. ToUserId = tostore.UserId, //收货创客
  354. ToStoreId = tostore.Id, //创客退货收货仓库
  355. ToDate = DateTime.Now, //入库时间
  356. ToRemark = OutNote, //入库备注
  357. SourceStoreId = machine.SourceStoreId, //源仓库
  358. StoreId = tostore.Id, //仓库
  359. });
  360. db.SaveChanges();
  361. // RemoveClass.DeletePosMachineList("PosMachineTwoList:" + storefor.StoreId, machine.Id);
  362. // RedisDbconn.Instance.AddList("PosMachineTwoList:" + tostorefor.StoreId, machine);
  363. if (!storeData.ContainsKey(storefor.StoreId + "_" + BrandId))
  364. {
  365. storeData.Add(storefor.StoreId + "_" + BrandId, 1);
  366. }
  367. else
  368. {
  369. storeData[storefor.StoreId + "_" + BrandId] += 1;
  370. }
  371. if (!toStoreData.ContainsKey(tostorefor.StoreId + "_" + BrandId))
  372. {
  373. toStoreData.Add(tostorefor.StoreId + "_" + BrandId, 1);
  374. }
  375. else
  376. {
  377. toStoreData[tostorefor.StoreId + "_" + BrandId] += 1;
  378. }
  379. SuccessCount += 1;
  380. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  381. }
  382. else
  383. {
  384. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "与表格里填写的品牌不一致");
  385. }
  386. }
  387. else
  388. {
  389. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "不是仓库机或不在填写的收货仓库中");
  390. }
  391. if (string.IsNullOrEmpty(tostore.ProductName))
  392. {
  393. tostore.BrandId = BrandId.ToString();
  394. tostore.ProductName = kqProduct.Name;
  395. }
  396. }
  397. else
  398. {
  399. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的收货仓库编号不正确");
  400. }
  401. }
  402. else
  403. {
  404. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "所在的仓库" + store.StoreName + "(" + store.StoreNo + ")库存不足");
  405. }
  406. db.SaveChanges();
  407. }
  408. else
  409. {
  410. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  411. }
  412. }
  413. DoCount += Size;
  414. foreach (string key in storeData.Keys)
  415. {
  416. string[] keylist = key.Split('_');
  417. int StoreId = int.Parse(keylist[0]);
  418. int BrandId = int.Parse(keylist[1]);
  419. int OpStoreNum = storeData[key];
  420. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  421. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  422. {
  423. CreateDate = DateTime.Now,
  424. CreateMan = Operator,
  425. StoreId = StoreId, //仓库
  426. TransType = 1, //交易类型
  427. BrandId = BrandId, //产品类型
  428. OpStoreNum = OpStoreNum, //操作库存数
  429. OpSymbol = "-", //操作符
  430. BeforeTotalNum = store.TotalNum, //操作前总库存数
  431. AfterTotalNum = store.TotalNum, //操作后总库存数
  432. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  433. AfterLaveNum = store.LaveNum - OpStoreNum, //操作后剩余库存数
  434. BeforeOutNum = store.OutNum, //操作前出库数
  435. AfterOutNum = store.OutNum + OpStoreNum, //操作后出库数
  436. }).Entity;
  437. db.SaveChanges();
  438. string ChangeNo = "SC";
  439. int StoreStockChangeId = balance.Id;
  440. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  441. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  442. {
  443. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  444. }
  445. ChangeNo += StoreStockChangeIdString;
  446. balance.TransRecordNo = ChangeNo; //交易流水编号
  447. store.LaveNum -= OpStoreNum;
  448. store.OutNum += OpStoreNum;
  449. db.SaveChanges();
  450. string SendData = "{\"Kind\":\"5\",\"Data\":{\"StoreId\":\"" + StoreId + "\",\"BrandId\":\"" + BrandId + "\",\"OpStoreNum\":\"" + OpStoreNum + "\"}}";
  451. RedisDbconn.Instance.AddList("StoreApplyQueue", SendData);
  452. RedisDbconn.Instance.Clear("StoreHouse:" + StoreId);
  453. RedisDbconn.Instance.Clear("StoreHouseList:" + store.UserId);
  454. }
  455. foreach (string key in toStoreData.Keys)
  456. {
  457. string[] keylist = key.Split('_');
  458. int StoreId = int.Parse(keylist[0]);
  459. int BrandId = int.Parse(keylist[1]);
  460. int OpStoreNum = toStoreData[key];
  461. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  462. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  463. {
  464. CreateDate = DateTime.Now,
  465. CreateMan = Operator,
  466. StoreId = StoreId, //仓库
  467. TransType = 0, //交易类型
  468. BrandId = BrandId, //产品类型
  469. OpStoreNum = OpStoreNum, //操作库存数
  470. OpSymbol = "+", //操作符
  471. BeforeTotalNum = store.TotalNum, //操作前总库存数
  472. AfterTotalNum = store.TotalNum + OpStoreNum, //操作后总库存数
  473. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  474. AfterLaveNum = store.LaveNum + OpStoreNum, //操作后剩余库存数
  475. BeforeOutNum = store.OutNum, //操作前出库数
  476. AfterOutNum = store.OutNum, //操作后出库数
  477. }).Entity;
  478. db.SaveChanges();
  479. string ChangeNo = "SC";
  480. int StoreStockChangeId = balance.Id;
  481. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  482. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  483. {
  484. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  485. }
  486. ChangeNo += StoreStockChangeIdString;
  487. balance.TransRecordNo = ChangeNo; //交易流水编号
  488. store.TotalNum += OpStoreNum;
  489. store.LaveNum += OpStoreNum;
  490. db.SaveChanges();
  491. string SendData = "{\"Kind\":\"5\",\"Data\":{\"StoreId\":\"" + StoreId + "\",\"BrandId\":\"" + BrandId + "\",\"OpStoreNum\":\"-" + OpStoreNum + "\"}}";
  492. RedisDbconn.Instance.AddList("StoreApplyQueue", SendData);
  493. RedisDbconn.Instance.Clear("StoreHouse:" + StoreId);
  494. RedisDbconn.Instance.Clear("StoreHouseList:" + store.UserId);
  495. }
  496. db.SaveChanges();
  497. tran.Commit();
  498. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  499. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  500. }
  501. catch (Exception ex)
  502. {
  503. DoCount = list.Rows.Count;
  504. tran.Rollback();
  505. ErrorMsg msg = new ErrorMsg()
  506. {
  507. Time = DateTime.Now,
  508. ErrorContent = ex.ToString(),
  509. };
  510. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  511. }
  512. }
  513. }
  514. else if (_Kind == "3")
  515. {
  516. Dictionary<string, int> storeData = new Dictionary<string, int>();
  517. using (var tran = db.Database.BeginTransaction())
  518. {
  519. try
  520. {
  521. int Size = 100;
  522. if (list.Rows.Count - DoCount < 100)
  523. {
  524. Size = list.Rows.Count - DoCount;
  525. }
  526. for (int i = DoCount; i < DoCount + Size; i++)
  527. {
  528. DataRow dr = list.Rows[i];
  529. string BatchNo = dr[0].ToString(); // 业务批次号
  530. BatchNo = BatchNo.Replace(" ", "");
  531. string OutStoreNo = dr[1].ToString(); // 出货仓库编号
  532. OutStoreNo = OutStoreNo.Replace(" ", "");
  533. string OutOperator = dr[2].ToString(); // 出库操作人
  534. OutOperator = OutOperator.Replace(" ", "");
  535. string SnNo = dr[3].ToString(); // SN编号
  536. SnNo = SnNo.Replace(" ", "");
  537. string MakerCode = dr[4].ToString(); // 收货创客编号
  538. MakerCode = MakerCode.Replace(" ", "");
  539. string BrandIdString = dr[5].ToString(); // 产品类型(5-客小爽Mpos,6-客小爽大POS,61-客小爽电签POS,8-客小爽超级Mpos))
  540. BrandIdString = BrandIdString.Replace(" ", "");
  541. string OutNote = "";
  542. if (list.Columns.Count > 6)
  543. {
  544. OutNote = dr[6].ToString(); // 出库备注
  545. }
  546. int BrandId = int.Parse(function.CheckInt(BrandIdString));
  547. KqProducts kqProduct = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  548. if (kqProduct.Id > 0)
  549. {
  550. StoreForCode storefor = db.StoreForCode.FirstOrDefault(m => m.Code == OutStoreNo) ?? new StoreForCode();
  551. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == storefor.StoreId) ?? new StoreHouse();
  552. if (store.LaveNum > 0)
  553. {
  554. UserForMakerCode userfor = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode) ?? new UserForMakerCode();
  555. Users touser = db.Users.FirstOrDefault(m => m.Id == userfor.UserId && m.AuthFlag == 1) ?? new Users();
  556. if (touser.Id > 0)
  557. {
  558. MachineForSnNo machinefor = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
  559. PosMachinesTwo machine = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machinefor.SnId && m.BuyUserId == 0 && m.UserId == 0) ?? new PosMachinesTwo();
  560. if (machine.Id > 0)
  561. {
  562. if(machine.BrandId == BrandId)
  563. {
  564. StoreStockChange stockchange = db.StoreStockChange.Add(new StoreStockChange()
  565. {
  566. CreateDate = DateTime.Now,
  567. CreateMan = Operator,
  568. StoreId = storefor.StoreId, //仓库
  569. BrandId = BrandId, //产品类型
  570. ProductName = RelationClass.GetKqProductBrandInfo(BrandId), //产品名称
  571. BizBatchNo = BatchNo, //业务批次号
  572. TransType = 2, //交易类型
  573. SnNo = SnNo, //SN编号
  574. SnType = machine.PosSnType, //SN机具类型
  575. StockOpDirect = 1, //库存操作方向
  576. SnStatus = 1, //SN状态
  577. BindStatus = machine.BindingState, //绑定状态
  578. BindMerchant = machine.BindMerchantId, //绑定商户
  579. ActiveStatus = machine.ActivationState, //激活状态
  580. ActRewardUserId = machine.BuyUserId, //激活奖励人
  581. DeviceVendor = machine.DeviceName, //设备厂商
  582. DeviceModel = machine.DeviceKind, //设备型号
  583. DeviceType = machine.DeviceType, //设备类型
  584. FromUserId = store.UserId, //出货人
  585. FromDate = DateTime.Now, //出库时间
  586. FromRemark = OutNote, //出库备注
  587. ToUserId = userfor.UserId, //收货人
  588. SourceStoreId = machine.SourceStoreId, //源仓库编号
  589. BrandType = machine.DeviceType, //品牌类型
  590. }).Entity;
  591. db.SaveChanges();
  592. string ChangeNo = "SC";
  593. int StoreStockChangeId = stockchange.Id;
  594. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  595. for (int j = 0; j < 18 - StoreStockChangeId.ToString().Length; j++)
  596. {
  597. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  598. }
  599. ChangeNo += StoreStockChangeIdString;
  600. stockchange.ChangeNo = ChangeNo; //交易流水编号
  601. db.SaveChanges();
  602. UserStoreChange userstore = db.UserStoreChange.Add(new UserStoreChange()
  603. {
  604. CreateDate = DateTime.Now,
  605. CreateMan = Operator,
  606. UserId = store.UserId, //创客
  607. BrandId = BrandId, //产品类型
  608. ChangeRecordNo = ChangeNo, //变更记录单号
  609. TransType = 0, //交易类型
  610. SnNo = SnNo, //SN编号
  611. SnType = machine.PosSnType, //SN机具类型
  612. StockOpDirect = 0, //库存操作方向
  613. DeviceVendor = machine.DeviceName, //设备厂商
  614. DeviceType = machine.DeviceKind, //设备类型
  615. DeviceModel = machine.DeviceType, //设备型号
  616. ToUserId = userfor.UserId, //收货创客
  617. ToDate = DateTime.Now, //入库时间
  618. ToRemark = OutNote, //入库备注
  619. SourceStoreId = machine.SourceStoreId, //源仓库
  620. SnStatus = 1, //SN状态
  621. BizBatchNo = BatchNo, //业务批次号
  622. BindStatus = (int)machine.BindingState, //绑定状态
  623. BindMerchantId = machine.BindMerchantId, //绑定商户
  624. ActiveStatus = (int)machine.ActivationState, //激活状态
  625. ActRewardUserId = machine.BuyUserId, //激活奖励创客
  626. BrandType = machine.DeviceType, //品牌类型
  627. }).Entity;
  628. db.StoreChangeHistory.Add(new StoreChangeHistory()
  629. {
  630. CreateDate = DateTime.Now,
  631. CreateMan = Operator,
  632. UserId = store.UserId, //创客
  633. BrandId = BrandId, //产品类型
  634. ChangeRecordNo = ChangeNo, //变更记录单号
  635. BizBatchNo = BatchNo, //业务批次号
  636. TransType = 2, //交易类型
  637. SnNo = SnNo, //SN编号
  638. SnType = machine.PosSnType, //SN机具类型
  639. StockOpDirect = 1, //库存操作方向
  640. DeviceVendor = machine.DeviceName, //设备厂商
  641. DeviceModel = machine.DeviceKind, //设备型号
  642. DeviceType = machine.DeviceType, //设备类型
  643. FromUserId = store.UserId, //出货创客
  644. FromDate = DateTime.Now, //出库时间
  645. FromRemark = OutNote, //出库备注
  646. SourceStoreId = machine.SourceStoreId, //源仓库
  647. StoreId = store.Id, //仓库
  648. });
  649. db.StoreChangeHistory.Add(new StoreChangeHistory()
  650. {
  651. CreateDate = DateTime.Now,
  652. CreateMan = Operator,
  653. UserId = touser.Id, //创客
  654. BrandId = BrandId, //产品类型
  655. ChangeRecordNo = ChangeNo, //变更记录单号
  656. BizBatchNo = BatchNo, //业务批次号
  657. TransType = 0, //交易类型
  658. SnNo = SnNo, //SN编号
  659. SnType = machine.PosSnType, //SN机具类型
  660. StockOpDirect = 0, //库存操作方向
  661. DeviceVendor = machine.DeviceName, //设备厂商
  662. DeviceModel = machine.DeviceKind, //设备型号
  663. DeviceType = machine.DeviceType, //设备类型
  664. ToUserId = touser.Id, //收货创客
  665. ToDate = DateTime.Now, //入库时间
  666. ToRemark = OutNote, //入库备注
  667. SourceStoreId = machine.SourceStoreId, //源仓库
  668. });
  669. machine.BuyUserId = touser.Id;
  670. machine.UserId = touser.Id;
  671. machine.TransferTime = DateTime.Now;
  672. machine.RecycEndDate = DateTime.Now.AddDays(180); // 循环结束时间
  673. db.SaveChanges();
  674. string IdBrand = touser.Id + "_" + BrandId;
  675. UserMachineData MachineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
  676. if (MachineData == null)
  677. {
  678. MachineData = db.UserMachineData.Add(new UserMachineData()
  679. {
  680. IdBrand = IdBrand,
  681. }).Entity;
  682. db.SaveChanges();
  683. }
  684. MachineData.IdBrand = IdBrand;
  685. MachineData.TotalMachineCount += 1;
  686. MachineData.UnBindCount += 1;
  687. db.SaveChanges();
  688. RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, MachineData);
  689. RemoveClass.DeletePosMachineList("PosMachineTwoList:" + storefor.StoreId, machine.Id);
  690. RedisDbconn.Instance.AddList("PosMachinesTwo:" + userfor.UserId + ":" + BrandId, new PosMachineList()
  691. {
  692. Id = machine.Id,
  693. SnNo = SnNo,
  694. IsBind = machine.BindingState == 1 ? true : false,
  695. });
  696. if (!storeData.ContainsKey(storefor.StoreId + "_" + BrandId))
  697. {
  698. storeData.Add(storefor.StoreId + "_" + BrandId, 1);
  699. }
  700. else
  701. {
  702. storeData[storefor.StoreId + "_" + BrandId] += 1;
  703. }
  704. SuccessCount += 1;
  705. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  706. }
  707. else
  708. {
  709. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "与表格里填写的品牌不一致");
  710. }
  711. }
  712. else
  713. {
  714. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "不是仓库机");
  715. }
  716. }
  717. else
  718. {
  719. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的收货创客编号不正确或创客未认证");
  720. }
  721. }
  722. else
  723. {
  724. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "所在的仓库" + store.StoreName + "(" + store.StoreNo + ")库存不足");
  725. }
  726. }
  727. else
  728. {
  729. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  730. }
  731. }
  732. DoCount += Size;
  733. foreach (string key in storeData.Keys)
  734. {
  735. string[] keylist = key.Split('_');
  736. int StoreId = int.Parse(keylist[0]);
  737. int BrandId = int.Parse(keylist[1]);
  738. int OpStoreNum = storeData[key];
  739. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  740. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  741. {
  742. CreateDate = DateTime.Now,
  743. CreateMan = Operator,
  744. StoreId = StoreId, //仓库
  745. TransType = 1, //交易类型
  746. BrandId = BrandId, //产品类型
  747. OpStoreNum = OpStoreNum, //操作库存数
  748. OpSymbol = "-", //操作符
  749. BeforeTotalNum = store.TotalNum, //操作前总库存数
  750. AfterTotalNum = store.TotalNum, //操作后总库存数
  751. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  752. AfterLaveNum = store.LaveNum - OpStoreNum, //操作后剩余库存数
  753. BeforeOutNum = store.OutNum, //操作前出库数
  754. AfterOutNum = store.OutNum + OpStoreNum, //操作后出库数
  755. }).Entity;
  756. db.SaveChanges();
  757. string ChangeNo = "SC";
  758. int StoreStockChangeId = balance.Id;
  759. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  760. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  761. {
  762. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  763. }
  764. ChangeNo += StoreStockChangeIdString;
  765. balance.TransRecordNo = ChangeNo; //交易流水编号
  766. store.LaveNum -= OpStoreNum;
  767. store.OutNum += OpStoreNum;
  768. db.SaveChanges();
  769. RedisDbconn.Instance.Clear("StoreHouse:" + StoreId);
  770. RedisDbconn.Instance.Clear("StoreHouseList:" + store.UserId);
  771. }
  772. db.SaveChanges();
  773. tran.Commit();
  774. RedisDbconn.Instance.Clear("StoreHouse");
  775. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  776. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  777. }
  778. catch (Exception ex)
  779. {
  780. DoCount = list.Rows.Count;
  781. tran.Rollback();
  782. ErrorMsg msg = new ErrorMsg()
  783. {
  784. Time = DateTime.Now,
  785. ErrorContent = ex.ToString(),
  786. };
  787. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  788. }
  789. }
  790. }
  791. else if (_Kind == "4")
  792. {
  793. Dictionary<string, int> storeData = new Dictionary<string, int>();
  794. Dictionary<string, int> toStoreData = new Dictionary<string, int>();
  795. using (var tran = db.Database.BeginTransaction())
  796. {
  797. try
  798. {
  799. int Size = 100;
  800. if (list.Rows.Count - DoCount < 100)
  801. {
  802. Size = list.Rows.Count - DoCount;
  803. }
  804. for (int i = DoCount; i < DoCount + Size; i++)
  805. {
  806. DataRow dr = list.Rows[i];
  807. string BatchNo = dr[0].ToString(); // 业务批次号
  808. string OldStoreNo = dr[1].ToString(); // 原仓库编号
  809. string OldOperator = dr[2].ToString(); // 操作人
  810. string SnNo = dr[3].ToString(); // SN编号
  811. SnNo = SnNo.Replace(" ", "");
  812. string StoreNo = dr[4].ToString(); // 退回仓库编号
  813. string BrandIdString = dr[5].ToString(); // 产品类型
  814. string OutNote = "";
  815. if (list.Columns.Count > 6)
  816. {
  817. OutNote = dr[6].ToString(); // 出库备注
  818. }
  819. int BrandId = int.Parse(function.CheckInt(BrandIdString));
  820. decimal amount = 0;
  821. KqProducts kqProduct = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  822. if (kqProduct.Name.Contains("电签"))
  823. {
  824. amount = 200;
  825. }
  826. if (kqProduct.Name.Contains("大POS"))
  827. {
  828. amount = 300;
  829. }
  830. if (kqProduct.Id > 0)
  831. {
  832. StoreForCode storefor = db.StoreForCode.FirstOrDefault(m => m.Code == OldStoreNo) ?? new StoreForCode();
  833. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == storefor.StoreId) ?? new StoreHouse();
  834. if (store.Id > 0)
  835. {
  836. StoreForCode tostorefor = db.StoreForCode.FirstOrDefault(m => m.Code == StoreNo) ?? new StoreForCode();
  837. StoreHouse tostore = db.StoreHouse.FirstOrDefault(m => m.Id == tostorefor.StoreId) ?? new StoreHouse();
  838. if (tostore.Id > 0)
  839. {
  840. MachineForSnNo machinefor = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
  841. PosMachinesTwo machine = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machinefor.SnId && m.BuyUserId > 0) ?? new PosMachinesTwo();
  842. if (machine.Id > 0)
  843. {
  844. function.WriteLog(DateTime.Now.ToString() + "\n" + Newtonsoft.Json.JsonConvert.SerializeObject(machine), "机具回仓库日志");
  845. machine.StoreId = tostorefor.StoreId;
  846. machine.BuyUserId = 0;
  847. machine.UserId = 0;
  848. machine.BindingState = 0;
  849. machine.ActivationState = 0;
  850. machine.BindingTime = null;
  851. machine.ActivationTime = null;
  852. machine.OrderId = 0;
  853. machine.RecycEndDate = null;
  854. machine.PosSnType = 0;
  855. machine.BindMerchantId = 0;
  856. machine.ScanQrTrade = 0;
  857. machine.DebitCardTrade = 0;
  858. machine.CreditTrade = 0;
  859. machine.UserNav = null;
  860. machine.IsPurchase = 0;
  861. machine.LeaderUserId = 0;
  862. machine.PreUserId = 0;
  863. db.SaveChanges();
  864. if (!storeData.ContainsKey(storefor.StoreId + "_" + BrandId))
  865. {
  866. storeData.Add(storefor.StoreId + "_" + BrandId, 1);
  867. }
  868. else
  869. {
  870. storeData[storefor.StoreId + "_" + BrandId] += 1;
  871. }
  872. if (!toStoreData.ContainsKey(tostorefor.StoreId + "_" + BrandId))
  873. {
  874. toStoreData.Add(tostorefor.StoreId + "_" + BrandId, 1);
  875. }
  876. else
  877. {
  878. toStoreData[tostorefor.StoreId + "_" + BrandId] += 1;
  879. }
  880. SuccessCount += 1;
  881. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  882. }
  883. else
  884. {
  885. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "已在仓库中");
  886. }
  887. }
  888. else
  889. {
  890. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的退回仓库编号不正确");
  891. }
  892. }
  893. else
  894. {
  895. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的原仓库编号不正确");
  896. }
  897. db.SaveChanges();
  898. }
  899. else
  900. {
  901. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  902. }
  903. }
  904. DoCount += Size;
  905. foreach (string key in storeData.Keys)
  906. {
  907. string[] keylist = key.Split('_');
  908. int StoreId = int.Parse(keylist[0]);
  909. int BrandId = int.Parse(keylist[1]);
  910. int OpStoreNum = storeData[key];
  911. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  912. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  913. {
  914. CreateDate = DateTime.Now,
  915. CreateMan = Operator,
  916. StoreId = StoreId, //仓库
  917. TransType = 1, //交易类型
  918. BrandId = BrandId, //产品类型
  919. OpStoreNum = OpStoreNum, //操作库存数
  920. OpSymbol = "-", //操作符
  921. BeforeTotalNum = store.TotalNum, //操作前总库存数
  922. AfterTotalNum = store.TotalNum, //操作后总库存数
  923. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  924. AfterLaveNum = store.LaveNum - OpStoreNum, //操作后剩余库存数
  925. BeforeOutNum = store.OutNum, //操作前出库数
  926. AfterOutNum = store.OutNum + OpStoreNum, //操作后出库数
  927. }).Entity;
  928. db.SaveChanges();
  929. string ChangeNo = "JJBH";
  930. int StoreStockChangeId = balance.Id;
  931. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  932. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  933. {
  934. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  935. }
  936. ChangeNo += StoreStockChangeIdString;
  937. balance.TransRecordNo = ChangeNo; //交易流水编号
  938. store.LaveNum -= OpStoreNum;
  939. db.SaveChanges();
  940. }
  941. foreach (string key in toStoreData.Keys)
  942. {
  943. string[] keylist = key.Split('_');
  944. int StoreId = int.Parse(keylist[0]);
  945. int BrandId = int.Parse(keylist[1]);
  946. int OpStoreNum = toStoreData[key];
  947. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  948. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  949. {
  950. CreateDate = DateTime.Now,
  951. CreateMan = Operator,
  952. StoreId = StoreId, //仓库
  953. TransType = 0, //交易类型
  954. BrandId = BrandId, //产品类型
  955. OpStoreNum = OpStoreNum, //操作库存数
  956. OpSymbol = "+", //操作符
  957. BeforeTotalNum = store.TotalNum, //操作前总库存数
  958. AfterTotalNum = store.TotalNum + OpStoreNum, //操作后总库存数
  959. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  960. AfterLaveNum = store.LaveNum + OpStoreNum, //操作后剩余库存数
  961. BeforeOutNum = store.OutNum, //操作前出库数
  962. AfterOutNum = store.OutNum, //操作后出库数
  963. }).Entity;
  964. db.SaveChanges();
  965. string ChangeNo = "SC";
  966. int StoreStockChangeId = balance.Id;
  967. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  968. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  969. {
  970. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  971. }
  972. ChangeNo += StoreStockChangeIdString;
  973. balance.TransRecordNo = ChangeNo; //交易流水编号
  974. store.LaveNum += OpStoreNum;
  975. db.SaveChanges();
  976. }
  977. db.SaveChanges();
  978. tran.Commit();
  979. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  980. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  981. }
  982. catch (Exception ex)
  983. {
  984. DoCount = list.Rows.Count;
  985. tran.Rollback();
  986. ErrorMsg msg = new ErrorMsg()
  987. {
  988. Time = DateTime.Now,
  989. ErrorContent = ex.ToString(),
  990. };
  991. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  992. }
  993. }
  994. }
  995. else if (_Kind == "UserCashRecord")
  996. {
  997. using (var tran = db.Database.BeginTransaction())
  998. {
  999. try
  1000. {
  1001. int Size = 100;
  1002. if (list.Rows.Count - DoCount < 100)
  1003. {
  1004. Size = list.Rows.Count - DoCount;
  1005. }
  1006. for (int i = DoCount; i < DoCount + Size; i++)
  1007. {
  1008. DataRow dr = list.Rows[i];
  1009. string CashOrderNo = dr[2].ToString(); // 提现单号
  1010. decimal Amount = decimal.Parse(function.CheckNum(dr[3].ToString())); // 发佣金额
  1011. int Status = int.Parse(function.CheckInt(dr[4].ToString())); // 提现状态
  1012. string Remark = dr[5].ToString(); // 备注
  1013. CashOrderNo = CashOrderNo.Replace(" ", "");
  1014. UserCashRecord edit = db.UserCashRecord.FirstOrDefault(m => m.CashOrderNo == CashOrderNo && m.ActualTradeAmount == Amount && m.Status == 0);
  1015. if (edit != null)
  1016. {
  1017. if (edit.TradeType == 3)
  1018. {
  1019. edit.Status = Status;
  1020. edit.Remark = Remark;
  1021. edit.UpdateMan = Operator;
  1022. if (Status == 1)
  1023. {
  1024. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1025. if (account != null)
  1026. {
  1027. decimal TradeAmount = edit.TradeAmount;
  1028. db.LeaderAccountRecord.Add(new LeaderAccountRecord()
  1029. {
  1030. CreateDate = DateTime.Now,
  1031. UserId = edit.UserId, //创客
  1032. ChangeType = 3, //变动类型
  1033. ProductType = 99, //产品类型
  1034. ChangeAmount = TradeAmount, //变更金额
  1035. BeforeBalanceAmount = account.LeaderBalanceAmount, //变更前余额
  1036. AfterBalanceAmount = account.LeaderBalanceAmount, //变更后余额
  1037. });
  1038. db.SaveChanges();
  1039. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1040. }
  1041. }
  1042. else if (Status == 2)
  1043. {
  1044. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1045. if (account != null)
  1046. {
  1047. decimal TradeAmount = edit.TradeAmount;
  1048. account.LeaderBalanceAmount += TradeAmount;
  1049. db.LeaderAccountRecord.Add(new LeaderAccountRecord()
  1050. {
  1051. CreateDate = DateTime.Now,
  1052. UserId = edit.UserId, //创客
  1053. ChangeType = 6, //变动类型
  1054. ProductType = 99, //产品类型
  1055. ChangeAmount = TradeAmount, //变更金额
  1056. BeforeBalanceAmount = account.LeaderBalanceAmount - TradeAmount, //变更前余额
  1057. AfterBalanceAmount = account.LeaderBalanceAmount, //变更后余额
  1058. });
  1059. db.SaveChanges();
  1060. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1061. }
  1062. }
  1063. db.SaveChanges();
  1064. RedisDbconn.Instance.Clear("UserCashRecord:" + edit.Id);
  1065. SuccessCount += 1;
  1066. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  1067. }
  1068. else if (edit.TradeType == 4)
  1069. {
  1070. edit.Status = Status;
  1071. edit.Remark = Remark;
  1072. edit.UpdateMan = Operator;
  1073. if (Status == 1)
  1074. {
  1075. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1076. if (account != null)
  1077. {
  1078. decimal TradeAmount = edit.TradeAmount;
  1079. decimal ActualTradeAmount = edit.ActualTradeAmount;
  1080. account.HelpProfitBalanceAmount -= TradeAmount;
  1081. db.HelpProfitAccountRecord.Add(new HelpProfitAccountRecord()
  1082. {
  1083. CreateDate = DateTime.Now,
  1084. UserId = edit.UserId, //创客
  1085. ChangeType = 3, //变动类型
  1086. ProductType = 99, //产品类型
  1087. ChangeAmount = ActualTradeAmount, //变更金额
  1088. BeforeBalanceAmount = account.HelpProfitBalanceAmount + TradeAmount, //变更前余额
  1089. AfterBalanceAmount = account.HelpProfitBalanceAmount, //变更后余额
  1090. });
  1091. db.HelpProfitAccountRecord.Add(new HelpProfitAccountRecord()
  1092. {
  1093. CreateDate = DateTime.Now,
  1094. UpdateDate = DateTime.Now,
  1095. UserId = edit.UserId, //创客
  1096. ChangeType = 4, //变动类型
  1097. ProductType = 99, //产品类型
  1098. ChangeAmount = edit.TradeFee, //变更金额
  1099. BeforeBalanceAmount = account.HelpProfitBalanceAmount + TradeAmount, //变更前余额
  1100. AfterBalanceAmount = account.HelpProfitBalanceAmount, //变更后余额
  1101. });
  1102. db.HelpProfitAccountRecord.Add(new HelpProfitAccountRecord()
  1103. {
  1104. CreateDate = DateTime.Now,
  1105. UpdateDate = DateTime.Now,
  1106. UserId = edit.UserId, //创客
  1107. ChangeType = 5, //变动类型
  1108. ProductType = 99, //产品类型
  1109. ChangeAmount = edit.ManageFee, //变更金额
  1110. BeforeBalanceAmount = account.HelpProfitBalanceAmount + TradeAmount, //变更前余额
  1111. AfterBalanceAmount = account.HelpProfitBalanceAmount, //变更后余额
  1112. });
  1113. db.SaveChanges();
  1114. RedisDbconn.Instance.Set("HelpProfitAccount:" + edit.UserId, account);
  1115. }
  1116. }
  1117. else if (Status == 2)
  1118. {
  1119. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1120. if (account != null)
  1121. {
  1122. decimal TradeAmount = edit.TradeAmount;
  1123. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  1124. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  1125. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  1126. account.BalanceAmount += TradeAmount;
  1127. account.FreezeAmount -= TradeAmount;
  1128. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  1129. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  1130. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  1131. db.UserAccountRecord.Add(new UserAccountRecord()
  1132. {
  1133. CreateDate = DateTime.Now,
  1134. UpdateDate = DateTime.Now,
  1135. UserId = edit.UserId, //创客
  1136. ChangeType = 6, //变动类型
  1137. ProductType = 99, //产品类型
  1138. ChangeAmount = TradeAmount, //变更金额
  1139. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1140. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1141. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1142. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1143. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1144. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1145. });
  1146. db.SaveChanges();
  1147. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1148. }
  1149. }
  1150. db.SaveChanges();
  1151. RedisDbconn.Instance.Clear("UserCashRecord:" + edit.Id);
  1152. SuccessCount += 1;
  1153. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  1154. }
  1155. else
  1156. {
  1157. edit.Status = Status;
  1158. edit.Remark = Remark;
  1159. edit.UpdateMan = Operator;
  1160. if (Status == 1)
  1161. {
  1162. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1163. if (account != null)
  1164. {
  1165. account.QueryCount = 1;
  1166. decimal TradeAmount = edit.TradeAmount;
  1167. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  1168. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  1169. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  1170. account.WithdrawAmount += edit.TradeAmount;
  1171. account.FreezeAmount -= edit.TradeAmount;
  1172. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  1173. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  1174. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  1175. db.UserAccountRecord.Add(new UserAccountRecord()
  1176. {
  1177. CreateDate = DateTime.Now,
  1178. UpdateDate = DateTime.Now,
  1179. UserId = edit.UserId, //创客
  1180. ChangeType = 3, //变动类型
  1181. ProductType = 99, //产品类型
  1182. ChangeAmount = edit.ActualTradeAmount, //变更金额
  1183. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1184. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1185. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1186. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1187. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1188. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1189. });
  1190. db.UserAccountRecord.Add(new UserAccountRecord()
  1191. {
  1192. CreateDate = DateTime.Now,
  1193. UpdateDate = DateTime.Now,
  1194. UserId = edit.UserId, //创客
  1195. ChangeType = 4, //变动类型
  1196. ProductType = 99, //产品类型
  1197. ChangeAmount = edit.TradeFee, //变更金额
  1198. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1199. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1200. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1201. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1202. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1203. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1204. });
  1205. db.UserAccountRecord.Add(new UserAccountRecord()
  1206. {
  1207. CreateDate = DateTime.Now,
  1208. UpdateDate = DateTime.Now,
  1209. UserId = edit.UserId, //创客
  1210. ChangeType = 5, //变动类型
  1211. ProductType = 99, //产品类型
  1212. ChangeAmount = edit.ManageFee, //变更金额
  1213. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1214. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1215. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1216. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1217. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1218. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1219. });
  1220. db.SaveChanges();
  1221. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1222. }
  1223. }
  1224. else if (Status == 2)
  1225. {
  1226. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1227. if (account != null)
  1228. {
  1229. decimal TradeAmount = edit.TradeAmount;
  1230. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  1231. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  1232. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  1233. account.BalanceAmount += TradeAmount;
  1234. account.FreezeAmount -= TradeAmount;
  1235. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  1236. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  1237. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  1238. db.UserAccountRecord.Add(new UserAccountRecord()
  1239. {
  1240. CreateDate = DateTime.Now,
  1241. UpdateDate = DateTime.Now,
  1242. UserId = edit.UserId, //创客
  1243. ChangeType = 6, //变动类型
  1244. ProductType = 99, //产品类型
  1245. ChangeAmount = TradeAmount, //变更金额
  1246. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1247. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1248. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1249. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1250. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1251. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1252. });
  1253. db.SaveChanges();
  1254. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1255. }
  1256. }
  1257. db.SaveChanges();
  1258. RedisDbconn.Instance.Clear("UserCashRecord:" + edit.Id);
  1259. SuccessCount += 1;
  1260. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  1261. }
  1262. }
  1263. }
  1264. DoCount += Size;
  1265. db.SaveChanges();
  1266. tran.Commit();
  1267. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  1268. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  1269. }
  1270. catch (Exception ex)
  1271. {
  1272. DoCount = list.Rows.Count;
  1273. tran.Rollback();
  1274. ErrorMsg msg = new ErrorMsg()
  1275. {
  1276. Time = DateTime.Now,
  1277. ErrorContent = ex.ToString(),
  1278. };
  1279. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  1280. }
  1281. }
  1282. }
  1283. db.Dispose();
  1284. }
  1285. }
  1286. // return "success|" + SuccessCount;
  1287. }
  1288. }
  1289. }
  1290. }