WmsOutInvoiceService.cs 122 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969
  1. using DapperORMCore.Context.DataContext;
  2. using DapperORMCore.Model.CoreModel;
  3. using DapperORMCore.Repository.IRepositorys;
  4. using Microsoft.Extensions.Configuration;
  5. using NXWMS.IService.NXWMS.OutStock;
  6. using NXWMS.Model.AppModels.Condition.Balance;
  7. using NXWMS.Model.AppModels.Condition.OutStock;
  8. using NXWMS.Model.AppModels.Result.Balance;
  9. using NXWMS.Model.AppModels.Result.Base;
  10. using NXWMS.Model.AppModels.Result.OutStock;
  11. using NXWMS.Model.Common;
  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.OutStock
  19. {
  20. /// <summary>
  21. /// 发货单服务
  22. /// </summary>
  23. [AutoInject(typeof(IWmsOutInvoiceService), InjectType.Scope)]
  24. public class WmsOutInvoiceService : ServiceBase, IWmsOutInvoiceService
  25. {
  26. #region 全局变量、构造注入
  27. /// <summary>
  28. /// 系统操作仓储中转
  29. /// </summary>
  30. private IDataRepositoryContext _dataContext;
  31. /// <summary>
  32. /// SQL节点仓储
  33. /// </summary>
  34. private ISQLNodeRepository _iSQLNodeRepository;
  35. /// <summary>
  36. /// 配置
  37. /// </summary>
  38. private IConfiguration _configuration;
  39. /// <summary>
  40. /// 构造注入
  41. /// </summary>
  42. /// <param name="dataRepositoryContext"></param>
  43. /// <param name="configuration"></param>
  44. /// <param name="iSQLNodeRepository"></param>
  45. public WmsOutInvoiceService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository)
  46. {
  47. this._dataContext = dataRepositoryContext;
  48. this._configuration = configuration;
  49. this._iSQLNodeRepository = iSQLNodeRepository;
  50. }
  51. #endregion
  52. /// <summary>
  53. /// 分页查询发货单主表数据
  54. /// </summary>
  55. /// <param name="invoiceSearchMd">发货单查询条件实体类对象</param>
  56. /// <returns></returns>
  57. public OperateResultInfo<List<WmsOutInvoiceResult>> GetWmsOutInvoiceListForPage(WmsOutInvoiceSearchMd invoiceSearchMd)
  58. {
  59. try
  60. {
  61. #region SQL语句生成
  62. StringBuilder sqlCondition = new StringBuilder();
  63. if (!string.IsNullOrEmpty(invoiceSearchMd.InvoiceNoMsg))
  64. {
  65. sqlCondition.Append($" AND INVOICE_NO = '{invoiceSearchMd.InvoiceNoMsg}'");
  66. }
  67. if (!string.IsNullOrEmpty(invoiceSearchMd.SourceNoMsg))
  68. {
  69. sqlCondition.Append($" AND SOURCE_BILL_NO = '{invoiceSearchMd.SourceNoMsg}'");
  70. }
  71. if (!string.IsNullOrEmpty(invoiceSearchMd.MaterielMsg))
  72. {
  73. sqlCondition.Append($" AND INVOICE_ID IN (SELECT INVOICE_ID FROM VW_WMS_OUT_INVOICE_DTL WHERE MATERIEL_CODE LIKE '%{invoiceSearchMd.MaterielMsg}%' OR MATERIEL_NAME LIKE '%{invoiceSearchMd.MaterielMsg}%' OR MATERIEL_BARCODE LIKE '%{invoiceSearchMd.MaterielMsg}%'");
  74. }
  75. if (!string.IsNullOrEmpty(invoiceSearchMd.InvoiceType))
  76. {
  77. sqlCondition.Append($" AND INVOICE_TYPE = '{invoiceSearchMd.InvoiceType}'");
  78. }
  79. if (!string.IsNullOrEmpty(invoiceSearchMd.InvoiceStatus))
  80. {
  81. sqlCondition.Append($" AND INVOICE_STATUS = '{invoiceSearchMd.InvoiceStatus}'");
  82. }
  83. if (!string.IsNullOrEmpty(invoiceSearchMd.SupplierMsg))
  84. {
  85. sqlCondition.Append($" AND INVOICE_ID IN (SELECT INVOICE_ID FROM VW_WMS_OUT_INVOICE_DTL WHERE SUPPLIER_CODE LIKE '%{invoiceSearchMd.SupplierMsg}%' OR SUPPLIER_NAME LIKE '%{invoiceSearchMd.SupplierMsg}%')");
  86. }
  87. if (!string.IsNullOrEmpty(invoiceSearchMd.StartCreateTime))
  88. {
  89. sqlCondition.Append($" AND CREATE_TIME >= '{invoiceSearchMd.StartCreateTime}'");
  90. }
  91. if (!string.IsNullOrEmpty(invoiceSearchMd.EndCreateTime))
  92. {
  93. sqlCondition.Append($" AND CREATE_TIME <= '{invoiceSearchMd.EndCreateTime}'");
  94. }
  95. if (!string.IsNullOrEmpty(invoiceSearchMd.StartInvoiceEndTime))
  96. {
  97. sqlCondition.Append($" AND INVOICE_END_TIME >= '{invoiceSearchMd.StartInvoiceEndTime}'");
  98. }
  99. if (!string.IsNullOrEmpty(invoiceSearchMd.EndInvoiceEndTime))
  100. {
  101. sqlCondition.Append($" AND INVOICE_END_TIME <= '{invoiceSearchMd.EndInvoiceEndTime}'");
  102. }
  103. StringBuilder sqlCountInspectionData = new StringBuilder($@"SELECT COUNT(1) FROM VW_WMS_OUT_INVOICE WHERE 1=1");
  104. sqlCountInspectionData.Append(sqlCondition.ToString());
  105. int pageStartIndex = (invoiceSearchMd.PageNum - 1) * invoiceSearchMd.EveryPageQty;
  106. int pageEndIndex = invoiceSearchMd.PageNum * invoiceSearchMd.EveryPageQty;
  107. StringBuilder sqlQueryInspectionData = new StringBuilder($@"
  108. SELECT
  109. INVOICE_ID,
  110. INVOICE_NO,
  111. INVOICE_TYPE,
  112. INVOICE_TYPE_NAME,
  113. BATCH_NO,
  114. SOURCE_BILL_NO,
  115. INVOICE_PRIORITY,
  116. INVOICE_END_TIME,
  117. INVOICE_STATUS,
  118. INVOICE_STATUS_NAME,
  119. DESCRIBE,
  120. CREATE_BY,
  121. CREATE_NAME,
  122. CREATE_TIME,
  123. UPDATE_BY,
  124. UPDATE_NAME,
  125. UPDATE_TIME
  126. FROM
  127. VW_WMS_OUT_INVOICE
  128. WHERE
  129. 1=1
  130. {sqlCondition}
  131. ORDER BY UPDATE_TIME DESC,CREATE_TIME DESC
  132. OFFSET {pageStartIndex} ROWS
  133. FETCH NEXT {invoiceSearchMd.EveryPageQty} ROWS ONLY
  134. ");
  135. #endregion
  136. int dataCount = Convert.ToInt32(new DataRepository<object>(_dataContext).ExecuteScalar(sqlCountInspectionData.ToString()));
  137. List<WmsOutInvoiceResult> resultList = new DataRepository<WmsOutInvoiceResult>(_dataContext).Query(sqlQueryInspectionData.ToString()).ToList();
  138. OperateResultInfo<List<WmsOutInvoiceResult>> retDataMsg = SuccessStatus(resultList);
  139. retDataMsg.DataCount = dataCount;
  140. return retDataMsg;
  141. }
  142. catch (Exception ex)
  143. {
  144. return FailMessageStatus<List<WmsOutInvoiceResult>>($"查询发货单数据发生异常,【{ex.Message}】", null);
  145. }
  146. }
  147. /// <summary>
  148. /// 根据发货单主键Id查询发货单明细数据
  149. /// </summary>
  150. /// <param name="wmsOutInvoice">发货单实体类对象</param>
  151. /// <returns></returns>
  152. public OperateResultInfo<WmsOutInvoiceResult> GetWmsOutInvoiceDtlListForID(WmsOutInvoiceResult wmsOutInvoice)
  153. {
  154. try
  155. {
  156. #region SQL语句生成
  157. string sqlQueryWmsOutInvoice = $@"
  158. SELECT
  159. INVOICE_ID,
  160. INVOICE_NO,
  161. INVOICE_TYPE,
  162. INVOICE_TYPE_NAME,
  163. BATCH_NO,
  164. SOURCE_BILL_NO,
  165. INVOICE_PRIORITY,
  166. INVOICE_END_TIME,
  167. INVOICE_STATUS,
  168. INVOICE_STATUS_NAME,
  169. DESCRIBE,
  170. CREATE_BY,
  171. CREATE_NAME,
  172. CREATE_TIME,
  173. UPDATE_BY,
  174. UPDATE_NAME,
  175. UPDATE_TIME
  176. FROM
  177. VW_WMS_OUT_INVOICE
  178. WHERE
  179. INVOICE_ID = '{wmsOutInvoice.INVOICE_ID}'
  180. ";
  181. string strWhere = string.Empty;
  182. if (wmsOutInvoice.REMARKS1 == "查询已删除明细数据")
  183. {
  184. strWhere = "1=1";
  185. }
  186. else
  187. {
  188. strWhere = "INVOICE_DTL_STATUS < 99";
  189. }
  190. string sqlQueryWmsInArivalDtl = $@"
  191. SELECT
  192. *
  193. FROM
  194. VW_WMS_OUT_INVOICE_DTL
  195. WHERE
  196. INVOICE_ID = '{wmsOutInvoice.INVOICE_ID}'
  197. AND {strWhere}
  198. ORDER BY INVOICE_DTL_STATUS,INVOICE_DTL_ID
  199. ";
  200. #endregion
  201. List<WmsOutInvoiceResult> resultList = new DataRepository<WmsOutInvoiceResult>(_dataContext).Query(sqlQueryWmsOutInvoice).ToList();
  202. List<WmsOutInvoiceDtlResult> resultDtlList = new DataRepository<WmsOutInvoiceDtlResult>(_dataContext).Query(sqlQueryWmsInArivalDtl).ToList();
  203. wmsOutInvoice = resultList[0];
  204. wmsOutInvoice.WmsOutInvoiceDtlList = resultDtlList;
  205. OperateResultInfo<WmsOutInvoiceResult> retDataMsg = SuccessStatus(wmsOutInvoice);
  206. return retDataMsg;
  207. }
  208. catch (Exception ex)
  209. {
  210. return FailMessageStatus<WmsOutInvoiceResult>($"查询发货单明细数据发生异常,【{ex.Message}】", null);
  211. }
  212. }
  213. /// <summary>
  214. /// 新增发货单数据
  215. /// </summary>
  216. /// <param name="wmsOutInvoice">发货单主表对象</param>
  217. /// <returns></returns>
  218. public OperateResultInfo AddWmsOutInvoiceData(WmsOutInvoiceResult wmsOutInvoice)
  219. {
  220. try
  221. {
  222. #region SQL语句生成
  223. List<string> sqlList = new List<string>();
  224. wmsOutInvoice.INVOICE_ID = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Invoice_Id"));
  225. wmsOutInvoice.INVOICE_NO = new DataRepository<object>(_dataContext).GetSequenceMsg("Invoice_No");
  226. wmsOutInvoice.INVOICE_STATUS = 0;
  227. StringBuilder sqlAddWmsOutInvoice = new StringBuilder();
  228. string invoiceEndTime = DateTime.Compare(wmsOutInvoice.INVOICE_END_TIME, new DateTime()) == 0 ? "NULL" : $"'{wmsOutInvoice.INVOICE_END_TIME}'";
  229. sqlAddWmsOutInvoice.Append($@"
  230. INSERT INTO [WMS_OUT_INVOICE] (
  231. [INVOICE_ID],
  232. [INVOICE_NO],
  233. [INVOICE_TYPE],
  234. [INVOICE_END_TIME],
  235. [BATCH_NO],
  236. [SOURCE_BILL_NO],
  237. [INVOICE_PRIORITY],
  238. [INVOICE_STATUS],
  239. [DESCRIBE],
  240. [CREATE_BY],
  241. [CREATE_TIME],
  242. [UPDATE_BY],
  243. [UPDATE_TIME],
  244. [DATA_VERSION],
  245. [REMARKS1],
  246. [REMARKS2],
  247. [REMARKS3],
  248. [REMARKS4],
  249. [REMARKS5]
  250. )
  251. VALUES
  252. (
  253. '{wmsOutInvoice.INVOICE_ID}',
  254. '{wmsOutInvoice.INVOICE_NO}',
  255. '{wmsOutInvoice.INVOICE_TYPE}',
  256. {invoiceEndTime},
  257. '{wmsOutInvoice.BATCH_NO}',
  258. '{wmsOutInvoice.SOURCE_BILL_NO}',
  259. '{wmsOutInvoice.INVOICE_PRIORITY}',
  260. '{wmsOutInvoice.INVOICE_STATUS}',
  261. '{wmsOutInvoice.DESCRIBE}',
  262. '{wmsOutInvoice.CREATE_BY}',
  263. getdate(),
  264. '{wmsOutInvoice.UPDATE_BY}',
  265. getdate(),
  266. '{0}',
  267. NULL,
  268. NULL,
  269. NULL,
  270. NULL,
  271. NULL
  272. );
  273. ");
  274. sqlList.Add(sqlAddWmsOutInvoice.ToString());
  275. foreach (WmsOutInvoiceDtlResult item in wmsOutInvoice.WmsOutInvoiceDtlList)
  276. {
  277. StringBuilder sqlAddWmsOutInvoiceDtl = new StringBuilder();
  278. item.INVOICE_DTL_ID = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Invoice_Dtl_Id"));
  279. item.INVOICE_ID = wmsOutInvoice.INVOICE_ID;
  280. item.INVOICE_DTL_STATUS = 0;
  281. string productTime = DateTime.Compare(item.PRODUCT_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'";
  282. string expTime = DateTime.Compare(item.EXP_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'";
  283. sqlAddWmsOutInvoiceDtl.Append($@"
  284. INSERT INTO [WMS_OUT_INVOICE_DTL] (
  285. [INVOICE_DTL_ID],
  286. [INVOICE_ID],
  287. [MATERIEL_CODE],
  288. [MATERIEL_NAME],
  289. [MATERIEL_BARCODE],
  290. [MATERIEL_SPEC],
  291. [PACKAGE_CODE],
  292. [UNIT_CODE],
  293. [BATCH_NO],
  294. [SUPPLIER_CODE],
  295. [SUPPLIER_NAME],
  296. [INVOICE_DEMAND_QTY],
  297. [INVOICE_CONFIRM_QTY],
  298. [PUTDOWN_QTY],
  299. [PRODUCT_DATE],
  300. [EXP_DATE],
  301. [INVOICE_DTL_STATUS],
  302. [INSPECTION_RESULT],
  303. [ITEM_STATUS],
  304. [SOURCE_BILL_DTL_IDX],
  305. [DESCRIBE],
  306. [CREATE_BY],
  307. [CREATE_TIME],
  308. [UPDATE_BY],
  309. [UPDATE_TIME],
  310. [DATA_VERSION],
  311. [REMARKS1],
  312. [REMARKS2],
  313. [REMARKS3],
  314. [REMARKS4],
  315. [REMARKS5]
  316. )
  317. VALUES
  318. (
  319. '{item.INVOICE_DTL_ID}',
  320. '{item.INVOICE_ID}',
  321. '{item.MATERIEL_CODE}',
  322. '{item.MATERIEL_NAME}',
  323. '{item.MATERIEL_BARCODE}',
  324. '{item.MATERIEL_SPEC}',
  325. '{item.PACKAGE_CODE}',
  326. '{item.UNIT_CODE}',
  327. '{item.BATCH_NO}',
  328. '{item.SUPPLIER_CODE}',
  329. '{item.SUPPLIER_NAME}',
  330. '{item.INVOICE_DEMAND_QTY}',
  331. '{item.INVOICE_CONFIRM_QTY}',
  332. '{item.PUTDOWN_QTY}',
  333. {productTime},
  334. {expTime},
  335. '{item.INVOICE_DTL_STATUS}',
  336. '{item.INSPECTION_RESULT}',
  337. '{item.ITEM_STATUS}',
  338. '{item.SOURCE_BILL_DTL_IDX}',
  339. '{item.DESCRIBE}',
  340. '{item.CREATE_BY}',
  341. getdate(),
  342. '{item.UPDATE_BY}',
  343. getdate(),
  344. '{0}',
  345. NULL,
  346. NULL,
  347. NULL,
  348. NULL,
  349. NULL
  350. );
  351. ");
  352. sqlList.Add(sqlAddWmsOutInvoiceDtl.ToString());
  353. }
  354. #endregion
  355. int row = new DataRepository<object>(_dataContext).ExecSqlListTran(sqlList);
  356. if (row > 0)
  357. {
  358. return SuccessMessageStatus("新增发货单数据成功!", row);
  359. }
  360. else
  361. {
  362. return FailMessageStatus("新增发货单数据失败!", row);
  363. }
  364. }
  365. catch (Exception ex)
  366. {
  367. return FailMessageStatus($"新增发货单数据发生异常,【{ex.Message}】");
  368. }
  369. }
  370. /// <summary>
  371. /// 修改发货单数据
  372. /// </summary>
  373. /// <param name="wmsOutInvoice">发货单主表对象</param>
  374. /// <returns></returns>
  375. public OperateResultInfo EditWmsOutInvoiceData(WmsOutInvoiceResult wmsOutInvoice)
  376. {
  377. try
  378. {
  379. #region SQL语句生成
  380. List<string> sqlList = new List<string>();
  381. string invoiceEndTime = DateTime.Compare(wmsOutInvoice.INVOICE_END_TIME, new DateTime()) == 0 ? "NULL" : $"'{wmsOutInvoice.INVOICE_END_TIME}'";
  382. string sqlUpdateWmsOutInvoice = $@"
  383. UPDATE [WMS_OUT_INVOICE]
  384. SET
  385. [INVOICE_NO] = '{wmsOutInvoice.INVOICE_NO}',
  386. [INVOICE_TYPE] = '{wmsOutInvoice.INVOICE_TYPE}',
  387. [INVOICE_END_TIME] = {invoiceEndTime},
  388. [BATCH_NO] = '{wmsOutInvoice.BATCH_NO}',
  389. [SOURCE_BILL_NO] = '{wmsOutInvoice.SOURCE_BILL_NO}',
  390. [INVOICE_PRIORITY] = '{wmsOutInvoice.INVOICE_PRIORITY}',
  391. [INVOICE_STATUS] = '{wmsOutInvoice.INVOICE_STATUS}',
  392. [DESCRIBE] = '{wmsOutInvoice.DESCRIBE}',
  393. [UPDATE_BY] = '{wmsOutInvoice.UPDATE_BY}',
  394. [UPDATE_TIME] = getdate(),
  395. [DATA_VERSION] = [DATA_VERSION] + 1
  396. WHERE
  397. ([INVOICE_ID] = '{wmsOutInvoice.INVOICE_ID}');
  398. ";
  399. sqlList.Add(sqlUpdateWmsOutInvoice);
  400. foreach (WmsOutInvoiceDtlResult item in wmsOutInvoice.WmsOutInvoiceDtlList)
  401. {
  402. if (item.REMARKS1 == "更新" || item.REMARKS1 == "删除")
  403. {
  404. string productTime = DateTime.Compare(item.PRODUCT_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'";
  405. string expTime = DateTime.Compare(item.EXP_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'";
  406. string sqlUpdateWmsOutInvoiceDtl = $@"
  407. UPDATE [WMS_OUT_INVOICE_DTL]
  408. SET
  409. [MATERIEL_CODE] = '{item.MATERIEL_CODE}',
  410. [MATERIEL_NAME] = '{item.MATERIEL_NAME}',
  411. [MATERIEL_BARCODE] = '{item.MATERIEL_BARCODE}',
  412. [MATERIEL_SPEC] = '{item.MATERIEL_SPEC}',
  413. [PACKAGE_CODE] = '{item.PACKAGE_CODE}',
  414. [UNIT_CODE] = '{item.UNIT_CODE}',
  415. [BATCH_NO] = '{item.BATCH_NO}',
  416. [SUPPLIER_CODE] = '{item.SUPPLIER_CODE}',
  417. [SUPPLIER_NAME] = '{item.SUPPLIER_NAME}',
  418. [INVOICE_DEMAND_QTY] = '{item.INVOICE_DEMAND_QTY}',
  419. [INVOICE_CONFIRM_QTY] = '{item.INVOICE_CONFIRM_QTY}',
  420. [PUTDOWN_QTY] = '{item.PUTDOWN_QTY}',
  421. [PRODUCT_DATE] = {productTime},
  422. [EXP_DATE] = {expTime},
  423. [INVOICE_DTL_STATUS] = '{item.INVOICE_DTL_STATUS}',
  424. [INSPECTION_RESULT] = '{item.INSPECTION_RESULT}',
  425. [ITEM_STATUS] = '{item.ITEM_STATUS}',
  426. [SOURCE_BILL_DTL_IDX] = '{item.SOURCE_BILL_DTL_IDX}',
  427. [DESCRIBE] = '{item.DESCRIBE}',
  428. [UPDATE_BY] = '{item.UPDATE_BY}',
  429. [UPDATE_TIME] = GETDATE(),
  430. [DATA_VERSION] = [DATA_VERSION] + 1
  431. WHERE
  432. ([INVOICE_DTL_ID] = '{item.INVOICE_DTL_ID}');
  433. ";
  434. sqlList.Add(sqlUpdateWmsOutInvoiceDtl);
  435. }
  436. if (item.REMARKS1 == "添加")
  437. {
  438. StringBuilder sqlAddWmsOutInvoiceDtl = new StringBuilder();
  439. item.INVOICE_DTL_ID = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Invoice_Dtl_Id"));
  440. item.INVOICE_ID = wmsOutInvoice.INVOICE_ID;
  441. item.INVOICE_DTL_STATUS = 0;
  442. string productTime = DateTime.Compare(item.PRODUCT_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'";
  443. string expTime = DateTime.Compare(item.EXP_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'";
  444. sqlAddWmsOutInvoiceDtl.Append($@"
  445. INSERT INTO [WMS_OUT_INVOICE_DTL] (
  446. [INVOICE_DTL_ID],
  447. [INVOICE_ID],
  448. [MATERIEL_CODE],
  449. [MATERIEL_NAME],
  450. [MATERIEL_BARCODE],
  451. [MATERIEL_SPEC],
  452. [PACKAGE_CODE],
  453. [UNIT_CODE],
  454. [BATCH_NO],
  455. [SUPPLIER_CODE],
  456. [SUPPLIER_NAME],
  457. [INVOICE_DEMAND_QTY],
  458. [INVOICE_CONFIRM_QTY],
  459. [PUTDOWN_QTY],
  460. [PRODUCT_DATE],
  461. [EXP_DATE],
  462. [INVOICE_DTL_STATUS],
  463. [INSPECTION_RESULT],
  464. [ITEM_STATUS],
  465. [SOURCE_BILL_DTL_IDX],
  466. [DESCRIBE],
  467. [CREATE_BY],
  468. [CREATE_TIME],
  469. [UPDATE_BY],
  470. [UPDATE_TIME],
  471. [DATA_VERSION],
  472. [REMARKS1],
  473. [REMARKS2],
  474. [REMARKS3],
  475. [REMARKS4],
  476. [REMARKS5]
  477. )
  478. VALUES
  479. (
  480. '{item.INVOICE_DTL_ID}',
  481. '{item.INVOICE_ID}',
  482. '{item.MATERIEL_CODE}',
  483. '{item.MATERIEL_NAME}',
  484. '{item.MATERIEL_BARCODE}',
  485. '{item.MATERIEL_SPEC}',
  486. '{item.PACKAGE_CODE}',
  487. '{item.UNIT_CODE}',
  488. '{item.BATCH_NO}',
  489. '{item.SUPPLIER_CODE}',
  490. '{item.SUPPLIER_NAME}',
  491. '{item.INVOICE_DEMAND_QTY}',
  492. '{item.INVOICE_CONFIRM_QTY}',
  493. '{item.PUTDOWN_QTY}',
  494. {productTime},
  495. {expTime},
  496. '{item.INVOICE_DTL_STATUS}',
  497. '{item.INSPECTION_RESULT}',
  498. '{item.ITEM_STATUS}',
  499. '{item.SOURCE_BILL_DTL_IDX}',
  500. '{item.DESCRIBE}',
  501. '{item.CREATE_BY}',
  502. getdate(),
  503. '{item.UPDATE_BY}',
  504. getdate(),
  505. '{0}',
  506. NULL,
  507. NULL,
  508. NULL,
  509. NULL,
  510. NULL
  511. );
  512. ");
  513. sqlList.Add(sqlAddWmsOutInvoiceDtl.ToString());
  514. }
  515. }
  516. #endregion
  517. int row = new DataRepository<object>(_dataContext).ExecSqlListTran(sqlList);
  518. if (row > 0)
  519. {
  520. return SuccessMessageStatus("修改发货单数据成功!", row);
  521. }
  522. else
  523. {
  524. return FailMessageStatus("修改发货单数据失败!", row);
  525. }
  526. }
  527. catch (Exception ex)
  528. {
  529. return FailMessageStatus($"修改发货单数据发生异常,【{ex.Message}】");
  530. }
  531. }
  532. /// <summary>
  533. /// 删除发货单数据
  534. /// </summary>
  535. /// <param name="wmsOutInvoice">发货单主表对象</param>
  536. /// <returns></returns>
  537. public OperateResultInfo DeleteWmsOutInvoiceData(WmsOutInvoiceResult wmsOutInvoice)
  538. {
  539. try
  540. {
  541. #region SQL语句生成
  542. string[] invoiceIdList = wmsOutInvoice.INVOICE_NO.Split(',');
  543. List<string> sqlList = new List<string>();
  544. foreach (string item in invoiceIdList)
  545. {
  546. string sqlDeleteWmsOutInvoice = $@"
  547. UPDATE WMS_OUT_INVOICE
  548. SET INVOICE_STATUS = '111',
  549. UPDATE_BY = '{wmsOutInvoice.UPDATE_BY}',
  550. UPDATE_TIME = GETDATE(),
  551. DATA_VERSION = DATA_VERSION + 1
  552. WHERE
  553. INVOICE_ID = '{item}';
  554. ";
  555. string sqlDeleteWmsOutInvoiceDtl = $@"
  556. UPDATE WMS_OUT_INVOICE_DTL
  557. SET INVOICE_DTL_STATUS = '111',
  558. UPDATE_BY = '{wmsOutInvoice.UPDATE_BY}',
  559. UPDATE_TIME = GETDATE(),
  560. DATA_VERSION = DATA_VERSION + 1
  561. WHERE
  562. INVOICE_ID = '{item}';
  563. ";
  564. sqlList.Add(sqlDeleteWmsOutInvoice);
  565. sqlList.Add(sqlDeleteWmsOutInvoiceDtl);
  566. /*
  567. ToDo: 后续增加删除移至历史表中。
  568. */
  569. }
  570. #endregion
  571. int row = new DataRepository<object>(_dataContext).ExecSqlListTran(sqlList);
  572. if (row > 0)
  573. {
  574. return SuccessMessageStatus("删除发货单数据成功!", row);
  575. }
  576. else
  577. {
  578. return FailMessageStatus("删除发货单数据失败!", row);
  579. }
  580. }
  581. catch (Exception ex)
  582. {
  583. return FailMessageStatus($"删除发货单数据发生异常,【{ex.Message}】");
  584. }
  585. }
  586. /// <summary>
  587. /// 分页查询发货记录数据
  588. /// </summary>
  589. /// <param name="receiptRecordSearchMd">发货记录查询条件实体类对象</param>
  590. /// <returns></returns>
  591. public OperateResultInfo<List<WmsOutInvoiceRecordResult>> GetWmsOutInvoiceRecordListForPage(WmsOutInvoiceRecordSearchMd receiptRecordSearchMd)
  592. {
  593. try
  594. {
  595. #region SQL语句生成
  596. StringBuilder sqlCondition = new StringBuilder();
  597. if (!string.IsNullOrEmpty(receiptRecordSearchMd.InvoiceNoMsg))
  598. {
  599. sqlCondition.Append($" AND INVOICE_NO = '{receiptRecordSearchMd.InvoiceNoMsg}'");
  600. }
  601. if (!string.IsNullOrEmpty(receiptRecordSearchMd.SourceNoMsg))
  602. {
  603. sqlCondition.Append($" AND SOURCE_BILL_NO = '{receiptRecordSearchMd.SourceNoMsg}'");
  604. }
  605. if (!string.IsNullOrEmpty(receiptRecordSearchMd.RegionNoMsg))
  606. {
  607. sqlCondition.Append($" AND REGION_CODE = '{receiptRecordSearchMd.RegionNoMsg}'");
  608. }
  609. if (!string.IsNullOrEmpty(receiptRecordSearchMd.BinNoMsg))
  610. {
  611. sqlCondition.Append($" AND (BIN_CODE like '%{receiptRecordSearchMd.BinNoMsg}%' OR BIN_NAME like '%{receiptRecordSearchMd.BinNoMsg}%')");
  612. }
  613. if (!string.IsNullOrEmpty(receiptRecordSearchMd.PalletNoMsg))
  614. {
  615. sqlCondition.Append($" AND PALLET_CODE = '{receiptRecordSearchMd.PalletNoMsg}'");
  616. }
  617. if (!string.IsNullOrEmpty(receiptRecordSearchMd.PriorityMsg))
  618. {
  619. sqlCondition.Append($" AND INVOICE_PRIORITY = '{receiptRecordSearchMd.PriorityMsg}'");
  620. }
  621. if (!string.IsNullOrEmpty(receiptRecordSearchMd.MaterielMsg))
  622. {
  623. sqlCondition.Append($" AND (MATERIEL_CODE like '%{receiptRecordSearchMd.MaterielMsg}%' OR MATERIEL_NAME = '%{receiptRecordSearchMd.MaterielMsg}%')");
  624. }
  625. if (!string.IsNullOrEmpty(receiptRecordSearchMd.MaterielTypeMsg))
  626. {
  627. sqlCondition.Append($" AND (MATERIEL_TYPE_CODE = '%{receiptRecordSearchMd.MaterielTypeMsg}%' OR MATERIEL_TYPE_NAME = '%{receiptRecordSearchMd.MaterielTypeMsg}%')");
  628. }
  629. if (!string.IsNullOrEmpty(receiptRecordSearchMd.SupplierMsg))
  630. {
  631. sqlCondition.Append($" AND SUPPLIER_CODE = '{receiptRecordSearchMd.SupplierMsg}'");
  632. }
  633. if (!string.IsNullOrEmpty(receiptRecordSearchMd.BatchNoMsg))
  634. {
  635. sqlCondition.Append($" AND BATCH_NO = '{receiptRecordSearchMd.SupplierMsg}'");
  636. }
  637. if (!string.IsNullOrEmpty(receiptRecordSearchMd.ItemStatusMsg))
  638. {
  639. sqlCondition.Append($" AND ITEM_STATUS = '{receiptRecordSearchMd.ItemStatusMsg}'");
  640. }
  641. if (!string.IsNullOrEmpty(receiptRecordSearchMd.InspectionResultMsg))
  642. {
  643. sqlCondition.Append($" AND INSPECTION_RESULT = '{receiptRecordSearchMd.InspectionResultMsg}'");
  644. }
  645. if (!string.IsNullOrEmpty(receiptRecordSearchMd.InvoiceRecordStatus))
  646. {
  647. sqlCondition.Append($" AND INVOICE_RECORD_STATUS = '{receiptRecordSearchMd.InvoiceRecordStatus}'");
  648. }
  649. if (!string.IsNullOrEmpty(receiptRecordSearchMd.StartInvoiceEndTime))
  650. {
  651. sqlCondition.Append($" AND INVOICE_END_TIME >= '{receiptRecordSearchMd.StartInvoiceEndTime}'");
  652. }
  653. if (!string.IsNullOrEmpty(receiptRecordSearchMd.EndInvoiceEndTime))
  654. {
  655. sqlCondition.Append($" AND INVOICE_END_TIME <= '{receiptRecordSearchMd.EndInvoiceEndTime}'");
  656. }
  657. if (!string.IsNullOrEmpty(receiptRecordSearchMd.StartProductTime))
  658. {
  659. sqlCondition.Append($" AND PRODUCT_DATE >= '{receiptRecordSearchMd.StartProductTime}'");
  660. }
  661. if (!string.IsNullOrEmpty(receiptRecordSearchMd.EndProductTime))
  662. {
  663. sqlCondition.Append($" AND PRODUCT_DATE <= '{receiptRecordSearchMd.EndProductTime}'");
  664. }
  665. if (!string.IsNullOrEmpty(receiptRecordSearchMd.StartExpTime))
  666. {
  667. sqlCondition.Append($" AND EXP_DATE >= '{receiptRecordSearchMd.StartExpTime}'");
  668. }
  669. if (!string.IsNullOrEmpty(receiptRecordSearchMd.EndExpTime))
  670. {
  671. sqlCondition.Append($" AND EXP_DATE <= '{receiptRecordSearchMd.EndExpTime}'");
  672. }
  673. StringBuilder sqlCountInvoiceData = new StringBuilder($@"SELECT COUNT(1) FROM VW_WMS_OUT_INVOICE_RECORD WHERE 1=1");
  674. sqlCountInvoiceData.Append(sqlCondition.ToString());
  675. int pageStartIndex = (receiptRecordSearchMd.PageNum - 1) * receiptRecordSearchMd.EveryPageQty;
  676. int pageEndIndex = receiptRecordSearchMd.PageNum * receiptRecordSearchMd.EveryPageQty;
  677. StringBuilder sqlQueryInvoiceData = new StringBuilder($@"
  678. SELECT
  679. INVOICE_RECORD_ID,
  680. NEWID,
  681. INVOICE_ID,
  682. INVOICE_NO,
  683. SOURCE_BILL_NO,
  684. INVOICE_PRIORITY,
  685. INVOICE_DTL_ID,
  686. REGION_CODE,
  687. REGION_NAME,
  688. BIN_CODE,
  689. BIN_NAME,
  690. TRAY_CODE,
  691. PALLET_CODE,
  692. INVOICE_END_TIME,
  693. MATERIEL_TYPE_CODE,
  694. MATERIEL_TYPE_NAME,
  695. MATERIEL_CODE,
  696. MATERIEL_NAME,
  697. MATERIEL_BARCODE,
  698. MATERIEL_SPEC,
  699. SUPPLIER_CODE,
  700. SUPPLIER_NAME,
  701. BATCH_NO,
  702. PACKAGE_CODE,
  703. UNIT_CODE,
  704. INVOICE_QTY,
  705. PRODUCT_DATE,
  706. EXP_DATE,
  707. INVOICE_RECORD_STATUS,
  708. INVOICE_RECORD_STATUS_NAME,
  709. INSPECTION_RESULT,
  710. INSPECTION_RESULT_NAME,
  711. ITEM_STATUS,
  712. ITEM_STATUS_NAME,
  713. [DESCRIBE],
  714. CREATE_BY,
  715. CREATE_NAME,
  716. CREATE_TIME,
  717. UPDATE_BY,
  718. UPDATE_NAME,
  719. UPDATE_TIME,
  720. DATA_VERSION,
  721. REMARKS1,
  722. REMARKS2,
  723. REMARKS3,
  724. REMARKS4,
  725. REMARKS5
  726. FROM
  727. VW_WMS_OUT_INVOICE_RECORD
  728. WHERE
  729. 1=1
  730. {sqlCondition}
  731. ORDER BY UPDATE_TIME DESC,CREATE_TIME DESC
  732. OFFSET {pageStartIndex} ROWS
  733. FETCH NEXT {receiptRecordSearchMd.EveryPageQty} ROWS ONLY
  734. ");
  735. #endregion
  736. int dataCount = Convert.ToInt32(new DataRepository<object>(_dataContext).ExecuteScalar(sqlCountInvoiceData.ToString()));
  737. List<WmsOutInvoiceRecordResult> resultList = new DataRepository<WmsOutInvoiceRecordResult>(_dataContext).Query(sqlQueryInvoiceData.ToString()).ToList();
  738. OperateResultInfo<List<WmsOutInvoiceRecordResult>> retDataMsg = SuccessStatus(resultList);
  739. retDataMsg.DataCount = dataCount;
  740. return retDataMsg;
  741. }
  742. catch (Exception ex)
  743. {
  744. return FailMessageStatus<List<WmsOutInvoiceRecordResult>>($"查询发货记录数据发生异常,【{ex.Message}】", null);
  745. }
  746. }
  747. /// <summary>
  748. /// 获取可以发货的库存数据
  749. /// </summary>
  750. /// <param name="SearchMd">库存查询实体类对象</param>
  751. /// <returns></returns>
  752. public OperateResultInfo<List<WmsStkBalanceDtlResult>> GetBalanceForInvoice(WmsStkBalanceDtlSearchMd SearchMd)
  753. {
  754. try
  755. {
  756. #region SQL语句生成
  757. string sqlQueryBalanceForInvoice = $@"
  758. SELECT
  759. MATERIEL_CODE,
  760. MATERIEL_NAME,
  761. MATERIEL_BARCODE,
  762. MATERIEL_SPEC,
  763. UNIT_CODE,
  764. PACKAGE_CODE,
  765. BATCH_NO,
  766. SUM(QTY) QTY
  767. FROM
  768. VW_WMS_STK_BALANCE_DTL
  769. WHERE
  770. TRAY_STATUS = 55
  771. AND BALANCE_STATUS = 55
  772. AND TRAY_DTL_STATUS = 55
  773. AND BATCH_NO LIKE '%{SearchMd.BatchNoMsg}%'
  774. AND (
  775. MATERIEL_CODE LIKE '%{SearchMd.MaterielMsg}%'
  776. OR MATERIEL_NAME LIKE '%{SearchMd.MaterielMsg}%'
  777. OR MATERIEL_BARCODE LIKE '%{SearchMd.MaterielMsg}%'
  778. )
  779. GROUP BY
  780. MATERIEL_CODE,
  781. MATERIEL_NAME,
  782. MATERIEL_BARCODE,
  783. MATERIEL_SPEC,
  784. UNIT_CODE,
  785. PACKAGE_CODE,
  786. BATCH_NO
  787. ";
  788. #endregion
  789. List<WmsStkBalanceDtlResult> resultList = new DataRepository<WmsStkBalanceDtlResult>(_dataContext).Query(sqlQueryBalanceForInvoice).ToList();
  790. OperateResultInfo<List<WmsStkBalanceDtlResult>> retDataMsg = SuccessStatus(resultList);
  791. return retDataMsg;
  792. }
  793. catch (Exception ex)
  794. {
  795. return FailMessageStatus<List<WmsStkBalanceDtlResult>>($"查询库存数据发生异常,【{ex.Message}】", null);
  796. }
  797. }
  798. /// <summary>
  799. /// 发货单审核 -- 自动分配
  800. /// 查询满足发货单需求的所有库存数据
  801. /// </summary>
  802. /// <param name="wmsOutInvoice">发货单实体类对象</param>
  803. /// <returns></returns>
  804. public OperateResultInfo<WmsBalanceAllocateStatus> InvoiceAllocationBalance(WmsOutInvoiceResult wmsOutInvoice)
  805. {
  806. try
  807. {
  808. string sqlQueryTrayDtlRowsCount = $@"
  809. SELECT
  810. *
  811. FROM
  812. VW_TRAY_DTL_ROWS_COUNT
  813. ORDER BY DtlRows desc
  814. ";
  815. List<WmsStkTrayDtlRowsCountResult> trayDtlRows = new DataRepository<WmsStkTrayDtlRowsCountResult>(_dataContext).Query(sqlQueryTrayDtlRowsCount).ToList();
  816. if (trayDtlRows.Count > 0)
  817. {
  818. string sqlQueryBalanceDtl = $@"
  819. SELECT
  820. *
  821. FROM
  822. VW_WMS_STK_BALANCE_DTL
  823. WHERE
  824. TRAY_STATUS = 55
  825. AND TRAY_DTL_STATUS = 55
  826. AND BALANCE_STATUS = 55
  827. ";
  828. List<WmsStkBalanceDtlResult> balanceDtlData = new DataRepository<WmsStkBalanceDtlResult>(_dataContext).Query(sqlQueryBalanceDtl).ToList();
  829. List<WmsStkTrayDtlRowsCountResultExt1> trayAllocateMsg = new List<WmsStkTrayDtlRowsCountResultExt1>();
  830. int TrayTaskIdx = 0;
  831. if (balanceDtlData.Count > 0)
  832. {
  833. #region 统计托盘明细命中订单明细的行数
  834. foreach (WmsStkTrayDtlRowsCountResult item in trayDtlRows)
  835. {
  836. //托盘库存明细
  837. List<WmsStkBalanceDtlResult> trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID);
  838. //命中订单物料明细行数
  839. int containNum = 0;
  840. foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp)
  841. {
  842. WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO);
  843. if (invoiceDtlMd != null)
  844. {
  845. containNum++;
  846. }
  847. }
  848. item.IncludedInInvoiceNum = containNum;
  849. }
  850. #endregion
  851. //已分配的托盘库存明细
  852. List<WmsStkBalanceDtlResult> AllocateBalanceDtlLst = new List<WmsStkBalanceDtlResult>();
  853. //寻找托盘明细可以全部命中订单明细行数的托盘
  854. List<WmsStkTrayDtlRowsCountResult> trayDtlRows_1 = trayDtlRows.Where(x => x.IncludedInInvoiceNum == wmsOutInvoice.WmsOutInvoiceDtlList.Count).ToList();//x.DtlRows >= wmsOutInvoice.WmsOutInvoiceDtlList.Count &&
  855. if (trayDtlRows_1.Count > 0)
  856. {
  857. WmsTrayDtlMatchedRateMd trayDtlMatchedRateMd = GetInvoiceOptimalAllocatePallet(trayDtlRows_1, balanceDtlData, wmsOutInvoice.WmsOutInvoiceDtlList);
  858. if (trayDtlMatchedRateMd.CompletelyMatchedBalanceDtl.Count > 0)
  859. {
  860. trayDtlMatchedRateMd.CompletelyMatchedBalanceDtl.OrderBy(x => x.DtlRows).OrderBy(x => x.WeightedValue);
  861. WmsStkTrayDtlRowsCountResultExt item = trayDtlMatchedRateMd.CompletelyMatchedBalanceDtl[0];
  862. List<WmsStkBalanceDtlResult> trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID);
  863. foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp)
  864. {
  865. WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO);
  866. if (invoiceDtlMd != null)
  867. {
  868. decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY;
  869. decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty;
  870. if (allocateQty < demandQty)//发货单已分配数量
  871. {
  872. wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO).AllocatedBalanceQty = allocateQty + mdTmp.QTY;
  873. }
  874. }
  875. }
  876. AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp);
  877. TrayTaskIdx++;
  878. trayAllocateMsg.Add(new WmsStkTrayDtlRowsCountResultExt1 {
  879. BALANCE_ID = item.BALANCE_ID,
  880. TRAY_ID = item.TRAY_ID,
  881. DtlRows = item.DtlRows,
  882. IncludedInInvoiceNum = item.IncludedInInvoiceNum,
  883. WeightedValue = item.WeightedValue,
  884. PalletTaskPriorityIdx = TrayTaskIdx,
  885. });
  886. return SuccessStatus(new WmsBalanceAllocateStatus {
  887. BalanceDtlResultLst = AllocateBalanceDtlLst,
  888. PalletTaskResultTask = trayAllocateMsg,
  889. });
  890. }
  891. if (trayDtlMatchedRateMd.SomeMatchedBalanceDtl.Count > 0)
  892. {
  893. trayDtlMatchedRateMd.SomeMatchedBalanceDtl.OrderByDescending(x => x.IncludedInInvoiceNum).OrderBy(x => x.WeightedValue);
  894. foreach (WmsStkTrayDtlRowsCountResultExt item in trayDtlMatchedRateMd.SomeMatchedBalanceDtl)
  895. {
  896. List<WmsStkBalanceDtlResult> trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID);
  897. int thisTrayMatchedNum = 0;
  898. foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp)
  899. {
  900. WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO);
  901. decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY;
  902. decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty;
  903. if (allocateQty < demandQty)//发货单已分配数量
  904. {
  905. wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO).AllocatedBalanceQty = allocateQty + mdTmp.QTY;
  906. thisTrayMatchedNum++;
  907. }
  908. }
  909. var isAllocateFinish = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.AllocatedBalanceQty < x.INVOICE_DEMAND_QTY);
  910. if (isAllocateFinish == null)
  911. {
  912. //if (thisTrayMatchedNum > 0)
  913. //{
  914. AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp);
  915. //}
  916. TrayTaskIdx++;
  917. trayAllocateMsg.Add(new WmsStkTrayDtlRowsCountResultExt1
  918. {
  919. BALANCE_ID = item.BALANCE_ID,
  920. TRAY_ID = item.TRAY_ID,
  921. DtlRows = item.DtlRows,
  922. IncludedInInvoiceNum = item.IncludedInInvoiceNum,
  923. WeightedValue = item.WeightedValue,
  924. PalletTaskPriorityIdx = TrayTaskIdx,
  925. });
  926. return SuccessStatus(new WmsBalanceAllocateStatus
  927. {
  928. BalanceDtlResultLst = AllocateBalanceDtlLst,
  929. PalletTaskResultTask = trayAllocateMsg,
  930. });
  931. }
  932. else
  933. {
  934. if (thisTrayMatchedNum > 0)
  935. {
  936. AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp);
  937. TrayTaskIdx++;
  938. trayAllocateMsg.Add(new WmsStkTrayDtlRowsCountResultExt1
  939. {
  940. BALANCE_ID = item.BALANCE_ID,
  941. TRAY_ID = item.TRAY_ID,
  942. DtlRows = item.DtlRows,
  943. IncludedInInvoiceNum = item.IncludedInInvoiceNum,
  944. WeightedValue = item.WeightedValue,
  945. PalletTaskPriorityIdx = TrayTaskIdx,
  946. });
  947. }
  948. }
  949. }
  950. }
  951. #region 20210305孙亚龙注释
  952. //foreach (WmsStkTrayDtlRowsCountResult item in trayDtlRows_1)
  953. //{
  954. // List<WmsStkBalanceDtlResult> trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID);
  955. // foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp)
  956. // {
  957. // WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO);
  958. // decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY;
  959. // decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty;
  960. // if (allocateQty < demandQty)//发货单已分配数量
  961. // {
  962. // wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO).AllocatedBalanceQty = allocateQty + mdTmp.QTY;
  963. // }
  964. // }
  965. // var isAllocateFinish = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.AllocatedBalanceQty < x.INVOICE_DEMAND_QTY);
  966. // if (isAllocateFinish == null)
  967. // {
  968. // AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp);
  969. // return SuccessStatus(AllocateBalanceDtlLst);
  970. // }
  971. // else
  972. // {
  973. // AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp);
  974. // }
  975. //}
  976. #endregion
  977. }
  978. else
  979. {
  980. //trayDtlRows.OrderByDescending(x => x.IncludedInInvoiceNum);
  981. //foreach (WmsStkTrayDtlRowsCountResult item in trayDtlRows)
  982. //{
  983. // List<WmsStkBalanceDtlResult> trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID);
  984. // foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp)
  985. // {
  986. // WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO);
  987. // if (invoiceDtlMd != null)
  988. // {
  989. // decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY;
  990. // decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty;
  991. // if (allocateQty < demandQty)
  992. // {
  993. // wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO).AllocatedBalanceQty = allocateQty + mdTmp.QTY;
  994. // }
  995. // }
  996. // }
  997. // var isAllocateFinish = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.AllocatedBalanceQty < x.INVOICE_DEMAND_QTY);
  998. // if (isAllocateFinish == null)
  999. // {
  1000. // AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp);
  1001. // return SuccessStatus(AllocateBalanceDtlLst);
  1002. // }
  1003. // else
  1004. // {
  1005. // AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp);
  1006. // }
  1007. //}
  1008. //return FailMessageStatus<List<WmsStkBalanceDtlResult>>($"库存不足。", AllocateBalanceDtlLst);
  1009. }
  1010. List<WmsStkTrayDtlRowsCountResult> trayDtlRows_2 = trayDtlRows.Where(x =>
  1011. x.IncludedInInvoiceNum < wmsOutInvoice.WmsOutInvoiceDtlList.Count &&
  1012. x.IncludedInInvoiceNum > 0).ToList();
  1013. if (trayDtlRows_2.Count > 0)
  1014. {
  1015. trayDtlRows_2.OrderByDescending(x => x.IncludedInInvoiceNum);
  1016. List<WmsStkTrayDtlRowsCountResultExt> stkTrayDtlRowsCountResultExtLst_2 = GetInvoiceOptimalAllocatePallet_WeightedValue(trayDtlRows_1, balanceDtlData, wmsOutInvoice.WmsOutInvoiceDtlList);
  1017. stkTrayDtlRowsCountResultExtLst_2.OrderBy(x => x.WeightedValue).OrderByDescending(x => x.IncludedInInvoiceNum);
  1018. foreach (WmsStkTrayDtlRowsCountResultExt item in stkTrayDtlRowsCountResultExtLst_2)
  1019. {
  1020. List<WmsStkBalanceDtlResult> trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID);
  1021. int thisTrayMatchedNum = 0;
  1022. foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp)
  1023. {
  1024. WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO);
  1025. if (invoiceDtlMd != null)
  1026. {
  1027. decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY;
  1028. decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty;
  1029. if (allocateQty < demandQty)
  1030. {
  1031. wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO).AllocatedBalanceQty = allocateQty + mdTmp.QTY;
  1032. thisTrayMatchedNum++;
  1033. }
  1034. }
  1035. }
  1036. var isAllocateFinish = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.AllocatedBalanceQty < x.INVOICE_DEMAND_QTY);
  1037. if (isAllocateFinish == null)
  1038. {
  1039. AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp);
  1040. TrayTaskIdx++;
  1041. trayAllocateMsg.Add(new WmsStkTrayDtlRowsCountResultExt1
  1042. {
  1043. BALANCE_ID = item.BALANCE_ID,
  1044. TRAY_ID = item.TRAY_ID,
  1045. DtlRows = item.DtlRows,
  1046. IncludedInInvoiceNum = item.IncludedInInvoiceNum,
  1047. WeightedValue = item.WeightedValue,
  1048. PalletTaskPriorityIdx = TrayTaskIdx,
  1049. });
  1050. return SuccessStatus(new WmsBalanceAllocateStatus
  1051. {
  1052. BalanceDtlResultLst = AllocateBalanceDtlLst,
  1053. PalletTaskResultTask = trayAllocateMsg,
  1054. });
  1055. }
  1056. else
  1057. {
  1058. if (thisTrayMatchedNum > 0)
  1059. {
  1060. AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp);
  1061. TrayTaskIdx++;
  1062. trayAllocateMsg.Add(new WmsStkTrayDtlRowsCountResultExt1
  1063. {
  1064. BALANCE_ID = item.BALANCE_ID,
  1065. TRAY_ID = item.TRAY_ID,
  1066. DtlRows = item.DtlRows,
  1067. IncludedInInvoiceNum = item.IncludedInInvoiceNum,
  1068. WeightedValue = item.WeightedValue,
  1069. PalletTaskPriorityIdx = TrayTaskIdx,
  1070. });
  1071. }
  1072. }
  1073. }
  1074. return FailMessageStatus<WmsBalanceAllocateStatus>($"库存不足。", new WmsBalanceAllocateStatus
  1075. {
  1076. BalanceDtlResultLst = AllocateBalanceDtlLst,
  1077. PalletTaskResultTask = trayAllocateMsg,
  1078. });
  1079. }
  1080. else
  1081. {
  1082. return FailMessageStatus($"库存不足。", new WmsBalanceAllocateStatus
  1083. {
  1084. BalanceDtlResultLst = AllocateBalanceDtlLst,
  1085. PalletTaskResultTask = trayAllocateMsg,
  1086. });
  1087. }
  1088. }
  1089. else
  1090. {
  1091. return FailMessageStatus<WmsBalanceAllocateStatus>($"未找库存数据。",null);
  1092. }
  1093. }
  1094. else
  1095. {
  1096. return FailMessageStatus<WmsBalanceAllocateStatus>($"未找库存数据。", null);
  1097. }
  1098. }
  1099. catch (Exception ex)
  1100. {
  1101. return FailMessageStatus<WmsBalanceAllocateStatus>($"发货单库存分配发生异常,【{ex.Message}】", null);
  1102. }
  1103. }
  1104. #region 20210305 孙亚龙新增发货单筛选出库托盘最优解的算法
  1105. private WmsTrayDtlMatchedRateMd GetInvoiceOptimalAllocatePallet(List<WmsStkTrayDtlRowsCountResult> tmpWmsStkTrayDtlRows, List<WmsStkBalanceDtlResult> balanceDtlData, List<WmsOutInvoiceDtlResult> WmsOutInvoiceDtlList)
  1106. {
  1107. try
  1108. {
  1109. WmsTrayDtlMatchedRateMd retMd = new WmsTrayDtlMatchedRateMd();
  1110. foreach (WmsStkTrayDtlRowsCountResult item in tmpWmsStkTrayDtlRows)
  1111. {
  1112. int matchedNum = 0;
  1113. decimal thisTrayWeightedValue = 0;
  1114. List<WmsStkBalanceDtlResult> trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID);
  1115. foreach (WmsOutInvoiceDtlResult invoiceItemMd in WmsOutInvoiceDtlList)
  1116. {
  1117. WmsStkBalanceDtlResult mdTmp = trayDtlBalanceTmp.Find(x => x.MATERIEL_CODE == invoiceItemMd.MATERIEL_CODE && x.BATCH_NO == invoiceItemMd.BATCH_NO);
  1118. decimal demandQty = invoiceItemMd.INVOICE_DEMAND_QTY;
  1119. decimal allocateQty = mdTmp.QTY;
  1120. if (allocateQty >= demandQty)
  1121. {
  1122. matchedNum++;
  1123. }
  1124. thisTrayWeightedValue += Math.Abs(allocateQty - demandQty);// 设定匹配度权值
  1125. }
  1126. WmsStkTrayDtlRowsCountResultExt tmpMd = new WmsStkTrayDtlRowsCountResultExt
  1127. {
  1128. BALANCE_ID = item.BALANCE_ID,
  1129. TRAY_ID = item.TRAY_ID,
  1130. DtlRows = item.DtlRows,
  1131. IncludedInInvoiceNum = item.IncludedInInvoiceNum,
  1132. WeightedValue = thisTrayWeightedValue
  1133. };
  1134. if (matchedNum == WmsOutInvoiceDtlList.Count)
  1135. {
  1136. retMd.CompletelyMatchedBalanceDtl.Add(tmpMd);
  1137. }
  1138. else
  1139. {
  1140. retMd.SomeMatchedBalanceDtl.Add(tmpMd);
  1141. }
  1142. }
  1143. return retMd;
  1144. }
  1145. catch
  1146. {
  1147. return new WmsTrayDtlMatchedRateMd();
  1148. }
  1149. }
  1150. private List<WmsStkTrayDtlRowsCountResultExt> GetInvoiceOptimalAllocatePallet_WeightedValue(List<WmsStkTrayDtlRowsCountResult> tmpWmsStkTrayDtlRows, List<WmsStkBalanceDtlResult> balanceDtlData, List<WmsOutInvoiceDtlResult> WmsOutInvoiceDtlList)
  1151. {
  1152. try
  1153. {
  1154. List<WmsStkTrayDtlRowsCountResultExt> retList = new List<WmsStkTrayDtlRowsCountResultExt>();
  1155. foreach (WmsStkTrayDtlRowsCountResult item in tmpWmsStkTrayDtlRows)
  1156. {
  1157. //int matchedNum = 0;
  1158. decimal thisTrayWeightedValue = 0;
  1159. List<WmsStkBalanceDtlResult> trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID);
  1160. foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp)
  1161. {
  1162. WmsOutInvoiceDtlResult invoiceItemMd = WmsOutInvoiceDtlList.FirstOrDefault(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO);
  1163. if (invoiceItemMd != null)
  1164. {
  1165. decimal demandQty = invoiceItemMd.INVOICE_DEMAND_QTY;
  1166. decimal allocateQty = mdTmp.QTY;
  1167. thisTrayWeightedValue += Math.Abs(allocateQty - demandQty);// 设定匹配度权值
  1168. }
  1169. }
  1170. WmsStkTrayDtlRowsCountResultExt tmpMd = new WmsStkTrayDtlRowsCountResultExt
  1171. {
  1172. BALANCE_ID = item.BALANCE_ID,
  1173. TRAY_ID = item.TRAY_ID,
  1174. DtlRows = item.DtlRows,
  1175. IncludedInInvoiceNum = item.IncludedInInvoiceNum,
  1176. WeightedValue = thisTrayWeightedValue
  1177. };
  1178. retList.Add(tmpMd);
  1179. }
  1180. return retList;
  1181. }
  1182. catch
  1183. {
  1184. return new List<WmsStkTrayDtlRowsCountResultExt>();
  1185. }
  1186. }
  1187. #endregion
  1188. /// <summary>
  1189. /// 发货单审核 -- 手动分配
  1190. /// 查询满足发货单需求的所有库存数据
  1191. /// </summary>
  1192. /// <param name="SearchMd">库存明细查询实体类对象</param>
  1193. /// <returns></returns>
  1194. public OperateResultInfo<List<WmsStkBalanceDtlResult>> InvoiceAllovationBalance(WmsStkBalanceDtlSearchMd SearchMd)
  1195. {
  1196. try
  1197. {
  1198. StringBuilder sqlCondition = new StringBuilder();
  1199. if (!string.IsNullOrEmpty(SearchMd.MaterielMsg))
  1200. {
  1201. sqlCondition.Append($" AND (MATERIEL_CODE like '%{SearchMd.MaterielMsg}%' OR MATERIEL_NAME like '%{SearchMd.MaterielMsg}%' OR MATERIEL_BARCODE like '%{SearchMd.MaterielMsg}%')");
  1202. }
  1203. if (!string.IsNullOrEmpty(SearchMd.BatchNoMsg))
  1204. {
  1205. sqlCondition.Append($" AND BATCH_NO = '{SearchMd.BatchNoMsg}'");
  1206. }
  1207. if (!string.IsNullOrEmpty(SearchMd.RegionMsg))
  1208. {
  1209. sqlCondition.Append($" AND REGION_CODE = '{SearchMd.RegionMsg}'");
  1210. }
  1211. if (!string.IsNullOrEmpty(SearchMd.BinMsg))
  1212. {
  1213. sqlCondition.Append($" AND (BIN_CODE LIKE '%{SearchMd.BinMsg}%' OR BIN_NAME LIKE '%{SearchMd.BinMsg}%')");
  1214. }
  1215. if (!string.IsNullOrEmpty(SearchMd.PalletMsg))
  1216. {
  1217. sqlCondition.Append($" AND PALLET_CODE = '{SearchMd.PalletMsg}'");
  1218. }
  1219. string materielCodeList = "";
  1220. string batchNoList = "";
  1221. foreach (WmsOutInvoiceDtlResult item in SearchMd.InvoiceMd.WmsOutInvoiceDtlList)
  1222. {
  1223. materielCodeList += "'" + item.MATERIEL_CODE + "',";
  1224. batchNoList += "'" + item.BATCH_NO + "',";
  1225. }
  1226. sqlCondition.Append($" AND MATERIEL_CODE IN ({materielCodeList.Substring(0, materielCodeList.Length - 1)})");
  1227. sqlCondition.Append($" AND BATCH_NO IN ({batchNoList.Substring(0, batchNoList.Length - 1)})");
  1228. string sqlQueryBalanceDtl = $@"
  1229. SELECT
  1230. *
  1231. FROM
  1232. VW_WMS_STK_BALANCE_DTL
  1233. WHERE
  1234. TRAY_STATUS = 55
  1235. AND TRAY_DTL_STATUS = 55
  1236. AND BALANCE_STATUS = 55
  1237. {sqlCondition}
  1238. ";
  1239. List<WmsStkBalanceDtlResult> balanceDtlData = new DataRepository<WmsStkBalanceDtlResult>(_dataContext).Query(sqlQueryBalanceDtl).ToList();
  1240. return SuccessStatus(balanceDtlData);
  1241. }
  1242. catch (Exception ex)
  1243. {
  1244. return FailMessageStatus<List<WmsStkBalanceDtlResult>>($"发货单手动分配,库存查询发生异常,【{ex.Message}】", null);
  1245. }
  1246. }
  1247. /// <summary>
  1248. /// 发货审核数据提交
  1249. /// </summary>
  1250. /// <param name="checkResult">发货审核实体类对象</param>
  1251. /// <returns></returns>
  1252. public OperateResultInfo SubmitInvoiceCheckResult(WmsOutInvoiceCheckResult checkResult)
  1253. {
  1254. try
  1255. {
  1256. WmsOutInvoiceResult invoiceMdResult = checkResult.InvoiceMdResult;
  1257. #region SQL语句生成
  1258. List<WmsStkTrayDtlRowsCountResultExt1> TrayIdLst = checkResult.TrayIdLst;
  1259. if (checkResult.IsAutoAllocateBalance)
  1260. {
  1261. //自动分配库存时,按照自动找库存的逻辑顺序生成托盘出库任务。
  1262. TrayIdLst.OrderBy(x => x.PalletTaskPriorityIdx);
  1263. }
  1264. else
  1265. {
  1266. //手动分配库存时,需要进行一次托盘库存分配权值计算,再按照托盘下架的权值,进行排序,最后生成出库任务
  1267. foreach (WmsStkTrayDtlRowsCountResultExt1 item in TrayIdLst)
  1268. {
  1269. string sqlQueryBalanceDtl = $@"
  1270. SELECT
  1271. *
  1272. FROM
  1273. VW_WMS_STK_BALANCE_DTL
  1274. WHERE
  1275. TRAY_STATUS = 55
  1276. AND TRAY_DTL_STATUS = 55
  1277. AND BALANCE_STATUS = 55
  1278. AND TRAY_ID = '{item.TRAY_ID}'
  1279. ";
  1280. List<WmsStkBalanceDtlResult> balanceDtlData = new DataRepository<WmsStkBalanceDtlResult>(_dataContext).Query(sqlQueryBalanceDtl).ToList();
  1281. if (balanceDtlData.Count > 0)
  1282. {
  1283. decimal thisTrayWeightedValue = 0;
  1284. int matchedNum = 0;
  1285. foreach (WmsStkBalanceDtlResult balDtlMd in balanceDtlData)
  1286. {
  1287. WmsOutInvoiceDtlResult invoiceItemMd = invoiceMdResult.WmsOutInvoiceDtlList.FirstOrDefault(x => x.MATERIEL_CODE == balDtlMd.MATERIEL_CODE && x.BATCH_NO == balDtlMd.BATCH_NO);
  1288. if (invoiceItemMd != null)
  1289. {
  1290. decimal demandQty = invoiceItemMd.INVOICE_DEMAND_QTY;
  1291. decimal allocateQty = balDtlMd.QTY;
  1292. thisTrayWeightedValue += Math.Abs(allocateQty - demandQty);// 设定匹配度权值
  1293. matchedNum++;
  1294. }
  1295. }
  1296. item.BALANCE_ID = balanceDtlData[0].BALANCE_ID;
  1297. item.DtlRows = balanceDtlData.Count;//托盘明细行数
  1298. item.IncludedInInvoiceNum = matchedNum;//匹配行数
  1299. item.WeightedValue = thisTrayWeightedValue;//匹配权值
  1300. }
  1301. }
  1302. //手动分配库存时按照托盘匹配行数倒序、和权值正序进行排序
  1303. TrayIdLst.OrderByDescending(x => x.IncludedInInvoiceNum).OrderBy(x=>x.WeightedValue);
  1304. }
  1305. List<string> sqlList = new List<string>();
  1306. string sqlUpdateInvoice = $@"
  1307. UPDATE WMS_OUT_INVOICE
  1308. SET INVOICE_STATUS = 22,
  1309. UPDATE_BY = '{invoiceMdResult.UPDATE_BY}',
  1310. UPDATE_TIME = GETDATE(),
  1311. DATA_VERSION = DATA_VERSION + 1
  1312. WHERE
  1313. INVOICE_ID = '{invoiceMdResult.INVOICE_ID}'
  1314. ";
  1315. sqlList.Add(sqlUpdateInvoice);
  1316. foreach (WmsStkTrayDtlRowsCountResultExt1 item in TrayIdLst)
  1317. {
  1318. string sqlQueryBalanceDtl = $@"
  1319. SELECT
  1320. *
  1321. FROM
  1322. VW_WMS_STK_BALANCE_DTL
  1323. WHERE
  1324. TRAY_STATUS = 55
  1325. AND TRAY_DTL_STATUS = 55
  1326. AND BALANCE_STATUS = 55
  1327. AND TRAY_ID = '{item.TRAY_ID}'
  1328. ";
  1329. List<WmsStkBalanceDtlResult> balanceDtlData = new DataRepository<WmsStkBalanceDtlResult>(_dataContext).Query(sqlQueryBalanceDtl).ToList();
  1330. if (balanceDtlData.Count > 0)
  1331. {
  1332. int putdownId = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("OutPutdown_Id"));
  1333. string putdownNo = new DataRepository<object>(_dataContext).GetSequenceMsg("OutPutdown_No");
  1334. string sqlAddPutDown = $@"
  1335. INSERT INTO [WMS_OUT_PUTDOWN] (
  1336. [PUTDOWN_ID],
  1337. [PUTDOWN_NO],
  1338. [PUTDOWN_TYPE],
  1339. [TRAY_CODE],
  1340. [PALLET_CODE],
  1341. [SBIN_CODE],
  1342. [EBIN_CODE],
  1343. [PUTDOWN_PRIORITY],
  1344. [PUTDOWN_STATUS],
  1345. [DESCRIBE],
  1346. [CREATE_BY],
  1347. [CREATE_TIME],
  1348. [UPDATE_BY],
  1349. [UPDATE_TIME],
  1350. [DATA_VERSION],
  1351. [REMARKS1],
  1352. [REMARKS2],
  1353. [REMARKS3],
  1354. [REMARKS4],
  1355. [REMARKS5],
  1356. [SOURCE_NO]
  1357. )
  1358. VALUES
  1359. (
  1360. '{putdownId}',
  1361. '{putdownNo}',
  1362. '{1}',
  1363. '{balanceDtlData[0].TRAY_CODE}',
  1364. '{balanceDtlData[0].PALLET_CODE}',
  1365. '{balanceDtlData[0].BIN_CODE}',
  1366. NULL,
  1367. '{100}',
  1368. '{0}',
  1369. NULL,
  1370. '{invoiceMdResult.UPDATE_BY}',
  1371. getdate(),
  1372. '{invoiceMdResult.UPDATE_BY}',
  1373. getdate(),
  1374. 0,
  1375. NULL,
  1376. NULL,
  1377. NULL,
  1378. NULL,
  1379. NULL,
  1380. '{invoiceMdResult.INVOICE_NO}'
  1381. );
  1382. ";
  1383. sqlList.Add(sqlAddPutDown);
  1384. string sqlUpdateBalance = $@"
  1385. UPDATE WMS_STK_BALANCE
  1386. SET BALANCE_STATUS = 66,
  1387. UPDATE_BY = '{invoiceMdResult.UPDATE_BY}',
  1388. UPDATE_TIME = GETDATE(),
  1389. DATA_VERSION = DATA_VERSION + 1
  1390. WHERE
  1391. BALANCE_ID = '{balanceDtlData[0].BALANCE_ID}'
  1392. ";
  1393. sqlList.Add(sqlUpdateBalance);
  1394. string sqlUpdateTray = $@"
  1395. UPDATE WMS_STK_TRAY
  1396. SET TRAY_STATUS = 66,
  1397. UPDATE_BY = '{invoiceMdResult.UPDATE_BY}',
  1398. UPDATE_TIME = GETDATE(),
  1399. DATA_VERSION = DATA_VERSION + 1
  1400. WHERE
  1401. TRAY_ID = '{balanceDtlData[0].TRAY_ID}'
  1402. ";
  1403. sqlList.Add(sqlUpdateTray);
  1404. int thisTrayMatchedNum = 0;
  1405. foreach (WmsStkBalanceDtlResult balDtlMd in balanceDtlData)
  1406. {
  1407. WmsOutInvoiceDtlResult invoiceDtlMd = invoiceMdResult.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == balDtlMd.MATERIEL_CODE && x.BATCH_NO == balDtlMd.BATCH_NO);
  1408. #region MyRegion
  1409. if (invoiceDtlMd != null)
  1410. {
  1411. decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY;
  1412. invoiceDtlMd.AllocatedBalanceQty = invoiceDtlMd.AllocatedBalanceQty + balDtlMd.QTY;
  1413. decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty;
  1414. if (allocateQty <= demandQty)
  1415. {
  1416. thisTrayMatchedNum++;
  1417. }
  1418. }
  1419. #endregion
  1420. int invoiceRecordId = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Invoice_Record_Id"));
  1421. int putdownDtlId = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("OutPutdown_Dtl_Id"));
  1422. string sqlAddInvoiceRecord = $@"
  1423. INSERT INTO [WMS_OUT_INVOICE_RECORD] (
  1424. [INVOICE_RECORD_ID],
  1425. [INVOICE_ID],
  1426. [INVOICE_NO],
  1427. [SOURCE_BILL_NO],
  1428. [INVOICE_DTL_ID],
  1429. [REGION_CODE],
  1430. [REGION_NAME],
  1431. [BIN_CODE],
  1432. [BIN_NAME],
  1433. [TRAY_CODE],
  1434. [PALLET_CODE],
  1435. [INVOICE_EXAMINE_USER],
  1436. [INVOICE_END_TIME],
  1437. [MATERIEL_CODE],
  1438. [MATERIEL_NAME],
  1439. [MATERIEL_BARCODE],
  1440. [MATERIEL_SPEC],
  1441. [PACKAGE_CODE],
  1442. [UNIT_CODE],
  1443. [BATCH_NO],
  1444. [SUPPLIER_CODE],
  1445. [SUPPLIER_NAME],
  1446. [INVOICE_QTY],
  1447. [PRODUCT_DATE],
  1448. [EXP_DATE],
  1449. [INSPECTION_RESULT],
  1450. [INVOICE_RECORD_STATUS],
  1451. [ITEM_STATUS],
  1452. [DESCRIBE],
  1453. [CREATE_BY],
  1454. [CREATE_TIME],
  1455. [UPDATE_BY],
  1456. [UPDATE_TIME],
  1457. [DATA_VERSION],
  1458. [REMARKS1],
  1459. [REMARKS2],
  1460. [REMARKS3],
  1461. [REMARKS4],
  1462. [REMARKS5]
  1463. )
  1464. VALUES
  1465. (
  1466. '{invoiceRecordId}',
  1467. '{invoiceMdResult.INVOICE_ID}',
  1468. '{invoiceMdResult.INVOICE_NO}',
  1469. '{invoiceMdResult.SOURCE_BILL_NO}',
  1470. '{(invoiceDtlMd == null ? 0 : invoiceDtlMd.INVOICE_DTL_ID)}',
  1471. '{balDtlMd.REGION_CODE}',
  1472. '{balDtlMd.REGION_NAME}',
  1473. '{balDtlMd.BIN_CODE}',
  1474. '{balDtlMd.BIN_NAME}',
  1475. '{balDtlMd.TRAY_CODE}',
  1476. '{balDtlMd.PALLET_CODE}',
  1477. '{invoiceMdResult.UPDATE_NAME}',
  1478. '{invoiceMdResult.INVOICE_END_TIME}',
  1479. '{balDtlMd.MATERIEL_CODE}',
  1480. '{balDtlMd.MATERIEL_NAME}',
  1481. '{balDtlMd.MATERIEL_BARCODE}',
  1482. '{balDtlMd.MATERIEL_SPEC}',
  1483. '{balDtlMd.PACKAGE_CODE}',
  1484. '{balDtlMd.UNIT_CODE}',
  1485. '{balDtlMd.BATCH_NO}',
  1486. '{balDtlMd.SUPPLIER_CODE}',
  1487. '{balDtlMd.SUPPLIER_NAME}',
  1488. '{balDtlMd.QTY}',
  1489. '{balDtlMd.PRODUCT_DATE}',
  1490. '{balDtlMd.EXP_DATE}',
  1491. '{balDtlMd.INSPECTION_RESULT}',
  1492. 0,
  1493. '{balDtlMd.ITEM_STATUS}',
  1494. '{invoiceMdResult.DESCRIBE}',
  1495. '{invoiceMdResult.UPDATE_BY}',
  1496. getdate(),
  1497. '{invoiceMdResult.UPDATE_BY}',
  1498. getdate(),
  1499. 0,
  1500. NULL,
  1501. NULL,
  1502. NULL,
  1503. NULL,
  1504. NULL
  1505. );
  1506. ";
  1507. sqlList.Add(sqlAddInvoiceRecord);
  1508. string sqlAddPutDownDtl = $@"
  1509. INSERT INTO [WMS_OUT_PUTDOWN_DTL] (
  1510. [PUTDOWN_DTL_ID],
  1511. [PUTDOWN_ID],
  1512. [MATERIEL_CODE],
  1513. [MATERIEL_NAME],
  1514. [MATERIEL_BARCODE],
  1515. [MATERIEL_SPEC],
  1516. [PACKAGE_CODE],
  1517. [UNIT_CODE],
  1518. [BATCH_NO],
  1519. [SUPPLIER_CODE],
  1520. [SUPPLIER_NAME],
  1521. [PUTDOWN_QTY],
  1522. [PRODUCT_DATE],
  1523. [EXP_DATE],
  1524. [PUTDOWN_DTL_STATUS],
  1525. [INSPECTION_RESULT],
  1526. [ITEM_STATUS],
  1527. [DESCRIBE],
  1528. [CREATE_BY],
  1529. [CREATE_TIME],
  1530. [UPDATE_BY],
  1531. [UPDATE_TIME],
  1532. [DATA_VERSION],
  1533. [REMARKS1],
  1534. [REMARKS2],
  1535. [REMARKS3],
  1536. [REMARKS4],
  1537. [REMARKS5]
  1538. )
  1539. VALUES
  1540. (
  1541. '{putdownDtlId}',
  1542. '{putdownId}',
  1543. '{balDtlMd.MATERIEL_CODE}',
  1544. '{balDtlMd.MATERIEL_NAME}',
  1545. '{balDtlMd.MATERIEL_BARCODE}',
  1546. '{balDtlMd.MATERIEL_SPEC}',
  1547. '{balDtlMd.PACKAGE_CODE}',
  1548. '{balDtlMd.UNIT_CODE}',
  1549. '{balDtlMd.BATCH_NO}',
  1550. '{balDtlMd.SUPPLIER_CODE}',
  1551. '{balDtlMd.SUPPLIER_NAME}',
  1552. '{balDtlMd.QTY}',
  1553. '{balDtlMd.PRODUCT_DATE}',
  1554. '{balDtlMd.EXP_DATE}',
  1555. '{0}',
  1556. '{balDtlMd.INSPECTION_RESULT}',
  1557. '{balDtlMd.ITEM_STATUS}',
  1558. NULL,
  1559. '{invoiceMdResult.UPDATE_BY}',
  1560. getdate(),
  1561. '{invoiceMdResult.UPDATE_BY}',
  1562. getdate(),
  1563. 0,
  1564. NULL,
  1565. NULL,
  1566. NULL,
  1567. NULL,
  1568. NULL
  1569. );
  1570. ";
  1571. sqlList.Add(sqlAddPutDownDtl);
  1572. string sqlUpdateTrayDtl = $@"
  1573. UPDATE WMS_STK_TRAY_DTL
  1574. SET TRAY_DTL_STATUS = 66,
  1575. UPDATE_BY = '{invoiceMdResult.UPDATE_BY}',
  1576. UPDATE_TIME = GETDATE(),
  1577. DATA_VERSION = DATA_VERSION + 1
  1578. WHERE
  1579. TRAY_DTL_ID = '{balDtlMd.TRAY_DTL_ID}'
  1580. ";
  1581. sqlList.Add(sqlUpdateTrayDtl);
  1582. }
  1583. string sqlQueryRetreatRegionBinMsg = $@"SELECT
  1584. A.*, B.USER_NAME Create_Name,
  1585. C.USER_NAME Update_Name
  1586. FROM
  1587. BAS_BIN A
  1588. LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
  1589. LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
  1590. WHERE
  1591. A.BIN_TYPE = '2' AND A.REGION_CODE = '{balanceDtlData[0].REGION_CODE}'";
  1592. List<BinResult> resultBinList = new DataRepository<BinResult>(_dataContext).Query(sqlQueryRetreatRegionBinMsg).ToList();
  1593. string eLocNo = string.Empty;
  1594. if (thisTrayMatchedNum == balanceDtlData.Count)
  1595. {
  1596. eLocNo = "1008";
  1597. }
  1598. else
  1599. {
  1600. eLocNo = "1001";
  1601. }
  1602. #region ToDo : 添加WMS大任务
  1603. string taskNo = new DataRepository<object>(_dataContext).GetSequenceMsg("Task_No");
  1604. string sqlInsertWmsTask = $@"
  1605. INSERT INTO [dbo].[WMS_TSK_TASK] (
  1606. [WAREHOUSE_CODE],
  1607. [WAREHOUSE_NAME],
  1608. [TASK_NO],
  1609. [TRAY_CODE],
  1610. [PALLET_CODE],
  1611. [TRAY_LOADED_TYPE],
  1612. [SLOC_CODE],
  1613. [ELOC_CODE],
  1614. [CLOC_CODE],
  1615. [TASK_TYPE],
  1616. [TASK_MSG],
  1617. [ERR_FLAG],
  1618. [TASK_PRIORITY],
  1619. [TASK_STATUS],
  1620. [SBIN_CODE],
  1621. [EBIN_CODE],
  1622. [CMD_NO],
  1623. [ROUTE_CODE],
  1624. [CREATE_BY],
  1625. [CREATE_TIME],
  1626. [UPDATE_BY],
  1627. [UPDATE_TIME],
  1628. [DATA_VERSION],
  1629. [REMARKS1],
  1630. [REMARKS2],
  1631. [REMARKS3],
  1632. [REMARKS4],
  1633. [REMARKS5]
  1634. )
  1635. VALUES
  1636. (
  1637. 'WarehouseTest1',
  1638. '仓库测试1',
  1639. '{taskNo}',
  1640. '{balanceDtlData[0].TRAY_CODE}',
  1641. '{balanceDtlData[0].PALLET_CODE}',
  1642. '{1}',
  1643. '{1012}',
  1644. '{eLocNo}',
  1645. '{1012}',
  1646. '{6}',
  1647. NULL,
  1648. '{0}',
  1649. '{100}',
  1650. '{0}',
  1651. '{balanceDtlData[0].BIN_CODE}',
  1652. '{resultBinList[0].BIN_CODE}',
  1653. NULL,
  1654. '',
  1655. '{invoiceMdResult.UPDATE_BY}',
  1656. getdate(),
  1657. '{invoiceMdResult.UPDATE_BY}',
  1658. getdate(),
  1659. 0,
  1660. NULL,
  1661. NULL,
  1662. NULL,
  1663. NULL,
  1664. NULL
  1665. );
  1666. ";
  1667. sqlList.Add(sqlInsertWmsTask);
  1668. #endregion
  1669. }
  1670. else
  1671. {
  1672. return FailMessageStatus($"预分配的托盘信息【组盘ID为:{item.TRAY_ID}】发生变动,无法进行发货审核,请重新选择分配的托盘!");
  1673. }
  1674. }
  1675. string sqlUpdateInvoiceDtl = $@"
  1676. UPDATE WMS_OUT_INVOICE_DTL
  1677. SET INVOICE_DTL_STATUS = 22,
  1678. UPDATE_BY = '{invoiceMdResult.UPDATE_BY}',
  1679. UPDATE_TIME = GETDATE(),
  1680. DATA_VERSION = DATA_VERSION + 1
  1681. WHERE
  1682. INVOICE_ID = '{invoiceMdResult.INVOICE_ID}'
  1683. ";
  1684. sqlList.Add(sqlUpdateInvoiceDtl);
  1685. #endregion
  1686. int row = new DataRepository<object>(_dataContext).ExecSqlListTran(sqlList);
  1687. if (row > 0)
  1688. {
  1689. return SuccessMessageStatus("发货单审核成功!", row);
  1690. }
  1691. else
  1692. {
  1693. return FailMessageStatus("发货单审核失败!", row);
  1694. }
  1695. }
  1696. catch (Exception ex)
  1697. {
  1698. return FailMessageStatus($"提交发货单审核结果发生异常,【{ex.Message}】");
  1699. }
  1700. }
  1701. #region 到货确认
  1702. /// <summary>
  1703. /// 获取托盘到货确认数据
  1704. /// </summary>
  1705. /// <param name="putDownResult">下架单实体类对象</param>
  1706. /// <returns></returns>
  1707. public OperateResultInfo<List<WmsOutInvoiceRecordExtResult>> QueryInvoiceSortData(WmsOutPutDownResult putDownResult)
  1708. {
  1709. try
  1710. {
  1711. #region SQL语句生成
  1712. List<string> sqlList = new List<string>();
  1713. string sqlQueryPutDownForPallet = $@"
  1714. SELECT
  1715. *
  1716. FROM
  1717. VW_WMS_OUT_PUTDOWN
  1718. WHERE
  1719. PALLET_CODE = '{putDownResult.PALLET_CODE}'
  1720. AND PUTDOWN_STATUS = 55
  1721. ";
  1722. List<WmsOutPutDownResult> resultList = new DataRepository<WmsOutPutDownResult>(_dataContext).Query(sqlQueryPutDownForPallet).ToList();
  1723. if (resultList.Count > 0)
  1724. {
  1725. putDownResult = resultList[0];
  1726. string sqlQueryWmsPutDownDtl = $@"
  1727. SELECT
  1728. *
  1729. FROM
  1730. VW_WMS_OUT_PUTDOWN_DTL
  1731. WHERE
  1732. PUTDOWN_ID = '{putDownResult.PUTDOWN_ID}'
  1733. ORDER BY PUTDOWN_DTL_STATUS,PUTDOWN_DTL_ID
  1734. ";
  1735. List<WmsOutPutDownDtlResult> PutDownDtlListResult = new DataRepository<WmsOutPutDownDtlResult>(_dataContext).Query(sqlQueryWmsPutDownDtl).ToList();
  1736. string sqlQueryWmsInvoiceRecordExt = $@"
  1737. SELECT
  1738. A.*, B.INVOICE_DEMAND_QTY,
  1739. B.INVOICE_CONFIRM_QTY,
  1740. B.PUTDOWN_QTY INVOICE_PUTDOWN_QTY
  1741. FROM
  1742. VW_WMS_OUT_INVOICE_RECORD A
  1743. LEFT JOIN VW_WMS_OUT_INVOICE_DTL B ON A.INVOICE_DTL_ID = B.INVOICE_DTL_ID
  1744. WHERE
  1745. A.TRAY_CODE = '{putDownResult.TRAY_CODE}'
  1746. ";
  1747. List<WmsOutInvoiceRecordExtResult> InvoiceRecordExtListResult = new DataRepository<WmsOutInvoiceRecordExtResult>(_dataContext).Query(sqlQueryWmsInvoiceRecordExt).ToList();
  1748. string sqlQueryWmsBalanceDtl = $@"
  1749. SELECT
  1750. *
  1751. FROM
  1752. VW_WMS_STK_BALANCE_DTL
  1753. WHERE
  1754. TRAY_CODE = '{putDownResult.TRAY_CODE}'
  1755. AND BALANCE_STATUS = 66
  1756. ";
  1757. List<WmsStkBalanceDtlResult> BalanceDtlListResult = new DataRepository<WmsStkBalanceDtlResult>(_dataContext).Query(sqlQueryWmsBalanceDtl).ToList();
  1758. foreach (WmsOutInvoiceRecordExtResult item in InvoiceRecordExtListResult)
  1759. {
  1760. WmsOutPutDownDtlResult putdownDtlMd = PutDownDtlListResult.Find(x => x.MATERIEL_CODE == item.MATERIEL_CODE && x.BATCH_NO == item.BATCH_NO);
  1761. WmsStkBalanceDtlResult balanceDtlMd = BalanceDtlListResult.Find(x => x.MATERIEL_CODE == item.MATERIEL_CODE && x.BATCH_NO == item.BATCH_NO);
  1762. item.TRAY_QTY = balanceDtlMd.QTY;
  1763. if ((item.INVOICE_DEMAND_QTY - item.INVOICE_CONFIRM_QTY) > putdownDtlMd.PUTDOWN_QTY)
  1764. {
  1765. item.INVOICE_SORT_QTY = putdownDtlMd.PUTDOWN_QTY;
  1766. }
  1767. else
  1768. {
  1769. item.INVOICE_SORT_QTY = (item.INVOICE_DEMAND_QTY - item.INVOICE_CONFIRM_QTY);
  1770. }
  1771. }
  1772. return SuccessStatus(InvoiceRecordExtListResult);
  1773. }
  1774. else
  1775. {
  1776. return FailMessageStatus<List<WmsOutInvoiceRecordExtResult>>($"未查询到托盘号:【{putDownResult.PALLET_CODE}】的下架单信息!", null);
  1777. }
  1778. #endregion
  1779. }
  1780. catch (Exception ex)
  1781. {
  1782. return FailMessageStatus<List<WmsOutInvoiceRecordExtResult>>($"查询托盘出库分拣数据处理发生异常,【{ex.Message}】",null);
  1783. }
  1784. }
  1785. /// <summary>
  1786. /// 提交到货确认数据
  1787. /// </summary>
  1788. /// <param name="wmsOutInvoiceRecordExts">发货记录拓展数据列表</param>
  1789. /// <returns></returns>
  1790. public OperateResultInfo SubmitInvoiceSortData(List<WmsOutInvoiceRecordExtResult> wmsOutInvoiceRecordExts)
  1791. {
  1792. try
  1793. {
  1794. #region SQL语句生成
  1795. List<string> sqlList = new List<string>();
  1796. string sqlUpdatePutDown = $@"
  1797. UPDATE WMS_OUT_PUTDOWN
  1798. SET PUTDOWN_STATUS = 99,
  1799. UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}',
  1800. UPDATE_TIME = GETDATE(),
  1801. DATA_VERSION = DATA_VERSION + 1
  1802. WHERE
  1803. TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}';
  1804. ";
  1805. sqlList.Add(sqlUpdatePutDown);
  1806. string sqlUpdatePutDownDtl = $@"
  1807. UPDATE WMS_OUT_PUTDOWN_DTL
  1808. SET PUTDOWN_DTL_STATUS = 99,
  1809. UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}',
  1810. UPDATE_TIME = GETDATE(),
  1811. DATA_VERSION = DATA_VERSION + 1
  1812. WHERE
  1813. PUTDOWN_ID IN (SELECT PUTDOWN_ID FROM WMS_OUT_PUTDOWN WHERE TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}');
  1814. ";
  1815. sqlList.Add(sqlUpdatePutDownDtl);
  1816. foreach (WmsOutInvoiceRecordExtResult item in wmsOutInvoiceRecordExts)
  1817. {
  1818. string sqlUpdateInvoiceDtl = $@"
  1819. UPDATE WMS_OUT_INVOICE_DTL
  1820. SET INVOICE_CONFIRM_QTY = INVOICE_CONFIRM_QTY + '{item.INVOICE_QTY}',
  1821. INVOICE_DTL_STATUS = 99,
  1822. UPDATE_BY = '{item.UPDATE_BY}',
  1823. UPDATE_TIME = GETDATE(),
  1824. DATA_VERSION = DATA_VERSION + 1
  1825. WHERE
  1826. INVOICE_DTL_ID = '{item.INVOICE_DTL_ID}' ;
  1827. ";
  1828. sqlList.Add(sqlUpdateInvoiceDtl);
  1829. }
  1830. string sqlUpdateInvoice = $@"
  1831. IF NOT EXISTS (
  1832. SELECT
  1833. 1
  1834. FROM
  1835. VW_WMS_OUT_INVOICE_DTL
  1836. WHERE
  1837. INVOICE_ID = '{wmsOutInvoiceRecordExts[0].INVOICE_ID}'
  1838. AND INVOICE_DTL_STATUS < 99
  1839. ) UPDATE WMS_OUT_INVOICE
  1840. SET INVOICE_STATUS = 99,
  1841. UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}',
  1842. UPDATE_TIME = GETDATE(),
  1843. DATA_VERSION = DATA_VERSION + 1
  1844. WHERE
  1845. INVOICE_ID = '{wmsOutInvoiceRecordExts[0].INVOICE_ID}'
  1846. ";
  1847. sqlList.Add(sqlUpdateInvoice);
  1848. string sqlUpdateInvoiceRecord = $@"
  1849. UPDATE WMS_OUT_INVOICE_RECORD
  1850. SET INVOICE_RECORD_STATUS = 2,
  1851. UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}',
  1852. UPDATE_TIME = GETDATE(),
  1853. DATA_VERSION = DATA_VERSION + 1
  1854. WHERE
  1855. TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}'
  1856. AND PALLET_CODE = '{wmsOutInvoiceRecordExts[0].PALLET_CODE}'
  1857. AND INVOICE_RECORD_STATUS = 1;
  1858. ";
  1859. sqlList.Add(sqlUpdateInvoiceRecord);
  1860. string sqlUpdateWmsStkTray = $@"
  1861. UPDATE WMS_STK_TRAY
  1862. SET TRAY_STATUS = 99,
  1863. UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}',
  1864. UPDATE_TIME = GETDATE(),
  1865. DATA_VERSION = DATA_VERSION + 1
  1866. WHERE
  1867. TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}';
  1868. ";
  1869. string sqlUpdateWmsStkTrayDtl = $@"
  1870. UPDATE WMS_STK_TRAY_DTL
  1871. SET TRAY_DTL_STATUS = 99,
  1872. UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}',
  1873. UPDATE_TIME = GETDATE(),
  1874. DATA_VERSION = DATA_VERSION + 1
  1875. WHERE
  1876. TRAY_ID IN (
  1877. SELECT
  1878. TRAY_ID
  1879. FROM
  1880. WMS_STK_TRAY
  1881. WHERE
  1882. TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}'
  1883. );
  1884. ";
  1885. string sqlUpdateWmsStkBalance = $@"
  1886. UPDATE WMS_STK_BALANCE
  1887. SET BALANCE_STATUS = 99,
  1888. UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}',
  1889. UPDATE_TIME = GETDATE(),
  1890. DATA_VERSION = DATA_VERSION + 1
  1891. WHERE
  1892. TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}';
  1893. ";
  1894. sqlList.Add(sqlUpdateWmsStkTray);
  1895. sqlList.Add(sqlUpdateWmsStkTrayDtl);
  1896. sqlList.Add(sqlUpdateWmsStkBalance);
  1897. #region ToDo : 更新WMS大任务
  1898. //string sqlUpdateWmsTask = $@"
  1899. // ";
  1900. //sqlList.Add(sqlUpdateWmsTask);
  1901. #endregion
  1902. #endregion
  1903. int row = new DataRepository<object>(_dataContext).ExecSqlListTran(sqlList);
  1904. if (row > 0)
  1905. {
  1906. return SuccessMessageStatus("出库分拣操作成功!", row);
  1907. }
  1908. else
  1909. {
  1910. return FailMessageStatus("出库分拣操作失败!", row);
  1911. }
  1912. }
  1913. catch (Exception ex)
  1914. {
  1915. return FailMessageStatus($"提交到货确认数据发生异常,【{ex.Message}】");
  1916. }
  1917. }
  1918. #endregion
  1919. }
  1920. }