OutStockOperateService.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. using DapperORMCore.Context.DataContext;
  2. using DapperORMCore.Dapper.BaseModel;
  3. using DapperORMCore.Model.CoreModel;
  4. using DapperORMCore.Repository.IRepositorys;
  5. using Microsoft.Extensions.Configuration;
  6. using NXWMS.DataAccess.Entity;
  7. using NXWMS.IService.NXPDA.InStock;
  8. using NXWMS.IService.NXPDA.OutStock;
  9. using NXWMS.IService.NXWMS.OutStock;
  10. using NXWMS.Model.AppModels.Condition.Balance;
  11. using NXWMS.Model.AppModels.Condition.Base;
  12. using NXWMS.Model.AppModels.Condition.NXPDA.InStock;
  13. using NXWMS.Model.AppModels.Condition.NXPDA.OutStock;
  14. using NXWMS.Model.AppModels.Result.Balance;
  15. using NXWMS.Model.AppModels.Result.Base;
  16. using NXWMS.Model.Common;
  17. using NXWMS.Service;
  18. using NXWMS.String.Enums;
  19. using System;
  20. using System.Collections.Generic;
  21. using System.Linq;
  22. using System.Text;
  23. using System.Threading.Tasks;
  24. using WestDistance.DapperORM.Repository.Repositorys;
  25. namespace NXWMS.Service.NXPDA.OutStock
  26. {
  27. /// <summary>
  28. /// 出库操作接口
  29. /// </summary>
  30. [AutoInject(typeof(IOutStockOperateService), InjectType.Scope)]
  31. public class OutStockOperateService : ServiceBase, IOutStockOperateService
  32. {
  33. /// <summary>
  34. /// 系统操作仓储中转
  35. /// </summary>
  36. private IDataRepositoryContext _dataContext;
  37. /// <summary>
  38. /// SQL节点仓储
  39. /// </summary>
  40. private ISQLNodeRepository _iSQLNodeRepository;
  41. /// <summary>
  42. /// 配置
  43. /// </summary>
  44. private IConfiguration _configuration;
  45. private IWmsOutPutDownService _wmsOutPutDownService;
  46. public OutStockOperateService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, IWmsOutPutDownService wmsOutPutDownService, ISQLNodeRepository iSQLNodeRepository)
  47. {
  48. this._dataContext = dataRepositoryContext;
  49. this._configuration = configuration;
  50. this._iSQLNodeRepository = iSQLNodeRepository;
  51. this._wmsOutPutDownService = wmsOutPutDownService;
  52. }
  53. public OperateResultInfo CommitArrivalNoticeDetail(CommitArrivalNoticeDetailCondition info)
  54. {
  55. if (string.IsNullOrWhiteSpace(info.MaterielBarCode))
  56. {
  57. return FailStatus("参数错误!");
  58. }
  59. try
  60. {
  61. _dataContext.BeginTran();
  62. var result = new DataRepository<WMS_OUT_INVOICE_DTL>(_dataContext).Query("MATERIEL_BARCODE", info.MaterielBarCode.ToString()).FirstOrDefault();
  63. if (result == null)
  64. {
  65. throw new Exception("物品条码不存在,请检查!");
  66. }
  67. var binResult = new DataRepository<BAS_BIN>(_dataContext).Query("BIN_CODE", info.BinCode.ToString()).FirstOrDefault();
  68. if (binResult == null)
  69. {
  70. throw new Exception("库位编码不存在,请检查!");
  71. }
  72. var userResult = new DataRepository<SYS_USER>(_dataContext).Query("USER_ID", info.OperationUserId.ToString()).FirstOrDefault();
  73. if (userResult == null)
  74. {
  75. throw new Exception("用户编码不存在,请检查!");
  76. }
  77. var materielResult = new DataRepository<BAS_MATERIEL>(_dataContext).Query("MATERIEL_CODE", result.MATERIEL_CODE.ToString()).FirstOrDefault();
  78. if (materielResult == null)
  79. {
  80. throw new Exception("物料编码不存在,请检查!");
  81. }
  82. var now = DateTime.Now;
  83. result.INVOICE_DTL_STATUS = 55;
  84. result.UPDATE_TIME = now;
  85. result.UPDATE_BY = info.OperationUserId;
  86. new DataRepository<WMS_OUT_INVOICE_DTL>(_dataContext).Update(result, "RECEIPT_DTL_ID", "NEWID");
  87. //确认托盘号
  88. var receiptResult = new DataRepository<WMS_OUT_INVOICE_RECORD>(_dataContext).
  89. Query("MATERIEL_BARCODE", info.MaterielBarCode.ToString()).FirstOrDefault();
  90. var invoiceResult = new DataRepository<WMS_OUT_INVOICE>(_dataContext).Query("INVOICE_ID",
  91. receiptResult.INVOICE_ID.ToString()).FirstOrDefault();
  92. if (invoiceResult == null)
  93. {
  94. throw new Exception("收货单号不存在,请检查!");
  95. }
  96. invoiceResult.INVOICE_STATUS = 55;
  97. invoiceResult.UPDATE_BY = info.OperationUserId;
  98. invoiceResult.UPDATE_TIME = now;
  99. new DataRepository<WMS_OUT_INVOICE>(_dataContext).Update(result, "PUTAWAY_ID", "NEWID");
  100. _dataContext.Commit();
  101. return SuccessStatus();
  102. }
  103. catch (Exception ex)
  104. {
  105. _dataContext.Rollback();
  106. return FailStatus("提交失败!" + ex.Message);
  107. }
  108. }
  109. public OperateResultInfo SaveArrivalNotice(SaveArrivalNoticeDetailCondition info)
  110. {
  111. if (string.IsNullOrWhiteSpace(info.PalletCode))
  112. {
  113. return FailStatus("参数错误!");
  114. }
  115. //确认托盘号
  116. var receiptResult = new DataRepository<WMS_OUT_INVOICE_RECORD>(_dataContext).
  117. Query("PALLET_CODE", info.PalletCode.ToString()).
  118. Where(s => s.INVOICE_RECORD_STATUS == 0).
  119. FirstOrDefault();
  120. var invoiceResult = new DataRepository<WMS_OUT_INVOICE>(_dataContext).Query("INVOICE_ID",
  121. receiptResult.INVOICE_ID.ToString()).FirstOrDefault();
  122. if (invoiceResult.INVOICE_STATUS >= 99)
  123. {
  124. return FailStatus("单据状态已经变更,当前所有操作失效!");
  125. }
  126. try
  127. {
  128. _dataContext.BeginTran();
  129. var now = DateTime.Now;
  130. var ids = info.MaterielBarCodes.Split(',');
  131. var affterCount = 0;
  132. foreach (var item in ids)
  133. {
  134. var resultTemp = new DataRepository<WMS_OUT_INVOICE_DTL>(_dataContext).Query("MATERIEL_BARCODE", item.ToString()).FirstOrDefault();
  135. if (resultTemp == null)
  136. {
  137. throw new Exception("收货明细单状态出现变更,当前操作失效 " + item.ToString());
  138. }
  139. resultTemp.INVOICE_DTL_STATUS = 99;
  140. resultTemp.UPDATE_BY = info.OperationUserId;
  141. resultTemp.UPDATE_TIME = now;
  142. affterCount = affterCount + new DataRepository<WMS_OUT_INVOICE_DTL>(_dataContext).Update(resultTemp, "INVOICE_DTL_ID", "NEWID");
  143. }
  144. if (affterCount != ids.Length)
  145. {
  146. _dataContext.Rollback();
  147. return FailStatus("数据操作失败!");
  148. }
  149. _dataContext.Commit();
  150. if (!new DataRepository<WMS_OUT_INVOICE_DTL>(_dataContext).Query("INVOICE_ID", invoiceResult.INVOICE_ID.ToString()).
  151. Where(s => s.INVOICE_DTL_STATUS != 99).Any())
  152. {
  153. invoiceResult.INVOICE_STATUS = 99;
  154. invoiceResult.UPDATE_BY = info.OperationUserId;
  155. invoiceResult.UPDATE_TIME = now;
  156. new DataRepository<WMS_OUT_INVOICE>(_dataContext).Update(invoiceResult, "INVOICE_ID", "NEWID");
  157. }
  158. return SuccessStatus();
  159. }
  160. catch (Exception ex)
  161. {
  162. _dataContext.Rollback();
  163. return FailStatus("提交失败!" + ex.Message);
  164. }
  165. }
  166. public OperateResultInfo CommitPutDownDetail(CommitPutDownDetailCondition info)
  167. {
  168. if (string.IsNullOrWhiteSpace(info.MaterielBarCode))
  169. {
  170. return FailStatus("参数错误!");
  171. }
  172. try
  173. {
  174. _dataContext.BeginTran();
  175. var result = new DataRepository<WMS_OUT_PUTDOWN_DTL>(_dataContext).Query("MATERIEL_BARCODE", info.MaterielBarCode.ToString()).FirstOrDefault();
  176. if (result == null)
  177. {
  178. throw new Exception("物品条码不存在,请检查!");
  179. }
  180. var binResult = new DataRepository<BAS_BIN>(_dataContext).Query("BIN_CODE", info.BinCode.ToString()).FirstOrDefault();
  181. if (binResult == null)
  182. {
  183. throw new Exception("库位编码不存在,请检查!");
  184. }
  185. var userResult = new DataRepository<SYS_USER>(_dataContext).Query("USER_ID", info.OperationUserId.ToString()).FirstOrDefault();
  186. if (userResult == null)
  187. {
  188. throw new Exception("用户编码不存在,请检查!");
  189. }
  190. var materielResult = new DataRepository<BAS_MATERIEL>(_dataContext).Query("MATERIEL_CODE", result.MATERIEL_CODE.ToString()).FirstOrDefault();
  191. if (materielResult == null)
  192. {
  193. throw new Exception("物料编码不存在,请检查!");
  194. }
  195. var now = DateTime.Now;
  196. result.PUTDOWN_DTL_STATUS = 55;
  197. result.UPDATE_TIME = now;
  198. result.UPDATE_BY = info.OperationUserId;
  199. new DataRepository<WMS_OUT_PUTDOWN_DTL>(_dataContext).Update(result, "PUTDOWN_DTL_ID", "NEWID");
  200. //确认托盘号
  201. var receiptResult = new DataRepository<WMS_OUT_PUTDOWN_DTL>(_dataContext).
  202. Query("MATERIEL_BARCODE", info.MaterielBarCode.ToString()).FirstOrDefault();
  203. var invoiceResult = new DataRepository<WMS_OUT_PUTDOWN>(_dataContext).Query("PUTDOWN_ID",
  204. receiptResult.PUTDOWN_ID.ToString()).FirstOrDefault();
  205. if (invoiceResult == null)
  206. {
  207. throw new Exception("单号不存在,请检查!");
  208. }
  209. invoiceResult.PUTDOWN_STATUS = 55;
  210. invoiceResult.UPDATE_BY = info.OperationUserId;
  211. invoiceResult.UPDATE_TIME = now;
  212. new DataRepository<WMS_OUT_PUTDOWN>(_dataContext).Update(result, "PUTDOWN_ID", "NEWID");
  213. _dataContext.Commit();
  214. return SuccessStatus();
  215. }
  216. catch (Exception ex)
  217. {
  218. _dataContext.Rollback();
  219. return FailStatus("提交失败!" + ex.Message);
  220. }
  221. }
  222. public OperateResultInfo SavePutDown(SavePutDownDetailCondition info)
  223. {
  224. //确认托盘号
  225. var receiptResult = new DataRepository<WMS_OUT_PUTDOWN_DTL>(_dataContext).
  226. Query("PALLET_CODE", info.PalletCode.ToString()).
  227. Where(s => s.PUTDOWN_DTL_STATUS == 0).
  228. FirstOrDefault();
  229. var invoiceResult = new DataRepository<WMS_OUT_PUTDOWN>(_dataContext).Query("INVOICE_ID",
  230. receiptResult.PUTDOWN_ID.ToString()).FirstOrDefault();
  231. if (invoiceResult.PUTDOWN_STATUS >= 99)
  232. {
  233. return FailStatus("单据状态已经变更,当前所有操作失效!");
  234. }
  235. //TODO这里需要加上库存变更,没有加上!
  236. try
  237. {
  238. _dataContext.BeginTran();
  239. var now = DateTime.Now;
  240. var ids = info.MaterielBarCodes.Split(',');
  241. var affterCount = 0;
  242. foreach (var item in ids)
  243. {
  244. var resultTemp = new DataRepository<WMS_OUT_PUTDOWN_DTL>(_dataContext).Query("MATERIEL_BARCODE", item.ToString()).FirstOrDefault();
  245. if (resultTemp == null)
  246. {
  247. throw new Exception("明细单状态出现变更,当前操作失效 " + item.ToString());
  248. }
  249. resultTemp.PUTDOWN_DTL_STATUS = 99;
  250. resultTemp.UPDATE_BY = info.OperationUserId;
  251. resultTemp.UPDATE_TIME = now;
  252. affterCount = affterCount + new DataRepository<WMS_OUT_PUTDOWN_DTL>(_dataContext).Update(resultTemp, "PUTDOWN_DTL_ID", "NEWID");
  253. }
  254. if (affterCount != ids.Length)
  255. {
  256. _dataContext.Rollback();
  257. return FailStatus("数据操作失败!");
  258. }
  259. _dataContext.Commit();
  260. if (!new DataRepository<WMS_OUT_PUTDOWN_DTL>(_dataContext).Query("PUTDOWN_ID", invoiceResult.PUTDOWN_ID.ToString()).
  261. Where(s => s.PUTDOWN_DTL_STATUS != 99).Any())
  262. {
  263. invoiceResult.PUTDOWN_STATUS = 99;
  264. invoiceResult.UPDATE_BY = info.OperationUserId;
  265. invoiceResult.UPDATE_TIME = now;
  266. new DataRepository<WMS_OUT_PUTDOWN>(_dataContext).Update(invoiceResult, "PUTDOWN_ID", "NEWID");
  267. }
  268. return SuccessStatus();
  269. }
  270. catch (Exception ex)
  271. {
  272. _dataContext.Rollback();
  273. return FailStatus("提交失败!" + ex.Message);
  274. }
  275. }
  276. public OperateResultInfo ManualPutDownPallet(string PutDownCode, string BinCode)
  277. {
  278. var putDow = _wmsOutPutDownService.GetWmsOutPutDownDtlListForNo(PutDownCode).Data;
  279. putDow.SBIN_CODE = BinCode;
  280. return _wmsOutPutDownService.ManualPutDownPallet(putDow, PutDownMethodsEnum.PDA手动下架);
  281. }
  282. }
  283. }