ReportSearchService.cs 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848
  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.Code.Extends;
  7. using NXWMS.IService.NXWMS.Balance;
  8. using NXWMS.IService.NXWMS.Report;
  9. using NXWMS.Model.AppModels.Condition.Balance;
  10. using NXWMS.Model.AppModels.Condition.Report;
  11. using NXWMS.Model.AppModels.Result.Balance;
  12. using NXWMS.Model.AppModels.Result.Report;
  13. using NXWMS.Model.Common;
  14. using NXWMS.String.Enums;
  15. using System;
  16. using System.Collections.Generic;
  17. using System.Linq;
  18. using System.Text;
  19. using System.Threading.Tasks;
  20. using WestDistance.DapperORM.Repository.Repositorys;
  21. using TaskStatus = NXWMS.String.Enums.TaskStatus;
  22. namespace NXWMS.Service.NXWMS.Report
  23. {
  24. /// <summary>
  25. /// 报告查询
  26. /// </summary>
  27. [AutoInject(typeof(IReportSearchService), InjectType.Scope)]
  28. public class ReportSearchService : ServiceBase, IReportSearchService
  29. {
  30. /// <summary>
  31. /// 系统操作仓储中转
  32. /// </summary>
  33. private IDataRepositoryContext _dataContext;
  34. /// <summary>
  35. /// SQL节点仓储
  36. /// </summary>
  37. private ISQLNodeRepository _iSQLNodeRepository;
  38. /// <summary>
  39. /// 配置
  40. /// </summary>
  41. private IConfiguration _configuration;
  42. public ReportSearchService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository)
  43. {
  44. this._dataContext = dataRepositoryContext;
  45. this._configuration = configuration;
  46. this._iSQLNodeRepository = iSQLNodeRepository;
  47. }
  48. /// <summary>
  49. /// 入库日统计报表
  50. /// </summary>
  51. /// <param name="info"></param>
  52. /// <returns></returns>
  53. public OperateResultInfo<PageQueryResultInfo<InstockDayStatisticsResult>> GetInstockDayStatisticsList(InstockDayStatisticsCondition info)
  54. {
  55. var sql = string.Empty;
  56. var sqlAndBuilder = new StringBuilder();
  57. sqlAndBuilder = string.IsNullOrWhiteSpace(info.InstockNo) ?
  58. sqlAndBuilder :
  59. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("RECEIPT_NO", info.InstockNo, DBOperationString._ContainIn));
  60. sqlAndBuilder = string.IsNullOrWhiteSpace(info.MaterielCode) ?
  61. sqlAndBuilder :
  62. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MATERIEL_CODE", info.MaterielCode, DBOperationString._ContainIn));
  63. sqlAndBuilder = string.IsNullOrWhiteSpace(info.MaterielTypeCode) ?
  64. sqlAndBuilder :
  65. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MATERIEL_TYPE_CODE", info.MaterielTypeCode, DBOperationString._Equal));
  66. sqlAndBuilder = string.IsNullOrWhiteSpace(info.BillType) ?
  67. sqlAndBuilder :
  68. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("RECEIPT_TYPE", info.BillType, DBOperationString._Equal));
  69. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("CreateDate", info.BeginTime, DBOperationString._LargeEqual));
  70. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("CreateDate", info.EndTime, DBOperationString._SmallEqual));
  71. //BillTypeName =
  72. // { _iSQLNodeRepository.GetEnumIntCaseString<InstockType>("BALANCE_STATUS", "WMS_STK_BALANCE")},
  73. sql = $@"
  74. SELECT QTY=SUM(ISNULL(QTY,0)),InstockNo,BillType,
  75. LineNumber,InstockTime,InstockBillCreateTime,
  76. MaterielCode,MaterielName,
  77. MaterielTypeCode,MaterielTypeName,
  78. PackageCode,PackageName,UnitCode,UnitName,
  79. Volume,Weight,
  80. SupplierContract,SupplierCode,SupplierName,
  81. ProductDate,ExpDate,BalanceStatus FROM (
  82. SELECT InstockNo=WMS_IN_RECEIPT.RECEIPT_NO,BillType=RECEIPT_TYPE,LineNumber=WMS_IN_RECEIPT_DTL.RECEIPT_DTL_ID,InstockTime=WMS_IN_RECEIPT.RECEIPT_TIME,InstockBillCreateTime=WMS_IN_RECEIPT.CREATE_TIME,
  83. MaterielCode=WMS_IN_RECEIPT_DTL.MATERIEL_CODE,MaterielName=WMS_IN_RECEIPT_DTL.MATERIEL_NAME,
  84. MaterielTypeCode=BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE,MaterielTypeName=BAS_MATERIEL_TYPE.MATERIEL_TYPE_NAME,
  85. PackageCode=BAS_PACKAGE.PACKAGE_CODE,PackageName=BAS_PACKAGE.PACKAGE_NAME,UnitCode=BAS_UNIT.UNIT_CODE,UnitName=BAS_UNIT.UNIT_NAME,
  86. QTY=WMS_IN_RECEIPT_DTL.PUTAWAY_QTY,
  87. Volume=BAS_MATERIEL.VOLUME,Weight=BAS_MATERIEL.WEIGHT,
  88. SupplierContract=BAS_SUPPLIER.CONTRACT,SupplierCode=BAS_SUPPLIER.SUPPLIER_CODE,SupplierName=WMS_IN_RECEIPT_DTL.SUPPLIER_NAME,
  89. ProductDate=WMS_IN_RECEIPT_DTL.PRODUCT_DATE,ExpDate=WMS_IN_RECEIPT_DTL.EXP_DATE,BalanceStatus = WMS_STK_BALANCE.BALANCE_STATUS,
  90. CreateDate=Convert(varchar(100),WMS_IN_RECEIPT.CREATE_TIME,23)
  91. FROM WMS_IN_RECEIPT
  92. JOIN WMS_IN_RECEIPT_DTL ON WMS_IN_RECEIPT.RECEIPT_ID=WMS_IN_RECEIPT_DTL.RECEIPT_ID
  93. JOIN WMS_IN_RECEIPT_RECORD ON WMS_IN_RECEIPT_RECORD.RECEIPT_ID=WMS_IN_RECEIPT.RECEIPT_ID AND
  94. WMS_IN_RECEIPT_RECORD.RECEIPT_DTL_ID=WMS_IN_RECEIPT_DTL.RECEIPT_DTL_ID
  95. JOIN BAS_MATERIEL ON BAS_MATERIEL.MATERIEL_CODE=WMS_IN_RECEIPT_DTL.MATERIEL_CODE
  96. JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE=BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE
  97. JOIN BAS_PACKAGE ON WMS_IN_RECEIPT_DTL.PACKAGE_CODE=BAS_PACKAGE.PACKAGE_CODE
  98. JOIN BAS_UNIT ON WMS_IN_RECEIPT_DTL.UNIT_CODE=BAS_UNIT.UNIT_CODE
  99. JOIN BAS_SUPPLIER ON WMS_IN_RECEIPT_DTL.SUPPLIER_CODE=BAS_SUPPLIER.SUPPLIER_CODE
  100. JOIN WMS_STK_BALANCE ON WMS_IN_RECEIPT_RECORD.TRAY_CODE=WMS_STK_BALANCE.TRAY_CODE
  101. AND WMS_IN_RECEIPT_RECORD.PALLET_CODE=WMS_STK_BALANCE.PALLET_CODE
  102. ) TEMP
  103. WHERE 1=1
  104. GROUP BY
  105. InstockNo,BillType,LineNumber,InstockTime,InstockBillCreateTime,
  106. MaterielCode,MaterielName,
  107. MaterielTypeCode,MaterielTypeName,
  108. PackageCode,PackageName,UnitCode,UnitName,
  109. Volume,Weight,
  110. SupplierContract,SupplierCode,SupplierName,
  111. ProductDate,ExpDate,BalanceStatus,CreateDate
  112. ";
  113. IEnumerable<InstockDayStatisticsResult> result;
  114. IEnumerable<InstockDayStatisticsResult> totalResult;
  115. totalResult = new DataRepository<InstockDayStatisticsResult>(_dataContext).Query(sql);
  116. if (info.PageIndex == 0 || info.PageSize == 0)
  117. {
  118. result = totalResult.ToList();
  119. }
  120. else
  121. {
  122. result = new DataRepository<InstockDayStatisticsResult>(_dataContext).QueryPage(sql,
  123. "InstockTime", info.PageSize, info.PageIndex, true);
  124. }
  125. return SuccessStatus(new PageQueryResultInfo<InstockDayStatisticsResult>
  126. {
  127. RowData = result,
  128. PageConditionInfo = info,
  129. TotalCount = totalResult.Count(),
  130. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  131. });
  132. }
  133. /// <summary>
  134. /// 出库日统计报表
  135. /// </summary>
  136. /// <param name="info"></param>
  137. /// <returns></returns>
  138. public OperateResultInfo<PageQueryResultInfo<OutStockDayStatisticsResult>> GetOutStockDayStatisticsList(OutStockDayStatisticsCondition info)
  139. {
  140. var sql = string.Empty;
  141. var sqlAndBuilder = new StringBuilder();
  142. sqlAndBuilder = string.IsNullOrWhiteSpace(info.OutStockNo) ?
  143. sqlAndBuilder :
  144. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVOICE_NO", info.OutStockNo, DBOperationString._ContainIn));
  145. sqlAndBuilder = string.IsNullOrWhiteSpace(info.MaterielCode) ?
  146. sqlAndBuilder :
  147. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MATERIEL_CODE", info.MaterielCode, DBOperationString._ContainIn));
  148. sqlAndBuilder = string.IsNullOrWhiteSpace(info.MaterielTypeCode) ?
  149. sqlAndBuilder :
  150. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MATERIEL_TYPE_CODE", info.MaterielTypeCode, DBOperationString._Equal));
  151. sqlAndBuilder = string.IsNullOrWhiteSpace(info.BillType) ?
  152. sqlAndBuilder :
  153. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("INVOICE_TYPE", info.BillType, DBOperationString._Equal));
  154. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("CreateDate", info.BeginTime, DBOperationString._LargeEqual));
  155. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("CreateDate", info.EndTime, DBOperationString._SmallEqual));
  156. sql = $@"
  157. SELECT QTY=SUM(ISNULL(QTY,0)),OutstockNo,BillType,LineNumber,OutstockTime,OutstockBillCreateTime,
  158. MaterielCode,MaterielName,
  159. MaterielTypeCode,MaterielTypeName,
  160. PackageCode,PackageName,UnitCode,UnitName,
  161. Volume,Weight,
  162. SupplierContract,SupplierCode,SupplierName,
  163. ProductDate,ExpDate,BalanceStatus FROM (
  164. SELECT OutstockNo=WMS_OUT_INVOICE.INVOICE_NO,BillType=WMS_OUT_INVOICE.INVOICE_TYPE,LineNumber=WMS_OUT_INVOICE_DTL.INVOICE_DTL_ID,
  165. OutstockTime=WMS_OUT_INVOICE.INVOICE_END_TIME,OutstockBillCreateTime=WMS_OUT_INVOICE.CREATE_TIME,
  166. MaterielCode=WMS_OUT_INVOICE_DTL.MATERIEL_CODE,MaterielName=WMS_OUT_INVOICE_DTL.MATERIEL_NAME,
  167. MaterielTypeCode=BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE,MaterielTypeName=BAS_MATERIEL_TYPE.MATERIEL_TYPE_NAME,
  168. PackageCode=BAS_PACKAGE.PACKAGE_CODE,PackageName=BAS_PACKAGE.PACKAGE_NAME,UnitCode=BAS_UNIT.UNIT_CODE,UnitName=BAS_UNIT.UNIT_NAME,
  169. QTY=WMS_OUT_INVOICE_DTL.PUTDOWN_QTY,
  170. Volume=BAS_MATERIEL.VOLUME,Weight=BAS_MATERIEL.WEIGHT,
  171. SupplierContract=BAS_SUPPLIER.CONTRACT,SupplierCode=BAS_SUPPLIER.SUPPLIER_CODE,SupplierName=WMS_OUT_INVOICE_DTL.SUPPLIER_NAME,
  172. ProductDate=WMS_OUT_INVOICE_DTL.PRODUCT_DATE,ExpDate=WMS_OUT_INVOICE_DTL.EXP_DATE,BalanceStatus = WMS_STK_BALANCE.BALANCE_STATUS,
  173. CreateDate=Convert(varchar(100),WMS_OUT_INVOICE.CREATE_TIME,23)
  174. FROM WMS_OUT_INVOICE
  175. JOIN WMS_OUT_INVOICE_DTL ON WMS_OUT_INVOICE.INVOICE_ID=WMS_OUT_INVOICE_DTL.INVOICE_ID
  176. JOIN WMS_OUT_INVOICE_RECORD ON WMS_OUT_INVOICE_RECORD.INVOICE_ID=WMS_OUT_INVOICE.INVOICE_ID AND
  177. WMS_OUT_INVOICE_RECORD.INVOICE_DTL_ID=WMS_OUT_INVOICE_DTL.INVOICE_DTL_ID
  178. JOIN BAS_MATERIEL ON BAS_MATERIEL.MATERIEL_CODE=WMS_OUT_INVOICE_DTL.MATERIEL_CODE
  179. JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE=BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE
  180. JOIN BAS_PACKAGE ON WMS_OUT_INVOICE_DTL.PACKAGE_CODE=BAS_PACKAGE.PACKAGE_CODE
  181. JOIN BAS_UNIT ON WMS_OUT_INVOICE_DTL.UNIT_CODE=BAS_UNIT.UNIT_CODE
  182. JOIN BAS_SUPPLIER ON WMS_OUT_INVOICE_DTL.SUPPLIER_CODE=BAS_SUPPLIER.SUPPLIER_CODE
  183. JOIN WMS_STK_BALANCE ON WMS_OUT_INVOICE_RECORD.TRAY_CODE=WMS_STK_BALANCE.TRAY_CODE
  184. AND WMS_OUT_INVOICE_RECORD.PALLET_CODE=WMS_STK_BALANCE.PALLET_CODE
  185. ) TEMP
  186. WHERE 1=1
  187. GROUP BY
  188. OutstockNo,BillType,LineNumber,OutstockTime,OutstockBillCreateTime,
  189. MaterielCode,MaterielName,
  190. MaterielTypeCode,MaterielTypeName,
  191. PackageCode,PackageName,UnitCode,UnitName,
  192. Volume,Weight,
  193. SupplierContract,SupplierCode,SupplierName,
  194. ProductDate,ExpDate,BalanceStatus,CreateDate
  195. ";
  196. IEnumerable<OutStockDayStatisticsResult> result;
  197. IEnumerable<OutStockDayStatisticsResult> totalResult;
  198. totalResult = new DataRepository<OutStockDayStatisticsResult>(_dataContext).Query(sql);
  199. if (info.PageIndex == 0 || info.PageSize == 0)
  200. {
  201. result = totalResult.ToList();
  202. }
  203. else
  204. {
  205. result = new DataRepository<OutStockDayStatisticsResult>(_dataContext).QueryPage(sql,
  206. "OutstockTime", info.PageSize, info.PageIndex, true);
  207. }
  208. return SuccessStatus(new PageQueryResultInfo<OutStockDayStatisticsResult>
  209. {
  210. RowData = result,
  211. PageConditionInfo = info,
  212. TotalCount = totalResult.Count(),
  213. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  214. });
  215. }
  216. /// <summary>
  217. /// 获取仓库进销存报表
  218. /// </summary>
  219. /// <param name="info"></param>
  220. /// <returns></returns>
  221. public OperateResultInfo<PageQueryResultInfo<WarehouseInventoryResult>> GetWarehouseInventoryList(WarehouseInventoryCondition info)
  222. {
  223. var sql = string.Empty;
  224. var sqlTemp = string.Empty;
  225. var sqlAndBuilder = new StringBuilder();
  226. var sqlOrBuilder = new StringBuilder();
  227. sqlAndBuilder = string.IsNullOrWhiteSpace(info.BatchNo) ?
  228. sqlAndBuilder :
  229. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BATCH_NO", info.BatchNo, DBOperationString._ContainIn,
  230. "VM_WMS_WAREHOUSE_INVENTORY"
  231. ));
  232. sqlAndBuilder = string.IsNullOrWhiteSpace(info.UnitCode) ?
  233. sqlAndBuilder :
  234. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("UNIT_CODE", info.UnitCode, DBOperationString._ContainIn,
  235. "VM_WMS_WAREHOUSE_INVENTORY"
  236. ));
  237. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  238. //物料
  239. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
  240. sqlOrBuilder :
  241. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_CODE", info.MaterielInfo, DBOperationString._ContainIn,
  242. "VM_WMS_WAREHOUSE_INVENTORY"));
  243. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielInfo) ?
  244. sqlOrBuilder :
  245. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_NAME", info.MaterielInfo, DBOperationString._ContainIn,
  246. "VM_WMS_WAREHOUSE_INVENTORY"));
  247. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  248. //物料类型
  249. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielTypeInfo) ?
  250. sqlOrBuilder :
  251. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_TYPE_CODE", info.MaterielTypeInfo, DBOperationString._ContainIn,
  252. "VM_WMS_WAREHOUSE_INVENTORY"));
  253. sqlOrBuilder = string.IsNullOrWhiteSpace(info.MaterielTypeInfo) ?
  254. sqlOrBuilder :
  255. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_TYPE_NAME", info.MaterielTypeInfo, DBOperationString._ContainIn,
  256. "VM_WMS_WAREHOUSE_INVENTORY"));
  257. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  258. sql = $@"
  259. SELECT * FROM (
  260. SELECT TEMP.WAREHOUSE_CODE,TEMP.WAREHOUSE_NAME,
  261. TEMP.MATERIEL_TYPE_NAME,TEMP.MATERIEL_NAME,TEMP.UNIT_NAME,TEMP.BATCH_NO,
  262. InStockQTY = SUM(CASE WHEN TEMP.TYPE='IN' THEN TEMP.QTY ELSE 0 END),
  263. OutStockQTY = SUM(CASE WHEN TEMP.TYPE='OUT' THEN TEMP.QTY ELSE 0 END),
  264. OpeningInventoryQTY=WMS_STK_TRAY_DTL.QTY+(
  265. SELECT
  266. QTY = (CASE WHEN TYPE='OUT' THEN 0-QTY ELSE QTY END)
  267. FROM VM_WMS_WAREHOUSE_INVENTORY TEMP1
  268. WHERE TEMP1.TO_DATE>GETDATE() AND
  269. TEMP1.TRAY_CODE=WMS_STK_BALANCE.TRAY_CODE
  270. AND TEMP1.MATERIEL_CODE=WMS_STK_TRAY_DTL.MATERIEL_CODE),
  271. FinalInventoryQTY=WMS_STK_TRAY_DTL.QTY+(
  272. SELECT
  273. QTY = (CASE WHEN TYPE='OUT' THEN 0-QTY ELSE QTY END) FROM
  274. VM_WMS_WAREHOUSE_INVENTORY TEMP1
  275. WHERE
  276. TEMP1.TO_DATE>GETDATE() AND
  277. TEMP1.TRAY_CODE=WMS_STK_BALANCE.TRAY_CODE
  278. AND TEMP1.MATERIEL_CODE=WMS_STK_TRAY_DTL.MATERIEL_CODE)
  279. FROM WMS_STK_BALANCE
  280. JOIN WMS_STK_TRAY ON WMS_STK_TRAY.TRAY_CODE=WMS_STK_BALANCE.TRAY_CODE
  281. JOIN WMS_STK_TRAY_DTL ON WMS_STK_TRAY.TRAY_ID=WMS_STK_TRAY_DTL.TRAY_ID
  282. JOIN VM_WMS_WAREHOUSE_INVENTORY TEMP ON WMS_STK_TRAY.TRAY_CODE=TEMP.TRAY_CODE AND
  283. WMS_STK_TRAY_DTL.MATERIEL_CODE=TEMP.MATERIEL_CODE
  284. WHERE 1=1 {sql}
  285. GROUP BY TEMP.WAREHOUSE_CODE,TEMP.WAREHOUSE_NAME,
  286. TEMP.MATERIEL_TYPE_NAME,TEMP.MATERIEL_NAME,TEMP.UNIT_NAME,TEMP.BATCH_NO,
  287. WMS_STK_BALANCE.TRAY_CODE,WMS_STK_TRAY_DTL.MATERIEL_CODE,WMS_STK_TRAY_DTL.QTY
  288. ) INTEMP
  289. WHERE 1=1
  290. ";
  291. sqlAndBuilder = new StringBuilder();
  292. sqlAndBuilder = string.IsNullOrWhiteSpace(info.UnitCode) ?
  293. sqlAndBuilder :
  294. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("FinalInventoryQTY", info.FinalInventoryQTY, DBOperationString._ContainIn,
  295. "INTEMP"
  296. ));
  297. sqlAndBuilder = string.IsNullOrWhiteSpace(info.UnitCode) ?
  298. sqlAndBuilder :
  299. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("InStockQTY", info.InStockQTY, DBOperationString._ContainIn,
  300. "INTEMP"
  301. ));
  302. sqlAndBuilder = string.IsNullOrWhiteSpace(info.UnitCode) ?
  303. sqlAndBuilder :
  304. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("OutStockQTY", info.OutStockQTY, DBOperationString._ContainIn,
  305. "INTEMP"
  306. ));
  307. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  308. IEnumerable<WarehouseInventoryResult> result;
  309. IEnumerable<WarehouseInventoryResult> totalResult;
  310. totalResult = new DataRepository<WarehouseInventoryResult>(_dataContext).Query(sql);
  311. if (info.PageIndex == 0 || info.PageSize == 0)
  312. {
  313. result = totalResult.ToList();
  314. }
  315. else
  316. {
  317. result = new DataRepository<WarehouseInventoryResult>(_dataContext).QueryPage(sql,
  318. "WAREHOUSE_CODE", info.PageSize, info.PageIndex, true);
  319. }
  320. return SuccessStatus(new PageQueryResultInfo<WarehouseInventoryResult>
  321. {
  322. RowData = result,
  323. PageConditionInfo = info,
  324. TotalCount = totalResult.Count(),
  325. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  326. });
  327. }
  328. /// <summary>
  329. /// 获取库位使用情况列表
  330. /// </summary>
  331. /// <param name="info"></param>
  332. /// <returns></returns>
  333. public OperateResultInfo<PageQueryResultInfo<BinUseSituationResult>> GetBinUseSituationList(BinUseSituationCondition info)
  334. {
  335. var sql = string.Empty;
  336. var sqlTemp = string.Empty;
  337. var sqlTemp1 = string.Empty;
  338. var sqlAndBuilder = new StringBuilder();
  339. var sqlOrBuilder = new StringBuilder();
  340. //仓库
  341. sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
  342. sqlOrBuilder :
  343. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("WAREHOUSE_CODE", info.WarehouseInfo, DBOperationString._ContainIn));
  344. sqlOrBuilder = string.IsNullOrWhiteSpace(info.WarehouseInfo) ?
  345. sqlOrBuilder :
  346. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("MATERIEL_NAME", info.WarehouseInfo, DBOperationString._ContainIn));
  347. sqlTemp1 = sqlTemp1 + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  348. //库区
  349. sqlOrBuilder = string.IsNullOrWhiteSpace(info.RegionInfo) ?
  350. sqlOrBuilder :
  351. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("REGION_CODE", info.RegionInfo, DBOperationString._ContainIn));
  352. sqlOrBuilder = string.IsNullOrWhiteSpace(info.RegionInfo) ?
  353. sqlOrBuilder :
  354. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("REGION_NAME", info.RegionInfo, DBOperationString._ContainIn));
  355. sqlTemp1 = sqlTemp1 + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  356. sqlAndBuilder = new StringBuilder();
  357. sqlAndBuilder = info.BinQTY > 0 ? sqlAndBuilder :
  358. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("BinQTY", info.BinQTY, DBOperationString._ContainIn, "TEMP"
  359. ));
  360. sqlAndBuilder = info.IdleBinQTY > 0 ? sqlAndBuilder :
  361. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("IdleBinQTY", info.IdleBinQTY, DBOperationString._ContainIn, "TEMP"
  362. ));
  363. sqlAndBuilder = info.InstockOccupyQTY > 0 ? sqlAndBuilder :
  364. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("InstockOccupyQTY", info.InstockOccupyQTY, DBOperationString._ContainIn, "TEMP"
  365. ));
  366. sqlAndBuilder = info.DisableOccupyQTY > 0 ? sqlAndBuilder :
  367. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("InstockOccupyQTY", info.DisableOccupyQTY, DBOperationString._ContainIn, "TEMP"
  368. ));
  369. sqlAndBuilder = info.OutstockOccupyQTY > 0 ? sqlAndBuilder :
  370. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("OutstockOccupyQTY", info.OutstockOccupyQTY, DBOperationString._ContainIn, "TEMP"
  371. ));
  372. sqlAndBuilder = info.EmplyBinQTY > 0 ? sqlAndBuilder :
  373. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("EmplyBinQTY", info.EmplyBinQTY, DBOperationString._ContainIn, "TEMP"
  374. ));
  375. sqlAndBuilder = info.FullBinQTY > 0 ? sqlAndBuilder :
  376. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("FullBinQTY", info.FullBinQTY, DBOperationString._ContainIn, "TEMP"
  377. ));
  378. sqlAndBuilder = info.IdleBinQTY > 0 ? sqlAndBuilder :
  379. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("IdleBinQTY", info.IdleBinQTY, DBOperationString._ContainIn, "TEMP"
  380. ));
  381. sqlTemp = (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  382. sql = $@"
  383. SELECT * FROM (SELECT BAS_BIN.AREA_CODE,BAS_BIN.AREA_NAME,REGION_CODE,REGION_NAME,
  384. BAS_BIN.WAREHOUSE_CODE,BAS_BIN.WAREHOUSE_NAME,
  385. BinQTY=(SELECT COUNT(1) FROM BAS_BIN WHERE USED_FLAG=1),
  386. IdleBinQTY=(SELECT COUNT(DISTINCT BAS_BIN.BIN_CODE)
  387. FROM BAS_BIN JOIN WMS_STK_BALANCE B1 ON BAS_BIN.BIN_CODE=BAS_BIN.BIN_CODE
  388. WHERE B1.BALANCE_STATUS IN(0,100,111)
  389. AND USED_FLAG=1),
  390. EmplyBinQTY=(SELECT COUNT(DISTINCT B1.BIN_CODE) FROM WMS_STK_BALANCE B1
  391. JOIN WMS_STK_TRAY T1 ON T1.TRAY_CODE=B1.TRAY_CODE
  392. JOIN WMS_STK_TRAY_DTL T2 ON T1.TRAY_ID=T2.TRAY_ID
  393. WHERE B1.BALANCE_STATUS NOT IN(0,100) AND BAS_BIN.USED_FLAG=1
  394. AND T1.TRAY_LOADED_TYPE=3
  395. AND B1.BALANCE_STATUS IN(99)
  396. ),
  397. FullBinQTY=(SELECT COUNT(DISTINCT B1.BIN_CODE) FROM WMS_STK_BALANCE B1
  398. JOIN WMS_STK_TRAY T1 ON T1.TRAY_CODE=B1.TRAY_CODE
  399. JOIN WMS_STK_TRAY_DTL T2 ON T1.TRAY_ID=T2.TRAY_ID
  400. WHERE B1.BALANCE_STATUS NOT IN(0,100) AND BAS_BIN.USED_FLAG=1
  401. AND T1.TRAY_LOADED_TYPE=1
  402. AND B1.BALANCE_STATUS IN(99)),
  403. InstockOccupyQTY=
  404. (SELECT COUNT(DISTINCT B1.BIN_CODE) FROM WMS_STK_BALANCE B1
  405. JOIN WMS_STK_TRAY T1 ON T1.TRAY_CODE=B1.TRAY_CODE
  406. JOIN WMS_STK_TRAY_DTL T2 ON T1.TRAY_ID=T2.TRAY_ID
  407. WHERE B1.BALANCE_STATUS NOT IN(0,100) AND BAS_BIN.USED_FLAG=1
  408. AND B1.BALANCE_STATUS IN(11,22,33)
  409. AND T2.TRAY_DTL_STATUS IN(11,22,33)),
  410. OutstockOccupyQTY=
  411. (SELECT COUNT(DISTINCT B1.BIN_CODE) FROM WMS_STK_BALANCE B1
  412. JOIN WMS_STK_TRAY T1 ON T1.TRAY_CODE=B1.TRAY_CODE
  413. JOIN WMS_STK_TRAY_DTL T2 ON T1.TRAY_ID=T2.TRAY_ID
  414. WHERE B1.BALANCE_STATUS NOT IN(0,100)
  415. AND BAS_BIN.BIN_CODE=B1.BIN_CODE and BAS_BIN.USED_FLAG=1
  416. AND B1.BALANCE_STATUS IN(66,77,88)
  417. AND T2.TRAY_DTL_STATUS IN(66,77,88)),
  418. DisableOccupyQTY=
  419. (SELECT COUNT(DISTINCT B1.BIN_CODE) FROM BAS_BIN
  420. JOIN WMS_STK_BALANCE B1 ON BAS_BIN.BIN_CODE=B1.BIN_CODE
  421. JOIN WMS_STK_TRAY T1 ON T1.TRAY_CODE=B1.TRAY_CODE
  422. JOIN WMS_STK_TRAY_DTL T2 ON T1.TRAY_ID=T2.TRAY_ID
  423. WHERE B1.BALANCE_STATUS NOT IN(0,100) AND BAS_BIN.USED_FLAG=1
  424. AND B1.BALANCE_STATUS IN(111)
  425. AND T2.TRAY_DTL_STATUS IN(111))
  426. FROM BAS_BIN WHERE USED_FLAG=1 {sqlTemp1}
  427. GROUP BY
  428. BAS_BIN.AREA_CODE,BAS_BIN.AREA_NAME,
  429. BAS_BIN.WAREHOUSE_CODE,BAS_BIN.WAREHOUSE_NAME,
  430. BAS_BIN.USED_FLAG,BAS_BIN.BIN_CODE,REGION_CODE,REGION_NAME
  431. ) TEMP
  432. WHERE 1=1 {sqlTemp}
  433. ";
  434. IEnumerable<BinUseSituationResult> result;
  435. IEnumerable<BinUseSituationResult> totalResult;
  436. totalResult = new DataRepository<BinUseSituationResult>(_dataContext).Query(sql);
  437. if (info.PageIndex == 0 || info.PageSize == 0)
  438. {
  439. result = totalResult.ToList();
  440. }
  441. else
  442. {
  443. result = new DataRepository<BinUseSituationResult>(_dataContext).QueryPage(sql,
  444. "WAREHOUSE_CODE", info.PageSize, info.PageIndex, true);
  445. }
  446. return SuccessStatus(new PageQueryResultInfo<BinUseSituationResult>
  447. {
  448. RowData = result,
  449. PageConditionInfo = info,
  450. TotalCount = totalResult.Count(),
  451. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  452. });
  453. }
  454. /// <summary>
  455. /// 获取任务报表列表
  456. /// </summary>
  457. /// <param name="info"></param>
  458. /// <returns></returns>
  459. public OperateResultInfo<PageQueryResultInfo<WMSTaskReportResult>> GetWMSTaskReportList(WMSTaskReportCondition info)
  460. {
  461. var sql = string.Empty;
  462. var sqlOrBuilder = new StringBuilder();
  463. var sqlAndBuilder = new StringBuilder();
  464. sql = $@"SELECT WMS_TSK_TASK.WAREHOUSE_CODE,WMS_TSK_TASK.WAREHOUSE_NAME,
  465. WMS_TSK_TASK.TASK_NO,WMS_TSK_TASK.TRAY_CODE,WMS_TSK_TASK.PALLET_CODE,
  466. WMS_TSK_TASK.TRAY_LOADED_TYPE,WMS_TSK_TASK.SLOC_CODE,WMS_TSK_TASK.ELOC_CODE,WMS_TSK_TASK.CLOC_CODE,
  467. WMS_TSK_TASK.TASK_TYPE,WMS_TSK_TASK.TASK_STATUS,WMS_TSK_TASK.SBIN_CODE,WMS_TSK_TASK.EBIN_CODE,
  468. TASK_DETAIL.CMD_NO,WMS_TSK_TASK.TASK_PRIORITY,WMS_TSK_TASK.TASK_MSG,
  469. TrayLoadedTypeName=
  470. {_iSQLNodeRepository.GetEnumIntCaseString<TrayLoadedType>("TRAY_LOADED_TYPE", "WMS_TSK_TASK")},
  471. TaskTypeName=
  472. {_iSQLNodeRepository.GetEnumIntCaseString<TaskType>("TASK_TYPE", "WMS_TSK_TASK")},
  473. TaskStatusName=
  474. {_iSQLNodeRepository.GetEnumIntCaseString<TaskStatus>("TASK_STATUS", "WMS_TSK_TASK")},
  475. WMS_TSK_TASK.CREATE_TIME
  476. FROM WMS_TSK_TASK
  477. JOIN (
  478. SELECT TYPE = 'CRN', TASK_NO, CMD_NO, TRAY_STATUS, DEV_NO = CRN_DEV_NO, CMD_TYPE, ACTIVE_TYPE, CMD_STATUS, CMD_LOG, ERR_FLAG ,PALLET_CODE
  479. FROM WCS_CRN_CMD
  480. WHERE EXISTS(
  481. SELECT * FROM(
  482. SELECT TASK_NO, CMD_NO, ID = MAX(CRN_CMD_ID) FROM WCS_CRN_CMD
  483. WHERE FINISH_TIME IS NULL GROUP BY TASK_NO, CMD_NO) TEMP WHERE TEMP.ID = WCS_CRN_CMD.CRN_CMD_ID)
  484. UNION
  485. SELECT TYPE = 'TRAN', TASK_NO, CMD_NO, TRAY_STATUS, DEV_NO = TRAN_DEV_NO, CMD_TYPE, ACTIVE_TYPE, CMD_STATUS, CMD_LOG, ERR_FLAG ,PALLET_CODE
  486. FROM WCS_TRAN_CMD
  487. WHERE EXISTS(
  488. SELECT * FROM(
  489. SELECT TASK_NO, CMD_NO, ID = MAX(TRAN_CMD_ID) FROM WCS_TRAN_CMD
  490. WHERE FINISH_TIME IS NULL GROUP BY TASK_NO, CMD_NO) TEMP WHERE TEMP.ID = WCS_TRAN_CMD.TRAN_CMD_ID)
  491. UNION
  492. SELECT TYPE = 'AGV', TASK_NO, CMD_NO, TRAY_STATUS, DEV_NO = AGV_CMD_ID, CMD_TYPE, ACTIVE_TYPE, CMD_STATUS, CMD_LOG, ERR_FLAG ,PALLET_CODE
  493. FROM WCS_AGV_CMD
  494. WHERE EXISTS(
  495. SELECT * FROM(
  496. SELECT TASK_NO, CMD_NO, ID = MAX(AGV_CMD_ID) FROM WCS_AGV_CMD
  497. WHERE FINISH_TIME IS NULL GROUP BY TASK_NO, CMD_NO) TEMP WHERE TEMP.ID = WCS_AGV_CMD.AGV_CMD_ID)
  498. ) TASK_DETAIL
  499. ON TASK_DETAIL.TASK_NO = WMS_TSK_TASK.TASK_NO
  500. LEFT JOIN BAS_PALLET ON BAS_PALLET.PALLET_CODE=TASK_DETAIL.PALLET_CODE
  501. LEFT JOIN BAS_BIN EBAS_BIN ON WMS_TSK_TASK.EBIN_CODE = EBAS_BIN.BIN_CODE
  502. LEFT JOIN BAS_BIN SBAS_BIN ON WMS_TSK_TASK.SBIN_CODE = SBAS_BIN.BIN_CODE
  503. WHERE 1=1
  504. ";
  505. sqlAndBuilder = string.IsNullOrWhiteSpace(info.ElocBinCode) ?
  506. sqlAndBuilder :
  507. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("EBIN_CODE", info.ElocBinCode, DBOperationString._Equal, "WMS_TSK_TASK"));
  508. sqlAndBuilder = string.IsNullOrWhiteSpace(info.SlocBinCode) ?
  509. sqlAndBuilder :
  510. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("SBIN_CODE", info.SlocBinCode, DBOperationString._Equal, "WMS_TSK_TASK"));
  511. sqlAndBuilder = string.IsNullOrWhiteSpace(info.ElocCode) ?
  512. sqlAndBuilder :
  513. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("ELOC_CODE", info.ElocCode, DBOperationString._Equal, "WMS_TSK_TASK"));
  514. sqlAndBuilder = string.IsNullOrWhiteSpace(info.SlocCode) ?
  515. sqlAndBuilder :
  516. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("SLOC_CODE", info.SlocCode, DBOperationString._Equal, "WMS_TSK_TASK"));
  517. sqlAndBuilder = string.IsNullOrWhiteSpace(info.TaskNo) ?
  518. sqlAndBuilder :
  519. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("TASK_NO", info.TaskNo, DBOperationString._ContainIn, "WMS_TSK_TASK"));
  520. sqlAndBuilder = info.TaskStatus == null ?
  521. sqlAndBuilder :
  522. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("TASK_STATUS", info.TaskStatus, DBOperationString._Equal, "WMS_TSK_TASK"));
  523. sqlAndBuilder = info.TaskType == null ?
  524. sqlAndBuilder :
  525. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("TASK_TYPE", info.TaskType, DBOperationString._Equal, "WMS_TSK_TASK"));
  526. sqlAndBuilder = info.LoadedStatus == null ?
  527. sqlAndBuilder :
  528. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("TRAY_LOADED_TYP", info.LoadedStatus, DBOperationString._Equal, "WMS_TSK_TASK"));
  529. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  530. //托盘号
  531. sqlOrBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
  532. sqlOrBuilder :
  533. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("PALLET_CODE", info.PalletInfo, DBOperationString._ContainIn, "BAS_PALLET"));
  534. sqlOrBuilder = string.IsNullOrWhiteSpace(info.PalletInfo) ?
  535. sqlOrBuilder :
  536. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("PALLET_NAME", info.PalletInfo, DBOperationString._ContainIn, "BAS_PALLET"));
  537. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  538. IEnumerable<WMSTaskReportResult> result;
  539. IEnumerable<WMSTaskReportResult> totalResult;
  540. totalResult = new DataRepository<WMSTaskReportResult>(_dataContext).Query(sql);
  541. if (info.PageIndex == 0 || info.PageSize == 0)
  542. {
  543. result = totalResult.ToList();
  544. }
  545. else
  546. {
  547. result = new DataRepository<WMSTaskReportResult>(_dataContext).QueryPage(sql,
  548. "CREATE_TIME", info.PageSize, info.PageIndex, true);
  549. }
  550. return SuccessStatus(new PageQueryResultInfo<WMSTaskReportResult>
  551. {
  552. RowData = result,
  553. PageConditionInfo = info,
  554. TotalCount = totalResult.Count(),
  555. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  556. });
  557. }
  558. /// <summary>
  559. /// 报警情况统计报表
  560. /// </summary>
  561. /// <param name="info"></param>
  562. /// <returns></returns>
  563. public OperateResultInfo<PageQueryResultInfo<FaultStatisticsReportResult>> GetFaultStatisticsReportList(FaultStatisticsReportCondition info)
  564. {
  565. var sql = string.Empty;
  566. var sqlOrBuilder = new StringBuilder();
  567. var sqlAndBuilder = new StringBuilder();
  568. sql = $@"SELECT
  569. DevTypeCode = WCS_BAS_DEV_TYPE.DEV_TYPE_CODE,DevTypeName = WCS_BAS_DEV_TYPE.DEV_TYPE_NAME,
  570. DevCode = WCS_BAS_DEV.DEV_CODE,DevName = WCS_BAS_DEV.DEV_NAME,
  571. FaultLevelName='',
  572. WMS_LOG_FAULT_MSG.* FROM WMS_LOG_FAULT_MSG
  573. JOIN WCS_BAS_DEV ON WMS_LOG_FAULT_MSG.FAULT_DEV_CODE=WCS_BAS_DEV.DEV_CODE
  574. JOIN WCS_BAS_DEV_TYPE ON WCS_BAS_DEV.DEV_TYPE_CODE=WCS_BAS_DEV_TYPE.DEV_TYPE_CODE
  575. WHERE 1=1
  576. ";
  577. //{ _iSQLNodeRepository.GetEnumIntCaseString<FaultLevel>("FAULT_LEVEL", "WMS_LOG_FAULT_MSG")},
  578. //库位
  579. sqlOrBuilder = string.IsNullOrWhiteSpace(info.DevInfo) ?
  580. sqlOrBuilder :
  581. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("DEV_CODE", info.DevInfo, DBOperationString._ContainIn, "WCS_BAS_DEV"));
  582. sqlOrBuilder = string.IsNullOrWhiteSpace(info.DevInfo) ?
  583. sqlOrBuilder :
  584. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("DEV_NAME", info.DevInfo, DBOperationString._ContainIn, "WCS_BAS_DEV"));
  585. //库位类型
  586. sqlOrBuilder = string.IsNullOrWhiteSpace(info.DevTypeInfo) ?
  587. sqlOrBuilder :
  588. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("DEV_TYPE_CODE", info.DevTypeInfo, DBOperationString._ContainIn, "WCS_BAS_DEV_TYPE"));
  589. sqlOrBuilder = string.IsNullOrWhiteSpace(info.DevTypeInfo) ?
  590. sqlOrBuilder :
  591. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("DEV_TYPE_NAME", info.DevTypeInfo, DBOperationString._ContainIn, "WCS_BAS_DEV_TYPE"));
  592. //报警信息
  593. sqlOrBuilder = string.IsNullOrWhiteSpace(info.FaultInfo) ?
  594. sqlOrBuilder :
  595. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("FAULT_NO", info.FaultInfo, DBOperationString._ContainIn, "WMS_LOG_FAULT_MSG"));
  596. sqlOrBuilder = string.IsNullOrWhiteSpace(info.FaultInfo) ?
  597. sqlOrBuilder :
  598. sqlOrBuilder.Append(_iSQLNodeRepository.GetOrCondition("FAULT_DESC", info.FaultInfo, DBOperationString._ContainIn, "WMS_LOG_FAULT_MSG"));
  599. sql = sql + (sqlOrBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlOrBuilder, false) : "");
  600. sqlAndBuilder = info.FaultBeginTimeLen > 0 ?
  601. sqlAndBuilder :
  602. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("FAULT_TIME_LEN", info.FaultBeginTimeLen, DBOperationString._LargeEqual, "WMS_LOG_FAULT_MSG"));
  603. sqlAndBuilder = info.FaultEndTimeLen > 0 ?
  604. sqlAndBuilder :
  605. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("FAULT_TIME_LEN", info.FaultEndTimeLen, DBOperationString._SmallEqual, "WMS_LOG_FAULT_MSG"));
  606. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  607. IEnumerable<FaultStatisticsReportResult> result;
  608. IEnumerable<FaultStatisticsReportResult> totalResult;
  609. totalResult = new DataRepository<FaultStatisticsReportResult>(_dataContext).Query(sql);
  610. if (info.PageIndex == 0 || info.PageSize == 0)
  611. {
  612. result = totalResult.ToList();
  613. }
  614. else
  615. {
  616. result = new DataRepository<FaultStatisticsReportResult>(_dataContext).QueryPage(sql,
  617. "CREATE_TIME", info.PageSize, info.PageIndex, true);
  618. }
  619. return SuccessStatus(new PageQueryResultInfo<FaultStatisticsReportResult>
  620. {
  621. RowData = result,
  622. PageConditionInfo = info,
  623. TotalCount = totalResult.Count(),
  624. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  625. });
  626. }
  627. /// <summary>
  628. /// 获取班次作业情况统计
  629. /// </summary>
  630. /// <param name="info"></param>
  631. /// <returns></returns>
  632. public OperateResultInfo<PageQueryResultInfo<FrequencyStatisticsResult>> GetFrequencyStatisticsReportList(FrequencyStatisticsCondition info)
  633. {
  634. var scheduleConfigList = new List<ScheduleConfig>()
  635. .AddGet(new ScheduleConfig
  636. {
  637. ScheduleCode = "Day",
  638. ScheduleName = "白班",
  639. DetailList = new List<ScheduleDetailConfig>()
  640. .AddGet(new ScheduleDetailConfig
  641. {
  642. BeginTime = "8:00",
  643. EndTime = "10:00",
  644. })
  645. .AddGet(new ScheduleDetailConfig
  646. {
  647. BeginTime = "10:00",
  648. EndTime = "12:00",
  649. })
  650. .AddGet(new ScheduleDetailConfig
  651. {
  652. BeginTime = "12:00",
  653. EndTime = "14:00",
  654. })
  655. .AddGet(new ScheduleDetailConfig
  656. {
  657. BeginTime = "14:00",
  658. EndTime = "16:00",
  659. })
  660. .AddGet(new ScheduleDetailConfig
  661. {
  662. BeginTime = "16:00",
  663. EndTime = "18:00",
  664. })
  665. .AddGet(new ScheduleDetailConfig
  666. {
  667. BeginTime = "18:00",
  668. EndTime = "20:00",
  669. })
  670. });
  671. var sql = string.Empty;
  672. var sqlOrBuilder = new StringBuilder();
  673. var sqlAndBuilder = new StringBuilder();
  674. var sqlTempList = new List<string>();
  675. sqlAndBuilder = string.IsNullOrWhiteSpace(info.ScheduleCode) ?
  676. sqlAndBuilder :
  677. sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("schedule_code", info.ScheduleCode, DBOperationString._LargeEqual, "WMS_LOG_FAULT_MSG"));
  678. var scheduleInfo = scheduleConfigList.Where(s => s.ScheduleCode == info.ScheduleCode).FirstOrDefault();
  679. if (scheduleInfo == null)
  680. {
  681. return FailMessageStatus("排单编码错误!", new PageQueryResultInfo<FrequencyStatisticsResult>());
  682. }
  683. if (!string.IsNullOrWhiteSpace(info.SectionStr))
  684. {
  685. scheduleInfo.DetailList = scheduleInfo.DetailList.Where(s => s.BeginTime + "-" + s.EndTime == info.SectionStr).ToList();
  686. }
  687. //排班
  688. for (int i = 0; i < scheduleInfo.DetailList.Count; i++)
  689. {
  690. sqlTempList.Add(string.Format(@"SELECT Date = '{0}',Schedule = '{1}',
  691. ScheduleTimeSection = '{2}-{3}',
  692. ReceiptOrderQTY=
  693. (SELECT COUNT(*) FROM WMS_IN_RECEIPT
  694. WHERE RECEIPT_STATUS!=111 AND CONVERT(VARCHAR(100),UPDATE_TIME,23) = '{0}'
  695. AND CONVERT(VARCHAR(100),UPDATE_TIME,8) BETWEEN
  696. '{2}' AND '{3}'),
  697. ReceiptTrayQTY=
  698. (SELECT COUNT(DISTINCT WMS_STK_TRAY.NEWID) FROM WMS_IN_RECEIPT
  699. JOIN WMS_IN_RECEIPT_DTL ON WMS_IN_RECEIPT.RECEIPT_ID=WMS_IN_RECEIPT_DTL.RECEIPT_ID
  700. JOIN WMS_IN_RECEIPT_RECORD ON WMS_IN_RECEIPT_RECORD.RECEIPT_DTL_ID=WMS_IN_RECEIPT_DTL.RECEIPT_DTL_ID
  701. JOIN WMS_STK_TRAY ON WMS_IN_RECEIPT_RECORD.TRAY_CODE=WMS_STK_TRAY.TRAY_CODE
  702. WHERE RECEIPT_STATUS!=111 AND WMS_IN_RECEIPT_DTL.RECEIPT_DTL_STATUS!=111
  703. AND WMS_IN_RECEIPT_RECORD.RECEIPT_RECORD_STATUS!=2
  704. AND CONVERT(VARCHAR(100),WMS_IN_RECEIPT.UPDATE_TIME,23) = '{0}'
  705. AND CONVERT(VARCHAR(100),WMS_IN_RECEIPT.UPDATE_TIME,8) BETWEEN
  706. '{2}' AND '{3}'),
  707. InvoiceQTY=
  708. (SELECT COUNT(*) FROM WMS_OUT_INVOICE
  709. WHERE INVOICE_STATUS!=111
  710. AND CONVERT(VARCHAR(100),WMS_OUT_INVOICE.UPDATE_TIME,23) = '{0}'
  711. AND CONVERT(VARCHAR(100),WMS_OUT_INVOICE.UPDATE_TIME,8) BETWEEN
  712. '{2}' AND '{3}'),
  713. InvoiceExamineQTY=
  714. (SELECT COUNT(*) FROM WMS_OUT_INVOICE
  715. WHERE INVOICE_STATUS=11
  716. AND CONVERT(VARCHAR(100),WMS_OUT_INVOICE.UPDATE_TIME,23) = '{0}'
  717. AND CONVERT(VARCHAR(100),WMS_OUT_INVOICE.UPDATE_TIME,8) BETWEEN
  718. '{2}' AND '{3}'),
  719. PutAwayQTY=
  720. (SELECT COUNT(*) FROM WMS_IN_PUTAWAY
  721. WHERE PUTAWAY_STATUS!='111'
  722. AND CONVERT(VARCHAR(100),WMS_IN_PUTAWAY.UPDATE_TIME,23) = '{0}'
  723. AND CONVERT(VARCHAR(100),WMS_IN_PUTAWAY.UPDATE_TIME,8) BETWEEN
  724. '{2}' AND '{3}'),
  725. PutDownQTY=
  726. (SELECT COUNT(*) FROM WMS_OUT_PUTDOWN
  727. WHERE PUTDOWN_STATUS!='111'
  728. AND CONVERT(VARCHAR(100),WMS_OUT_PUTDOWN.UPDATE_TIME,23) = '{0}'
  729. AND CONVERT(VARCHAR(100),WMS_OUT_PUTDOWN.UPDATE_TIME,8) BETWEEN
  730. '{2}' AND '{3}')", info.Date.ToShortDateString(), scheduleInfo.ScheduleName,
  731. scheduleInfo.DetailList[i].BeginTime, scheduleInfo.DetailList[i].EndTime
  732. ));
  733. }
  734. sql = string.Join("\r\n UNION ", sqlTempList);
  735. IEnumerable<FrequencyStatisticsResult> result;
  736. IEnumerable<FrequencyStatisticsResult> totalResult;
  737. totalResult = new DataRepository<FrequencyStatisticsResult>(_dataContext).Query(sql);
  738. if (info.PageIndex == 0 || info.PageSize == 0)
  739. {
  740. result = totalResult.ToList();
  741. }
  742. else
  743. {
  744. result = new DataRepository<FrequencyStatisticsResult>(_dataContext).QueryPage(sql, "ScheduleTimeSection", info.PageSize, info.PageIndex, true);
  745. }
  746. return SuccessStatus(new PageQueryResultInfo<FrequencyStatisticsResult>
  747. {
  748. RowData = result,
  749. PageConditionInfo = info,
  750. TotalCount = totalResult.Count(),
  751. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  752. });
  753. }
  754. /// <summary>
  755. /// 获取预警报告列表
  756. /// </summary>
  757. /// <param name="info"></param>
  758. /// <returns></returns>
  759. public OperateResultInfo<PageQueryResultInfo<EarlyWarningReportResult>> GetEarlyWarningReportList(EarlyWarningReportCondition info)
  760. {
  761. var sql = string.Empty;
  762. var sqlOrBuilder = new StringBuilder();
  763. var sqlAndBuilder = new StringBuilder();
  764. sql = $@"SELECT
  765. CreateName = (SELECT USER_NAME FROM SYS_USER A WHERE A.USER_ID=CREATE_BY),
  766. UpdateName = (SELECT USER_NAME FROM SYS_USER B WHERE B.USER_ID=UPDATE_BY),
  767. SendFlagName = '未发送',
  768. {info.ItemSQL} FROM WMS_LOG_EARLY_WARNING WHERE 1=1 ";
  769. sqlAndBuilder = info.WarningBeginTime != null ?
  770. sqlAndBuilder :
  771. sqlAndBuilder.Append(_iSQLNodeRepository.GetOrCondition("WARNING_TIME", info.WarningBeginTime, DBOperationString._LargeEqual));
  772. sqlAndBuilder = info.WarningEndTime != null ?
  773. sqlAndBuilder :
  774. sqlAndBuilder.Append(_iSQLNodeRepository.GetOrCondition("WARNING_TIME", info.WarningEndTime, DBOperationString._SmallEqual));
  775. sqlAndBuilder = string.IsNullOrWhiteSpace(info.WarningParam) ?
  776. sqlAndBuilder :
  777. sqlAndBuilder.Append(_iSQLNodeRepository.GetOrCondition("WARNING_PARAM", info.WarningParam, DBOperationString._ContainIn));
  778. sqlAndBuilder = string.IsNullOrWhiteSpace(info.WarningDescribe) ?
  779. sqlAndBuilder :
  780. sqlAndBuilder.Append(_iSQLNodeRepository.GetOrCondition("WARNING_DESCRIBE", info.WarningDescribe, DBOperationString._ContainIn));
  781. sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
  782. IEnumerable<EarlyWarningReportResult> result;
  783. IEnumerable<EarlyWarningReportResult> totalResult;
  784. totalResult = new DataRepository<EarlyWarningReportResult>(_dataContext).Query(sql);
  785. if (info.PageIndex == 0 || info.PageSize == 0)
  786. {
  787. result = totalResult.ToList();
  788. }
  789. else
  790. {
  791. result = new DataRepository<EarlyWarningReportResult>(_dataContext).QueryPage(sql, "WARNING_TIME", info.PageSize, info.PageIndex, true);
  792. }
  793. return SuccessStatus(new PageQueryResultInfo<EarlyWarningReportResult>
  794. {
  795. RowData = result,
  796. PageConditionInfo = info,
  797. TotalCount = totalResult.Count(),
  798. TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
  799. });
  800. }
  801. }
  802. }