ExcelHelper.cs 88 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149
  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. StoreStockChange stockchange = db.StoreStockChange.Add(new StoreStockChange()
  282. {
  283. CreateDate = DateTime.Now,
  284. CreateMan = Operator,
  285. StoreId = storefor.StoreId, //仓库
  286. BrandId = BrandId, //产品类型
  287. ProductName = RelationClass.GetKqProductBrandInfo(BrandId), //产品名称
  288. BizBatchNo = BatchNo, //业务批次号
  289. TransType = 1, //交易类型
  290. SnNo = SnNo, //SN编号
  291. StockOpDirect = 1, //库存操作方向
  292. SnStatus = 1, //SN状态
  293. DeviceVendor = machine.DeviceName, //设备厂商
  294. DeviceModel = machine.DeviceKind, //设备型号
  295. DeviceType = machine.DeviceType, //设备类型
  296. FromUserId = store.UserId, //出货人
  297. FromDate = DateTime.Now, //出库时间
  298. FromRemark = OutNote, //出库备注
  299. ToUserId = tostore.UserId, //收货人
  300. ToStoreId = tostorefor.StoreId, //退货收货仓库
  301. SourceStoreId = machine.SourceStoreId, //源仓库编号
  302. BrandType = machine.DeviceType, //品牌类型
  303. }).Entity;
  304. db.SaveChanges();
  305. string ChangeNo = "SC";
  306. int StoreStockChangeId = stockchange.Id;
  307. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  308. for (int j = 0; j < 18 - StoreStockChangeId.ToString().Length; j++)
  309. {
  310. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  311. }
  312. ChangeNo += StoreStockChangeIdString;
  313. stockchange.ChangeNo = ChangeNo; //交易流水编号
  314. machine.StoreId = tostorefor.StoreId;
  315. db.StoreChangeHistory.Add(new StoreChangeHistory()
  316. {
  317. CreateDate = DateTime.Now,
  318. CreateMan = Operator,
  319. UserId = store.UserId, //创客
  320. BrandId = BrandId, //产品类型
  321. ChangeRecordNo = ChangeNo, //变更记录单号
  322. BizBatchNo = BatchNo, //业务批次号
  323. TransType = 1, //交易类型
  324. SnNo = SnNo, //SN编号
  325. SnType = machine.PosSnType, //SN机具类型
  326. StockOpDirect = 1, //库存操作方向
  327. DeviceVendor = machine.DeviceName, //设备厂商
  328. DeviceModel = machine.DeviceKind, //设备型号
  329. DeviceType = machine.DeviceType, //设备类型
  330. FromUserId = store.UserId, //出货创客
  331. FromDate = DateTime.Now, //出库时间
  332. FromRemark = OutNote, //出库备注
  333. SourceStoreId = machine.SourceStoreId, //源仓库
  334. StoreId = store.Id, //仓库
  335. });
  336. db.StoreChangeHistory.Add(new StoreChangeHistory()
  337. {
  338. CreateDate = DateTime.Now,
  339. CreateMan = Operator,
  340. UserId = tostore.UserId, //创客
  341. BrandId = BrandId, //产品类型
  342. ChangeRecordNo = ChangeNo, //变更记录单号
  343. BizBatchNo = BatchNo, //业务批次号
  344. TransType = 1, //交易类型
  345. SnNo = SnNo, //SN编号
  346. SnType = machine.PosSnType, //SN机具类型
  347. StockOpDirect = 0, //库存操作方向
  348. DeviceVendor = machine.DeviceName, //设备厂商
  349. DeviceModel = machine.DeviceKind, //设备型号
  350. DeviceType = machine.DeviceType, //设备类型
  351. ToUserId = tostore.UserId, //收货创客
  352. ToStoreId = tostore.Id, //创客退货收货仓库
  353. ToDate = DateTime.Now, //入库时间
  354. ToRemark = OutNote, //入库备注
  355. SourceStoreId = machine.SourceStoreId, //源仓库
  356. StoreId = tostore.Id, //仓库
  357. });
  358. db.SaveChanges();
  359. // RemoveClass.DeletePosMachineList("PosMachineTwoList:" + storefor.StoreId, machine.Id);
  360. // RedisDbconn.Instance.AddList("PosMachineTwoList:" + tostorefor.StoreId, machine);
  361. if (!storeData.ContainsKey(storefor.StoreId + "_" + BrandId))
  362. {
  363. storeData.Add(storefor.StoreId + "_" + BrandId, 1);
  364. }
  365. else
  366. {
  367. storeData[storefor.StoreId + "_" + BrandId] += 1;
  368. }
  369. if (!toStoreData.ContainsKey(tostorefor.StoreId + "_" + BrandId))
  370. {
  371. toStoreData.Add(tostorefor.StoreId + "_" + BrandId, 1);
  372. }
  373. else
  374. {
  375. toStoreData[tostorefor.StoreId + "_" + BrandId] += 1;
  376. }
  377. SuccessCount += 1;
  378. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  379. }
  380. else
  381. {
  382. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "不是仓库机或不在填写的收货仓库中");
  383. }
  384. if (string.IsNullOrEmpty(tostore.ProductName))
  385. {
  386. tostore.BrandId = BrandId.ToString();
  387. tostore.ProductName = kqProduct.Name;
  388. }
  389. }
  390. else
  391. {
  392. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的收货仓库编号不正确");
  393. }
  394. }
  395. else
  396. {
  397. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "所在的仓库" + store.StoreName + "(" + store.StoreNo + ")库存不足");
  398. }
  399. db.SaveChanges();
  400. }
  401. else
  402. {
  403. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  404. }
  405. }
  406. DoCount += Size;
  407. foreach (string key in storeData.Keys)
  408. {
  409. string[] keylist = key.Split('_');
  410. int StoreId = int.Parse(keylist[0]);
  411. int BrandId = int.Parse(keylist[1]);
  412. int OpStoreNum = storeData[key];
  413. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  414. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  415. {
  416. CreateDate = DateTime.Now,
  417. CreateMan = Operator,
  418. StoreId = StoreId, //仓库
  419. TransType = 1, //交易类型
  420. BrandId = BrandId, //产品类型
  421. OpStoreNum = OpStoreNum, //操作库存数
  422. OpSymbol = "-", //操作符
  423. BeforeTotalNum = store.TotalNum, //操作前总库存数
  424. AfterTotalNum = store.TotalNum, //操作后总库存数
  425. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  426. AfterLaveNum = store.LaveNum - OpStoreNum, //操作后剩余库存数
  427. BeforeOutNum = store.OutNum, //操作前出库数
  428. AfterOutNum = store.OutNum + OpStoreNum, //操作后出库数
  429. }).Entity;
  430. db.SaveChanges();
  431. string ChangeNo = "SC";
  432. int StoreStockChangeId = balance.Id;
  433. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  434. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  435. {
  436. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  437. }
  438. ChangeNo += StoreStockChangeIdString;
  439. balance.TransRecordNo = ChangeNo; //交易流水编号
  440. store.LaveNum -= OpStoreNum;
  441. store.OutNum += OpStoreNum;
  442. db.SaveChanges();
  443. RedisDbconn.Instance.Clear("StoreHouse:" + StoreId);
  444. RedisDbconn.Instance.Clear("StoreHouseList:" + store.UserId);
  445. }
  446. foreach (string key in toStoreData.Keys)
  447. {
  448. string[] keylist = key.Split('_');
  449. int StoreId = int.Parse(keylist[0]);
  450. int BrandId = int.Parse(keylist[1]);
  451. int OpStoreNum = toStoreData[key];
  452. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  453. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  454. {
  455. CreateDate = DateTime.Now,
  456. CreateMan = Operator,
  457. StoreId = StoreId, //仓库
  458. TransType = 0, //交易类型
  459. BrandId = BrandId, //产品类型
  460. OpStoreNum = OpStoreNum, //操作库存数
  461. OpSymbol = "+", //操作符
  462. BeforeTotalNum = store.TotalNum, //操作前总库存数
  463. AfterTotalNum = store.TotalNum + OpStoreNum, //操作后总库存数
  464. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  465. AfterLaveNum = store.LaveNum + OpStoreNum, //操作后剩余库存数
  466. BeforeOutNum = store.OutNum, //操作前出库数
  467. AfterOutNum = store.OutNum, //操作后出库数
  468. }).Entity;
  469. db.SaveChanges();
  470. string ChangeNo = "SC";
  471. int StoreStockChangeId = balance.Id;
  472. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  473. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  474. {
  475. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  476. }
  477. ChangeNo += StoreStockChangeIdString;
  478. balance.TransRecordNo = ChangeNo; //交易流水编号
  479. store.TotalNum += OpStoreNum;
  480. store.LaveNum += OpStoreNum;
  481. db.SaveChanges();
  482. RedisDbconn.Instance.Clear("StoreHouse:" + StoreId);
  483. RedisDbconn.Instance.Clear("StoreHouseList:" + store.UserId);
  484. }
  485. db.SaveChanges();
  486. tran.Commit();
  487. RedisDbconn.Instance.Clear("StoreHouse");
  488. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  489. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  490. }
  491. catch (Exception ex)
  492. {
  493. DoCount = list.Rows.Count;
  494. tran.Rollback();
  495. ErrorMsg msg = new ErrorMsg()
  496. {
  497. Time = DateTime.Now,
  498. ErrorContent = ex.ToString(),
  499. };
  500. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  501. }
  502. }
  503. }
  504. else if (_Kind == "3")
  505. {
  506. Dictionary<string, int> storeData = new Dictionary<string, int>();
  507. using (var tran = db.Database.BeginTransaction())
  508. {
  509. try
  510. {
  511. int Size = 100;
  512. if (list.Rows.Count - DoCount < 100)
  513. {
  514. Size = list.Rows.Count - DoCount;
  515. }
  516. for (int i = DoCount; i < DoCount + Size; i++)
  517. {
  518. DataRow dr = list.Rows[i];
  519. string BatchNo = dr[0].ToString(); // 业务批次号
  520. BatchNo = BatchNo.Replace(" ", "");
  521. string OutStoreNo = dr[1].ToString(); // 出货仓库编号
  522. OutStoreNo = OutStoreNo.Replace(" ", "");
  523. string OutOperator = dr[2].ToString(); // 出库操作人
  524. OutOperator = OutOperator.Replace(" ", "");
  525. string SnNo = dr[3].ToString(); // SN编号
  526. SnNo = SnNo.Replace(" ", "");
  527. string MakerCode = dr[4].ToString(); // 收货创客编号
  528. MakerCode = MakerCode.Replace(" ", "");
  529. string BrandIdString = dr[5].ToString(); // 产品类型(5-客小爽Mpos,6-客小爽大POS,61-客小爽电签POS,8-客小爽超级Mpos))
  530. BrandIdString = BrandIdString.Replace(" ", "");
  531. string OutNote = "";
  532. if (list.Columns.Count > 6)
  533. {
  534. OutNote = dr[6].ToString(); // 出库备注
  535. }
  536. int BrandId = int.Parse(function.CheckInt(BrandIdString));
  537. KqProducts kqProduct = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  538. if (kqProduct.Id > 0)
  539. {
  540. StoreForCode storefor = db.StoreForCode.FirstOrDefault(m => m.Code == OutStoreNo) ?? new StoreForCode();
  541. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == storefor.StoreId) ?? new StoreHouse();
  542. if (store.LaveNum > 0)
  543. {
  544. UserForMakerCode userfor = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode) ?? new UserForMakerCode();
  545. Users touser = db.Users.FirstOrDefault(m => m.Id == userfor.UserId && m.AuthFlag == 1) ?? new Users();
  546. if (touser.Id > 0)
  547. {
  548. MachineForSnNo machinefor = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
  549. PosMachinesTwo machine = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machinefor.SnId && m.BuyUserId == 0 && m.UserId == 0) ?? new PosMachinesTwo();
  550. if (machine.Id > 0)
  551. {
  552. StoreStockChange stockchange = db.StoreStockChange.Add(new StoreStockChange()
  553. {
  554. CreateDate = DateTime.Now,
  555. CreateMan = Operator,
  556. StoreId = storefor.StoreId, //仓库
  557. BrandId = BrandId, //产品类型
  558. ProductName = RelationClass.GetKqProductBrandInfo(BrandId), //产品名称
  559. BizBatchNo = BatchNo, //业务批次号
  560. TransType = 2, //交易类型
  561. SnNo = SnNo, //SN编号
  562. SnType = machine.PosSnType, //SN机具类型
  563. StockOpDirect = 1, //库存操作方向
  564. SnStatus = 1, //SN状态
  565. BindStatus = machine.BindingState, //绑定状态
  566. BindMerchant = machine.BindMerchantId, //绑定商户
  567. ActiveStatus = machine.ActivationState, //激活状态
  568. ActRewardUserId = machine.BuyUserId, //激活奖励人
  569. DeviceVendor = machine.DeviceName, //设备厂商
  570. DeviceModel = machine.DeviceKind, //设备型号
  571. DeviceType = machine.DeviceType, //设备类型
  572. FromUserId = store.UserId, //出货人
  573. FromDate = DateTime.Now, //出库时间
  574. FromRemark = OutNote, //出库备注
  575. ToUserId = userfor.UserId, //收货人
  576. SourceStoreId = machine.SourceStoreId, //源仓库编号
  577. BrandType = machine.DeviceType, //品牌类型
  578. }).Entity;
  579. db.SaveChanges();
  580. string ChangeNo = "SC";
  581. int StoreStockChangeId = stockchange.Id;
  582. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  583. for (int j = 0; j < 18 - StoreStockChangeId.ToString().Length; j++)
  584. {
  585. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  586. }
  587. ChangeNo += StoreStockChangeIdString;
  588. stockchange.ChangeNo = ChangeNo; //交易流水编号
  589. db.SaveChanges();
  590. UserStoreChange userstore = db.UserStoreChange.Add(new UserStoreChange()
  591. {
  592. CreateDate = DateTime.Now,
  593. CreateMan = Operator,
  594. UserId = store.UserId, //创客
  595. BrandId = BrandId, //产品类型
  596. ChangeRecordNo = ChangeNo, //变更记录单号
  597. TransType = 0, //交易类型
  598. SnNo = SnNo, //SN编号
  599. SnType = machine.PosSnType, //SN机具类型
  600. StockOpDirect = 0, //库存操作方向
  601. DeviceVendor = machine.DeviceName, //设备厂商
  602. DeviceType = machine.DeviceKind, //设备类型
  603. DeviceModel = machine.DeviceType, //设备型号
  604. ToUserId = userfor.UserId, //收货创客
  605. ToDate = DateTime.Now, //入库时间
  606. ToRemark = OutNote, //入库备注
  607. SourceStoreId = machine.SourceStoreId, //源仓库
  608. SnStatus = 1, //SN状态
  609. BizBatchNo = BatchNo, //业务批次号
  610. BindStatus = (int)machine.BindingState, //绑定状态
  611. BindMerchantId = machine.BindMerchantId, //绑定商户
  612. ActiveStatus = (int)machine.ActivationState, //激活状态
  613. ActRewardUserId = machine.BuyUserId, //激活奖励创客
  614. BrandType = machine.DeviceType, //品牌类型
  615. }).Entity;
  616. db.StoreChangeHistory.Add(new StoreChangeHistory()
  617. {
  618. CreateDate = DateTime.Now,
  619. CreateMan = Operator,
  620. UserId = store.UserId, //创客
  621. BrandId = BrandId, //产品类型
  622. ChangeRecordNo = ChangeNo, //变更记录单号
  623. BizBatchNo = BatchNo, //业务批次号
  624. TransType = 2, //交易类型
  625. SnNo = SnNo, //SN编号
  626. SnType = machine.PosSnType, //SN机具类型
  627. StockOpDirect = 1, //库存操作方向
  628. DeviceVendor = machine.DeviceName, //设备厂商
  629. DeviceModel = machine.DeviceKind, //设备型号
  630. DeviceType = machine.DeviceType, //设备类型
  631. FromUserId = store.UserId, //出货创客
  632. FromDate = DateTime.Now, //出库时间
  633. FromRemark = OutNote, //出库备注
  634. SourceStoreId = machine.SourceStoreId, //源仓库
  635. StoreId = store.Id, //仓库
  636. });
  637. db.StoreChangeHistory.Add(new StoreChangeHistory()
  638. {
  639. CreateDate = DateTime.Now,
  640. CreateMan = Operator,
  641. UserId = touser.Id, //创客
  642. BrandId = BrandId, //产品类型
  643. ChangeRecordNo = ChangeNo, //变更记录单号
  644. BizBatchNo = BatchNo, //业务批次号
  645. TransType = 0, //交易类型
  646. SnNo = SnNo, //SN编号
  647. SnType = machine.PosSnType, //SN机具类型
  648. StockOpDirect = 0, //库存操作方向
  649. DeviceVendor = machine.DeviceName, //设备厂商
  650. DeviceModel = machine.DeviceKind, //设备型号
  651. DeviceType = machine.DeviceType, //设备类型
  652. ToUserId = touser.Id, //收货创客
  653. ToDate = DateTime.Now, //入库时间
  654. ToRemark = OutNote, //入库备注
  655. SourceStoreId = machine.SourceStoreId, //源仓库
  656. });
  657. machine.BuyUserId = touser.Id;
  658. machine.UserId = touser.Id;
  659. machine.TransferTime = DateTime.Now;
  660. machine.RecycEndDate = DateTime.Now.AddDays(180); // 循环结束时间
  661. db.SaveChanges();
  662. string IdBrand = touser.Id + "_" + BrandId;
  663. UserMachineData MachineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
  664. if (MachineData == null)
  665. {
  666. MachineData = db.UserMachineData.Add(new UserMachineData()
  667. {
  668. IdBrand = IdBrand,
  669. }).Entity;
  670. db.SaveChanges();
  671. }
  672. MachineData.IdBrand = IdBrand;
  673. MachineData.TotalMachineCount += 1;
  674. MachineData.UnBindCount += 1;
  675. db.SaveChanges();
  676. RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, MachineData);
  677. RemoveClass.DeletePosMachineList("PosMachineTwoList:" + storefor.StoreId, machine.Id);
  678. RedisDbconn.Instance.AddList("PosMachinesTwo:" + userfor.UserId + ":" + BrandId, new PosMachineList()
  679. {
  680. Id = machine.Id,
  681. SnNo = SnNo,
  682. IsBind = machine.BindingState == 1 ? true : false,
  683. });
  684. if (!storeData.ContainsKey(storefor.StoreId + "_" + BrandId))
  685. {
  686. storeData.Add(storefor.StoreId + "_" + BrandId, 1);
  687. }
  688. else
  689. {
  690. storeData[storefor.StoreId + "_" + BrandId] += 1;
  691. }
  692. SuccessCount += 1;
  693. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  694. }
  695. else
  696. {
  697. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "不是仓库机");
  698. }
  699. }
  700. else
  701. {
  702. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的收货创客编号不正确或创客未认证");
  703. }
  704. }
  705. else
  706. {
  707. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "所在的仓库" + store.StoreName + "(" + store.StoreNo + ")库存不足");
  708. }
  709. }
  710. else
  711. {
  712. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  713. }
  714. }
  715. DoCount += Size;
  716. foreach (string key in storeData.Keys)
  717. {
  718. string[] keylist = key.Split('_');
  719. int StoreId = int.Parse(keylist[0]);
  720. int BrandId = int.Parse(keylist[1]);
  721. int OpStoreNum = storeData[key];
  722. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  723. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  724. {
  725. CreateDate = DateTime.Now,
  726. CreateMan = Operator,
  727. StoreId = StoreId, //仓库
  728. TransType = 1, //交易类型
  729. BrandId = BrandId, //产品类型
  730. OpStoreNum = OpStoreNum, //操作库存数
  731. OpSymbol = "-", //操作符
  732. BeforeTotalNum = store.TotalNum, //操作前总库存数
  733. AfterTotalNum = store.TotalNum, //操作后总库存数
  734. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  735. AfterLaveNum = store.LaveNum - OpStoreNum, //操作后剩余库存数
  736. BeforeOutNum = store.OutNum, //操作前出库数
  737. AfterOutNum = store.OutNum + OpStoreNum, //操作后出库数
  738. }).Entity;
  739. db.SaveChanges();
  740. string ChangeNo = "SC";
  741. int StoreStockChangeId = balance.Id;
  742. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  743. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  744. {
  745. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  746. }
  747. ChangeNo += StoreStockChangeIdString;
  748. balance.TransRecordNo = ChangeNo; //交易流水编号
  749. store.LaveNum -= OpStoreNum;
  750. store.OutNum += OpStoreNum;
  751. db.SaveChanges();
  752. RedisDbconn.Instance.Clear("StoreHouse:" + StoreId);
  753. RedisDbconn.Instance.Clear("StoreHouseList:" + store.UserId);
  754. }
  755. db.SaveChanges();
  756. tran.Commit();
  757. RedisDbconn.Instance.Clear("StoreHouse");
  758. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  759. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  760. }
  761. catch (Exception ex)
  762. {
  763. DoCount = list.Rows.Count;
  764. tran.Rollback();
  765. ErrorMsg msg = new ErrorMsg()
  766. {
  767. Time = DateTime.Now,
  768. ErrorContent = ex.ToString(),
  769. };
  770. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  771. }
  772. }
  773. }
  774. else if (_Kind == "4")
  775. {
  776. Dictionary<string, int> storeData = new Dictionary<string, int>();
  777. Dictionary<string, int> toStoreData = new Dictionary<string, int>();
  778. using (var tran = db.Database.BeginTransaction())
  779. {
  780. try
  781. {
  782. int Size = 100;
  783. if (list.Rows.Count - DoCount < 100)
  784. {
  785. Size = list.Rows.Count - DoCount;
  786. }
  787. for (int i = DoCount; i < DoCount + Size; i++)
  788. {
  789. DataRow dr = list.Rows[i];
  790. string BatchNo = dr[0].ToString(); // 业务批次号
  791. string OldStoreNo = dr[1].ToString(); // 原仓库编号
  792. string OldOperator = dr[2].ToString(); // 操作人
  793. string SnNo = dr[3].ToString(); // SN编号
  794. SnNo = SnNo.Replace(" ", "");
  795. string StoreNo = dr[4].ToString(); // 退回仓库编号
  796. string BrandIdString = dr[5].ToString(); // 产品类型
  797. string OutNote = "";
  798. if (list.Columns.Count > 6)
  799. {
  800. OutNote = dr[6].ToString(); // 出库备注
  801. }
  802. int BrandId = int.Parse(function.CheckInt(BrandIdString));
  803. KqProducts kqProduct = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  804. if (kqProduct.Id > 0)
  805. {
  806. StoreForCode storefor = db.StoreForCode.FirstOrDefault(m => m.Code == OldStoreNo) ?? new StoreForCode();
  807. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == storefor.StoreId) ?? new StoreHouse();
  808. if (store.Id > 0)
  809. {
  810. StoreForCode tostorefor = db.StoreForCode.FirstOrDefault(m => m.Code == StoreNo) ?? new StoreForCode();
  811. StoreHouse tostore = db.StoreHouse.FirstOrDefault(m => m.Id == tostorefor.StoreId) ?? new StoreHouse();
  812. if (tostore.Id > 0)
  813. {
  814. MachineForSnNo machinefor = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
  815. PosMachinesTwo machine = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machinefor.SnId && m.BuyUserId > 0) ?? new PosMachinesTwo();
  816. if (machine.Id > 0)
  817. {
  818. function.WriteLog(DateTime.Now.ToString() + "\n" + Newtonsoft.Json.JsonConvert.SerializeObject(machine), "机具回仓库日志");
  819. machine.StoreId = tostorefor.StoreId;
  820. machine.BuyUserId = 0;
  821. machine.UserId = 0;
  822. machine.BindingState = 0;
  823. machine.ActivationState = 0;
  824. machine.BindingTime = null;
  825. machine.ActivationTime = null;
  826. machine.OrderId = 0;
  827. machine.RecycEndDate = null;
  828. machine.PosSnType = 0;
  829. machine.BindMerchantId=0;
  830. machine.ScanQrTrade = 0;
  831. machine.DebitCardTrade = 0;
  832. machine.CreditTrade = 0;
  833. machine.UserNav = null;
  834. machine.IsPurchase = 0;
  835. machine.LeaderUserId = 0;
  836. machine.PreUserId = 0;
  837. db.SaveChanges();
  838. if (!storeData.ContainsKey(storefor.StoreId + "_" + BrandId))
  839. {
  840. storeData.Add(storefor.StoreId + "_" + BrandId, 1);
  841. }
  842. else
  843. {
  844. storeData[storefor.StoreId + "_" + BrandId] += 1;
  845. }
  846. if (!toStoreData.ContainsKey(tostorefor.StoreId + "_" + BrandId))
  847. {
  848. toStoreData.Add(tostorefor.StoreId + "_" + BrandId, 1);
  849. }
  850. else
  851. {
  852. toStoreData[tostorefor.StoreId + "_" + BrandId] += 1;
  853. }
  854. SuccessCount += 1;
  855. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  856. }
  857. else
  858. {
  859. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "已在仓库中");
  860. }
  861. }
  862. else
  863. {
  864. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的退回仓库编号不正确");
  865. }
  866. }
  867. else
  868. {
  869. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的原仓库编号不正确");
  870. }
  871. db.SaveChanges();
  872. }
  873. else
  874. {
  875. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  876. }
  877. }
  878. DoCount += Size;
  879. foreach (string key in storeData.Keys)
  880. {
  881. string[] keylist = key.Split('_');
  882. int StoreId = int.Parse(keylist[0]);
  883. int BrandId = int.Parse(keylist[1]);
  884. int OpStoreNum = storeData[key];
  885. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  886. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  887. {
  888. CreateDate = DateTime.Now,
  889. CreateMan = Operator,
  890. StoreId = StoreId, //仓库
  891. TransType = 1, //交易类型
  892. BrandId = BrandId, //产品类型
  893. OpStoreNum = OpStoreNum, //操作库存数
  894. OpSymbol = "-", //操作符
  895. BeforeTotalNum = store.TotalNum, //操作前总库存数
  896. AfterTotalNum = store.TotalNum, //操作后总库存数
  897. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  898. AfterLaveNum = store.LaveNum - OpStoreNum, //操作后剩余库存数
  899. BeforeOutNum = store.OutNum, //操作前出库数
  900. AfterOutNum = store.OutNum + OpStoreNum, //操作后出库数
  901. }).Entity;
  902. db.SaveChanges();
  903. string ChangeNo = "SC";
  904. int StoreStockChangeId = balance.Id;
  905. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  906. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  907. {
  908. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  909. }
  910. ChangeNo += StoreStockChangeIdString;
  911. balance.TransRecordNo = ChangeNo; //交易流水编号
  912. store.LaveNum -= OpStoreNum;
  913. db.SaveChanges();
  914. }
  915. foreach (string key in toStoreData.Keys)
  916. {
  917. string[] keylist = key.Split('_');
  918. int StoreId = int.Parse(keylist[0]);
  919. int BrandId = int.Parse(keylist[1]);
  920. int OpStoreNum = toStoreData[key];
  921. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  922. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  923. {
  924. CreateDate = DateTime.Now,
  925. CreateMan = Operator,
  926. StoreId = StoreId, //仓库
  927. TransType = 0, //交易类型
  928. BrandId = BrandId, //产品类型
  929. OpStoreNum = OpStoreNum, //操作库存数
  930. OpSymbol = "+", //操作符
  931. BeforeTotalNum = store.TotalNum, //操作前总库存数
  932. AfterTotalNum = store.TotalNum + OpStoreNum, //操作后总库存数
  933. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  934. AfterLaveNum = store.LaveNum + OpStoreNum, //操作后剩余库存数
  935. BeforeOutNum = store.OutNum, //操作前出库数
  936. AfterOutNum = store.OutNum, //操作后出库数
  937. }).Entity;
  938. db.SaveChanges();
  939. string ChangeNo = "SC";
  940. int StoreStockChangeId = balance.Id;
  941. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  942. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  943. {
  944. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  945. }
  946. ChangeNo += StoreStockChangeIdString;
  947. balance.TransRecordNo = ChangeNo; //交易流水编号
  948. store.LaveNum += OpStoreNum;
  949. db.SaveChanges();
  950. }
  951. db.SaveChanges();
  952. tran.Commit();
  953. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  954. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  955. }
  956. catch (Exception ex)
  957. {
  958. DoCount = list.Rows.Count;
  959. tran.Rollback();
  960. ErrorMsg msg = new ErrorMsg()
  961. {
  962. Time = DateTime.Now,
  963. ErrorContent = ex.ToString(),
  964. };
  965. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  966. }
  967. }
  968. }
  969. else if (_Kind == "UserCashRecord")
  970. {
  971. using (var tran = db.Database.BeginTransaction())
  972. {
  973. try
  974. {
  975. int Size = 100;
  976. if (list.Rows.Count - DoCount < 100)
  977. {
  978. Size = list.Rows.Count - DoCount;
  979. }
  980. for (int i = DoCount; i < DoCount + Size; i++)
  981. {
  982. DataRow dr = list.Rows[i];
  983. string CashOrderNo = dr[2].ToString(); // 提现单号
  984. decimal Amount = decimal.Parse(function.CheckNum(dr[3].ToString())); // 发佣金额
  985. int Status = int.Parse(function.CheckInt(dr[4].ToString())); // 提现状态
  986. string Remark = dr[5].ToString(); // 备注
  987. CashOrderNo = CashOrderNo.Replace(" ", "");
  988. UserCashRecord edit = db.UserCashRecord.FirstOrDefault(m => m.CashOrderNo == CashOrderNo && m.ActualTradeAmount == Amount && m.Status == 0);
  989. if (edit != null)
  990. {
  991. edit.Status = Status;
  992. edit.Remark = Remark;
  993. edit.UpdateMan = Operator;
  994. if (Status == 1)
  995. {
  996. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  997. if (account != null)
  998. {
  999. account.QueryCount = 1;
  1000. decimal TradeAmount = edit.TradeAmount;
  1001. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  1002. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  1003. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  1004. account.WithdrawAmount += edit.TradeAmount;
  1005. account.FreezeAmount -= edit.TradeAmount;
  1006. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  1007. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  1008. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  1009. db.UserAccountRecord.Add(new UserAccountRecord()
  1010. {
  1011. CreateDate = DateTime.Now,
  1012. UpdateDate = DateTime.Now,
  1013. UserId = edit.UserId, //创客
  1014. ChangeType = 3, //变动类型
  1015. ProductType = 99, //产品类型
  1016. ChangeAmount = edit.ActualTradeAmount, //变更金额
  1017. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1018. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1019. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1020. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1021. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1022. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1023. });
  1024. db.UserAccountRecord.Add(new UserAccountRecord()
  1025. {
  1026. CreateDate = DateTime.Now,
  1027. UpdateDate = DateTime.Now,
  1028. UserId = edit.UserId, //创客
  1029. ChangeType = 4, //变动类型
  1030. ProductType = 99, //产品类型
  1031. ChangeAmount = edit.TradeFee, //变更金额
  1032. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1033. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1034. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1035. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1036. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1037. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1038. });
  1039. db.UserAccountRecord.Add(new UserAccountRecord()
  1040. {
  1041. CreateDate = DateTime.Now,
  1042. UpdateDate = DateTime.Now,
  1043. UserId = edit.UserId, //创客
  1044. ChangeType = 5, //变动类型
  1045. ProductType = 99, //产品类型
  1046. ChangeAmount = edit.ManageFee, //变更金额
  1047. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1048. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1049. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1050. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1051. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1052. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1053. });
  1054. db.SaveChanges();
  1055. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1056. }
  1057. }
  1058. else if (Status == 2)
  1059. {
  1060. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1061. if (account != null)
  1062. {
  1063. decimal TradeAmount = edit.TradeAmount;
  1064. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  1065. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  1066. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  1067. account.BalanceAmount += TradeAmount;
  1068. account.FreezeAmount -= TradeAmount;
  1069. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  1070. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  1071. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  1072. db.UserAccountRecord.Add(new UserAccountRecord()
  1073. {
  1074. CreateDate = DateTime.Now,
  1075. UpdateDate = DateTime.Now,
  1076. UserId = edit.UserId, //创客
  1077. ChangeType = 6, //变动类型
  1078. ProductType = 99, //产品类型
  1079. ChangeAmount = TradeAmount, //变更金额
  1080. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1081. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1082. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1083. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1084. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1085. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1086. });
  1087. db.SaveChanges();
  1088. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1089. }
  1090. }
  1091. db.SaveChanges();
  1092. RedisDbconn.Instance.Clear("UserCashRecord:" + edit.Id);
  1093. SuccessCount += 1;
  1094. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  1095. }
  1096. }
  1097. DoCount += Size;
  1098. db.SaveChanges();
  1099. tran.Commit();
  1100. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  1101. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  1102. }
  1103. catch (Exception ex)
  1104. {
  1105. DoCount = list.Rows.Count;
  1106. tran.Rollback();
  1107. ErrorMsg msg = new ErrorMsg()
  1108. {
  1109. Time = DateTime.Now,
  1110. ErrorContent = ex.ToString(),
  1111. };
  1112. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  1113. }
  1114. }
  1115. }
  1116. db.Dispose();
  1117. }
  1118. }
  1119. // return "success|" + SuccessCount;
  1120. }
  1121. }
  1122. }
  1123. }