ExcelHelper.cs 112 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420
  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.AddList("PosMachineList:" + storefor.StoreId, pos);
  150. if (!storeData.ContainsKey(storefor.StoreId + "_" + BrandId))
  151. {
  152. storeData.Add(storefor.StoreId + "_" + BrandId, 1);
  153. }
  154. else
  155. {
  156. storeData[storefor.StoreId + "_" + BrandId] += 1;
  157. }
  158. SuccessCount += 1;
  159. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  160. }
  161. else
  162. {
  163. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  164. }
  165. }
  166. else
  167. {
  168. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "已存在,请勿重复录入");
  169. }
  170. }
  171. DoCount += Size;
  172. foreach (string key in storeData.Keys)
  173. {
  174. string[] keylist = key.Split('_');
  175. int StoreId = int.Parse(keylist[0]);
  176. int BrandId = int.Parse(keylist[1]);
  177. int OpStoreNum = storeData[key];
  178. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  179. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  180. {
  181. CreateDate = DateTime.Now,
  182. CreateMan = Operator,
  183. StoreId = StoreId, //仓库
  184. TransType = 0, //交易类型
  185. BrandId = BrandId, //产品类型
  186. OpStoreNum = OpStoreNum, //操作库存数
  187. OpSymbol = "+", //操作符
  188. BeforeTotalNum = store.TotalNum, //操作前总库存数
  189. AfterTotalNum = store.TotalNum + OpStoreNum, //操作后总库存数
  190. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  191. AfterLaveNum = store.LaveNum + OpStoreNum, //操作后剩余库存数
  192. BeforeOutNum = store.OutNum, //操作前出库数
  193. AfterOutNum = store.OutNum, //操作后出库数
  194. }).Entity;
  195. db.SaveChanges();
  196. string ChangeNo = "SC";
  197. int StoreStockChangeId = balance.Id;
  198. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  199. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  200. {
  201. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  202. }
  203. ChangeNo += StoreStockChangeIdString;
  204. balance.TransRecordNo = ChangeNo; //交易流水编号
  205. store.TotalNum += OpStoreNum;
  206. store.LaveNum += OpStoreNum;
  207. db.SaveChanges();
  208. }
  209. db.SaveChanges();
  210. tran.Commit();
  211. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  212. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  213. }
  214. catch (Exception ex)
  215. {
  216. DoCount = list.Rows.Count;
  217. function.WriteLog(ex.ToString(), "机具导入异常");
  218. tran.Rollback();
  219. ErrorMsg msg = new ErrorMsg()
  220. {
  221. Time = DateTime.Now,
  222. ErrorContent = ex.ToString(),
  223. };
  224. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  225. }
  226. tran.Dispose();
  227. }
  228. else if (_Kind == "2")
  229. {
  230. Dictionary<string, int> storeData = new Dictionary<string, int>();
  231. Dictionary<string, int> toStoreData = new Dictionary<string, int>();
  232. using (var tran = db.Database.BeginTransaction())
  233. {
  234. try
  235. {
  236. int Size = 100;
  237. if (list.Rows.Count - DoCount < 100)
  238. {
  239. Size = list.Rows.Count - DoCount;
  240. }
  241. for (int i = DoCount; i < DoCount + Size; i++)
  242. {
  243. DataRow dr = list.Rows[i];
  244. string BatchNo = dr[0].ToString(); // 业务批次号
  245. string OutStoreNo = dr[1].ToString(); // 出货仓库编号
  246. string OutOperator = dr[2].ToString(); // 出库操作人
  247. string SnNo = dr[3].ToString(); // SN编号
  248. SnNo = SnNo.Replace(" ", "");
  249. string StoreNo = dr[4].ToString(); // 收货仓库编号
  250. string BrandIdString = dr[5].ToString(); // 产品类型
  251. string OutNote = "";
  252. if (list.Columns.Count > 6)
  253. {
  254. OutNote = dr[6].ToString(); // 出库备注
  255. }
  256. int BrandId = int.Parse(function.CheckInt(BrandIdString));
  257. //调拨时若出货仓库与填写仓库不符,则该条出货失败
  258. var posinfo = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == SnNo && m.BrandId == BrandId) ?? new PosMachinesTwo();
  259. var storeinfo = db.StoreForCode.FirstOrDefault(m => m.Code == OutStoreNo && m.StoreId == posinfo.StoreId) ?? new StoreForCode();
  260. if (posinfo.Id > 0)
  261. {
  262. if (storeinfo.StoreId > 0)
  263. {
  264. KqProducts kqProduct = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  265. if (kqProduct.Id > 0)
  266. {
  267. StoreForCode storefor = db.StoreForCode.FirstOrDefault(m => m.Code == OutStoreNo) ?? new StoreForCode();
  268. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == storefor.StoreId) ?? new StoreHouse();
  269. if (store.LaveNum > 0)
  270. {
  271. StoreForCode tostorefor = db.StoreForCode.FirstOrDefault(m => m.Code == StoreNo) ?? new StoreForCode();
  272. StoreHouse tostore = db.StoreHouse.FirstOrDefault(m => m.Id == tostorefor.StoreId) ?? new StoreHouse();
  273. if (tostore.Id > 0)
  274. {
  275. MachineForSnNo machinefor = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
  276. PosMachinesTwo machine = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machinefor.SnId && m.StoreId != tostore.Id && m.BuyUserId == 0 && m.UserId == 0) ?? new PosMachinesTwo();
  277. if (machine.Id > 0)
  278. {
  279. if (machine.PreUserId == 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. }
  385. else
  386. {
  387. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "不是仓库机或已经在填写的收货仓库中");
  388. }
  389. if (string.IsNullOrEmpty(tostore.ProductName))
  390. {
  391. tostore.BrandId = BrandId.ToString();
  392. tostore.ProductName = kqProduct.Name;
  393. }
  394. }
  395. else
  396. {
  397. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的收货仓库编号不正确");
  398. }
  399. }
  400. else
  401. {
  402. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "所在的仓库" + store.StoreName + "(" + store.StoreNo + ")库存不足");
  403. }
  404. db.SaveChanges();
  405. }
  406. else
  407. {
  408. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  409. }
  410. }
  411. else
  412. {
  413. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "出货仓库与填写仓库不符");
  414. }
  415. }
  416. else
  417. {
  418. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  419. }
  420. }
  421. DoCount += Size;
  422. foreach (string key in storeData.Keys)
  423. {
  424. string[] keylist = key.Split('_');
  425. int StoreId = int.Parse(keylist[0]);
  426. int BrandId = int.Parse(keylist[1]);
  427. int OpStoreNum = storeData[key];
  428. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  429. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  430. {
  431. CreateDate = DateTime.Now,
  432. CreateMan = Operator,
  433. StoreId = StoreId, //仓库
  434. TransType = 1, //交易类型
  435. BrandId = BrandId, //产品类型
  436. OpStoreNum = OpStoreNum, //操作库存数
  437. OpSymbol = "-", //操作符
  438. BeforeTotalNum = store.TotalNum, //操作前总库存数
  439. AfterTotalNum = store.TotalNum, //操作后总库存数
  440. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  441. AfterLaveNum = store.LaveNum - OpStoreNum, //操作后剩余库存数
  442. BeforeOutNum = store.OutNum, //操作前出库数
  443. AfterOutNum = store.OutNum + OpStoreNum, //操作后出库数
  444. }).Entity;
  445. db.SaveChanges();
  446. string ChangeNo = "SC";
  447. int StoreStockChangeId = balance.Id;
  448. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  449. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  450. {
  451. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  452. }
  453. ChangeNo += StoreStockChangeIdString;
  454. balance.TransRecordNo = ChangeNo; //交易流水编号
  455. store.LaveNum -= OpStoreNum;
  456. store.OutNum += OpStoreNum;
  457. db.SaveChanges();
  458. string SendData = "{\"Kind\":\"5\",\"Data\":{\"StoreId\":\"" + StoreId + "\",\"BrandId\":\"" + BrandId + "\",\"OpStoreNum\":\"" + OpStoreNum + "\"}}";
  459. RedisDbconn.Instance.AddList("StoreApplyQueue", SendData);
  460. }
  461. foreach (string key in toStoreData.Keys)
  462. {
  463. string[] keylist = key.Split('_');
  464. int StoreId = int.Parse(keylist[0]);
  465. int BrandId = int.Parse(keylist[1]);
  466. int OpStoreNum = toStoreData[key];
  467. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  468. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  469. {
  470. CreateDate = DateTime.Now,
  471. CreateMan = Operator,
  472. StoreId = StoreId, //仓库
  473. TransType = 0, //交易类型
  474. BrandId = BrandId, //产品类型
  475. OpStoreNum = OpStoreNum, //操作库存数
  476. OpSymbol = "+", //操作符
  477. BeforeTotalNum = store.TotalNum, //操作前总库存数
  478. AfterTotalNum = store.TotalNum + OpStoreNum, //操作后总库存数
  479. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  480. AfterLaveNum = store.LaveNum + OpStoreNum, //操作后剩余库存数
  481. BeforeOutNum = store.OutNum, //操作前出库数
  482. AfterOutNum = store.OutNum, //操作后出库数
  483. }).Entity;
  484. db.SaveChanges();
  485. string ChangeNo = "SC";
  486. int StoreStockChangeId = balance.Id;
  487. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  488. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  489. {
  490. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  491. }
  492. ChangeNo += StoreStockChangeIdString;
  493. balance.TransRecordNo = ChangeNo; //交易流水编号
  494. store.TotalNum += OpStoreNum;
  495. store.LaveNum += OpStoreNum;
  496. db.SaveChanges();
  497. string SendData = "{\"Kind\":\"5\",\"Data\":{\"StoreId\":\"" + StoreId + "\",\"BrandId\":\"" + BrandId + "\",\"OpStoreNum\":\"-" + OpStoreNum + "\"}}";
  498. RedisDbconn.Instance.AddList("StoreApplyQueue", SendData);
  499. }
  500. db.SaveChanges();
  501. tran.Commit();
  502. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  503. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  504. }
  505. catch (Exception ex)
  506. {
  507. DoCount = list.Rows.Count;
  508. tran.Rollback();
  509. ErrorMsg msg = new ErrorMsg()
  510. {
  511. Time = DateTime.Now,
  512. ErrorContent = ex.ToString(),
  513. };
  514. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  515. }
  516. }
  517. }
  518. else if (_Kind == "3")
  519. {
  520. Dictionary<string, int> storeData = new Dictionary<string, int>();
  521. using (var tran = db.Database.BeginTransaction())
  522. {
  523. try
  524. {
  525. int Size = 100;
  526. if (list.Rows.Count - DoCount < 100)
  527. {
  528. Size = list.Rows.Count - DoCount;
  529. }
  530. for (int i = DoCount; i < DoCount + Size; i++)
  531. {
  532. DataRow dr = list.Rows[i];
  533. string BatchNo = dr[0].ToString(); // 业务批次号
  534. BatchNo = BatchNo.Replace(" ", "");
  535. string OutStoreNo = dr[1].ToString(); // 出货仓库编号
  536. OutStoreNo = OutStoreNo.Replace(" ", "");
  537. string OutOperator = dr[2].ToString(); // 出库操作人
  538. OutOperator = OutOperator.Replace(" ", "");
  539. string SnNo = dr[3].ToString(); // SN编号
  540. SnNo = SnNo.Replace(" ", "");
  541. string MakerCode = dr[4].ToString(); // 收货创客编号
  542. MakerCode = MakerCode.Replace(" ", "");
  543. string BrandIdString = dr[5].ToString(); // 产品类型(5-客小爽Mpos,6-客小爽大POS,61-客小爽电签POS,8-客小爽超级Mpos))
  544. BrandIdString = BrandIdString.Replace(" ", "");
  545. string OutNote = "";
  546. if (list.Columns.Count > 6)
  547. {
  548. OutNote = dr[6].ToString(); // 出库备注
  549. }
  550. int BrandId = int.Parse(function.CheckInt(BrandIdString));
  551. KqProducts kqProduct = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  552. if (kqProduct.Id > 0)
  553. {
  554. StoreForCode storefor = db.StoreForCode.FirstOrDefault(m => m.Code == OutStoreNo) ?? new StoreForCode();
  555. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == storefor.StoreId) ?? new StoreHouse();
  556. if (store.LaveNum > 0)
  557. {
  558. UserForMakerCode userfor = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode) ?? new UserForMakerCode();
  559. Users touser = db.Users.FirstOrDefault(m => m.Id == userfor.UserId && m.AuthFlag == 1) ?? new Users();
  560. if (touser.Id > 0)
  561. {
  562. MachineForSnNo machinefor = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
  563. PosMachinesTwo machine = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machinefor.SnId && m.BuyUserId == 0 && m.UserId == 0) ?? new PosMachinesTwo();
  564. if (machine.Id > 0)
  565. {
  566. if(machine.BrandId == BrandId)
  567. {
  568. StoreStockChange stockchange = db.StoreStockChange.Add(new StoreStockChange()
  569. {
  570. CreateDate = DateTime.Now,
  571. CreateMan = Operator,
  572. StoreId = storefor.StoreId, //仓库
  573. BrandId = BrandId, //产品类型
  574. ProductName = RelationClass.GetKqProductBrandInfo(BrandId), //产品名称
  575. BizBatchNo = BatchNo, //业务批次号
  576. TransType = 2, //交易类型
  577. SnNo = SnNo, //SN编号
  578. SnType = machine.PosSnType, //SN机具类型
  579. StockOpDirect = 1, //库存操作方向
  580. SnStatus = 1, //SN状态
  581. BindStatus = machine.BindingState, //绑定状态
  582. BindMerchant = machine.BindMerchantId, //绑定商户
  583. ActiveStatus = machine.ActivationState, //激活状态
  584. ActRewardUserId = machine.BuyUserId, //激活奖励人
  585. DeviceVendor = machine.DeviceName, //设备厂商
  586. DeviceModel = machine.DeviceKind, //设备型号
  587. DeviceType = machine.DeviceType, //设备类型
  588. FromUserId = store.UserId, //出货人
  589. FromDate = DateTime.Now, //出库时间
  590. FromRemark = OutNote, //出库备注
  591. ToUserId = userfor.UserId, //收货人
  592. SourceStoreId = machine.SourceStoreId, //源仓库编号
  593. BrandType = machine.DeviceType, //品牌类型
  594. }).Entity;
  595. db.SaveChanges();
  596. string ChangeNo = "SC";
  597. int StoreStockChangeId = stockchange.Id;
  598. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  599. for (int j = 0; j < 18 - StoreStockChangeId.ToString().Length; j++)
  600. {
  601. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  602. }
  603. ChangeNo += StoreStockChangeIdString;
  604. stockchange.ChangeNo = ChangeNo; //交易流水编号
  605. db.SaveChanges();
  606. UserStoreChange userstore = db.UserStoreChange.Add(new UserStoreChange()
  607. {
  608. CreateDate = DateTime.Now,
  609. CreateMan = Operator,
  610. UserId = store.UserId, //创客
  611. BrandId = BrandId, //产品类型
  612. ChangeRecordNo = ChangeNo, //变更记录单号
  613. TransType = 0, //交易类型
  614. SnNo = SnNo, //SN编号
  615. SnType = machine.PosSnType, //SN机具类型
  616. StockOpDirect = 0, //库存操作方向
  617. DeviceVendor = machine.DeviceName, //设备厂商
  618. DeviceType = machine.DeviceKind, //设备类型
  619. DeviceModel = machine.DeviceType, //设备型号
  620. ToUserId = userfor.UserId, //收货创客
  621. ToDate = DateTime.Now, //入库时间
  622. ToRemark = OutNote, //入库备注
  623. SourceStoreId = machine.SourceStoreId, //源仓库
  624. SnStatus = 1, //SN状态
  625. BizBatchNo = BatchNo, //业务批次号
  626. BindStatus = (int)machine.BindingState, //绑定状态
  627. BindMerchantId = machine.BindMerchantId, //绑定商户
  628. ActiveStatus = (int)machine.ActivationState, //激活状态
  629. ActRewardUserId = machine.BuyUserId, //激活奖励创客
  630. BrandType = machine.DeviceType, //品牌类型
  631. }).Entity;
  632. db.StoreChangeHistory.Add(new StoreChangeHistory()
  633. {
  634. CreateDate = DateTime.Now,
  635. CreateMan = Operator,
  636. UserId = store.UserId, //创客
  637. BrandId = BrandId, //产品类型
  638. ChangeRecordNo = ChangeNo, //变更记录单号
  639. BizBatchNo = BatchNo, //业务批次号
  640. TransType = 2, //交易类型
  641. SnNo = SnNo, //SN编号
  642. SnType = machine.PosSnType, //SN机具类型
  643. StockOpDirect = 1, //库存操作方向
  644. DeviceVendor = machine.DeviceName, //设备厂商
  645. DeviceModel = machine.DeviceKind, //设备型号
  646. DeviceType = machine.DeviceType, //设备类型
  647. FromUserId = store.UserId, //出货创客
  648. FromDate = DateTime.Now, //出库时间
  649. FromRemark = OutNote, //出库备注
  650. SourceStoreId = machine.SourceStoreId, //源仓库
  651. StoreId = store.Id, //仓库
  652. });
  653. db.StoreChangeHistory.Add(new StoreChangeHistory()
  654. {
  655. CreateDate = DateTime.Now,
  656. CreateMan = Operator,
  657. UserId = touser.Id, //创客
  658. BrandId = BrandId, //产品类型
  659. ChangeRecordNo = ChangeNo, //变更记录单号
  660. BizBatchNo = BatchNo, //业务批次号
  661. TransType = 0, //交易类型
  662. SnNo = SnNo, //SN编号
  663. SnType = machine.PosSnType, //SN机具类型
  664. StockOpDirect = 0, //库存操作方向
  665. DeviceVendor = machine.DeviceName, //设备厂商
  666. DeviceModel = machine.DeviceKind, //设备型号
  667. DeviceType = machine.DeviceType, //设备类型
  668. ToUserId = touser.Id, //收货创客
  669. ToDate = DateTime.Now, //入库时间
  670. ToRemark = OutNote, //入库备注
  671. SourceStoreId = machine.SourceStoreId, //源仓库
  672. });
  673. machine.BuyUserId = touser.Id;
  674. machine.UserId = touser.Id;
  675. machine.TransferTime = DateTime.Now;
  676. machine.RecycEndDate = DateTime.Now.AddDays(180); // 循环结束时间
  677. db.SaveChanges();
  678. string IdBrand = touser.Id + "_" + BrandId;
  679. UserMachineData MachineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
  680. if (MachineData == null)
  681. {
  682. MachineData = db.UserMachineData.Add(new UserMachineData()
  683. {
  684. IdBrand = IdBrand,
  685. }).Entity;
  686. db.SaveChanges();
  687. }
  688. MachineData.IdBrand = IdBrand;
  689. MachineData.TotalMachineCount += 1;
  690. MachineData.UnBindCount += 1;
  691. db.SaveChanges();
  692. RemoveClass.DeletePosMachineList("PosMachineTwoList:" + storefor.StoreId, machine.Id);
  693. if (!storeData.ContainsKey(storefor.StoreId + "_" + BrandId))
  694. {
  695. storeData.Add(storefor.StoreId + "_" + BrandId, 1);
  696. }
  697. else
  698. {
  699. storeData[storefor.StoreId + "_" + BrandId] += 1;
  700. }
  701. SuccessCount += 1;
  702. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  703. }
  704. else
  705. {
  706. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "与表格里填写的品牌不一致");
  707. }
  708. }
  709. else
  710. {
  711. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "不是仓库机");
  712. }
  713. }
  714. else
  715. {
  716. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的收货创客编号不正确或创客未认证");
  717. }
  718. }
  719. else
  720. {
  721. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "所在的仓库" + store.StoreName + "(" + store.StoreNo + ")库存不足");
  722. }
  723. }
  724. else
  725. {
  726. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  727. }
  728. }
  729. DoCount += Size;
  730. foreach (string key in storeData.Keys)
  731. {
  732. string[] keylist = key.Split('_');
  733. int StoreId = int.Parse(keylist[0]);
  734. int BrandId = int.Parse(keylist[1]);
  735. int OpStoreNum = storeData[key];
  736. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  737. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  738. {
  739. CreateDate = DateTime.Now,
  740. CreateMan = Operator,
  741. StoreId = StoreId, //仓库
  742. TransType = 1, //交易类型
  743. BrandId = BrandId, //产品类型
  744. OpStoreNum = OpStoreNum, //操作库存数
  745. OpSymbol = "-", //操作符
  746. BeforeTotalNum = store.TotalNum, //操作前总库存数
  747. AfterTotalNum = store.TotalNum, //操作后总库存数
  748. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  749. AfterLaveNum = store.LaveNum - OpStoreNum, //操作后剩余库存数
  750. BeforeOutNum = store.OutNum, //操作前出库数
  751. AfterOutNum = store.OutNum + OpStoreNum, //操作后出库数
  752. }).Entity;
  753. db.SaveChanges();
  754. string ChangeNo = "SC";
  755. int StoreStockChangeId = balance.Id;
  756. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  757. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  758. {
  759. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  760. }
  761. ChangeNo += StoreStockChangeIdString;
  762. balance.TransRecordNo = ChangeNo; //交易流水编号
  763. store.LaveNum -= OpStoreNum;
  764. store.OutNum += OpStoreNum;
  765. db.SaveChanges();
  766. }
  767. db.SaveChanges();
  768. tran.Commit();
  769. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  770. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  771. }
  772. catch (Exception ex)
  773. {
  774. DoCount = list.Rows.Count;
  775. tran.Rollback();
  776. ErrorMsg msg = new ErrorMsg()
  777. {
  778. Time = DateTime.Now,
  779. ErrorContent = ex.ToString(),
  780. };
  781. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  782. }
  783. }
  784. }
  785. else if (_Kind == "4")
  786. {
  787. Dictionary<string, int> storeData = new Dictionary<string, int>();
  788. Dictionary<string, int> toStoreData = new Dictionary<string, int>();
  789. using (var tran = db.Database.BeginTransaction())
  790. {
  791. try
  792. {
  793. int Size = 100;
  794. if (list.Rows.Count - DoCount < 100)
  795. {
  796. Size = list.Rows.Count - DoCount;
  797. }
  798. for (int i = DoCount; i < DoCount + Size; i++)
  799. {
  800. DataRow dr = list.Rows[i];
  801. string BatchNo = dr[0].ToString(); // 业务批次号
  802. string OldStoreNo = dr[1].ToString(); // 原仓库编号
  803. string OldOperator = dr[2].ToString(); // 操作人
  804. string SnNo = dr[3].ToString(); // SN编号
  805. SnNo = SnNo.Replace(" ", "");
  806. string StoreNo = dr[4].ToString(); // 退回仓库编号
  807. string BrandIdString = dr[5].ToString(); // 产品类型
  808. string OutNote = "";
  809. if (list.Columns.Count > 6)
  810. {
  811. OutNote = dr[6].ToString(); // 出库备注
  812. }
  813. int BrandId = int.Parse(function.CheckInt(BrandIdString));
  814. decimal amount = 0;
  815. KqProducts kqProduct = db.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  816. if (kqProduct.Name.Contains("电签"))
  817. {
  818. amount = 200;
  819. }
  820. if (kqProduct.Name.Contains("大POS"))
  821. {
  822. amount = 300;
  823. }
  824. if (kqProduct.Id > 0)
  825. {
  826. StoreForCode storefor = db.StoreForCode.FirstOrDefault(m => m.Code == OldStoreNo) ?? new StoreForCode();
  827. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == storefor.StoreId) ?? new StoreHouse();
  828. if (store.Id > 0)
  829. {
  830. StoreForCode tostorefor = db.StoreForCode.FirstOrDefault(m => m.Code == StoreNo) ?? new StoreForCode();
  831. StoreHouse tostore = db.StoreHouse.FirstOrDefault(m => m.Id == tostorefor.StoreId && m.Status > -1) ?? new StoreHouse();
  832. if (tostore.Id > 0)
  833. {
  834. MachineForSnNo machinefor = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
  835. PosMachinesTwo machine = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machinefor.SnId && m.BuyUserId > 0) ?? new PosMachinesTwo();
  836. if (machine.Id > 0)
  837. {
  838. function.WriteLog(DateTime.Now.ToString() + "\n" + Newtonsoft.Json.JsonConvert.SerializeObject(machine), "机具回仓库日志");
  839. machine.StoreId = tostorefor.StoreId;
  840. machine.BuyUserId = 0;
  841. machine.UserId = 0;
  842. machine.BindingState = 0;
  843. machine.ActivationState = 0;
  844. machine.BindingTime = null;
  845. machine.ActivationTime = null;
  846. machine.OrderId = 0;
  847. machine.RecycEndDate = null;
  848. machine.PosSnType = 0;
  849. machine.BindMerchantId = 0;
  850. machine.ScanQrTrade = 0;
  851. machine.DebitCardTrade = 0;
  852. machine.CreditTrade = 0;
  853. machine.UserNav = null;
  854. machine.IsPurchase = 0;
  855. machine.LeaderUserId = 0;
  856. machine.PreUserId = 0;
  857. db.SaveChanges();
  858. if (!storeData.ContainsKey(storefor.StoreId + "_" + BrandId))
  859. {
  860. storeData.Add(storefor.StoreId + "_" + BrandId, 1);
  861. }
  862. else
  863. {
  864. storeData[storefor.StoreId + "_" + BrandId] += 1;
  865. }
  866. if (!toStoreData.ContainsKey(tostorefor.StoreId + "_" + BrandId))
  867. {
  868. toStoreData.Add(tostorefor.StoreId + "_" + BrandId, 1);
  869. }
  870. else
  871. {
  872. toStoreData[tostorefor.StoreId + "_" + BrandId] += 1;
  873. }
  874. SuccessCount += 1;
  875. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  876. }
  877. else
  878. {
  879. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "已在仓库中");
  880. }
  881. }
  882. else
  883. {
  884. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的退回仓库编号不正确");
  885. }
  886. }
  887. else
  888. {
  889. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "填写的原仓库编号不正确");
  890. }
  891. db.SaveChanges();
  892. }
  893. else
  894. {
  895. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + SnNo + "的品牌填写有误");
  896. }
  897. }
  898. DoCount += Size;
  899. foreach (string key in storeData.Keys)
  900. {
  901. string[] keylist = key.Split('_');
  902. int StoreId = int.Parse(keylist[0]);
  903. int BrandId = int.Parse(keylist[1]);
  904. int OpStoreNum = storeData[key];
  905. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  906. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  907. {
  908. CreateDate = DateTime.Now,
  909. CreateMan = Operator,
  910. StoreId = StoreId, //仓库
  911. TransType = 1, //交易类型
  912. BrandId = BrandId, //产品类型
  913. OpStoreNum = OpStoreNum, //操作库存数
  914. OpSymbol = "-", //操作符
  915. BeforeTotalNum = store.TotalNum, //操作前总库存数
  916. AfterTotalNum = store.TotalNum, //操作后总库存数
  917. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  918. AfterLaveNum = store.LaveNum - OpStoreNum, //操作后剩余库存数
  919. BeforeOutNum = store.OutNum, //操作前出库数
  920. AfterOutNum = store.OutNum + OpStoreNum, //操作后出库数
  921. }).Entity;
  922. db.SaveChanges();
  923. string ChangeNo = "JJBH";
  924. int StoreStockChangeId = balance.Id;
  925. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  926. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  927. {
  928. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  929. }
  930. ChangeNo += StoreStockChangeIdString;
  931. balance.TransRecordNo = ChangeNo; //交易流水编号
  932. store.LaveNum -= OpStoreNum;
  933. db.SaveChanges();
  934. }
  935. foreach (string key in toStoreData.Keys)
  936. {
  937. string[] keylist = key.Split('_');
  938. int StoreId = int.Parse(keylist[0]);
  939. int BrandId = int.Parse(keylist[1]);
  940. int OpStoreNum = toStoreData[key];
  941. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
  942. StoreBalance balance = db.StoreBalance.Add(new StoreBalance()
  943. {
  944. CreateDate = DateTime.Now,
  945. CreateMan = Operator,
  946. StoreId = StoreId, //仓库
  947. TransType = 0, //交易类型
  948. BrandId = BrandId, //产品类型
  949. OpStoreNum = OpStoreNum, //操作库存数
  950. OpSymbol = "+", //操作符
  951. BeforeTotalNum = store.TotalNum, //操作前总库存数
  952. AfterTotalNum = store.TotalNum + OpStoreNum, //操作后总库存数
  953. BeforeLaveNum = store.LaveNum, //操作前剩余库存数
  954. AfterLaveNum = store.LaveNum + OpStoreNum, //操作后剩余库存数
  955. BeforeOutNum = store.OutNum, //操作前出库数
  956. AfterOutNum = store.OutNum, //操作后出库数
  957. }).Entity;
  958. db.SaveChanges();
  959. string ChangeNo = "SC";
  960. int StoreStockChangeId = balance.Id;
  961. string StoreStockChangeIdString = StoreStockChangeId.ToString();
  962. for (int i = 0; i < 18 - StoreStockChangeId.ToString().Length; i++)
  963. {
  964. StoreStockChangeIdString = "0" + StoreStockChangeIdString;
  965. }
  966. ChangeNo += StoreStockChangeIdString;
  967. balance.TransRecordNo = ChangeNo; //交易流水编号
  968. store.LaveNum += OpStoreNum;
  969. db.SaveChanges();
  970. }
  971. db.SaveChanges();
  972. tran.Commit();
  973. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  974. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  975. }
  976. catch (Exception ex)
  977. {
  978. DoCount = list.Rows.Count;
  979. tran.Rollback();
  980. ErrorMsg msg = new ErrorMsg()
  981. {
  982. Time = DateTime.Now,
  983. ErrorContent = ex.ToString(),
  984. };
  985. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  986. }
  987. }
  988. }
  989. else if (_Kind == "UserCashRecord")
  990. {
  991. using (var tran = db.Database.BeginTransaction())
  992. {
  993. try
  994. {
  995. int Size = 100;
  996. if (list.Rows.Count - DoCount < 100)
  997. {
  998. Size = list.Rows.Count - DoCount;
  999. }
  1000. for (int i = DoCount; i < DoCount + Size; i++)
  1001. {
  1002. DataRow dr = list.Rows[i];
  1003. string CashOrderNo = dr[2].ToString(); // 提现单号
  1004. decimal Amount = decimal.Parse(function.CheckNum(dr[3].ToString())); // 发佣金额
  1005. int Status = int.Parse(function.CheckInt(dr[4].ToString())); // 提现状态
  1006. string Remark = dr[5].ToString(); // 备注
  1007. CashOrderNo = CashOrderNo.Replace(" ", "");
  1008. UserCashRecord edit = db.UserCashRecord.FirstOrDefault(m => m.CashOrderNo == CashOrderNo && m.ActualTradeAmount == Amount && m.Status == 0);
  1009. if (edit != null)
  1010. {
  1011. if (edit.TradeType == 3)
  1012. {
  1013. edit.Status = Status;
  1014. edit.Remark = Remark;
  1015. edit.UpdateMan = Operator;
  1016. if (Status == 1)
  1017. {
  1018. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1019. if (account != null)
  1020. {
  1021. decimal TradeAmount = edit.TradeAmount;
  1022. db.LeaderAccountRecord.Add(new LeaderAccountRecord()
  1023. {
  1024. CreateDate = DateTime.Now,
  1025. UserId = edit.UserId, //创客
  1026. ChangeType = 3, //变动类型
  1027. ProductType = 99, //产品类型
  1028. ChangeAmount = TradeAmount, //变更金额
  1029. BeforeBalanceAmount = account.LeaderBalanceAmount, //变更前余额
  1030. AfterBalanceAmount = account.LeaderBalanceAmount, //变更后余额
  1031. });
  1032. db.SaveChanges();
  1033. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1034. }
  1035. }
  1036. else if (Status == 2)
  1037. {
  1038. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1039. if (account != null)
  1040. {
  1041. decimal TradeAmount = edit.TradeAmount;
  1042. account.LeaderBalanceAmount += TradeAmount;
  1043. db.LeaderAccountRecord.Add(new LeaderAccountRecord()
  1044. {
  1045. CreateDate = DateTime.Now,
  1046. UserId = edit.UserId, //创客
  1047. ChangeType = 6, //变动类型
  1048. ProductType = 99, //产品类型
  1049. ChangeAmount = TradeAmount, //变更金额
  1050. BeforeBalanceAmount = account.LeaderBalanceAmount - TradeAmount, //变更前余额
  1051. AfterBalanceAmount = account.LeaderBalanceAmount, //变更后余额
  1052. });
  1053. db.SaveChanges();
  1054. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1055. }
  1056. }
  1057. db.SaveChanges();
  1058. RedisDbconn.Instance.Clear("UserCashRecord:" + edit.Id);
  1059. SuccessCount += 1;
  1060. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  1061. }
  1062. else if (edit.TradeType == 4)
  1063. {
  1064. edit.Status = Status;
  1065. edit.Remark = Remark;
  1066. edit.UpdateMan = Operator;
  1067. if (Status == 1)
  1068. {
  1069. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1070. if (account != null)
  1071. {
  1072. decimal TradeAmount = edit.TradeAmount;
  1073. decimal ActualTradeAmount = edit.ActualTradeAmount;
  1074. account.HelpProfitBalanceAmount -= TradeAmount;
  1075. db.HelpProfitAccountRecord.Add(new HelpProfitAccountRecord()
  1076. {
  1077. CreateDate = DateTime.Now,
  1078. UserId = edit.UserId, //创客
  1079. ChangeType = 3, //变动类型
  1080. ProductType = 99, //产品类型
  1081. ChangeAmount = ActualTradeAmount, //变更金额
  1082. BeforeBalanceAmount = account.HelpProfitBalanceAmount + TradeAmount, //变更前余额
  1083. AfterBalanceAmount = account.HelpProfitBalanceAmount, //变更后余额
  1084. });
  1085. db.HelpProfitAccountRecord.Add(new HelpProfitAccountRecord()
  1086. {
  1087. CreateDate = DateTime.Now,
  1088. UpdateDate = DateTime.Now,
  1089. UserId = edit.UserId, //创客
  1090. ChangeType = 4, //变动类型
  1091. ProductType = 99, //产品类型
  1092. ChangeAmount = edit.TradeFee, //变更金额
  1093. BeforeBalanceAmount = account.HelpProfitBalanceAmount + TradeAmount, //变更前余额
  1094. AfterBalanceAmount = account.HelpProfitBalanceAmount, //变更后余额
  1095. });
  1096. db.HelpProfitAccountRecord.Add(new HelpProfitAccountRecord()
  1097. {
  1098. CreateDate = DateTime.Now,
  1099. UpdateDate = DateTime.Now,
  1100. UserId = edit.UserId, //创客
  1101. ChangeType = 5, //变动类型
  1102. ProductType = 99, //产品类型
  1103. ChangeAmount = edit.ManageFee, //变更金额
  1104. BeforeBalanceAmount = account.HelpProfitBalanceAmount + TradeAmount, //变更前余额
  1105. AfterBalanceAmount = account.HelpProfitBalanceAmount, //变更后余额
  1106. });
  1107. db.SaveChanges();
  1108. RedisDbconn.Instance.Set("HelpProfitAccount:" + edit.UserId, account);
  1109. }
  1110. }
  1111. else if (Status == 2)
  1112. {
  1113. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1114. if (account != null)
  1115. {
  1116. decimal TradeAmount = edit.TradeAmount;
  1117. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  1118. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  1119. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  1120. account.BalanceAmount += TradeAmount;
  1121. account.FreezeAmount -= TradeAmount;
  1122. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  1123. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  1124. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  1125. db.UserAccountRecord.Add(new UserAccountRecord()
  1126. {
  1127. CreateDate = DateTime.Now,
  1128. UpdateDate = DateTime.Now,
  1129. UserId = edit.UserId, //创客
  1130. ChangeType = 6, //变动类型
  1131. ProductType = 99, //产品类型
  1132. ChangeAmount = TradeAmount, //变更金额
  1133. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1134. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1135. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1136. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1137. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1138. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1139. });
  1140. db.SaveChanges();
  1141. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1142. }
  1143. }
  1144. db.SaveChanges();
  1145. RedisDbconn.Instance.Clear("UserCashRecord:" + edit.Id);
  1146. SuccessCount += 1;
  1147. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  1148. }
  1149. else
  1150. {
  1151. edit.Status = Status;
  1152. edit.Remark = Remark;
  1153. edit.UpdateMan = Operator;
  1154. if (Status == 1)
  1155. {
  1156. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1157. if (account != null)
  1158. {
  1159. account.QueryCount = 1;
  1160. decimal TradeAmount = edit.TradeAmount;
  1161. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  1162. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  1163. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  1164. account.WithdrawAmount += edit.TradeAmount;
  1165. account.FreezeAmount -= edit.TradeAmount;
  1166. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  1167. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  1168. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  1169. db.UserAccountRecord.Add(new UserAccountRecord()
  1170. {
  1171. CreateDate = DateTime.Now,
  1172. UpdateDate = DateTime.Now,
  1173. UserId = edit.UserId, //创客
  1174. ChangeType = 3, //变动类型
  1175. ProductType = 99, //产品类型
  1176. ChangeAmount = edit.ActualTradeAmount, //变更金额
  1177. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1178. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1179. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1180. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1181. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1182. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1183. });
  1184. db.UserAccountRecord.Add(new UserAccountRecord()
  1185. {
  1186. CreateDate = DateTime.Now,
  1187. UpdateDate = DateTime.Now,
  1188. UserId = edit.UserId, //创客
  1189. ChangeType = 4, //变动类型
  1190. ProductType = 99, //产品类型
  1191. ChangeAmount = edit.TradeFee, //变更金额
  1192. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1193. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1194. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1195. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1196. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1197. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1198. });
  1199. db.UserAccountRecord.Add(new UserAccountRecord()
  1200. {
  1201. CreateDate = DateTime.Now,
  1202. UpdateDate = DateTime.Now,
  1203. UserId = edit.UserId, //创客
  1204. ChangeType = 5, //变动类型
  1205. ProductType = 99, //产品类型
  1206. ChangeAmount = edit.ManageFee, //变更金额
  1207. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1208. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1209. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1210. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1211. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1212. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1213. });
  1214. db.SaveChanges();
  1215. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1216. }
  1217. }
  1218. else if (Status == 2)
  1219. {
  1220. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
  1221. if (account != null)
  1222. {
  1223. decimal TradeAmount = edit.TradeAmount;
  1224. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  1225. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  1226. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  1227. account.BalanceAmount += TradeAmount;
  1228. account.FreezeAmount -= TradeAmount;
  1229. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  1230. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  1231. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  1232. db.UserAccountRecord.Add(new UserAccountRecord()
  1233. {
  1234. CreateDate = DateTime.Now,
  1235. UpdateDate = DateTime.Now,
  1236. UserId = edit.UserId, //创客
  1237. ChangeType = 6, //变动类型
  1238. ProductType = 99, //产品类型
  1239. ChangeAmount = TradeAmount, //变更金额
  1240. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  1241. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  1242. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  1243. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  1244. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  1245. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  1246. });
  1247. db.SaveChanges();
  1248. RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
  1249. }
  1250. }
  1251. db.SaveChanges();
  1252. RedisDbconn.Instance.Clear("UserCashRecord:" + edit.Id);
  1253. SuccessCount += 1;
  1254. RedisDbconn.Instance.Set("CheckImport:" + checkKey, SuccessCount + " / " + TotalCount);
  1255. }
  1256. }
  1257. }
  1258. DoCount += Size;
  1259. db.SaveChanges();
  1260. tran.Commit();
  1261. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  1262. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  1263. }
  1264. catch (Exception ex)
  1265. {
  1266. DoCount = list.Rows.Count;
  1267. tran.Rollback();
  1268. ErrorMsg msg = new ErrorMsg()
  1269. {
  1270. Time = DateTime.Now,
  1271. ErrorContent = ex.ToString(),
  1272. };
  1273. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  1274. }
  1275. }
  1276. }
  1277. else if (_Kind == "ChangeFee")
  1278. {
  1279. using (var tran = db.Database.BeginTransaction())
  1280. {
  1281. try
  1282. {
  1283. int Size = 100;
  1284. if (list.Rows.Count - DoCount < 100)
  1285. {
  1286. Size = list.Rows.Count - DoCount;
  1287. }
  1288. string posIds = "";
  1289. string userIds = "";
  1290. string warning = "";
  1291. for (int i = DoCount; i < DoCount + Size; i++)
  1292. {
  1293. DataRow dr = list.Rows[i];
  1294. string PosNo = dr[0].ToString(); // 机具Sn
  1295. decimal Amount = decimal.Parse(function.CheckNum(dr[1].ToString())); // 调整费率
  1296. int Kind = int.Parse(function.CheckInt(dr[2].ToString())); // 1 调升 2 调低
  1297. var pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == PosNo) ?? new PosMachinesTwo();
  1298. if (pos.BrandId == 1 || pos.BrandId == 3 || pos.BrandId == 6)
  1299. {
  1300. warning += PosNo + ",";
  1301. }
  1302. }
  1303. if (!string.IsNullOrEmpty(warning))
  1304. {
  1305. RedisDbconn.Instance.AddList("ErrList" + checkKey, "机具" + warning + "该机具应直接设置,请全部重新导入");
  1306. }
  1307. else
  1308. {
  1309. for (int i = DoCount; i < DoCount + Size; i++)
  1310. {
  1311. DataRow dr = list.Rows[i];
  1312. string PosNo = dr[0].ToString(); // 机具Sn
  1313. decimal Amount = decimal.Parse(function.CheckNum(dr[1].ToString())); // 调整费率
  1314. int Kind = int.Parse(function.CheckInt(dr[2].ToString())); // 1 调升 2 调低
  1315. var pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == PosNo) ?? new PosMachinesTwo();
  1316. if (pos.BrandId == 1 || pos.BrandId == 3 || pos.BrandId == 6)
  1317. {
  1318. warning += PosNo + ",";
  1319. }
  1320. if (Kind == 1)
  1321. {
  1322. pos.UpFeeFlag = 1;
  1323. pos.UpFeeDate = DateTime.Now;
  1324. pos.UpFeeMan = Operator;
  1325. db.SaveChanges();
  1326. }
  1327. if (Kind == 2)
  1328. {
  1329. pos.DownFeeFlag = 1;
  1330. pos.DownFeeDate = DateTime.Now;
  1331. pos.DownFeeMan = Operator;
  1332. db.SaveChanges();
  1333. }
  1334. if (!userIds.Contains(pos.BuyUserId.ToString()))
  1335. {
  1336. userIds += pos.BuyUserId + ",";
  1337. }
  1338. posIds += pos.Id + ",";
  1339. }
  1340. string[] lists = userIds.Split(new char[] { ',' });
  1341. int times = lists.ToList().Count;
  1342. for (int i = 0; i < times; i++)
  1343. {
  1344. var UserId = lists[i];
  1345. var posInfo = db.PosMachinesTwo.Where(m => posIds.Contains(m.Id.ToString()) && m.BuyUserId == Convert.ToInt32(UserId));
  1346. string snhtml = "<div style='margin-bottom: .48rem;'>";
  1347. foreach (var items in posInfo)
  1348. {
  1349. var mer = db.PosMerchantInfo.FirstOrDefault(m => m.Id == items.BindMerchantId) ?? new PosMerchantInfo();
  1350. var brand = db.KqProducts.FirstOrDefault(m => m.Id == items.BrandId) ?? new KqProducts();
  1351. snhtml += "<div style='margin-bottom: .48rem;'><div class='f12'>商户姓名:" + mer.MerRealName + "</div>";
  1352. snhtml += "<div class='f12'>机具品牌:" + brand.Name + "</div>";
  1353. snhtml += "<div class='f12'>SN:" + items.PosSn + "</div>";
  1354. snhtml += "<div class='f12'>当前费率:0.6%</div>";
  1355. snhtml += "<div class='f12'>费率调整时间:" + items.DownFeeDate + "</div>";
  1356. }
  1357. snhtml += "</div>";
  1358. RedisDbconn.Instance.AddList("MsgPersonalQueue", Newtonsoft.Json.JsonConvert.SerializeObject(new MsgPersonal()
  1359. {
  1360. UserId = Convert.ToInt32(UserId), //创客
  1361. Title = "商户费率变更通知", //标题
  1362. Content = "<div class='f12' style='margin-bottom: .72rem'>您的商户刷卡交易费率已变更成功!</div>" + snhtml, //内容
  1363. Summary = "您的商户刷卡交易费率已变更成功!",
  1364. CreateDate = DateTime.Now,
  1365. }));
  1366. }
  1367. RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
  1368. RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
  1369. }
  1370. }
  1371. catch (Exception ex)
  1372. {
  1373. DoCount = list.Rows.Count;
  1374. tran.Rollback();
  1375. ErrorMsg msg = new ErrorMsg()
  1376. {
  1377. Time = DateTime.Now,
  1378. ErrorContent = ex.ToString(),
  1379. };
  1380. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "BsServerAdminError");
  1381. }
  1382. }
  1383. }
  1384. db.Dispose();
  1385. }
  1386. }
  1387. // return "success|" + SuccessCount;
  1388. }
  1389. }
  1390. }
  1391. }