BalanceOperateService.cs 14 KB

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