ChangePosTimer.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using System.Linq;
  6. using Microsoft.Extensions.Hosting;
  7. using MySystem;
  8. using MySystem.PxcModels;
  9. using LitJson;
  10. using Library;
  11. public class ChangePosTimer
  12. {
  13. public readonly static ChangePosTimer Instance = new ChangePosTimer();
  14. private ChangePosTimer()
  15. {
  16. }
  17. public void Start()
  18. {
  19. Thread th = new Thread(DoWorks);
  20. th.IsBackground = true;
  21. th.Start();
  22. }
  23. private void DoWorks()
  24. {
  25. while (true)
  26. {
  27. string content = RedisDbconn.Instance.RPop<string>("ChangePosTimerQueue");
  28. if (!string.IsNullOrEmpty(content))
  29. {
  30. JsonData jsonObj = JsonMapper.ToObject(content);
  31. string OldSnNum = jsonObj["OldSn"].ToString();
  32. string NewSnNum = jsonObj["NewSn"].ToString();
  33. string MerNo = jsonObj["MerNo"].ToString();
  34. int ChangeId = int.Parse(jsonObj["ChangeId"].ToString());
  35. WebCMSEntities db = new WebCMSEntities();
  36. MachineForSnNo oldForSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == OldSnNum) ?? new MachineForSnNo();
  37. MachineForSnNo newForSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == NewSnNum) ?? new MachineForSnNo();
  38. PosMachinesTwo oldpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == oldForSnNo.SnId);
  39. if (oldpos == null)
  40. {
  41. return;
  42. }
  43. if (oldpos.BindingState != 1)
  44. {
  45. return;
  46. }
  47. PosMachinesTwo newpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == newForSnNo.SnId);
  48. if (oldpos == null)
  49. {
  50. return;
  51. }
  52. KqProducts oldPosBrand = db.KqProducts.FirstOrDefault(m => m.Id == oldpos.BrandId) ?? new KqProducts();
  53. KqProducts newPosBrand = db.KqProducts.FirstOrDefault(m => m.Id == newpos.BrandId) ?? new KqProducts();
  54. PosMerchantInfo merchant = new PosMerchantInfo();
  55. if (!string.IsNullOrEmpty(MerNo))
  56. {
  57. merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo) ?? new PosMerchantInfo();
  58. }
  59. else
  60. {
  61. merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == oldpos.BindMerchantId) ?? new PosMerchantInfo();
  62. }
  63. newpos.BindMerchantId = merchant.Id;
  64. newpos.BuyUserId = oldpos.BuyUserId;
  65. newpos.UserId = oldpos.UserId;
  66. newpos.RecycEndDate = oldpos.RecycEndDate;
  67. newpos.ScanQrTrade = oldpos.ScanQrTrade;
  68. newpos.DebitCardTrade = oldpos.DebitCardTrade;
  69. newpos.CreditTrade = oldpos.CreditTrade;
  70. newpos.PosSnType = oldpos.PosSnType;
  71. newpos.TransferTime = oldpos.TransferTime;
  72. newpos.IsPurchase = oldpos.IsPurchase;
  73. newpos.BindingState = oldpos.BindingState;
  74. newpos.ActivationState = oldpos.ActivationState;
  75. newpos.BindingTime = oldpos.BindingTime;
  76. newpos.ActivationTime = oldpos.ActivationTime;
  77. bool checkActReward = db.ActiveReward.Any(m => m.KqMerNo == merchant.KqMerNo);
  78. if (!checkActReward)
  79. {
  80. newpos.SeoKeyword = oldpos.SeoKeyword;
  81. }
  82. oldpos.UserId = 0;
  83. MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.KqMerNo);
  84. if (forMerNo != null)
  85. {
  86. forMerNo.SnId = newpos.Id;
  87. }
  88. merchant.KqSnNo = NewSnNum;
  89. // 金控电签售后换新仓 ID:762 仓库编号:S0000762
  90. // 开店宝电签售后换新仓 ID:763 仓库编号:S0000763
  91. // 金控大POS售后换新仓 ID:764 仓库编号:S0000764
  92. // 就机具归回售后仓库
  93. if (oldpos.BrandId == 1)
  94. {
  95. oldpos.StoreId = 762;
  96. }
  97. else if (oldpos.BrandId == 2)
  98. {
  99. oldpos.StoreId = 763;
  100. }
  101. else if (oldpos.BrandId == 3)
  102. {
  103. oldpos.StoreId = 764;
  104. }
  105. MachineChange change = db.MachineChange.FirstOrDefault(m => m.Id == ChangeId) ?? new MachineChange();
  106. StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == oldpos.StoreId) ?? new StoreHouse();
  107. StoreStockChange query = db.StoreStockChange.Add(new StoreStockChange()
  108. {
  109. CreateDate = DateTime.Now,
  110. StoreId = oldpos.StoreId, //仓库
  111. BrandId = oldpos.BrandId, //产品类型
  112. ProductName = RelationClass.GetKqProductBrandInfo(oldpos.BrandId), //产品名称
  113. ChangeNo = change.ChangeNo, //变更单号
  114. TransType = 11, //交易类型
  115. SnNo = oldpos.PosSn, //SN编号
  116. SnType = oldpos.PosSnType, //SN机具类型
  117. StockOpDirect = 1, //库存操作方向
  118. DeviceType = oldpos.DeviceType, //设备类型
  119. FromUserId = store.UserId, //出货人
  120. FromDate = DateTime.Now, //出库时间
  121. ToUserId = change.UserId, //收货人
  122. ToStoreId = oldpos.StoreId, //退货收货仓库
  123. }).Entity;
  124. StoreChangeHistory history = db.StoreChangeHistory.Add(new StoreChangeHistory()
  125. {
  126. CreateDate = DateTime.Now,
  127. UserId = store.UserId, //创客
  128. BrandId = oldpos.BrandId, //产品类型
  129. ChangeRecordNo = change.ChangeNo, //变更记录单号
  130. TransType = 2, //交易类型
  131. SnNo = oldpos.PosSn, //SN编号
  132. SnType = oldpos.PosSnType, //SN机具类型
  133. StockOpDirect = 1, //库存操作方向
  134. DeviceVendor = oldpos.DeviceName, //设备厂商
  135. DeviceModel = oldpos.DeviceKind, //设备型号
  136. DeviceType = oldpos.DeviceType, //设备类型
  137. FromUserId = store.UserId, //出货创客
  138. FromDate = DateTime.Now, //出库时间
  139. SourceStoreId = oldpos.SourceStoreId, //源仓库
  140. StoreId = oldpos.StoreId, //仓库
  141. }).Entity;
  142. if (store != null)
  143. {
  144. store.LaveNum += 1;
  145. }
  146. db.SaveChanges();
  147. db.Dispose();
  148. }
  149. else
  150. {
  151. Thread.Sleep(5000);
  152. }
  153. }
  154. }
  155. }