BalanceSearchService.cs 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. using DapperORMCore.Context.DataContext;
  2. using DapperORMCore.Model.CoreModel;
  3. using DapperORMCore.Repository.IRepositorys;
  4. using DapperORMCore.String.Consts;
  5. using Microsoft.Extensions.Configuration;
  6. using NXWMS.IService.NXWMS.Balance;
  7. using NXWMS.Model.AppModels.Condition.Balance;
  8. using NXWMS.Model.AppModels.Result.Balance;
  9. using NXWMS.Model.AppModels.Result.Base;
  10. using NXWMS.Model.Common;
  11. using NXWMS.String.Enums;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Linq;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. using WestDistance.DapperORM.Repository.Repositorys;
  18. namespace NXWMS.Service.NXWMS.Balance
  19. {
  20. /// <summary>
  21. /// 库存查询
  22. /// </summary>
  23. [AutoInject(typeof(IBalanceSearchService), InjectType.Scope)]
  24. public class BalanceSearchService : ServiceBase, IBalanceSearchService
  25. {
  26. /// <summary>
  27. /// 系统操作仓储中转
  28. /// </summary>
  29. private IDataRepositoryContext _dataContext;
  30. /// <summary>
  31. /// SQL节点仓储
  32. /// </summary>
  33. private ISQLNodeRepository _iSQLNodeRepository;
  34. /// <summary>
  35. /// 配置
  36. /// </summary>
  37. private IConfiguration _configuration;
  38. public BalanceSearchService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository)
  39. {
  40. this._dataContext = dataRepositoryContext;
  41. this._configuration = configuration;
  42. this._iSQLNodeRepository = iSQLNodeRepository;
  43. }
  44. /// <summary>
  45. /// 库存明细查询
  46. /// </summary>
  47. /// <param name="info"></param>
  48. /// <returns></returns>
  49. public OperateResultInfo<PageQueryResultInfo<BalanceDetailSearchResult>> GetDetailList(BalanceDetailSearchCondition info)
  50. {
  51. if ((info.PageIndex == 0 || info.PageSize == 0) && info.Id == null && string.IsNullOrWhiteSpace(info.Ids))
  52. {
  53. return FailMessageStatus("请传递分页码和分页个数!",
  54. new PageQueryResultInfo<BalanceDetailSearchResult>());
  55. }
  56. var sql = $@"SELECT MaterielTypeCode=BAS_MATERIEL.MATERIEL_TYPE,MaterielTypeName=BAS_MATERIEL_TYPE.MATERIEL_TYPE_NAME,
  57. MaterielCode=BAS_MATERIEL.MATERIEL_CODE,MaterielName=BAS_MATERIEL.MATERIEL_NAME,UnitCode=BAS_UNIT.UNIT_CODE,
  58. UnitName=BAS_UNIT.UNIT_NAME,
  59. QTY=WMS_STK_TRAY_DTL.QTY,BatchNo=WMS_STK_TRAY_DTL_EXT.BATCH_NO,TrayCode=WMS_STK_TRAY.TRAY_CODE,
  60. PalletCode = WMS_STK_BALANCE.PALLET_CODE,PalletName=BAS_PALLET.PALLET_NAME,ProductDate=WMS_STK_TRAY_DTL_EXT.PRODUCT_DATE,
  61. ExpDate=WMS_STK_TRAY_DTL_EXT.EXP_DATE,
  62. QualityStatus=WMS_STK_TRAY_DTL_EXT.QUALITY_STATUS,QualityStatusName=
  63. {_iSQLNodeRepository.GetEnumIntCaseString<QualityStatus>("QUALITY_STATUS", "WMS_STK_TRAY_DTL_EXT")},
  64. BalanceStatus=WMS_STK_BALANCE.BALANCE_STATUS,BalanceStatusName=
  65. {_iSQLNodeRepository.GetEnumIntCaseString<BalanceStatus>("BALANCE_STATUS", "WMS_STK_BALANCE")},
  66. CreateName=(SELECT A.USER_NAME FROM SYS_USER A WHERE A.USER_ID=WMS_STK_BALANCE.CREATE_BY),
  67. UpdateName=(SELECT B.USER_NAME FROM SYS_USER B WHERE B.USER_ID=WMS_STK_BALANCE.UPDATE_BY),
  68. SupplierCode=WMS_STK_TRAY_DTL_EXT.SUPPLIER_CODE,
  69. SupplierName=WMS_STK_TRAY_DTL_EXT.SUPPLIER_NAME,
  70. SpecsModel=BAS_MATERIEL.SPECS_MODEL,
  71. TrayDtlId=WMS_STK_TRAY_DTL.TRAY_DTL_ID,
  72. WMS_STK_BALANCE.* FROM WMS_STK_BALANCE
  73. LEFT JOIN WMS_STK_TRAY ON WMS_STK_TRAY.TRAY_CODE=WMS_STK_BALANCE.TRAY_CODE
  74. LEFT JOIN WMS_STK_TRAY_DTL ON WMS_STK_TRAY.TRAY_ID=WMS_STK_TRAY_DTL.TRAY_ID
  75. LEFT JOIN WMS_STK_TRAY_DTL_EXT ON WMS_STK_TRAY_DTL_EXT.TRAY_DTL_ID=WMS_STK_TRAY_DTL.TRAY_DTL_ID
  76. LEFT JOIN BAS_PALLET ON BAS_PALLET.PALLET_CODE=WMS_STK_TRAY.PALLET_CODE
  77. JOIN BAS_MATERIEL ON BAS_MATERIEL.MATERIEL_CODE=WMS_STK_TRAY_DTL.MATERIEL_CODE
  78. JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE=BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE
  79. JOIN BAS_UNIT ON BAS_UNIT.UNIT_CODE=BAS_MATERIEL.UNIT_CODE
  80. WHERE 1=1 ";
  81. var sqlAndBuilder = new StringBuilder();
  82. sqlAndBuilder = string.IsNullOrWhiteSpace(info.Ids) ?
  83. sqlAndBuilder :
  84. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_ID", info.Ids, DBOperationString._In,
  85. "WMS_STK_BALANCE"));
  86. sqlAndBuilder = info.Id != null ?
  87. info.Id > 0 ?
  88. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_ID", info.Id, DBOperationString._ContainIn,
  89. "WMS_STK_BALANCE")) :
  90. sqlAndBuilder : sqlAndBuilder;
  91. sqlAndBuilder = string.IsNullOrWhiteSpace(info.RegionCode) ?
  92. sqlAndBuilder :
  93. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("REGION_CODE", info.RegionCode, DBOperationString._ContainIn,
  94. "WMS_STK_BALANCE"));
  95. sqlAndBuilder = string.IsNullOrWhiteSpace(info.QualityStatus) ?
  96. sqlAndBuilder :
  97. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("QUALITY_STATUS", info.QualityStatus, DBOperationString._ContainIn,
  98. "WMS_STK_TRAY_DTL_EXT"));
  99. sqlAndBuilder = string.IsNullOrWhiteSpace(info.MaterielType) ?
  100. sqlAndBuilder :
  101. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MATERIEL_TYPE", info.MaterielType, DBOperationString._ContainIn,
  102. "BAS_MATERIEL"));
  103. sqlAndBuilder = string.IsNullOrWhiteSpace(info.SpecsModel) ?
  104. sqlAndBuilder :
  105. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("SPECS_MODEL", info.SpecsModel, DBOperationString._ContainIn,
  106. "BAS_MATERIEL"));
  107. sqlAndBuilder = string.IsNullOrWhiteSpace(info.BatchNo) ?
  108. sqlAndBuilder :
  109. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BATCH_NO", info.BatchNo, DBOperationString._ContainIn,
  110. "WMS_STK_TRAY_DTL_EXT"));
  111. if (info.BalanceStatus == null)
  112. {
  113. sqlAndBuilder = sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", (int)BalanceStatus.Complete, DBOperationString._SmallIn, "WMS_STK_BALANCE"));
  114. }
  115. else if ((int)info.BalanceStatus < (int)BalanceStatus.Complete)
  116. {
  117. sqlAndBuilder = sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", (int)info.BalanceStatus, DBOperationString._SmallEqual, "WMS_STK_BALANCE"));
  118. }
  119. else
  120. {
  121. sqlAndBuilder = sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", (int)info.BalanceStatus, DBOperationString._Equal, "WMS_STK_BALANCE"));
  122. }
  123. //sqlAndBuilder = info.BalanceStatus == null ?
  124. // sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", (int)BalanceStatus.Complete, DBOperationString._SmallEqual, "WMS_STK_BALANCE")) :
  125. // sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", (int)info.BalanceStatus, DBOperationString._ContainIn,
  126. // "WMS_STK_BALANCE"));
  127. sqlAndBuilder = !string.IsNullOrWhiteSpace(info.SupplierCode) ?
  128. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("SUPPLIER_CODE", info.SupplierCode, DBOperationString._Equal,
  129. "WMS_STK_TRAY_DTL_EXT")) :
  130. sqlAndBuilder;
  131. //sqlAndBuilder = info.IsUsed == null ?
  132. // sqlAndBuilder :
  133. // sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("USED_FLAG", info.IsUsed, DBOperationString._Equal,
  134. // "WMS_STK_BALANCE"));
  135. sqlAndBuilder = info.ProductBeginDate != null ?
  136. sqlAndBuilder :
  137. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("PRODUCT_DATE", info.ProductBeginDate, DBOperationString._LargeEqual,
  138. "WMS_STK_TRAY_DTL_EXT"));
  139. sqlAndBuilder = info.ProductEndDate != null ?
  140. sqlAndBuilder :
  141. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("PRODUCT_DATE", info.ProductEndDate, DBOperationString._SmallEqual,
  142. "WMS_STK_TRAY_DTL_EXT"));
  143. sqlAndBuilder = info.ExpBeginDate != null ?
  144. sqlAndBuilder :
  145. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("EXP_DATE", info.ExpBeginDate, DBOperationString._LargeEqual,
  146. "WMS_STK_TRAY_DTL_EXT"));
  147. sqlAndBuilder = info.ExpEndDate != null ?
  148. sqlAndBuilder :
  149. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("EXP_DATE", info.ExpEndDate, DBOperationString._SmallEqual,
  150. "WMS_STK_TRAY_DTL_EXT"));
  151. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  152. //信息类条件
  153. //仓库信息
  154. var sqlOrBuilder = new StringBuilder();
  155. sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
  156. sqlOrBuilder :
  157. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_CODE", info.WarehouseInfo, DBOperationString._ContainIn,
  158. "WMS_STK_BALANCE"));
  159. sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
  160. sqlOrBuilder :
  161. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_NAME", info.WarehouseInfo, DBOperationString._ContainIn,
  162. "WMS_STK_BALANCE"));
  163. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  164. //库位信息
  165. sqlOrBuilder = new StringBuilder();
  166. sqlOrBuilder = string.IsNullOrWhiteSpace(info.BinInfo) ?
  167. sqlOrBuilder :
  168. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("BIN_CODE", info.BinInfo, DBOperationString._ContainIn,
  169. "WMS_STK_BALANCE"));
  170. sqlOrBuilder = string.IsNullOrWhiteSpace(info.BinInfo) ?
  171. sqlOrBuilder :
  172. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("BIN_NAME", info.BinInfo, DBOperationString._ContainIn,
  173. "WMS_STK_BALANCE"));
  174. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  175. //物料信息
  176. sqlOrBuilder = new StringBuilder();
  177. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
  178. sqlOrBuilder :
  179. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_CODE", info.MaterielInfo, DBOperationString._ContainIn,
  180. "BAS_MATERIEL"));
  181. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
  182. sqlOrBuilder :
  183. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_NAME", info.MaterielInfo, DBOperationString._ContainIn,
  184. "BAS_MATERIEL"));
  185. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  186. //物料信息
  187. sqlOrBuilder = new StringBuilder();
  188. sqlOrBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
  189. sqlOrBuilder :
  190. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("PALLET_CODE", info.PalletInfo, DBOperationString._ContainIn,
  191. "BAS_PALLET"));
  192. sqlOrBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
  193. sqlOrBuilder :
  194. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("PALLET_NAME", info.PalletInfo, DBOperationString._ContainIn,
  195. "BAS_PALLET"));
  196. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  197. IEnumerable<BalanceDetailSearchResult> result;
  198. IEnumerable<BalanceDetailSearchResult> totalResult;
  199. totalResult = new DataRepository<BalanceDetailSearchResult>(_dataContext).Query(sql);
  200. if (info.PageIndex == 0 || info.PageSize == 0)
  201. {
  202. result = totalResult.ToList();
  203. }
  204. else
  205. {
  206. result = new DataRepository<BalanceDetailSearchResult>(_dataContext).QueryPage(sql,
  207. "CREATE_TIME", info.PageSize, info.PageIndex, true);
  208. }
  209. return SuccessStatus(new PageQueryResultInfo<BalanceDetailSearchResult>
  210. {
  211. RowData = result,
  212. PageConditionInfo = info,
  213. TotalCount = totalResult.Count(),
  214. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  215. });
  216. }
  217. /// <summary>
  218. /// 库存统计查询
  219. /// </summary>
  220. /// <param name="info"></param>
  221. /// <returns></returns>
  222. public OperateResultInfo<PageQueryResultInfo<BalanceStatisticsSearchResult>> GetStatisticsList(BalanceStatisticsSearchCondition info)
  223. {
  224. if (info.PageIndex == 0 || info.PageSize == 0)
  225. {
  226. return FailMessageStatus("请传递分页码和分页个数!",
  227. new PageQueryResultInfo<BalanceStatisticsSearchResult>());
  228. }
  229. var sql = string.Empty;
  230. var sqlOrBuilder = new StringBuilder();
  231. var sqlAndBuilder = new StringBuilder();
  232. sqlAndBuilder = string.IsNullOrWhiteSpace(info.UnitCode) ?
  233. sqlAndBuilder :
  234. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("UnitCode", info.UnitCode, DBOperationString._ContainIn,
  235. "Result"));
  236. sqlAndBuilder = string.IsNullOrWhiteSpace(info.MaterielType) ?
  237. sqlAndBuilder :
  238. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MaterielTypeCode", info.MaterielType, DBOperationString._ContainIn,
  239. "Result"));
  240. sqlAndBuilder = string.IsNullOrWhiteSpace(info.BatchNo) ?
  241. sqlAndBuilder :
  242. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BatchNo", info.BatchNo, DBOperationString._ContainIn,
  243. "Result"));
  244. sql = (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  245. //物料
  246. sqlOrBuilder = new StringBuilder();
  247. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
  248. sqlOrBuilder :
  249. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MaterielCode", info.MaterielInfo, DBOperationString._ContainIn,
  250. "Result"));
  251. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
  252. sqlOrBuilder :
  253. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MaterielName", info.MaterielInfo, DBOperationString._ContainIn,
  254. "Result"));
  255. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  256. //库区
  257. sqlOrBuilder = new StringBuilder();
  258. sqlOrBuilder = string.IsNullOrWhiteSpace(info.RegionInfo) ?
  259. sqlOrBuilder :
  260. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("REGION_CODE", info.RegionInfo, DBOperationString._ContainIn,
  261. "Result"));
  262. sqlOrBuilder = string.IsNullOrWhiteSpace(info.RegionInfo) ?
  263. sqlOrBuilder :
  264. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("REGION_NAME", info.RegionInfo, DBOperationString._ContainIn,
  265. "Result"));
  266. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  267. sql = $@"SELECT WarehouseCode=Result.WAREHOUSE_CODE,WarehouseName=Result.WAREHOUSE_NAME,
  268. RegionCode=Result.REGION_CODE,RegionName=Result.REGION_NAME,
  269. MaterielTypeCode,MaterielTypeName,MaterielCode,
  270. MaterielName,UnitCode,UnitName,BatchNo,QTY=Count(*) FROM (
  271. SELECT
  272. MaterielTypeCode=BAS_MATERIEL.MATERIEL_TYPE,MaterielTypeName=BAS_MATERIEL_TYPE.MATERIEL_TYPE_NAME,
  273. MaterielCode=BAS_MATERIEL.MATERIEL_CODE,MaterielName=BAS_MATERIEL.MATERIEL_NAME,UnitCode=BAS_UNIT.UNIT_CODE,UnitName=BAS_UNIT.UNIT_NAME,
  274. QTY=WMS_STK_TRAY_DTL.QTY,BatchNo=WMS_STK_TRAY_DTL_EXT.BATCH_NO,TrayCode=WMS_STK_TRAY.TRAY_CODE,
  275. PalletCode = BAS_PALLET.PALLET_CODE,PalletName=BAS_PALLET.PALLET_NAME,ProductDate=WMS_STK_TRAY_DTL_EXT.PRODUCT_DATE,ExpDate=WMS_STK_TRAY_DTL_EXT.EXP_DATE,
  276. QualityStatus=WMS_STK_TRAY_DTL_EXT.QUALITY_STATUS ,QualityStatusName='',BalanceStatus=WMS_STK_BALANCE.BALANCE_STATUS,BalanceStatusName='',
  277. CreateName=(SELECT A.USER_NAME FROM SYS_USER A WHERE A.USER_ID=WMS_STK_BALANCE.CREATE_BY),
  278. UpdateName=(SELECT B.USER_NAME FROM SYS_USER B WHERE B.USER_ID=WMS_STK_BALANCE.UPDATE_BY),
  279. WMS_STK_BALANCE.* from WMS_STK_BALANCE
  280. JOIN WMS_STK_TRAY ON WMS_STK_TRAY.TRAY_CODE=WMS_STK_BALANCE.TRAY_CODE
  281. LEFT JOIN WMS_STK_TRAY_DTL ON WMS_STK_TRAY.TRAY_ID=WMS_STK_TRAY_DTL.TRAY_ID
  282. LEFT JOIN WMS_STK_TRAY_DTL_EXT ON WMS_STK_TRAY_DTL_EXT.TRAY_DTL_ID=WMS_STK_TRAY_DTL.TRAY_DTL_ID
  283. JOIN BAS_PALLET ON BAS_PALLET.PALLET_CODE=WMS_STK_TRAY.PALLET_CODE
  284. JOIN BAS_MATERIEL ON BAS_MATERIEL.MATERIEL_ID=WMS_STK_TRAY_DTL.MATERIEL_ID
  285. JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE=BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE
  286. JOIN BAS_UNIT ON BAS_UNIT.UNIT_CODE=BAS_MATERIEL.UNIT_CODE
  287. ) Result
  288. WHERE 1=1 {sql}
  289. GROUP BY Result.WAREHOUSE_CODE,Result.WAREHOUSE_NAME,
  290. Result.REGION_CODE,Result.REGION_NAME,
  291. MaterielTypeCode,MaterielTypeName,MaterielCode,
  292. MaterielName,UnitCode,UnitName,BatchNo ";
  293. var result = new DataRepository<BalanceStatisticsSearchResult>(_dataContext).QueryPage(sql,
  294. "RegionCode", info.PageSize, info.PageIndex, true);
  295. var totalResult = new DataRepository<BalanceStatisticsSearchResult>(_dataContext).Query(sql);
  296. return SuccessStatus(new PageQueryResultInfo<BalanceStatisticsSearchResult>
  297. {
  298. RowData = result,
  299. PageConditionInfo = info,
  300. TotalCount = totalResult.Count(),
  301. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  302. });
  303. }
  304. /// <summary>
  305. /// 主盘点单列表
  306. /// </summary>
  307. /// <param name="info"></param>
  308. /// <returns></returns>
  309. public OperateResultInfo<PageQueryResultInfo<InventoryMainSearchResult>> GetMainInventoryList(InventoryMainSearchCondition info)
  310. {
  311. var sql = $@"SELECT
  312. InventoryNo=WMS_STK_INVENTORY.INVENTORY_NO,
  313. CreateName=(SELECT A.USER_NAME FROM SYS_USER A WHERE A.USER_ID=WMS_STK_INVENTORY.CREATE_BY),
  314. UpdateName=(SELECT B.USER_NAME FROM SYS_USER B WHERE B.USER_ID=WMS_STK_INVENTORY.UPDATE_BY),
  315. InventoryTypeName = {_iSQLNodeRepository.GetEnumIntCaseString<InventoryType>("INVENTORY_TYPE", "WMS_STK_INVENTORY")},
  316. InventoryModeName = {_iSQLNodeRepository.GetEnumIntCaseString<InventoryMode>("INVENTORY_MODE", "WMS_STK_INVENTORY")},
  317. InventoryStatusName = {_iSQLNodeRepository.GetEnumIntCaseString<InventoryStatus>("INVENTORY_STATUS", "WMS_STK_INVENTORY")},
  318. ResultFlagName = {_iSQLNodeRepository.GetEnumIntCaseString<ResultFlag>("RESULT_FLAG", "WMS_STK_INVENTORY")},
  319. WMS_STK_INVENTORY.* FROM WMS_STK_INVENTORY
  320. WHERE 1=1 ";
  321. var sqlOrBuilder = new StringBuilder();
  322. var sqlAndBuilder = new StringBuilder();
  323. sqlAndBuilder = info.Id != null ?
  324. info.Id > 0 ?
  325. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVENTORY_ID", info.Id, DBOperationString._Equal,
  326. "WMS_STK_INVENTORY")) :
  327. sqlAndBuilder : sqlAndBuilder;
  328. sqlAndBuilder = string.IsNullOrWhiteSpace(info.InventoryNo) ?
  329. sqlAndBuilder :
  330. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVENTORY_NO", info.InventoryNo, DBOperationString._Equal,
  331. "WMS_STK_INVENTORY"));
  332. sqlAndBuilder = string.IsNullOrWhiteSpace(info.BatchNo) ?
  333. sqlAndBuilder :
  334. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BATCH_NO", info.BatchNo, DBOperationString._ContainIn,
  335. "WMS_STK_INVENTORY_DTL"));
  336. sqlAndBuilder = string.IsNullOrWhiteSpace(info.InventoryMode) ?
  337. sqlAndBuilder :
  338. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVENTORY_MODE", info.InventoryMode, DBOperationString._Equal,
  339. "WMS_STK_INVENTORY"));
  340. sqlAndBuilder = info.InventoryStatus != null ?
  341. sqlAndBuilder :
  342. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVENTORY_STATUS", info.InventoryStatus, DBOperationString._Equal,
  343. "WMS_STK_INVENTORY"));
  344. sqlAndBuilder = string.IsNullOrWhiteSpace(info.InventoryType) ?
  345. sqlAndBuilder :
  346. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVENTORY_TYPE", info.InventoryType, DBOperationString._Equal,
  347. "WMS_STK_INVENTORY"));
  348. sqlAndBuilder = string.IsNullOrWhiteSpace(info.SupplierCode) ?
  349. sqlAndBuilder :
  350. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("SUPPLIER_CODE", info.SupplierCode, DBOperationString._ContainIn,
  351. "WMS_STK_INVENTORY_DTL"));
  352. sqlAndBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
  353. sqlAndBuilder :
  354. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("PALLET_CODE", info.PalletInfo, DBOperationString._ContainIn,
  355. "WMS_STK_INVENTORY_DTL"));
  356. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  357. //物料
  358. sqlOrBuilder = new StringBuilder();
  359. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
  360. sqlOrBuilder :
  361. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_CODE", info.MaterielInfo, DBOperationString._ContainIn,
  362. "WMS_STK_INVENTORY_DTL"));
  363. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
  364. sqlOrBuilder :
  365. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_NAME", info.MaterielInfo, DBOperationString._ContainIn,
  366. "WMS_STK_INVENTORY_DTL"));
  367. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  368. //库位
  369. sqlOrBuilder = new StringBuilder();
  370. sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
  371. sqlOrBuilder :
  372. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_CODE", info.WarehouseInfo, DBOperationString._ContainIn,
  373. "BAS_BIN"));
  374. sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
  375. sqlOrBuilder :
  376. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_NAME", info.WarehouseInfo, DBOperationString._ContainIn,
  377. "BAS_BIN"));
  378. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  379. IEnumerable<InventoryMainSearchResult> result;
  380. IEnumerable<InventoryMainSearchResult> totalResult;
  381. totalResult = new DataRepository<InventoryMainSearchResult>(_dataContext).Query(sql);
  382. if (info.PageIndex == 0 || info.PageSize == 0)
  383. {
  384. result = totalResult.ToList();
  385. }
  386. else
  387. {
  388. result = new DataRepository<InventoryMainSearchResult>(_dataContext).QueryPage(sql,
  389. "CREATE_TIME", info.PageSize, info.PageIndex, true);
  390. }
  391. return SuccessStatus(new PageQueryResultInfo<InventoryMainSearchResult>
  392. {
  393. RowData = result,
  394. PageConditionInfo = info,
  395. TotalCount = totalResult.Count(),
  396. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  397. });
  398. }
  399. /// <summary>
  400. /// 盘点明细单列表
  401. /// </summary>
  402. /// <param name="info"></param>
  403. /// <returns></returns>
  404. public OperateResultInfo<List<InventoryDetailSearchResult>> GetDetailInventoryList(InventoryDetailSearchCondition info)
  405. {
  406. if (info.Id == null)
  407. {
  408. return FailMessageStatus("参数错误", new List<InventoryDetailSearchResult>());
  409. }
  410. var sql = $@"SELECT CreateName=(SELECT A.USER_NAME FROM SYS_USER A WHERE A.USER_ID=WMS_STK_INVENTORY.CREATE_BY),
  411. UpdateName=(SELECT B.USER_NAME FROM SYS_USER B WHERE B.USER_ID=WMS_STK_INVENTORY.UPDATE_BY),
  412. WMS_STK_INVENTORY_DTL.MATERIEL_CODE,WMS_STK_INVENTORY_DTL.MATERIEL_NAME,
  413. WMS_STK_INVENTORY_DTL.INVENTORY_DTL_ID,
  414. MaterielTypeCode = BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE,MaterielTypeName = BAS_MATERIEL_TYPE.MATERIEL_TYPE_NAME,
  415. BAS_SUPPLIER.SUPPLIER_NAME,BATCH_NO,WMS_STK_INVENTORY_DTL.QTY,WMS_STK_INVENTORY_DTL.ACTUAL_INVENTORY_QTY,
  416. WMS_STK_INVENTORY_DTL.INVENTORY_RESULT_QTY,UnitName = BAS_UNIT.UNIT_NAME,WarehouseName = BAS_WAREHOUSE.WAREHOUSE_NAME,WarehouseCode = BAS_WAREHOUSE.WAREHOUSE_CODE,
  417. BAS_BIN.AREA_NAME,
  418. BAS_BIN.BIN_CODE,WMS_STK_INVENTORY_DTL.TRAY_CODE,WMS_STK_INVENTORY_DTL.PALLET_CODE,
  419. InventoryDetailStatusName = {_iSQLNodeRepository.GetEnumIntCaseString<InventoryStatus>("INVENTORY_DTL_STATUS", "WMS_STK_INVENTORY_DTL")},
  420. WMS_STK_INVENTORY_DTL.INVENTORY_DTL_STATUS,
  421. CREATE_TIME=WMS_STK_INVENTORY.CREATE_TIME,UPDATE_TIME=WMS_STK_INVENTORY.UPDATE_TIME
  422. FROM WMS_STK_INVENTORY
  423. JOIN WMS_STK_INVENTORY_DTL ON WMS_STK_INVENTORY.INVENTORY_ID=WMS_STK_INVENTORY_DTL.INVENTORY_ID
  424. JOIN BAS_BIN ON BAS_BIN.BIN_CODE=WMS_STK_INVENTORY_DTL.BIN_CODE
  425. JOIN BAS_WAREHOUSE ON BAS_BIN.WAREHOUSE_CODE=BAS_WAREHOUSE.WAREHOUSE_CODE
  426. JOIN BAS_AREA ON BAS_AREA.AREA_CODE=BAS_BIN.AREA_CODE
  427. JOIN BAS_MATERIEL ON BAS_MATERIEL.MATERIEL_CODE=WMS_STK_INVENTORY_DTL.MATERIEL_CODE
  428. JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE=BAS_MATERIEL.MATERIEL_TYPE
  429. LEFT JOIN BAS_SUPPLIER ON BAS_SUPPLIER.SUPPLIER_CODE=WMS_STK_INVENTORY_DTL.SUPPLIER_CODE
  430. JOIN BAS_UNIT ON BAS_UNIT.UNIT_CODE=WMS_STK_INVENTORY_DTL.UNIT_CODE
  431. WHERE 1=1 AND WMS_STK_INVENTORY.INVENTORY_ID = {info.Id.Value}";
  432. if (info.IsGetDifference)
  433. {
  434. sql = sql + " AND WMS_STK_INVENTORY_DTL.INVENTORY_RESULT_QTY!=ACTUAL_INVENTORY_QTY";
  435. }
  436. var results = new DataRepository<InventoryDetailSearchResult>(_dataContext).Query(sql);
  437. return SuccessStatus(results.ToList());
  438. }
  439. /// <summary>
  440. /// 获取库存改变记录列表
  441. /// </summary>
  442. /// <param name="info"></param>
  443. /// <returns></returns>
  444. public OperateResultInfo<PageQueryResultInfo<BalanceChangeLogResult>> GetChangeLogList(BalanceChangeLogSearchCondition info)
  445. {
  446. var sqlAndBuilder = new StringBuilder();
  447. var sqlOrBuilder = new StringBuilder();
  448. var sql = $@"SELECT
  449. CreateName = (SELECT USER_NAME FROM SYS_USER A WHERE A.USER_ID=CREATE_BY),
  450. UpdateName = (SELECT USER_NAME FROM SYS_USER B WHERE B.USER_ID=UPDATE_BY),
  451. UsedFlagName = {_iSQLNodeRepository.GetEnumIntCaseString<UsedFlag>("USED_FLAG")},
  452. {info.ItemSQL} FROM WMS_LOG_BALANCE_CHANGE_MSG WHERE 1=1 AND DEL_FLAG = 0 ";
  453. sqlAndBuilder = info.Id != null ?
  454. info.Id > 0 ?
  455. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_CHANGE_MSG_ID", info.Id, DBOperationString._Equal)) :
  456. sqlAndBuilder : sqlAndBuilder;
  457. sqlAndBuilder = info.BalanceStatus != null ?
  458. sqlAndBuilder :
  459. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_STATUS", info.BalanceStatus, DBOperationString._Equal));
  460. sqlAndBuilder = string.IsNullOrWhiteSpace(info.BatchNo) ?
  461. sqlAndBuilder :
  462. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BATCH_NO", info.BatchNo, DBOperationString._Equal));
  463. sqlAndBuilder = string.IsNullOrWhiteSpace(info.Ids) ?
  464. sqlAndBuilder :
  465. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BALANCE_CHANGE_MSG_ID", info.Ids, DBOperationString._In));
  466. sqlAndBuilder = info.InspectionStatus != null ?
  467. sqlAndBuilder :
  468. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INSPECTION_STATUS", info.InspectionStatus, DBOperationString._Equal));
  469. sqlAndBuilder = string.IsNullOrWhiteSpace(info.RegionCode) ?
  470. sqlAndBuilder :
  471. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("REGION_CODE", info.RegionCode, DBOperationString._ContainIn));
  472. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  473. //物料
  474. sqlOrBuilder = new StringBuilder();
  475. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
  476. sqlOrBuilder :
  477. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_CODE", info.MaterielInfo, DBOperationString._ContainIn));
  478. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
  479. sqlOrBuilder :
  480. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_NAME", info.MaterielInfo, DBOperationString._ContainIn));
  481. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  482. //库位
  483. sqlOrBuilder = new StringBuilder();
  484. sqlOrBuilder = string.IsNullOrWhiteSpace(info.BinInfo) ?
  485. sqlOrBuilder :
  486. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("BIN_CODE", info.BinInfo, DBOperationString._ContainIn));
  487. sqlOrBuilder = string.IsNullOrWhiteSpace(info.BinInfo) ?
  488. sqlOrBuilder :
  489. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("BIN_NAME", info.BinInfo, DBOperationString._ContainIn));
  490. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  491. //物料类型
  492. sqlOrBuilder = new StringBuilder();
  493. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielTypeInfo) ?
  494. sqlOrBuilder :
  495. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_TYPE_CODE", info.MaterielTypeInfo, DBOperationString._ContainIn));
  496. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielTypeInfo) ?
  497. sqlOrBuilder :
  498. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_TYPE_NAME", info.MaterielTypeInfo, DBOperationString._ContainIn));
  499. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  500. //托盘号
  501. sqlOrBuilder = new StringBuilder();
  502. sqlOrBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
  503. sqlOrBuilder :
  504. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("PALLET_CODE", info.PalletInfo, DBOperationString._ContainIn));
  505. sqlOrBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
  506. sqlOrBuilder :
  507. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("PALLET_NAME", info.PalletInfo, DBOperationString._ContainIn));
  508. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  509. //仓库
  510. sqlOrBuilder = new StringBuilder();
  511. sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
  512. sqlOrBuilder :
  513. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_CODE", info.WarehouseInfo, DBOperationString._ContainIn));
  514. sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
  515. sqlOrBuilder :
  516. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_NAME", info.WarehouseInfo, DBOperationString._ContainIn));
  517. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  518. IEnumerable<BalanceChangeLogResult> result;
  519. IEnumerable<BalanceChangeLogResult> totalResult;
  520. totalResult = new DataRepository<BalanceChangeLogResult>(_dataContext).Query(sql);
  521. if (info.PageIndex == 0 || info.PageSize == 0)
  522. {
  523. result = totalResult.ToList();
  524. }
  525. else
  526. {
  527. result = new DataRepository<BalanceChangeLogResult>(_dataContext).QueryPage(sql,
  528. "CREATE_TIME", info.PageSize, info.PageIndex, true);
  529. }
  530. return SuccessStatus(new PageQueryResultInfo<BalanceChangeLogResult>
  531. {
  532. RowData = result,
  533. PageConditionInfo = info,
  534. TotalCount = totalResult.Count(),
  535. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  536. });
  537. }
  538. public BinResult GetEmptyBin(string regionCode)
  539. {
  540. string strSql = $@"
  541. SELECT
  542. TOP 1 A.*, B.USER_CODE CreateCode,
  543. B.USER_NAME CreateName,
  544. C.USER_CODE UpdateCode,
  545. C.USER_NAME UpdateName
  546. FROM
  547. BAS_BIN A
  548. LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
  549. LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
  550. WHERE
  551. A.USED_FLAG = 1
  552. AND A.DEL_FLAG = 0
  553. AND A.BIN_CODE NOT IN (
  554. SELECT
  555. BIN_CODE
  556. FROM
  557. WMS_STK_BALANCE
  558. WHERE
  559. BALANCE_STATUS < 99
  560. AND REGION_CODE = '{regionCode}'
  561. )
  562. AND A.REGION_CODE = '{regionCode}'
  563. ORDER BY
  564. A.BIN_LAYER desc,
  565. A.BIN_COLUMN desc,
  566. A.BIN_ROW desc
  567. ";
  568. return new DataRepository<BinResult>(_dataContext).QueryFirst(strSql);
  569. }
  570. public bool VerifyBin(string RegionCode, string BinCode)
  571. {
  572. string strSql = $@"
  573. SELECT
  574. TOP 1 A.*, B.USER_CODE CreateCode,
  575. B.USER_NAME CreateName,
  576. C.USER_CODE UpdateCode,
  577. C.USER_NAME UpdateName
  578. FROM
  579. BAS_BIN A
  580. LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
  581. LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
  582. WHERE
  583. A.USED_FLAG = 1
  584. AND A.DEL_FLAG = 0
  585. AND A.BIN_CODE NOT IN (
  586. SELECT
  587. BIN_CODE
  588. FROM
  589. WMS_STK_BALANCE
  590. WHERE
  591. BALANCE_STATUS < 99
  592. AND REGION_CODE = @regionCode
  593. )
  594. AND A.REGION_CODE = @regionCode
  595. AND A.BIN_CODE=@BinCode
  596. ORDER BY
  597. A.BIN_LAYER desc,
  598. A.BIN_COLUMN desc,
  599. A.BIN_ROW desc
  600. ";
  601. return new DataRepository<object>(_dataContext).ExecuteScalar<int>(strSql, new { RegionCode, BinCode }) > 0;
  602. }
  603. }
  604. }