CheckBLL.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. using SqlSugar;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using WMS.Info;
  8. using WMS.Info.Models;
  9. namespace WMS.Core.APPBLL
  10. {
  11. public class CheckBLL : AppCoreBLL
  12. {
  13. public ResInfo GetCheckLinesByTray(string trayNo)
  14. {
  15. using (var ctx = SysDbCore.GetDbCtx())
  16. {
  17. var line = ctx.Queryable<BILL_InventoryReportLine>().Where(c => c.F_trayNo == trayNo).ToList();
  18. if (line == null || line.Count < 1)
  19. throw SysExCore.ThrowFailException("未匹配到托盘对应的盘点单号!");
  20. var lines = ctx.Queryable<BILL_InventoryReportLine>().Where(c => c.F_pNo == line.First().F_pNo).ToList();
  21. var statistical = new
  22. {
  23. checkNo = line.First().F_pNo,
  24. checkTotal = lines.Count,
  25. checkedTotal = lines.Where(c => c.F_actualQty > 0).Count(),
  26. notCheckTotal = lines.Where(c => c.F_actualQty == 0).Count()
  27. };
  28. return SysExCore.GetResSucc("查询成功", data: new
  29. {
  30. sumEntity = statistical,
  31. checkList = line
  32. });
  33. }
  34. }
  35. public ResInfo CheckSubmit(CheckSubmitRequest checkRequest)
  36. {
  37. using (var ctx = SysDbCore.GetDbCtx())
  38. {
  39. try
  40. {
  41. ctx.BeginTran();
  42. var checks = ctx.Queryable<BILL_InventoryReport, BILL_InventoryReportLine>((inv, line) => new object[] { JoinType.Inner, inv.F_no == line.F_pNo })
  43. .Where(inv => inv.F_no == checkRequest.CheckNo);
  44. if (checks.Count() < 1)
  45. throw SysExCore.ThrowFailException("未匹配到有效的盘点数据!");
  46. if (checks.Any((inv, line) => inv.F_checkStatus == (int)ECheckStatus.Checkfinish))
  47. throw SysExCore.ThrowFailException("该盘点单已经完成不能重复盘点!");
  48. if (checks.Any((inv, line) => line.F_quantity != line.F_actualQty && line.F_actualQty != 0))
  49. {
  50. ctx.Updateable<BILL_InventoryReport>().SetColumns(it => new BILL_InventoryReport
  51. {
  52. F_checkStatus = (int)ECheckStatus.Checking,
  53. F_editUserNo = LoginUser.UserNo,
  54. F_editTime = DateTime.Now
  55. }).Where(c => c.F_no == checkRequest.CheckNo);
  56. }
  57. else
  58. {
  59. ctx.Updateable<BILL_InventoryReport>().SetColumns(it => new BILL_InventoryReport
  60. {
  61. F_checkStatus = (int)ECheckStatus.Checkfinish,
  62. F_editUserNo = LoginUser.UserNo,
  63. F_editTime = DateTime.Now
  64. }).Where(c => c.F_no == checkRequest.CheckNo).ExecuteCommand();
  65. }
  66. foreach (var item in checkRequest.checkLines)
  67. {
  68. ctx.Updateable<BILL_InventoryReportLine>().SetColumns(it =>
  69. new BILL_InventoryReportLine
  70. {
  71. F_editTime = DateTime.Now,
  72. F_addUserNo = LoginUser.UserNo,
  73. F_actualQty = item.F_actualQty
  74. });
  75. var inv = ctx.Queryable<BILL_INVENTORY>().Where(c => c.F_matNo == item.F_matNo && c.F_trayNo == checkRequest.TrayNo).First();
  76. if (inv.F_quantity != item.F_actualQty)
  77. {
  78. ctx.Updateable<BILL_INVENTORY>().SetColumns(it =>
  79. new BILL_INVENTORY
  80. {
  81. F_editTime = DateTime.Now,
  82. F_addUserNo = LoginUser.UserNo,
  83. F_quantity = item.F_actualQty
  84. }).Where(c => c.F_matNo == inv.F_matNo && c.F_trayNo == inv.F_trayNo).ExecuteCommand();
  85. ctx.Insertable(new BILL_INVENTORYTRANSACTION
  86. {
  87. F_addTime = DateTime.Now,
  88. F_addUserNo = LoginUser.UserNo,
  89. F_batchNo = inv.F_batchNo,
  90. F_boxNo = inv.F_boxNo,
  91. F_matName = inv.F_matName,
  92. F_matNo = inv.F_matNo,
  93. F_matType = inv.F_matType,
  94. F_sourceLockQty = inv.F_lockQty,
  95. F_targetLockQty = inv.F_lockQty,
  96. F_memo = inv.F_memo,
  97. F_projectNo = inv.F_projectNo,
  98. F_sourceTrayNo = inv.F_trayNo,
  99. F_targetTrayNo = checkRequest.TrayNo,
  100. F_warehouseNo = inv.F_warehouseNo,
  101. F_UID = inv.F_uid,
  102. F_sourceQuantity = inv.F_quantity,
  103. F_targetQuantity = item.F_actualQty
  104. }).ExecuteCommand();
  105. }
  106. ctx.Updateable<BASE_LOCATION>().SetColumns(it =>
  107. new BASE_LOCATION
  108. {
  109. F_editTime = DateTime.Now,
  110. F_addUserNo = LoginUser.UserNo,
  111. F_status = (int)EWareCellState.Empty,
  112. F_trayNo = string.Empty,
  113. F_matHeight = default,
  114. F_isBonded = false,
  115. }).Where(c => c.F_trayNo == checkRequest.TrayNo).ExecuteCommand(); ;
  116. }
  117. ctx.CommitTran();
  118. return SysExCore.GetResSucc("盘点成功");
  119. }
  120. catch (Exception)
  121. {
  122. ctx.RollbackTran();
  123. throw;
  124. }
  125. }
  126. }
  127. public ResInfo Entry(ScanCodeRequest reqData)
  128. {
  129. using (var ctx = SysDbCore.GetDbCtx())
  130. {
  131. try
  132. {
  133. if (string.IsNullOrWhiteSpace(reqData?.LocationNo) || string.IsNullOrWhiteSpace(reqData.TrayNo))
  134. throw SysExCore.ThrowFailException("参数不能为空");
  135. var inv = ctx.Queryable<BILL_INVENTORY>().Where(c => c.F_trayNo == reqData.TrayNo).ToList();
  136. if (inv == null)
  137. throw SysExCore.ThrowFailException("未找到托盘信息,请扫码正确的托盘码");
  138. ctx.BeginTran();
  139. var task = new WMS_TASK
  140. {
  141. F_addTime = DateTime.Now,
  142. F_addUserNo = LoginUser.UserNo,
  143. F_editTime = DateTime.Now,
  144. F_trayNo = reqData.TrayNo,
  145. F_posidTo = GetFreePointInfoByType((int)EPointType.RKDFPHWDW).F_no,
  146. F_priority = (int)EPriority.NotUrgent,
  147. F_taskStatus = (int)ETaskStatus.NotExecute,
  148. F_taskType = (int)ETaskComType.InStock,
  149. F_posidFrom = reqData.LocationNo,
  150. F_posidcur = reqData.LocationNo,
  151. F_EquipmentType = (int)EEquipmentType.Convey
  152. };
  153. var entryOrder = new BILL_ENTRYORDER
  154. {
  155. F_no = SerialNumberProvider.Instance.OrderNumber("wms", "RK"),
  156. F_addTime = DateTime.Now,
  157. F_addUserNo = LoginUser.UserNo,
  158. F_editTime = DateTime.Now,
  159. F_locationNo = reqData.LocationNo,
  160. F_orderStatus = (int)EOrderState.New,
  161. F_totalOrderLines = inv.Count,
  162. F_orderType = (int)EEntryOrderType.EntryOrderTypeProduct,
  163. F_trayNo = reqData.TrayNo,
  164. F_warehouseNo = SysSetCore.GetSysSet().DefaultWarehouseNo
  165. };
  166. task.F_orderNo = entryOrder.F_no;
  167. ctx.Insertable(entryOrder).ExecuteCommand();
  168. inv.ToList().ForEach(orderLine =>
  169. {
  170. task.F_orderType = orderLine.F_matType == (int)EMatType.Mat ? (int)ETaskOrderType.EntryOrderTypeMaterial :
  171. orderLine.F_matType == (int)EMatType.Product ? (int)ETaskOrderType.EntryOrderTypeProduct : (int)ETaskOrderType.StockOutOrderTypeTray;
  172. ctx.Insertable(new BILL_ENTRYORDERLINEDETAIL
  173. {
  174. F_addTime = DateTime.Now,
  175. F_addUserNo = LoginUser.UserNo,
  176. F_quantity = orderLine.F_quantity,
  177. F_matNo = orderLine.F_matNo,
  178. F_matName = orderLine.F_matName,
  179. F_matType = orderLine.F_matType,
  180. F_boxNo = orderLine.F_boxNo,
  181. F_trayNo = orderLine.F_trayNo,
  182. F_pNo = entryOrder.F_no,
  183. F_batchNo = orderLine.F_batchNo,
  184. F_UID = orderLine.F_uid
  185. }).ExecuteCommand();
  186. });
  187. ctx.Insertable(task).ExecuteCommand();
  188. ////更新货位
  189. //var upd = ctx.Updateable<BASE_LOCATION>().SetColumns(it => new BASE_LOCATION()
  190. //{
  191. // F_status = (int)EWareCellState.In,
  192. // F_editTime = DateTime.Now,
  193. // F_editUserNo = LoginUser.UserNo,
  194. // F_trayNo = reqData.TrayNo
  195. //}).Where(w => w.F_no == task.F_posidTo).ExecuteCommand();
  196. //if (upd <= 0)
  197. // throw SysExCore.ThrowFailException("更新货位状态失败,请重试。");
  198. ctx.CommitTran();
  199. return SysExCore.GetResSucc("盘点入库任务生成成功");
  200. }
  201. catch (Exception ex)
  202. {
  203. ctx.RollbackTran();
  204. throw ex;
  205. }
  206. }
  207. }
  208. }
  209. }