BalanceSearchService.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. using DapperORMCore.Context.DataContext;
  2. using DapperORMCore.Model.CoreModel;
  3. using DapperORMCore.Repository.IRepositorys;
  4. using Microsoft.Extensions.Configuration;
  5. using NXWMS.IService.NXPDA.Balance;
  6. using NXWMS.Model.AppModels.Condition.NXPDA.Balance;
  7. using NXWMS.Model.AppModels.Result.NXPDA.Balance;
  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(IBalanceSearchService), InjectType.Scope)]
  21. public class BalanceSearchService : ServiceBase, IBalanceSearchService
  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 BalanceSearchService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository)
  36. {
  37. this._dataContext = dataRepositoryContext;
  38. this._configuration = configuration;
  39. this._iSQLNodeRepository = iSQLNodeRepository;
  40. }
  41. public OperateResultInfo<BalanceResult> GetBalanceList(BalanceCondition info)
  42. {
  43. var sql = @"SELECT MaterielCode=MATERIEL_CODE,MaterielName=MATERIEL_NAME,
  44. QTY,UnitCode=UNIT_CODE,BatchNo=BATCH_NO,BinCode=BIN_CODE FROM VW_WMS_STK_BALANCE_DTL where MATERIEL_CODE=@MaterielCode and BALANCE_STATUS=55 ";
  45. var results = new DataRepository<object>(_dataContext).Query<BalanceDTLResult>(sql,new { MaterielCode=info.MaterielCode });
  46. return SuccessStatus(new BalanceResult
  47. {
  48. Details = results,
  49. QTY = results.Sum(s => s.QTY),
  50. TypeQTY = results.Select(s => s.TypeCode).Distinct().Count(),
  51. });
  52. }
  53. public OperateResultInfo<InventoryPalletResult> GetInventoryPalletList(InventoryPalletCondition info)
  54. {
  55. var sql = $@"SELECT WMS_STK_INVENTORY_DTL.INVENTORY_DTL_ID, VW_WMS_STK_TRAY_DTL.MATERIEL_BARCODE,WMS_STK_INVENTORY.INVENTORY_ID,MaterielCode=WMS_STK_INVENTORY_DTL.MATERIEL_CODE,MaterielName=WMS_STK_INVENTORY_DTL.MATERIEL_NAME,
  56. StockQTY = WMS_STK_INVENTORY_DTL.QTY,ActualQTY = WMS_STK_INVENTORY_DTL.ACTUAL_INVENTORY_QTY,
  57. TwoVessel = BAS_PACKAGE.PACKAGE_NAME
  58. FROM dbo.WMS_STK_INVENTORY
  59. LEFT JOIN WMS_STK_INVENTORY_DTL ON WMS_STK_INVENTORY.INVENTORY_ID = WMS_STK_INVENTORY_DTL.INVENTORY_ID
  60. LEFT JOIN BAS_PACKAGE ON BAS_PACKAGE.PACKAGE_CODE = WMS_STK_INVENTORY_DTL.PACKAGE_CODE
  61. LEFT JOIN BAS_MATERIEL ON WMS_STK_INVENTORY_DTL.MATERIEL_CODE = BAS_MATERIEL.MATERIEL_CODE
  62. LEFT JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE = BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE
  63. LEFT JOIN
  64. VW_WMS_STK_TRAY_DTL ON VW_WMS_STK_TRAY_DTL.TRAY_CODE = WMS_STK_INVENTORY_DTL.TRAY_CODE
  65. WHERE
  66. WMS_STK_INVENTORY.INVENTORY_STATUS in (11,88) AND
  67. WMS_STK_INVENTORY_DTL.INVENTORY_DTL_STATUS in (11,88) AND
  68. WMS_STK_INVENTORY_DTL.PALLET_CODE = '{info.PalletCode}'
  69. AND EXISTS(SELECT * FROM WMS_STK_INVENTORY_DTL A WHERE A.INVENTORY_DTL_STATUS=11 AND A.INVENTORY_ID=WMS_STK_INVENTORY.INVENTORY_ID)";
  70. var results = new DataRepository<InventoryPalletDTLResult>(_dataContext).Query(sql);
  71. return SuccessStatus(new InventoryPalletResult
  72. {
  73. Details = results.ToList(),
  74. IsEffective = results.Any(),
  75. });
  76. }
  77. public OperateResultInfo<InventoryBarCodeResult> GetInventoryBarCodeInfo(InventoryBarCodeCondition info)
  78. {
  79. var sql = $@"SELECT MaterielCode=WMS_STK_INVENTORY_DTL.MATERIEL_CODE,
  80. MaterielName = WMS_STK_INVENTORY_DTL.MATERIEL_NAME,SpecsModel = BAS_MATERIEL.SPECS_MODEL,
  81. BatchNo = WMS_STK_INVENTORY_DTL.BATCH_NO,ArrivalQTY = WMS_STK_INVENTORY_DTL.ACTUAL_INVENTORY_QTY,
  82. ReceiptQTY = WMS_STK_INVENTORY_DTL.QTY,TwoVessel = BAS_PACKAGE.PACKAGE_NAME,
  83. BinCode = WMS_STK_INVENTORY_DTL.BIN_CODE,BinName = WMS_STK_INVENTORY_DTL.BIN_NAME,
  84. UnitCode = WMS_STK_INVENTORY_DTL.UNIT_CODE,UnitName = BAS_UNIT.UNIT_NAME,Remark = WMS_STK_INVENTORY_DTL.DESCRIBE,
  85. InventoryDtlId = WMS_STK_INVENTORY_DTL.INVENTORY_DTL_ID
  86. FROM dbo.WMS_STK_INVENTORY
  87. LEFT JOIN SYS_USER ON WMS_STK_INVENTORY.CREATE_BY = SYS_USER.USER_ID
  88. LEFT JOIN SYS_USER USER1 ON WMS_STK_INVENTORY.UPDATE_BY = SYS_USER.USER_ID
  89. LEFT JOIN WMS_STK_INVENTORY_DTL ON WMS_STK_INVENTORY.INVENTORY_ID = WMS_STK_INVENTORY_DTL.INVENTORY_ID
  90. LEFT JOIN BAS_PACKAGE ON BAS_PACKAGE.PACKAGE_CODE = WMS_STK_INVENTORY_DTL.PACKAGE_CODE
  91. LEFT JOIN BAS_MATERIEL ON WMS_STK_INVENTORY_DTL.MATERIEL_CODE = BAS_MATERIEL.MATERIEL_CODE
  92. LEFT JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE = BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE
  93. LEFT JOIN BAS_UNIT ON BAS_UNIT.UNIT_CODE=WMS_STK_INVENTORY_DTL.UNIT_CODE
  94. LEFT JOIN
  95. VW_WMS_STK_TRAY_DTL ON VW_WMS_STK_TRAY_DTL.TRAY_CODE=WMS_STK_INVENTORY_DTL.TRAY_CODE
  96. AND VW_WMS_STK_TRAY_DTL.MATERIEL_BARCODE=WMS_STK_INVENTORY_DTL.MATERIEL_BARCODE
  97. WHERE
  98. WMS_STK_INVENTORY.INVENTORY_STATUS=55 AND
  99. WMS_STK_INVENTORY_DTL.INVENTORY_DTL_STATUS=55 AND
  100. WMS_STK_INVENTORY_DTL.MATERIEL_BARCODE = '{info.MaterielBarCode}'
  101. AND EXISTS(SELECT * FROM WMS_STK_INVENTORY_DTL A WHERE A.INVENTORY_DTL_STATUS=88 AND A.INVENTORY_ID=WMS_STK_INVENTORY.INVENTORY_ID
  102. AND A.ACTUAL_INVENTORY_QTY!=A.QTY) ";
  103. var results = new DataRepository<InventoryBarCodeResult>(_dataContext).Query(sql).FirstOrDefault();
  104. return SuccessStatus(results);
  105. }
  106. public OperateResultInfo<DifferenceInventoryPalletResult> GetDifferenceInventoryPalletList(DifferenceInventoryPalletCondition info)
  107. {
  108. var sql = $@"SELECT MaterielCode=WMS_STK_INVENTORY_DTL.MATERIEL_CODE,MaterielName=WMS_STK_INVENTORY_DTL.MATERIEL_NAME,
  109. StockQTY = WMS_STK_INVENTORY_DTL.QTY,ActualQTY = WMS_STK_INVENTORY_DTL.ACTUAL_INVENTORY_QTY,
  110. TwoVessel = BAS_PACKAGE.PACKAGE_NAME
  111. FROM dbo.WMS_STK_INVENTORY
  112. LEFT JOIN SYS_USER ON WMS_STK_INVENTORY.CREATE_BY = SYS_USER.USER_ID
  113. LEFT JOIN SYS_USER USER1 ON WMS_STK_INVENTORY.UPDATE_BY = SYS_USER.USER_ID
  114. LEFT JOIN WMS_STK_INVENTORY_DTL ON WMS_STK_INVENTORY.INVENTORY_ID = WMS_STK_INVENTORY_DTL.INVENTORY_ID
  115. LEFT JOIN BAS_PACKAGE ON BAS_PACKAGE.PACKAGE_CODE = WMS_STK_INVENTORY_DTL.PACKAGE_CODE
  116. LEFT JOIN BAS_MATERIEL ON WMS_STK_INVENTORY_DTL.MATERIEL_CODE = BAS_MATERIEL.MATERIEL_CODE
  117. LEFT JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE = BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE
  118. LEFT JOIN
  119. VW_WMS_STK_TRAY_DTL ON VW_WMS_STK_TRAY_DTL.TRAY_CODE = WMS_STK_INVENTORY_DTL.TRAY_CODE
  120. AND VW_WMS_STK_TRAY_DTL.MATERIEL_BARCODE = WMS_STK_INVENTORY_DTL.MATERIEL_BARCODE
  121. WHERE
  122. WMS_STK_INVENTORY.INVENTORY_STATUS=88 AND
  123. WMS_STK_INVENTORY_DTL.INVENTORY_DTL_STATUS=88 AND
  124. WMS_STK_INVENTORY_DTL.PALLET_CODE = '{info.PallectCode}'
  125. AND EXISTS(SELECT * FROM WMS_STK_INVENTORY_DTL A WHERE A.INVENTORY_DTL_STATUS=88 AND A.INVENTORY_ID=WMS_STK_INVENTORY.INVENTORY_ID)";
  126. //明细存在第一次盘点完成状态,再次盘点就是差异盘点
  127. var results = new DataRepository<DifferenceInventoryPalletDTLResult>(_dataContext).Query(sql);
  128. return SuccessStatus(new DifferenceInventoryPalletResult
  129. {
  130. Details = results.ToList(),
  131. IsEffective = results.Any(),
  132. });
  133. }
  134. public OperateResultInfo<DifferenceInventoryBarCodeResult> GetDifferenceInventoryBarCodeInfo(DifferenceInventoryBarCodeCondition info)
  135. {
  136. var sql = $@"SELECT MaterielCode=WMS_STK_INVENTORY_DTL.MATERIEL_CODE,
  137. MaterielName = WMS_STK_INVENTORY_DTL.MATERIEL_NAME,SpecsModel = BAS_MATERIEL.SPECS_MODEL,
  138. BatchNo = WMS_STK_INVENTORY_DTL.BATCH_NO,ArrivalQTY = WMS_STK_INVENTORY_DTL.ACTUAL_INVENTORY_QTY,
  139. ReceiptQTY = WMS_STK_INVENTORY_DTL.QTY,TwoVessel = BAS_PACKAGE.PACKAGE_NAME,
  140. BinCode = WMS_STK_INVENTORY_DTL.BIN_CODE,BinName = WMS_STK_INVENTORY_DTL.BIN_NAME,
  141. UnitCode = WMS_STK_INVENTORY_DTL.UNIT_CODE,UnitName = BAS_UNIT.UNIT_NAME,Remark = WMS_STK_INVENTORY_DTL.DESCRIBE,
  142. InventoryDtlId = WMS_STK_INVENTORY_DTL.INVENTORY_DTL_ID
  143. FROM dbo.WMS_STK_INVENTORY
  144. LEFT JOIN SYS_USER ON WMS_STK_INVENTORY.CREATE_BY = SYS_USER.USER_ID
  145. LEFT JOIN SYS_USER USER1 ON WMS_STK_INVENTORY.UPDATE_BY = SYS_USER.USER_ID
  146. LEFT JOIN WMS_STK_INVENTORY_DTL ON WMS_STK_INVENTORY.INVENTORY_ID = WMS_STK_INVENTORY_DTL.INVENTORY_ID
  147. LEFT JOIN BAS_PACKAGE ON BAS_PACKAGE.PACKAGE_CODE = WMS_STK_INVENTORY_DTL.PACKAGE_CODE
  148. LEFT JOIN BAS_MATERIEL ON WMS_STK_INVENTORY_DTL.MATERIEL_CODE = BAS_MATERIEL.MATERIEL_CODE
  149. LEFT JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE = BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE
  150. LEFT JOIN BAS_UNIT ON BAS_UNIT.UNIT_CODE=WMS_STK_INVENTORY_DTL.UNIT_CODE
  151. LEFT JOIN
  152. VW_WMS_STK_TRAY_DTL ON VW_WMS_STK_TRAY_DTL.TRAY_CODE=WMS_STK_INVENTORY_DTL.TRAY_CODE
  153. AND VW_WMS_STK_TRAY_DTL.MATERIEL_BARCODE=WMS_STK_INVENTORY_DTL.MATERIEL_BARCODE
  154. WHERE
  155. WMS_STK_INVENTORY.INVENTORY_STATUS=88 AND
  156. WMS_STK_INVENTORY_DTL.INVENTORY_DTL_STATUS=88 AND
  157. WMS_STK_INVENTORY_DTL.MATERIEL_BARCODE = '{info.MaterielBarCode}'
  158. AND EXISTS(SELECT * FROM WMS_STK_INVENTORY_DTL A WHERE A.INVENTORY_DTL_STATUS=88 AND A.INVENTORY_ID=WMS_STK_INVENTORY.INVENTORY_ID
  159. AND A.ACTUAL_INVENTORY_QTY!=A.QTY) ";
  160. //明细存在第一次盘点完成状态,并且实际盘点数量不等于库存数量的. 88状态 在第一次盘点完成状态下进行差异盘点。
  161. var results = new DataRepository<DifferenceInventoryBarCodeResult>(_dataContext).Query(sql).FirstOrDefault();
  162. return SuccessStatus(results);
  163. }
  164. }
  165. }