ExcelHelper.cs 111 KB

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