WmsInReceiptService.cs 122 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911
  1. using DapperORMCore.Context.DataContext;
  2. using DapperORMCore.Model.CoreModel;
  3. using DapperORMCore.Repository.IRepositorys;
  4. using Microsoft.Extensions.Configuration;
  5. using NXWMS.DataAccess.Entity;
  6. using NXWMS.IService.NXWMS;
  7. using NXWMS.IService.NXWMS.Instock;
  8. using NXWMS.Model.AppModels.Condition.Instock;
  9. using NXWMS.Model.AppModels.Result.Balance;
  10. using NXWMS.Model.AppModels.Result.Base;
  11. using NXWMS.Model.AppModels.Result.Instock;
  12. using NXWMS.Model.AppModels.Result.OutStock;
  13. using NXWMS.Model.AppModels.Result.WmsTask;
  14. using NXWMS.Model.Common;
  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. namespace NXWMS.Service.NXWMS.Instock
  22. {
  23. /// <summary>
  24. /// 收货单服务
  25. /// </summary>
  26. [AutoInject(typeof(IWmsInReceiptService), InjectType.Scope)]
  27. public class WmsInReceiptService : ServiceBase, IWmsInReceiptService
  28. {
  29. #region 全局变量、构造注入
  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. private IERPServer _eRPServer;
  43. /// <summary>
  44. /// 构造注入
  45. /// </summary>
  46. /// <param name="dataRepositoryContext"></param>
  47. /// <param name="configuration"></param>
  48. /// <param name="iSQLNodeRepository"></param>
  49. public WmsInReceiptService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository, IERPServer eRPServer)
  50. {
  51. this._dataContext = dataRepositoryContext;
  52. this._configuration = configuration;
  53. this._iSQLNodeRepository = iSQLNodeRepository;
  54. this._eRPServer = eRPServer;
  55. }
  56. #endregion
  57. /// <summary>
  58. /// 分页查询收货单主表数据
  59. /// </summary>
  60. /// <param name="receiptSearchMd">收货单查询条件实体类对象</param>
  61. /// <returns></returns>
  62. public OperateResultInfo<List<WmsInReceiptResult>> GetWmsInReceiptListForPage(WmsInReceiptSearchMd receiptSearchMd)
  63. {
  64. try
  65. {
  66. #region SQL语句生成
  67. StringBuilder sqlCondition = new StringBuilder();
  68. if (!string.IsNullOrEmpty(receiptSearchMd.ReceiptNoMsg))
  69. {
  70. sqlCondition.Append($" AND RECEIPT_NO = '{receiptSearchMd.ReceiptNoMsg}'");
  71. }
  72. if (!string.IsNullOrEmpty(receiptSearchMd.ArrivalNoMsg))
  73. {
  74. sqlCondition.Append($" AND ARRIVAL_NO = '{receiptSearchMd.ArrivalNoMsg}'");
  75. }
  76. if (!string.IsNullOrEmpty(receiptSearchMd.ReceipterMsg))
  77. {
  78. sqlCondition.Append($" AND RECEIPTER = '{receiptSearchMd.ReceipterMsg}'");
  79. }
  80. if (!string.IsNullOrEmpty(receiptSearchMd.ReceiptType))
  81. {
  82. sqlCondition.Append($" AND RECEIPT_TYPE = '{receiptSearchMd.ReceiptType}'");
  83. }
  84. if (!string.IsNullOrEmpty(receiptSearchMd.ReceiptStatus))
  85. {
  86. sqlCondition.Append($" AND RECEIPT_STATUS = '{receiptSearchMd.ReceiptStatus}'");
  87. }
  88. if (!string.IsNullOrEmpty(receiptSearchMd.BatchNoMsg))
  89. {
  90. sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE BATCH_NO = '{receiptSearchMd.BatchNoMsg}')");
  91. }
  92. if (!string.IsNullOrEmpty(receiptSearchMd.MaterielMsg))
  93. {
  94. sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE MATERIEL_CODE LIKE '%{receiptSearchMd.MaterielMsg}%' OR MATERIEL_NAME LIKE '%{receiptSearchMd.MaterielMsg}%' OR MATERIEL_BARCODE LIKE '%{receiptSearchMd.MaterielMsg}%')");
  95. }
  96. if (!string.IsNullOrEmpty(receiptSearchMd.SupplierMsg))
  97. {
  98. sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE SUPPLIER_CODE LIKE '%{receiptSearchMd.SupplierMsg}%' OR SUPPLIER_NAME LIKE '%{receiptSearchMd.SupplierMsg}%')");
  99. }
  100. if (!string.IsNullOrEmpty(receiptSearchMd.StartCreateTime))
  101. {
  102. sqlCondition.Append($" AND CREATE_TIME >= '{receiptSearchMd.StartCreateTime}'");
  103. }
  104. if (!string.IsNullOrEmpty(receiptSearchMd.EndCreateTime))
  105. {
  106. sqlCondition.Append($" AND CREATE_TIME <= '{receiptSearchMd.EndCreateTime}'");
  107. }
  108. if (!string.IsNullOrEmpty(receiptSearchMd.StartProductTime))
  109. {
  110. sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE PRODUCT_DATE >= '{receiptSearchMd.StartProductTime}')");
  111. }
  112. if (!string.IsNullOrEmpty(receiptSearchMd.EndProductTime))
  113. {
  114. sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE PRODUCT_DATE <= '{receiptSearchMd.EndProductTime}')");
  115. }
  116. if (!string.IsNullOrEmpty(receiptSearchMd.StartExpTime))
  117. {
  118. sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE EXP_DATE >= '{receiptSearchMd.StartExpTime}')");
  119. }
  120. if (!string.IsNullOrEmpty(receiptSearchMd.EndExpTime))
  121. {
  122. sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE EXP_DATE <= '{receiptSearchMd.EndExpTime}')");
  123. }
  124. StringBuilder sqlCountReceiptData = new StringBuilder($@"SELECT COUNT(1) FROM VW_WMS_IN_RECEIPT WHERE 1=1");
  125. sqlCountReceiptData.Append(sqlCondition.ToString());
  126. int pageStartIndex = (receiptSearchMd.PageNum - 1) * receiptSearchMd.EveryPageQty;
  127. int pageEndIndex = receiptSearchMd.PageNum * receiptSearchMd.EveryPageQty;
  128. StringBuilder sqlQueryReceiptData = new StringBuilder($@"
  129. SELECT
  130. RECEIPT_ID,
  131. RECEIPT_NO,
  132. ARRIVAL_NO,
  133. RECEIPT_TYPE,
  134. RECEIPT_TYPE_NAME,
  135. RECEIPT_TIME,
  136. RECEIPTER,
  137. RECEIPT_STATUS,
  138. RECEIPT_STATUS_NAME,
  139. [DESCRIBE],
  140. CREATE_BY,
  141. CREATE_NAME,
  142. CREATE_TIME,
  143. UPDATE_BY,
  144. UPDATE_NAME,
  145. UPDATE_TIME
  146. FROM
  147. VW_WMS_IN_RECEIPT
  148. WHERE
  149. 1=1
  150. {sqlCondition}
  151. ORDER BY UPDATE_TIME DESC,CREATE_TIME DESC
  152. OFFSET {pageStartIndex} ROWS
  153. FETCH NEXT {receiptSearchMd.EveryPageQty} ROWS ONLY
  154. ");
  155. #endregion
  156. int dataCount = Convert.ToInt32(new DataRepository<object>(_dataContext).ExecuteScalar(sqlCountReceiptData.ToString()));
  157. List<WmsInReceiptResult> resultList = new DataRepository<WmsInReceiptResult>(_dataContext).Query(sqlQueryReceiptData.ToString()).ToList();
  158. OperateResultInfo<List<WmsInReceiptResult>> retDataMsg = SuccessStatus(resultList);
  159. retDataMsg.DataCount = dataCount;
  160. return retDataMsg;
  161. }
  162. catch (Exception ex)
  163. {
  164. return FailMessageStatus<List<WmsInReceiptResult>>($"查询收货单数据发生异常,【{ex.Message}】", null);
  165. }
  166. }
  167. /// <summary>
  168. /// 根据收货单主键Id查询收货单明细数据
  169. /// </summary>
  170. /// <param name="wmsInReceipt">收货单对象</param>
  171. /// <returns></returns>
  172. public OperateResultInfo<WmsInReceiptResult> GetWmsInReceiptDtlListForID(WmsInReceiptResult wmsInReceipt)
  173. {
  174. try
  175. {
  176. #region SQL语句生成
  177. string sqlQueryWmsInReceipt = $@"
  178. SELECT
  179. RECEIPT_ID,
  180. RECEIPT_NO,
  181. ARRIVAL_NO,
  182. RECEIPT_TYPE,
  183. RECEIPT_TYPE_NAME,
  184. RECEIPT_TIME,
  185. RECEIPTER,
  186. RECEIPT_STATUS,
  187. RECEIPT_STATUS_NAME,
  188. [DESCRIBE],
  189. CREATE_BY,
  190. CREATE_NAME,
  191. CREATE_TIME,
  192. UPDATE_BY,
  193. UPDATE_NAME,
  194. UPDATE_TIME
  195. FROM
  196. VW_WMS_IN_RECEIPT
  197. WHERE
  198. RECEIPT_ID = '{wmsInReceipt.ReceiptId}'
  199. ";
  200. string strWhere = string.Empty;
  201. if (wmsInReceipt.Remarks1 == "查询已删除明细数据")
  202. {
  203. strWhere = "1=1";
  204. }
  205. else if (wmsInReceipt.Remarks1 == "查询未组盘完成的收货单明细")
  206. {
  207. strWhere = "RECEIPT_DTL_STATUS < 99 AND RECEIPT_TRAY_QTY < RECEIPT_DTL_QTY";
  208. //2021 0223 孙亚龙 修改质检流程
  209. // AND INSPECTION_RESULT = 'OK'
  210. }
  211. else
  212. {
  213. strWhere = "RECEIPT_DTL_STATUS < 111";
  214. }
  215. string sqlQueryWmsReceiptDtl = $@"
  216. SELECT
  217. *
  218. FROM
  219. VW_WMS_IN_RECEIPT_DTL
  220. WHERE
  221. RECEIPT_ID = '{wmsInReceipt.ReceiptId}'
  222. AND {strWhere}
  223. ORDER BY RECEIPT_DTL_STATUS,RECEIPT_DTL_ID
  224. ";
  225. #endregion
  226. List<WmsInReceiptResult> resultList = new DataRepository<WmsInReceiptResult>(_dataContext).Query(sqlQueryWmsInReceipt).ToList();
  227. List<WmsInReceiptDtlResult> resultDtlList = new DataRepository<WmsInReceiptDtlResult>(_dataContext).Query(sqlQueryWmsReceiptDtl).ToList();
  228. wmsInReceipt = resultList[0];
  229. wmsInReceipt.WmsInReceiptDtlList = resultDtlList;
  230. OperateResultInfo<WmsInReceiptResult> retDataMsg = SuccessStatus(wmsInReceipt);
  231. return retDataMsg;
  232. }
  233. catch (Exception ex)
  234. {
  235. return FailMessageStatus<WmsInReceiptResult>($"查询收货单明细数据发生异常,【{ex.Message}】", null);
  236. }
  237. }
  238. /// <summary>
  239. /// 查询组盘未完成的收货单明细数据
  240. /// </summary>
  241. /// <returns></returns>
  242. public OperateResultInfo<List<WmsInReceiptResult>> GetWmsInReceiptDtl_UnFinishedTray()
  243. {
  244. try
  245. {
  246. string sqlQueryWmsInReceipt = $@"
  247. SELECT
  248. RECEIPT_ID,
  249. RECEIPT_NO,
  250. ARRIVAL_NO,
  251. RECEIPT_TYPE,
  252. RECEIPT_TYPE_NAME,
  253. RECEIPT_TIME,
  254. RECEIPTER,
  255. RECEIPT_STATUS,
  256. RECEIPT_STATUS_NAME,
  257. [DESCRIBE],
  258. CREATE_BY,
  259. CREATE_NAME,
  260. CREATE_TIME,
  261. UPDATE_BY,
  262. UPDATE_NAME,
  263. UPDATE_TIME
  264. FROM
  265. VW_WMS_IN_RECEIPT
  266. WHERE
  267. RECEIPT_ID IN (
  268. SELECT
  269. RECEIPT_ID
  270. FROM
  271. VW_WMS_IN_RECEIPT_DTL
  272. WHERE
  273. RECEIPT_DTL_STATUS < 99
  274. AND RECEIPT_TRAY_QTY < RECEIPT_DTL_QTY)
  275. ORDER BY RECEIPT_ID
  276. ";
  277. string sqlQueryWmsReceiptDtlUnFinishedTray = $@"
  278. SELECT
  279. *
  280. FROM
  281. VW_WMS_IN_RECEIPT_DTL
  282. WHERE
  283. RECEIPT_DTL_STATUS < 99
  284. AND RECEIPT_TRAY_QTY < RECEIPT_DTL_QTY
  285. ORDER BY
  286. RECEIPT_ID,
  287. RECEIPT_DTL_ID
  288. ";
  289. List<WmsInReceiptResult> resultList = new DataRepository<WmsInReceiptResult>(_dataContext).Query(sqlQueryWmsInReceipt).ToList();
  290. List<WmsInReceiptDtlResult> resultDtlList = new DataRepository<WmsInReceiptDtlResult>(_dataContext).Query(sqlQueryWmsReceiptDtlUnFinishedTray).ToList();
  291. foreach (WmsInReceiptResult item in resultList)
  292. {
  293. List<WmsInReceiptDtlResult> tmpLst = resultDtlList.FindAll(x=>x.ReceiptId == item.ReceiptId);
  294. if (tmpLst != null && tmpLst.Count > 0)
  295. {
  296. item.WmsInReceiptDtlList = tmpLst;
  297. }
  298. }
  299. return SuccessStatus(resultList);
  300. }
  301. catch (Exception ex)
  302. {
  303. return FailMessageStatus<List<WmsInReceiptResult>>($"查询未组盘完成的收货单明细数据发生异常,【{ex.Message}】", null);
  304. }
  305. }
  306. /// <summary>
  307. /// 新增收货单数据
  308. /// </summary>
  309. /// <param name="wmsInReceipt">收货单主表对象</param>
  310. /// <returns></returns>
  311. public OperateResultInfo AddWmsInReceiptData(WmsInReceiptResult wmsInReceipt)
  312. {
  313. try
  314. {
  315. #region SQL语句生成
  316. List<string> sqlList = new List<string>();
  317. wmsInReceipt.ReceiptId = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Receipt_Id"));
  318. wmsInReceipt.ReceiptNo = new DataRepository<object>(_dataContext).GetSequenceMsg("Receipt_No");
  319. wmsInReceipt.ReceiptStatus = 0;
  320. StringBuilder sqlAddWmsReceipt = new StringBuilder();
  321. string receiptTime = DateTime.Compare(wmsInReceipt.ReceiptTime, new DateTime()) == 0 ? "NULL" : $"'{wmsInReceipt.ReceiptTime}'";
  322. sqlAddWmsReceipt.Append($@"
  323. INSERT INTO [WMS_IN_RECEIPT] (
  324. [RECEIPT_ID],
  325. [RECEIPT_NO],
  326. [RECEIPTER],
  327. [RECEIPT_TYPE],
  328. [RECEIPT_TIME],
  329. [ARRIVAL_NO],
  330. [RECEIPT_STATUS],
  331. [DESCRIBE],
  332. [CREATE_BY],
  333. [CREATE_TIME],
  334. [UPDATE_BY],
  335. [UPDATE_TIME],
  336. [DATA_VERSION],
  337. [REMARKS1],
  338. [REMARKS2],
  339. [REMARKS3],
  340. [REMARKS4],
  341. [REMARKS5]
  342. )
  343. VALUES
  344. (
  345. '{wmsInReceipt.ReceiptId}',
  346. '{wmsInReceipt.ReceiptNo}',
  347. '{wmsInReceipt.Receipter}',
  348. '{wmsInReceipt.ReceiptType}',
  349. {receiptTime},
  350. '{wmsInReceipt.ArrivalNo}',
  351. '{wmsInReceipt.ReceiptStatus}',
  352. '{wmsInReceipt.Describe}',
  353. '{wmsInReceipt.CreateBy}',
  354. getdate(),
  355. '{wmsInReceipt.UpdateBy}',
  356. getdate(),
  357. 0,
  358. NULL,
  359. NULL,
  360. NULL,
  361. NULL,
  362. NULL
  363. );
  364. ");
  365. sqlList.Add(sqlAddWmsReceipt.ToString());
  366. List<WmsInArrivalDtlResult> arrivalDtlList = new List<WmsInArrivalDtlResult>();
  367. if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo))
  368. {
  369. string sqlQueryWmsInArivalDtl = $@"
  370. SELECT
  371. *
  372. FROM
  373. VW_WMS_IN_ARRIVAL_DTL
  374. WHERE
  375. ARRIVAL_NO = '{wmsInReceipt.ArrivalNo}'
  376. AND RECEIPT_QTY < ARRIVAL_QTY
  377. AND ARRIVAL_DTL_STATUS < 99
  378. ";
  379. arrivalDtlList = new DataRepository<WmsInArrivalDtlResult>(_dataContext).Query(sqlQueryWmsInArivalDtl).ToList();
  380. if (arrivalDtlList.Count == 0)
  381. {
  382. return FailMessageStatus("到货通知单明细已经全部生成收货单,本次新增收货单操作失败!", 0);
  383. }
  384. }
  385. foreach (WmsInReceiptDtlResult item in wmsInReceipt.WmsInReceiptDtlList)
  386. {
  387. StringBuilder sqlAddWmsInReceiptDtl = new StringBuilder();
  388. item.ReceiptDtlId = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Receipt_Dtl_Id"));
  389. item.ReceiptId = wmsInReceipt.ReceiptId;
  390. item.ReceiptDtlStatus = 0;
  391. // item.MaterielBarcode = new DataRepository<object>(_dataContext).GetSequenceMsg("Materiel_Barcode");
  392. sqlAddWmsInReceiptDtl.Append($@"
  393. INSERT INTO [WMS_IN_RECEIPT_DTL] (
  394. [RECEIPT_DTL_ID],
  395. [RECEIPT_ID],
  396. [MATERIEL_CODE],
  397. [MATERIEL_NAME],
  398. [MATERIEL_BARCODE],
  399. [MATERIEL_SPEC],
  400. [BATCH_NO],
  401. [PACKAGE_CODE],
  402. [UNIT_CODE],
  403. [ARRIVAL_QTY],
  404. [RECEIPT_DTL_QTY],
  405. [RECEIPT_TRAY_QTY],
  406. [PUTAWAY_QTY],
  407. [REJECT_QTY],
  408. [REJECT_REASON],
  409. [SUPPLIER_CODE],
  410. [SUPPLIER_NAME],
  411. [PRODUCT_DATE],
  412. [EXP_DATE],
  413. [RECEIPT_DTL_STATUS],
  414. [INSPECTION_RESULT],
  415. [ITEM_STATUS],
  416. [ARRIVAL_DTL_ID],
  417. [DESCRIBE],
  418. [CREATE_BY],
  419. [CREATE_TIME],
  420. [UPDATE_BY],
  421. [UPDATE_TIME],
  422. [DATA_VERSION],
  423. [REMARKS1],
  424. [REMARKS2],
  425. [REMARKS3],
  426. [REMARKS4],
  427. [REMARKS5]
  428. )
  429. VALUES
  430. (
  431. '{item.ReceiptDtlId}',
  432. '{item.ReceiptId}',
  433. '{item.MaterielCode}',
  434. '{item.MaterielName}',
  435. '{item.MaterielBarcode}',
  436. '{item.MaterielSpec}',
  437. '{item.BatchNo}',
  438. '{item.PackageCode}',
  439. '{item.UnitCode}',
  440. '{item.ArrivalQty}',
  441. '{item.ReceiptDtlQty}',
  442. '{0}',
  443. '{0}',
  444. '{item.RejectQty}',
  445. '{item.RejectReason}',
  446. '{item.SupplierCode}',
  447. '{item.SupplierName}',
  448. '{item.ProductDate}',
  449. '{item.ExpDate}',
  450. '0',
  451. 'Wait',
  452. '1',
  453. '{item.ArrivalDtlId}',
  454. '{item.Describe}',
  455. '{item.CreateBy}',
  456. getdate(),
  457. '{item.UpdateBy}',
  458. getdate(),
  459. 0,
  460. NULL,
  461. NULL,
  462. NULL,
  463. NULL,
  464. NULL
  465. );
  466. ");
  467. sqlList.Add(sqlAddWmsInReceiptDtl.ToString());
  468. if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo) && item.ArrivalDtlId != 0)
  469. {
  470. WmsInArrivalDtlResult temArrDtlMd = arrivalDtlList.Find(x => x.ArrivalDtlId == item.ArrivalDtlId);
  471. if (temArrDtlMd == null)
  472. {
  473. return FailMessageStatus($"到货通知单明细行(物料编码:【{item.MaterielCode}】物料名称:【{item.MaterielName}】批次号:【{item.BatchNo}】到货明细ID:【{item.ArrivalDtlId}】)信息发生变动,本次新增收货单操作失败!", 0);
  474. }
  475. else
  476. {
  477. if ((item.ReceiptDtlQty + temArrDtlMd.ReceiptQty) > temArrDtlMd.ArrivalQty)
  478. {
  479. return FailMessageStatus($"到货通知单明细行(物料编码:【{item.MaterielCode}】物料名称:【{item.MaterielName}】批次号:【{item.BatchNo}】到货明细ID:【{item.ArrivalDtlId}】)已收货数量不能大于到货数量,本次新增收货单操作失败!", 0);
  480. }
  481. else
  482. {
  483. string sqlUpdateArrivalDtlStatus = $@"
  484. UPDATE WMS_IN_ARRIVAL_DTL
  485. SET RECEIPT_QTY = '{item.ReceiptDtlQty + temArrDtlMd.ReceiptQty}',
  486. UPDATE_BY = '{item.UpdateBy}',
  487. UPDATE_TIME = GETDATE(),
  488. ARRIVAL_DTL_STATUS = 11,
  489. DATA_VERSION = DATA_VERSION + 1
  490. WHERE
  491. ARRIVAL_DTL_ID = '{item.ArrivalDtlId}';
  492. ";
  493. sqlList.Add(sqlUpdateArrivalDtlStatus);
  494. }
  495. }
  496. }
  497. }
  498. if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo))
  499. {
  500. string sqlUpdateArrivalStatus = $@"
  501. IF NOT EXISTS (
  502. SELECT
  503. 1
  504. FROM
  505. WMS_IN_ARRIVAL
  506. WHERE
  507. ARRIVAL_ID = '{arrivalDtlList[0].ArrivalId}'
  508. AND ARRIVAL_STATUS > 0
  509. AND ARRIVAL_STATUS < 99
  510. ) UPDATE WMS_IN_ARRIVAL
  511. SET ARRIVAL_STATUS = 11,
  512. UPDATE_BY = '{wmsInReceipt.UpdateBy}',
  513. UPDATE_TIME = GETDATE(),
  514. DATA_VERSION = DATA_VERSION + 1
  515. WHERE
  516. ARRIVAL_ID = '{arrivalDtlList[0].ArrivalId}' ;
  517. ";
  518. sqlList.Add(sqlUpdateArrivalStatus);
  519. }
  520. #endregion
  521. int row = new DataRepository<object>(_dataContext).ExecSqlListTran(sqlList);
  522. if (row > 0)
  523. {
  524. return SuccessMessageStatus("新增收货单数据成功!", row);
  525. }
  526. else
  527. {
  528. return FailMessageStatus("新增收货单数据失败!", row);
  529. }
  530. }
  531. catch (Exception ex)
  532. {
  533. return FailMessageStatus($"新增收货单数据发生异常,【{ex.Message}】");
  534. }
  535. }
  536. /// <summary>
  537. /// 修改收货单数据
  538. /// </summary>
  539. /// <param name="wmsInReceipt">收货单主表对象</param>
  540. /// <returns></returns>
  541. public OperateResultInfo EditWmsInReceiptData(WmsInReceiptResult wmsInReceipt)
  542. {
  543. try
  544. {
  545. #region SQL语句生成
  546. List<string> sqlList = new List<string>();
  547. string receiptTime = DateTime.Compare(wmsInReceipt.ReceiptTime, new DateTime()) == 0 ? "NULL" : $"'{wmsInReceipt.ReceiptTime}'";
  548. string sqlUpdateWmsInReceipt = $@"
  549. UPDATE [WMS_IN_RECEIPT]
  550. SET
  551. [RECEIPT_NO] = '{wmsInReceipt.ReceiptNo}',
  552. [RECEIPTER] = '{wmsInReceipt.Receipter}',
  553. [RECEIPT_TYPE] = '{wmsInReceipt.ReceiptType}',
  554. [RECEIPT_TIME] = {receiptTime},
  555. [ARRIVAL_NO] = '{wmsInReceipt.ArrivalNo}',
  556. [RECEIPT_STATUS] = '{wmsInReceipt.ReceiptStatus}',
  557. [DESCRIBE] = '{wmsInReceipt.Describe}',
  558. [UPDATE_BY] = '{wmsInReceipt.UpdateBy}',
  559. [UPDATE_TIME] = GETDATE(),
  560. [DATA_VERSION] = [DATA_VERSION] + 1
  561. WHERE
  562. [RECEIPT_ID] = '{wmsInReceipt.ReceiptId}';
  563. ";
  564. sqlList.Add(sqlUpdateWmsInReceipt);
  565. List<WmsInArrivalDtlResult> arrivalDtlList = new List<WmsInArrivalDtlResult>();
  566. if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo))
  567. {
  568. string sqlQueryWmsInArivalDtl = $@"
  569. SELECT
  570. *
  571. FROM
  572. VW_WMS_IN_ARRIVAL_DTL
  573. WHERE
  574. ARRIVAL_NO = '{wmsInReceipt.ArrivalNo}'
  575. AND RECEIPT_QTY < ARRIVAL_QTY
  576. AND ARRIVAL_DTL_STATUS < 99
  577. ";
  578. arrivalDtlList = new DataRepository<WmsInArrivalDtlResult>(_dataContext).Query(sqlQueryWmsInArivalDtl).ToList();
  579. if (arrivalDtlList.Count == 0)
  580. {
  581. return FailMessageStatus("到货通知单明细已经全部生成收货单,本次新增收货单操作失败!", 0);
  582. }
  583. }
  584. foreach (WmsInReceiptDtlResult item in wmsInReceipt.WmsInReceiptDtlList)
  585. {
  586. if (item.Remarks1 == "更新" || item.Remarks1 == "删除")
  587. {
  588. string sqlUpdateWmsInReceiptDtl = $@"
  589. UPDATE [WMS_IN_RECEIPT_DTL]
  590. SET
  591. [MATERIEL_CODE] = '{item.MaterielCode}',
  592. [MATERIEL_NAME] = '{item.MaterielName}',
  593. [MATERIEL_BARCODE] = '{item.MaterielBarcode}',
  594. [MATERIEL_SPEC] = '{item.MaterielSpec}',
  595. [BATCH_NO] = '{item.BatchNo}',
  596. [PACKAGE_CODE] = '{item.PackageCode}',
  597. [UNIT_CODE] = '{item.UnitCode}',
  598. [ARRIVAL_QTY] = '{item.ArrivalQty}',
  599. [RECEIPT_DTL_QTY] = '{item.ReceiptDtlQty}',
  600. [RECEIPT_TRAY_QTY] = '{item.ReceiptTrayQty}',
  601. [PUTAWAY_QTY] = '{item.PutawayQty}',
  602. [REJECT_QTY] = '{item.RejectQty}',
  603. [REJECT_REASON] = '{item.RejectReason}',
  604. [SUPPLIER_CODE] = '{item.SupplierCode}',
  605. [SUPPLIER_NAME] = '{item.SupplierCode}',
  606. [PRODUCT_DATE] = '{item.ProductDate}',
  607. [EXP_DATE] = '{item.ExpDate}',
  608. [RECEIPT_DTL_STATUS] = '{item.ReceiptDtlStatus}',
  609. [INSPECTION_RESULT] = '{item.InspectionResult}',
  610. [ITEM_STATUS] = '{item.ItemStatus}',
  611. [ARRIVAL_DTL_ID] = '{item.ArrivalDtlId}',
  612. [DESCRIBE] = '{item.Describe}',
  613. [UPDATE_BY] = '{item.UpdateBy}',
  614. [UPDATE_TIME] = getdate(),
  615. [DATA_VERSION] = [DATA_VERSION] + 1
  616. WHERE
  617. [RECEIPT_DTL_ID] = '{item.ReceiptDtlId}'
  618. AND [RECEIPT_ID] = '{wmsInReceipt.ReceiptId}';
  619. ";
  620. sqlList.Add(sqlUpdateWmsInReceiptDtl);
  621. }
  622. if (item.Remarks1 == "添加")
  623. {
  624. StringBuilder sqlAddWmsInReceiptDtl = new StringBuilder();
  625. item.ReceiptDtlId = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Receipt_Dtl_Id"));
  626. item.ReceiptId = wmsInReceipt.ReceiptId;
  627. item.ReceiptDtlStatus = 0;
  628. item.MaterielBarcode = new DataRepository<object>(_dataContext).GetSequenceMsg("Materiel_Barcode");
  629. sqlAddWmsInReceiptDtl.Append($@"
  630. INSERT INTO [WMS_IN_RECEIPT_DTL] (
  631. [RECEIPT_DTL_ID],
  632. [RECEIPT_ID],
  633. [MATERIEL_CODE],
  634. [MATERIEL_NAME],
  635. [MATERIEL_BARCODE],
  636. [MATERIEL_SPEC],
  637. [BATCH_NO],
  638. [PACKAGE_CODE],
  639. [UNIT_CODE],
  640. [ARRIVAL_QTY],
  641. [RECEIPT_DTL_QTY],
  642. [RECEIPT_TRAY_QTY],
  643. [PUTAWAY_QTY],
  644. [REJECT_QTY],
  645. [REJECT_REASON],
  646. [SUPPLIER_CODE],
  647. [SUPPLIER_NAME],
  648. [PRODUCT_DATE],
  649. [EXP_DATE],
  650. [RECEIPT_DTL_STATUS],
  651. [INSPECTION_RESULT],
  652. [ITEM_STATUS],
  653. [ARRIVAL_DTL_ID],
  654. [DESCRIBE],
  655. [CREATE_BY],
  656. [CREATE_TIME],
  657. [UPDATE_BY],
  658. [UPDATE_TIME],
  659. [DATA_VERSION],
  660. [REMARKS1],
  661. [REMARKS2],
  662. [REMARKS3],
  663. [REMARKS4],
  664. [REMARKS5]
  665. )
  666. VALUES
  667. (
  668. '{item.ReceiptDtlId}',
  669. '{item.ReceiptId}',
  670. '{item.MaterielCode}',
  671. '{item.MaterielName}',
  672. '{item.MaterielBarcode}',
  673. '{item.MaterielSpec}',
  674. '{item.BatchNo}',
  675. '{item.PackageCode}',
  676. '{item.UnitCode}',
  677. '{item.ArrivalQty}',
  678. '{item.ReceiptDtlQty}',
  679. '{0}',
  680. '{0}',
  681. '{item.RejectQty}',
  682. '{item.RejectReason}',
  683. '{item.SupplierCode}',
  684. '{item.SupplierName}',
  685. '{item.ProductDate}',
  686. '{item.ExpDate}',
  687. '0',
  688. 'Wait',
  689. '1',
  690. '{item.ArrivalDtlId}',
  691. '{item.Describe}',
  692. '{item.CreateBy}',
  693. getdate(),
  694. '{item.UpdateBy}',
  695. getdate(),
  696. 0,
  697. NULL,
  698. NULL,
  699. NULL,
  700. NULL,
  701. NULL
  702. );
  703. ");
  704. sqlList.Add(sqlAddWmsInReceiptDtl.ToString());
  705. }
  706. if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo) && item.ArrivalDtlId != 0)
  707. {
  708. if (item.Remarks1 != "删除")
  709. {
  710. WmsInArrivalDtlResult temArrDtlMd = arrivalDtlList.Find(x => x.ArrivalDtlId == item.ArrivalDtlId);
  711. if (temArrDtlMd == null)
  712. {
  713. return FailMessageStatus($"到货通知单明细行(物料编码:【{item.MaterielCode}】物料名称:【{item.MaterielName}】批次号:【{item.BatchNo}】到货明细ID:【{item.ArrivalDtlId}】)信息发生变动,本次新增收货单操作失败!", 0);
  714. }
  715. else
  716. {
  717. if ((item.ReceiptDtlQty + temArrDtlMd.ReceiptQty) > temArrDtlMd.ArrivalQty)
  718. {
  719. return FailMessageStatus($"到货通知单明细行(物料编码:【{item.MaterielCode}】物料名称:【{item.MaterielName}】批次号:【{item.BatchNo}】到货明细ID:【{item.ArrivalDtlId}】)已收货数量不能大于到货数量,本次新增收货单操作失败!", 0);
  720. }
  721. else
  722. {
  723. string sqlUpdateArrivalDtlStatus = $@"
  724. UPDATE WMS_IN_ARRIVAL_DTL
  725. SET RECEIPT_QTY = '{item.ReceiptDtlQty + temArrDtlMd.ReceiptQty}',
  726. UPDATE_BY = '{item.UpdateBy}',
  727. UPDATE_TIME = GETDATE(),
  728. ARRIVAL_DTL_STATUS = 11,
  729. DATA_VERSION = DATA_VERSION + 1
  730. WHERE
  731. ARRIVAL_DTL_ID = '{item.ArrivalDtlId}'
  732. ";
  733. sqlList.Add(sqlUpdateArrivalDtlStatus);
  734. }
  735. }
  736. }
  737. else
  738. {
  739. string sqlRollBackArrivalData = $@"
  740. IF NOT EXISTS (
  741. SELECT
  742. 1
  743. FROM
  744. WMS_IN_ARRIVAL_DTL
  745. WHERE
  746. RECEIPT_QTY - '{item.ReceiptDtlQty}' = 0
  747. ) UPDATE WMS_IN_ARRIVAL_DTL
  748. SET RECEIPT_QTY = RECEIPT_QTY - '{item.ReceiptDtlQty}',
  749. UPDATE_BY = '{wmsInReceipt.UpdateBy}',
  750. UPDATE_TIME = GETDATE(),
  751. DATA_VERSION = DATA_VERSION + 1
  752. WHERE
  753. ARRIVAL_DTL_ID = '{item.ArrivalDtlId}'
  754. ELSE
  755. UPDATE WMS_IN_ARRIVAL_DTL
  756. SET RECEIPT_QTY = RECEIPT_QTY - '{item.ReceiptDtlQty}',
  757. ARRIVAL_DTL_STATUS = '0',
  758. UPDATE_BY = '{wmsInReceipt.UpdateBy}',
  759. UPDATE_TIME = GETDATE(),
  760. DATA_VERSION = DATA_VERSION + 1
  761. WHERE
  762. ARRIVAL_DTL_ID = '{item.ArrivalDtlId}';
  763. ";
  764. sqlList.Add(sqlRollBackArrivalData);
  765. decimal oldArrReceiptQty = arrivalDtlList.Find(x => x.ArrivalDtlId == item.ArrivalDtlId).ReceiptQty;
  766. arrivalDtlList.Find(x => x.ArrivalDtlId == item.ArrivalDtlId).ReceiptQty = oldArrReceiptQty - item.ReceiptDtlQty;
  767. }
  768. }
  769. }
  770. if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo))
  771. {
  772. string sqlUpdateArrivalStatus = $@"
  773. IF NOT EXISTS (
  774. SELECT
  775. 1
  776. FROM
  777. WMS_IN_ARRIVAL
  778. WHERE
  779. ARRIVAL_ID = '{arrivalDtlList[0].ArrivalId}'
  780. AND ARRIVAL_STATUS > 0
  781. AND ARRIVAL_STATUS < 99
  782. ) UPDATE WMS_IN_ARRIVAL
  783. SET ARRIVAL_STATUS = 11,
  784. UPDATE_BY = '{wmsInReceipt.UpdateBy}',
  785. UPDATE_TIME = GETDATE(),
  786. DATA_VERSION = DATA_VERSION + 1
  787. WHERE
  788. ARRIVAL_ID = '{arrivalDtlList[0].ArrivalId}' ;
  789. ";
  790. sqlList.Add(sqlUpdateArrivalStatus);
  791. }
  792. #endregion
  793. int row = new DataRepository<object>(_dataContext).ExecSqlListTran(sqlList);
  794. if (row > 0)
  795. {
  796. return SuccessMessageStatus("修改收货单数据成功!", row);
  797. }
  798. else
  799. {
  800. return FailMessageStatus("修改收货单数据失败!", row);
  801. }
  802. }
  803. catch (Exception ex)
  804. {
  805. return FailMessageStatus($"修改收货单数据发生异常,【{ex.Message}】");
  806. }
  807. }
  808. /// <summary>
  809. /// 删除收货单数据
  810. /// </summary>
  811. /// <param name="wmsInReceipt">收货单主表对象</param>
  812. /// <returns></returns>
  813. public OperateResultInfo DeleteWmsInReceiptData(WmsInReceiptResult wmsInReceipt)
  814. {
  815. try
  816. {
  817. #region SQL语句生成
  818. string[] receiptIdList = wmsInReceipt.ReceiptNo.Split(',');
  819. List<string> sqlList = new List<string>();
  820. foreach (string item in receiptIdList)
  821. {
  822. string sqlDeleteWmsReceipt = $@"
  823. UPDATE WMS_IN_RECEIPT
  824. SET RECEIPT_STATUS = '111',
  825. UPDATE_BY = '{wmsInReceipt.UpdateBy}',
  826. UPDATE_TIME = GETDATE(),
  827. DATA_VERSION = DATA_VERSION + 1
  828. WHERE
  829. RECEIPT_ID = '{item}';
  830. ";
  831. string sqlDeleteWmsInReceiptDtl = $@"
  832. UPDATE WMS_IN_RECEIPT_DTL
  833. SET RECEIPT_DTL_STATUS = '111',
  834. UPDATE_BY = '{wmsInReceipt.UpdateBy}',
  835. UPDATE_TIME = GETDATE(),
  836. DATA_VERSION = DATA_VERSION + 1
  837. WHERE
  838. RECEIPT_ID = '{item}';
  839. ";
  840. sqlList.Add(sqlDeleteWmsReceipt);
  841. sqlList.Add(sqlDeleteWmsInReceiptDtl);
  842. /*
  843. ToDo: 后续增加删除移至历史表中。
  844. */
  845. string sqlQueryWmsReceiptDtlData = $@"
  846. SELECT
  847. *
  848. FROM
  849. VW_WMS_IN_RECEIPT_DTL
  850. WHERE
  851. RECEIPT_ID = '{item}'
  852. AND RECEIPT_DTL_STATUS = 0
  853. ORDER BY RECEIPT_DTL_STATUS,RECEIPT_DTL_ID
  854. ";
  855. List<WmsInReceiptDtlResult> resultDtlList = new DataRepository<WmsInReceiptDtlResult>(_dataContext).Query(sqlQueryWmsReceiptDtlData).ToList();
  856. if (resultDtlList.Count > 0)
  857. {
  858. foreach (WmsInReceiptDtlResult mdDtl in resultDtlList)
  859. {
  860. if (mdDtl.ArrivalDtlId != 0)
  861. {
  862. string sqlRollBackArrivaldDtlData = $@"
  863. IF NOT EXISTS (
  864. SELECT
  865. 1
  866. FROM
  867. WMS_IN_ARRIVAL_DTL
  868. WHERE
  869. RECEIPT_QTY - '{mdDtl.ReceiptDtlQty}' = 0
  870. ) UPDATE WMS_IN_ARRIVAL_DTL
  871. SET RECEIPT_QTY = RECEIPT_QTY - '{mdDtl.ReceiptDtlQty}',
  872. UPDATE_BY = '{wmsInReceipt.UpdateBy}',
  873. UPDATE_TIME = GETDATE(),
  874. DATA_VERSION = DATA_VERSION + 1
  875. WHERE
  876. ARRIVAL_DTL_ID = '{mdDtl.ArrivalDtlId}'
  877. ELSE
  878. UPDATE WMS_IN_ARRIVAL_DTL
  879. SET RECEIPT_QTY = RECEIPT_QTY - '{mdDtl.ReceiptDtlQty}',
  880. ARRIVAL_DTL_STATUS = '0',
  881. UPDATE_BY = '{wmsInReceipt.UpdateBy}',
  882. UPDATE_TIME = GETDATE(),
  883. DATA_VERSION = DATA_VERSION + 1
  884. WHERE
  885. ARRIVAL_DTL_ID = '{mdDtl.ArrivalDtlId}';
  886. ";
  887. sqlList.Add(sqlRollBackArrivaldDtlData);
  888. string sqlRollBackArrivalData = $@"
  889. IF NOT EXISTS (
  890. SELECT
  891. 1
  892. FROM
  893. WMS_IN_ARRIVAL_DTL
  894. WHERE
  895. ARRIVAL_ID IN (
  896. SELECT
  897. ARRIVAL_ID
  898. FROM
  899. WMS_IN_ARRIVAL_DTL
  900. WHERE
  901. ARRIVAL_DTL_ID = '{mdDtl.ArrivalDtlId}'
  902. )
  903. AND ARRIVAL_DTL_STATUS > 0
  904. AND ARRIVAL_DTL_STATUS < 99
  905. ) UPDATE WMS_IN_ARRIVAL
  906. SET ARRIVAL_STATUS = '0',
  907. UPDATE_BY = '{wmsInReceipt.UpdateBy}',
  908. UPDATE_TIME = GETDATE(),
  909. DATA_VERSION = DATA_VERSION + 1
  910. WHERE
  911. ARRIVAL_ID = (
  912. SELECT
  913. ARRIVAL_ID
  914. FROM
  915. WMS_IN_ARRIVAL_DTL
  916. WHERE
  917. ARRIVAL_DTL_ID = '{mdDtl.ArrivalDtlId}'
  918. );
  919. ";
  920. sqlList.Add(sqlRollBackArrivalData);
  921. }
  922. }
  923. }
  924. }
  925. #endregion
  926. int row = new DataRepository<object>(_dataContext).ExecSqlListTran(sqlList);
  927. if (row > 0)
  928. {
  929. return SuccessMessageStatus("删除收货单数据成功!", row);
  930. }
  931. else
  932. {
  933. return FailMessageStatus("删除收货单数据失败!", row);
  934. }
  935. }
  936. catch (Exception ex)
  937. {
  938. return FailMessageStatus($"删除收货单数据发生异常,【{ex.Message}】");
  939. }
  940. }
  941. /// <summary>
  942. /// 分页查询收货记录数据
  943. /// </summary>
  944. /// <param name="receiptRecordSearchMd">收货记录查询条件实体类对象</param>
  945. /// <returns></returns>
  946. public OperateResultInfo<List<WmsInReceiptRecordResult>> GetWmsInReceiptRecordListForPage(WmsInReceiptRecordSearchMd receiptRecordSearchMd)
  947. {
  948. try
  949. {
  950. #region SQL语句生成
  951. StringBuilder sqlCondition = new StringBuilder();
  952. if (!string.IsNullOrEmpty(receiptRecordSearchMd.ReceiptNoMsg))
  953. {
  954. sqlCondition.Append($" AND RECEIPT_NO = '{receiptRecordSearchMd.ReceiptNoMsg}'");
  955. }
  956. if (!string.IsNullOrEmpty(receiptRecordSearchMd.ArrivalNoMsg))
  957. {
  958. sqlCondition.Append($" AND ARRIVAL_NO = '{receiptRecordSearchMd.ArrivalNoMsg}'");
  959. }
  960. if (!string.IsNullOrEmpty(receiptRecordSearchMd.RegionNoMsg))
  961. {
  962. sqlCondition.Append($" AND REGION_CODE = '{receiptRecordSearchMd.RegionNoMsg}'");
  963. }
  964. if (!string.IsNullOrEmpty(receiptRecordSearchMd.BinNoMsg))
  965. {
  966. sqlCondition.Append($" AND (BIN_CODE like '%{receiptRecordSearchMd.BinNoMsg}%' OR BIN_NAME like '%{receiptRecordSearchMd.BinNoMsg}%')");
  967. }
  968. if (!string.IsNullOrEmpty(receiptRecordSearchMd.PalletNoMsg))
  969. {
  970. sqlCondition.Append($" AND PALLET_CODE = '{receiptRecordSearchMd.PalletNoMsg}'");
  971. }
  972. if (!string.IsNullOrEmpty(receiptRecordSearchMd.ReceipterMsg))
  973. {
  974. sqlCondition.Append($" AND RECEIPTER = '{receiptRecordSearchMd.ReceipterMsg}'");
  975. }
  976. if (!string.IsNullOrEmpty(receiptRecordSearchMd.MaterielMsg))
  977. {
  978. sqlCondition.Append($" AND (MATERIEL_CODE like '%{receiptRecordSearchMd.MaterielMsg}%' OR MATERIEL_NAME = '%{receiptRecordSearchMd.MaterielMsg}%')");
  979. }
  980. if (!string.IsNullOrEmpty(receiptRecordSearchMd.MaterielTypeMsg))
  981. {
  982. sqlCondition.Append($" AND (MATERIEL_TYPE_CODE = '%{receiptRecordSearchMd.MaterielTypeMsg}%' OR MATERIEL_TYPE_NAME = '%{receiptRecordSearchMd.MaterielTypeMsg}%')");
  983. }
  984. if (!string.IsNullOrEmpty(receiptRecordSearchMd.SupplierMsg))
  985. {
  986. sqlCondition.Append($" AND SUPPLIER_CODE = '{receiptRecordSearchMd.SupplierMsg}'");
  987. }
  988. if (!string.IsNullOrEmpty(receiptRecordSearchMd.BatchNoMsg))
  989. {
  990. sqlCondition.Append($" AND BATCH_NO = '{receiptRecordSearchMd.SupplierMsg}'");
  991. }
  992. if (!string.IsNullOrEmpty(receiptRecordSearchMd.ItemStatusMsg))
  993. {
  994. sqlCondition.Append($" AND ITEM_STATUS = '{receiptRecordSearchMd.ItemStatusMsg}'");
  995. }
  996. if (!string.IsNullOrEmpty(receiptRecordSearchMd.InspectionResultMsg))
  997. {
  998. sqlCondition.Append($" AND INSPECTION_RESULT = '{receiptRecordSearchMd.InspectionResultMsg}'");
  999. }
  1000. if (!string.IsNullOrEmpty(receiptRecordSearchMd.ReceiptRecordStatus))
  1001. {
  1002. sqlCondition.Append($" AND RECEIPT_RECORD_STATUS = '{receiptRecordSearchMd.ReceiptRecordStatus}'");
  1003. }
  1004. if (!string.IsNullOrEmpty(receiptRecordSearchMd.StartReceiptTime))
  1005. {
  1006. sqlCondition.Append($" AND RECEIPT_TIME >= '{receiptRecordSearchMd.StartReceiptTime}'");
  1007. }
  1008. if (!string.IsNullOrEmpty(receiptRecordSearchMd.EndReceiptTime))
  1009. {
  1010. sqlCondition.Append($" AND RECEIPT_TIME <= '{receiptRecordSearchMd.EndReceiptTime}'");
  1011. }
  1012. if (!string.IsNullOrEmpty(receiptRecordSearchMd.StartProductTime))
  1013. {
  1014. sqlCondition.Append($" AND PRODUCT_DATE >= '{receiptRecordSearchMd.StartProductTime}'");
  1015. }
  1016. if (!string.IsNullOrEmpty(receiptRecordSearchMd.EndProductTime))
  1017. {
  1018. sqlCondition.Append($" AND PRODUCT_DATE <= '{receiptRecordSearchMd.EndProductTime}'");
  1019. }
  1020. if (!string.IsNullOrEmpty(receiptRecordSearchMd.StartExpTime))
  1021. {
  1022. sqlCondition.Append($" AND EXP_DATE >= '{receiptRecordSearchMd.StartExpTime}'");
  1023. }
  1024. if (!string.IsNullOrEmpty(receiptRecordSearchMd.EndExpTime))
  1025. {
  1026. sqlCondition.Append($" AND EXP_DATE <= '{receiptRecordSearchMd.EndExpTime}'");
  1027. }
  1028. StringBuilder sqlCountReceiptData = new StringBuilder($@"SELECT COUNT(1) FROM VW_WMS_IN_RECEIPT_RECORD WHERE 1=1");
  1029. sqlCountReceiptData.Append(sqlCondition.ToString());
  1030. int pageStartIndex = (receiptRecordSearchMd.PageNum - 1) * receiptRecordSearchMd.EveryPageQty;
  1031. int pageEndIndex = receiptRecordSearchMd.PageNum * receiptRecordSearchMd.EveryPageQty;
  1032. StringBuilder sqlQueryReceiptData = new StringBuilder($@"
  1033. SELECT
  1034. RECEIPT_RECORD_ID,
  1035. NEWID,
  1036. RECEIPT_ID,
  1037. RECEIPT_NO,
  1038. RECEIPT_DTL_ID,
  1039. ARRIVAL_NO,
  1040. REGION_CODE,
  1041. REGION_NAME,
  1042. BIN_CODE,
  1043. BIN_NAME,
  1044. TRAY_CODE,
  1045. PALLET_CODE,
  1046. RECEIPT_TIME,
  1047. RECEIPTER,
  1048. MATERIEL_TYPE_CODE,
  1049. MATERIEL_TYPE_NAME,
  1050. MATERIEL_CODE,
  1051. MATERIEL_NAME,
  1052. MATERIEL_BARCODE,
  1053. MATERIEL_SPEC,
  1054. SUPPLIER_CODE,
  1055. SUPPLIER_NAME,
  1056. BATCH_NO,
  1057. PACKAGE_CODE,
  1058. UNIT_CODE,
  1059. RECEIPT_QTY,
  1060. REJECTION_QTY,
  1061. REJECTION_REASON,
  1062. PRODUCT_DATE,
  1063. EXP_DATE,
  1064. RECEIPT_RECORD_STATUS,
  1065. RECEIPT_RECORD_STATUS_NAME,
  1066. INSPECTION_RESULT,
  1067. INSPECTION_RESULT_NAME,
  1068. ITEM_STATUS,
  1069. ITEM_STATUS_NAME,
  1070. [DESCRIBE],
  1071. CREATE_BY,
  1072. CREATE_NAME,
  1073. CREATE_TIME,
  1074. UPDATE_BY,
  1075. UPDATE_NAME,
  1076. UPDATE_TIME,
  1077. DATA_VERSION,
  1078. REMARKS1,
  1079. REMARKS2,
  1080. REMARKS3,
  1081. REMARKS4,
  1082. REMARKS5
  1083. FROM
  1084. VW_WMS_IN_RECEIPT_RECORD
  1085. WHERE
  1086. 1=1
  1087. {sqlCondition}
  1088. ORDER BY UPDATE_TIME DESC,CREATE_TIME DESC
  1089. OFFSET {pageStartIndex} ROWS
  1090. FETCH NEXT {receiptRecordSearchMd.EveryPageQty} ROWS ONLY
  1091. ");
  1092. #endregion
  1093. int dataCount = Convert.ToInt32(new DataRepository<object>(_dataContext).ExecuteScalar(sqlCountReceiptData.ToString()));
  1094. List<WmsInReceiptRecordResult> resultList = new DataRepository<WmsInReceiptRecordResult>(_dataContext).Query(sqlQueryReceiptData.ToString()).ToList();
  1095. OperateResultInfo<List<WmsInReceiptRecordResult>> retDataMsg = SuccessStatus(resultList);
  1096. retDataMsg.DataCount = dataCount;
  1097. return retDataMsg;
  1098. }
  1099. catch (Exception ex)
  1100. {
  1101. return FailMessageStatus<List<WmsInReceiptRecordResult>>($"查询收货记录数据发生异常,【{ex.Message}】", null);
  1102. }
  1103. }
  1104. /// <summary>
  1105. /// 添加收货组盘数据
  1106. /// </summary>
  1107. /// <param name="wmsStkTrayResult">组盘信息实体类对象</param>
  1108. /// <returns></returns>
  1109. public OperateResultInfo AddWmsInReceiptTrayData(WmsStkTrayResult wmsStkTrayResult)
  1110. {
  1111. try
  1112. {
  1113. OperateResultInfo checkRetMsg = CheckPalletValidity(wmsStkTrayResult.PALLET_CODE);
  1114. if (checkRetMsg.Status != OperateStatus.Success)
  1115. {
  1116. return checkRetMsg;
  1117. }
  1118. if (wmsStkTrayResult.WmsStkTrayDtlList.Count > 0)
  1119. {
  1120. #region SQL语句生成
  1121. //分配货位暂时这么写
  1122. List<string> sqlList = new List<string>();
  1123. string sqlQueryReceiptRegionBinMsg = $@"
  1124. SELECT
  1125. A.*, B.USER_NAME Create_Name,
  1126. C.USER_NAME Update_Name
  1127. FROM
  1128. BAS_BIN A
  1129. LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
  1130. LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
  1131. WHERE
  1132. A.REGION_CODE = 'SHDJ_Region'
  1133. ";
  1134. List<BinResult> resultList = new DataRepository<BinResult>(_dataContext).Query(sqlQueryReceiptRegionBinMsg).ToList();
  1135. BinResult binMd = resultList[0];
  1136. wmsStkTrayResult.TRAY_ID = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Tray_Id"));
  1137. wmsStkTrayResult.TRAY_CODE = new DataRepository<object>(_dataContext).GetSequenceMsg("Tray_Code");
  1138. string sqlAddWmsStkTray = $@"
  1139. INSERT INTO [WMS_STK_TRAY] (
  1140. [TRAY_ID],
  1141. [TRAY_CODE],
  1142. [PALLET_CODE],
  1143. [WEIGHT],
  1144. [HEIGHT],
  1145. [TRAYS_TYPE],
  1146. [TRAY_LOADED_TYPE],
  1147. [TRAY_STATUS],
  1148. [DESCRIBE],
  1149. [CREATE_BY],
  1150. [CREATE_TIME],
  1151. [UPDATE_BY],
  1152. [UPDATE_TIME],
  1153. [DATA_VERSION],
  1154. [REMARKS1],
  1155. [REMARKS2],
  1156. [REMARKS3],
  1157. [REMARKS4],
  1158. [REMARKS5]
  1159. )
  1160. VALUES
  1161. (
  1162. '{wmsStkTrayResult.TRAY_ID}',
  1163. '{wmsStkTrayResult.TRAY_CODE}',
  1164. '{wmsStkTrayResult.PALLET_CODE}',
  1165. '{wmsStkTrayResult.WEIGHT}',
  1166. '{wmsStkTrayResult.HEIGHT}',
  1167. '{wmsStkTrayResult.TRAYS_TYPE}',
  1168. '{wmsStkTrayResult.TRAY_LOADED_TYPE}',
  1169. '{wmsStkTrayResult.TRAY_STATUS}',
  1170. '{wmsStkTrayResult.DESCRIBE}',
  1171. '{wmsStkTrayResult.CREATE_BY}',
  1172. getdate(),
  1173. '{wmsStkTrayResult.UPDATE_BY}',
  1174. getdate(),
  1175. 0,
  1176. NULL,
  1177. NULL,
  1178. NULL,
  1179. NULL,
  1180. NULL
  1181. );
  1182. ";
  1183. sqlList.Add(sqlAddWmsStkTray);
  1184. int putawayId = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("InPutaway_Id"));
  1185. string puawayNo = new DataRepository<object>(_dataContext).GetSequenceMsg("InPutaway_No");
  1186. string sqlAddWmsInPutAway = $@"
  1187. INSERT INTO [WMS_IN_PUTAWAY] (
  1188. [PUTAWAY_ID],
  1189. [PUTAWAY_NO],
  1190. [SOURCE_NO],
  1191. [PUTAWAY_TYPE],
  1192. [TRAY_CODE],
  1193. [PALLET_CODE],
  1194. [SBIN_CODE],
  1195. [PUTAWAY_PRIORITY],
  1196. [PUTAWAY_STATUS],
  1197. [DESCRIBE],
  1198. [CREATE_BY],
  1199. [CREATE_TIME],
  1200. [UPDATE_BY],
  1201. [UPDATE_TIME],
  1202. [DATA_VERSION],
  1203. [REMARKS1],
  1204. [REMARKS2],
  1205. [REMARKS3],
  1206. [REMARKS4],
  1207. [REMARKS5]
  1208. )
  1209. VALUES
  1210. (
  1211. '{putawayId}',
  1212. '{puawayNo}',
  1213. '{wmsStkTrayResult.WmsStkTrayDtlList[0].WmsInReceiptRecord.RECEIPT_NO}',
  1214. '{1}',
  1215. '{wmsStkTrayResult.TRAY_CODE}',
  1216. '{wmsStkTrayResult.PALLET_CODE}',
  1217. '{binMd.BIN_CODE}',
  1218. '{100}',
  1219. '{0}',
  1220. '{wmsStkTrayResult.DESCRIBE}',
  1221. '{wmsStkTrayResult.CREATE_BY}',
  1222. getdate(),
  1223. '{wmsStkTrayResult.UPDATE_BY}',
  1224. getdate(),
  1225. 0,
  1226. NULL,
  1227. NULL,
  1228. NULL,
  1229. NULL,
  1230. NULL
  1231. );
  1232. ";
  1233. sqlList.Add(sqlAddWmsInPutAway);
  1234. string sqlAddWmsStkBalance = $@"
  1235. INSERT INTO [WMS_STK_BALANCE] (
  1236. [BALANCE_ID],
  1237. [AREA_CODE],
  1238. [AREA_NAME],
  1239. [WAREHOUSE_CODE],
  1240. [WAREHOUSE_NAME],
  1241. [REGION_CODE],
  1242. [REGION_NAME],
  1243. [BIN_CODE],
  1244. [BIN_NAME],
  1245. [TRAY_ID],
  1246. [TRAY_CODE],
  1247. [PALLET_CODE],
  1248. [INWH_TIME],
  1249. [BALANCE_STATUS],
  1250. [DESCRIBE],
  1251. [CREATE_BY],
  1252. [CREATE_TIME],
  1253. [UPDATE_BY],
  1254. [UPDATE_TIME],
  1255. [DATA_VERSION],
  1256. [REMARKS1],
  1257. [REMARKS2],
  1258. [REMARKS3],
  1259. [REMARKS4],
  1260. [REMARKS5]
  1261. )
  1262. VALUES
  1263. (
  1264. '{Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Balance_Id"))}',
  1265. 'AreaTest1',
  1266. '区域测试1',
  1267. 'WarehouseTest1',
  1268. '仓库测试1',
  1269. '{binMd.REGION_CODE}',
  1270. '{binMd.REGION_NAME}',
  1271. '{binMd.BIN_CODE}',
  1272. '{binMd.BIN_NAME}',
  1273. '{wmsStkTrayResult.TRAY_ID}',
  1274. '{wmsStkTrayResult.TRAY_CODE}',
  1275. '{wmsStkTrayResult.PALLET_CODE}',
  1276. getdate(),
  1277. '55',
  1278. '{wmsStkTrayResult.DESCRIBE}',
  1279. '{wmsStkTrayResult.CREATE_BY}',
  1280. getdate(),
  1281. '{wmsStkTrayResult.CREATE_BY}',
  1282. getdate(),
  1283. 0,
  1284. NULL,
  1285. NULL,
  1286. NULL,
  1287. NULL,
  1288. NULL
  1289. );
  1290. ";
  1291. sqlList.Add(sqlAddWmsStkBalance);
  1292. List<WmsStkTrayDtlResult> tmpTrayDtlMergeLst= new List<WmsStkTrayDtlResult>();
  1293. List<int> tmpReceiptIdLst = new List<int>();
  1294. List<string> sqlList_ReceiprRecordAndPutAway = new List<string>();
  1295. foreach (WmsStkTrayDtlResult item in wmsStkTrayResult.WmsStkTrayDtlList)
  1296. {
  1297. item.TRAY_ID = wmsStkTrayResult.TRAY_ID;
  1298. WmsStkTrayDtlExtResult trayDtlExtMd = item.WmsStkTrayDtlExtMd;
  1299. WmsInReceiptRecordResult receiptRecordMd = item.WmsInReceiptRecord;
  1300. var tmpResult = tmpTrayDtlMergeLst.FirstOrDefault(x => x.MATERIEL_CODE == item.MATERIEL_CODE && x.WmsStkTrayDtlExtMd.BATCH_NO == trayDtlExtMd.BATCH_NO);
  1301. if (tmpResult != null)
  1302. {
  1303. tmpResult.QTY += item.QTY;
  1304. }
  1305. else
  1306. {
  1307. tmpTrayDtlMergeLst.Add(item);
  1308. }
  1309. int receiptId = tmpReceiptIdLst.FirstOrDefault(x => x == receiptRecordMd.RECEIPT_ID);
  1310. if (receiptId <= 0)
  1311. {
  1312. tmpReceiptIdLst.Add(receiptRecordMd.RECEIPT_ID);
  1313. }
  1314. receiptRecordMd.RECEIPT_RECORD_ID = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Receipt_Record_Id"));
  1315. int putawayDtlId = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("InPutaway_Dtl_Id"));
  1316. receiptRecordMd.TRAY_CODE = wmsStkTrayResult.TRAY_CODE;
  1317. receiptRecordMd.REGION_CODE = binMd.REGION_CODE;
  1318. receiptRecordMd.REGION_NAME = binMd.REGION_NAME;
  1319. receiptRecordMd.BIN_CODE = binMd.BIN_CODE;
  1320. receiptRecordMd.BIN_NAME = binMd.BIN_NAME;
  1321. string receiptTime = string.Empty;
  1322. if (receiptRecordMd.RECEIPT_TIME == new DateTime())
  1323. {
  1324. receiptTime = "NULL";
  1325. }
  1326. else
  1327. {
  1328. receiptTime = $"'{receiptRecordMd.RECEIPT_TIME}'";
  1329. }
  1330. string sqlAddWmsInReceiptRecord = $@"
  1331. INSERT INTO [WMS_IN_RECEIPT_RECORD] (
  1332. [RECEIPT_RECORD_ID],
  1333. [RECEIPT_ID],
  1334. [RECEIPT_NO],
  1335. [RECEIPT_DTL_ID],
  1336. [ARRIVAL_NO],
  1337. [REGION_CODE],
  1338. [REGION_NAME],
  1339. [BIN_CODE],
  1340. [BIN_NAME],
  1341. [TRAY_CODE],
  1342. [PALLET_CODE],
  1343. [RECEIPT_TIME],
  1344. [RECEIPTER],
  1345. [MATERIEL_CODE],
  1346. [MATERIEL_NAME],
  1347. [MATERIEL_BARCODE],
  1348. [MATERIEL_SPEC],
  1349. [SUPPLIER_CODE],
  1350. [SUPPLIER_NAME],
  1351. [BATCH_NO],
  1352. [PACKAGE_CODE],
  1353. [UNIT_CODE],
  1354. [RECEIPT_QTY],
  1355. [REJECTION_QTY],
  1356. [REJECTION_REASON],
  1357. [PRODUCT_DATE],
  1358. [EXP_DATE],
  1359. [RECEIPT_RECORD_STATUS],
  1360. [INSPECTION_RESULT],
  1361. [ITEM_STATUS],
  1362. [DESCRIBE],
  1363. [CREATE_BY],
  1364. [CREATE_TIME],
  1365. [UPDATE_BY],
  1366. [UPDATE_TIME],
  1367. [DATA_VERSION],
  1368. [REMARKS1],
  1369. [REMARKS2],
  1370. [REMARKS3],
  1371. [REMARKS4],
  1372. [REMARKS5]
  1373. )
  1374. VALUES
  1375. (
  1376. '{receiptRecordMd.RECEIPT_RECORD_ID}',
  1377. '{receiptRecordMd.RECEIPT_ID}',
  1378. '{receiptRecordMd.RECEIPT_NO}',
  1379. '{receiptRecordMd.RECEIPT_DTL_ID}',
  1380. '{receiptRecordMd.ARRIVAL_NO}',
  1381. '{receiptRecordMd.REGION_CODE}',
  1382. '{receiptRecordMd.REGION_NAME}',
  1383. '{receiptRecordMd.BIN_CODE}',
  1384. '{receiptRecordMd.BIN_NAME}',
  1385. '{receiptRecordMd.TRAY_CODE}',
  1386. '{receiptRecordMd.PALLET_CODE}',
  1387. {receiptTime},
  1388. '{receiptRecordMd.RECEIPTER}',
  1389. '{receiptRecordMd.MATERIEL_CODE}',
  1390. '{receiptRecordMd.MATERIEL_NAME}',
  1391. '{receiptRecordMd.MATERIEL_BARCODE}',
  1392. '{receiptRecordMd.MATERIEL_SPEC}',
  1393. '{receiptRecordMd.SUPPLIER_CODE}',
  1394. '{receiptRecordMd.SUPPLIER_NAME}',
  1395. '{receiptRecordMd.BATCH_NO}',
  1396. '{receiptRecordMd.PACKAGE_CODE}',
  1397. '{receiptRecordMd.UNIT_CODE}',
  1398. '{receiptRecordMd.RECEIPT_QTY}',
  1399. '{receiptRecordMd.REJECTION_QTY}',
  1400. '{receiptRecordMd.REJECTION_REASON}',
  1401. '{receiptRecordMd.PRODUCT_DATE}',
  1402. '{receiptRecordMd.EXP_DATE}',
  1403. '{receiptRecordMd.RECEIPT_RECORD_STATUS}',
  1404. '{receiptRecordMd.INSPECTION_RESULT}',
  1405. '{receiptRecordMd.ITEM_STATUS}',
  1406. '{receiptRecordMd.DESCRIBE}',
  1407. '{receiptRecordMd.CREATE_BY}',
  1408. getdate(),
  1409. '{receiptRecordMd.UPDATE_BY}',
  1410. getdate(),
  1411. 0,
  1412. NULL,
  1413. NULL,
  1414. NULL,
  1415. NULL,
  1416. NULL
  1417. );
  1418. ";
  1419. string sqlAddWmsInPutAwayDtl = $@"
  1420. INSERT INTO [WMS_IN_PUTAWAY_DTL] (
  1421. [PUTAWAY_DTL_ID],
  1422. [PUTAWAY_ID],
  1423. [MATERIEL_CODE],
  1424. [MATERIEL_NAME],
  1425. [MATERIEL_BARCODE],
  1426. [MATERIEL_SPEC],
  1427. [BATCH_NO],
  1428. [PACKAGE_CODE],
  1429. [UNIT_CODE],
  1430. [PUTAWAY_QTY],
  1431. [SUPPLIER_CODE],
  1432. [SUPPLIER_NAME],
  1433. [PRODUCT_DATE],
  1434. [EXP_DATE],
  1435. [INSPECTION_RESULT],
  1436. [PUTAWAY_DTL_STATUS],
  1437. [ITEM_STATUS],
  1438. [DESCRIBE],
  1439. [CREATE_BY],
  1440. [CREATE_TIME],
  1441. [UPDATE_BY],
  1442. [UPDATE_TIME],
  1443. [DATA_VERSION],
  1444. [REMARKS1],
  1445. [REMARKS2],
  1446. [REMARKS3],
  1447. [REMARKS4],
  1448. [REMARKS5]
  1449. )
  1450. VALUES
  1451. (
  1452. '{putawayDtlId}',
  1453. '{putawayId}',
  1454. '{item.MATERIEL_CODE}',
  1455. '{item.MATERIEL_NAME}',
  1456. '{item.MATERIEL_BARCODE}',
  1457. '{trayDtlExtMd.MATERIEL_SPEC}',
  1458. '{trayDtlExtMd.BATCH_NO}',
  1459. '{trayDtlExtMd.PACKAGE_CODE}',
  1460. '{trayDtlExtMd.UNIT_CODE}',
  1461. '{item.QTY}',
  1462. '{trayDtlExtMd.SUPPLIER_CODE}',
  1463. '{trayDtlExtMd.SUPPLIER_NAME}',
  1464. '{trayDtlExtMd.PRODUCT_DATE.ToString("yyyy-MM-dd hh:mm:ss")}',
  1465. '{trayDtlExtMd.EXP_DATE.ToString("yyyy-MM-dd hh:mm:ss")}',
  1466. '{trayDtlExtMd.INSPECTION_RESULT}',
  1467. '{0}',
  1468. '{trayDtlExtMd.ITEM_STATUS}',
  1469. '{item.DESCRIBE}',
  1470. '{trayDtlExtMd.CREATE_BY}',
  1471. getdate(),
  1472. '{trayDtlExtMd.UPDATE_BY}',
  1473. getdate(),
  1474. 0,
  1475. NULL,
  1476. NULL,
  1477. NULL,
  1478. NULL,
  1479. NULL
  1480. );
  1481. ";
  1482. sqlList_ReceiprRecordAndPutAway.Add(sqlAddWmsInReceiptRecord);
  1483. sqlList_ReceiprRecordAndPutAway.Add(sqlAddWmsInPutAwayDtl);
  1484. string sqlUpdateWmsInReceiptDtl = $@"
  1485. UPDATE WMS_IN_RECEIPT_DTL
  1486. SET
  1487. RECEIPT_TRAY_QTY = RECEIPT_TRAY_QTY + '{item.QTY}',
  1488. RECEIPT_DTL_STATUS = '{55}',
  1489. UPDATE_BY = '{wmsStkTrayResult.UPDATE_BY}',
  1490. UPDATE_TIME = GETDATE(),
  1491. DATA_VERSION = DATA_VERSION + 1
  1492. WHERE
  1493. RECEIPT_DTL_ID = '{receiptRecordMd.RECEIPT_DTL_ID}'
  1494. AND RECEIPT_ID = '{receiptRecordMd.RECEIPT_ID}'
  1495. ";
  1496. sqlList_ReceiprRecordAndPutAway.Add(sqlUpdateWmsInReceiptDtl);
  1497. }
  1498. List<string> sqlList_TrayDtlAndExt = new List<string>();
  1499. foreach (WmsStkTrayDtlResult item in tmpTrayDtlMergeLst)
  1500. {
  1501. item.TRAY_ID = wmsStkTrayResult.TRAY_ID;
  1502. WmsStkTrayDtlExtResult trayDtlExtMd = item.WmsStkTrayDtlExtMd;
  1503. item.TRAY_DTL_ID = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Tray_Dtl_Id"));
  1504. trayDtlExtMd.TRAY_DTL_EXT_ID = Convert.ToInt32(new DataRepository<object>(_dataContext).GetSequenceMsg("Tray_Dtl_Ext_Id"));
  1505. trayDtlExtMd.TRAY_DTL_ID = item.TRAY_DTL_ID;
  1506. trayDtlExtMd.TRAY_ID = wmsStkTrayResult.TRAY_ID;
  1507. string sqlAddWmsStkTrayDtl = $@"
  1508. INSERT INTO [WMS_STK_TRAY_DTL] (
  1509. [TRAY_DTL_ID],
  1510. [TRAY_ID],
  1511. [MATERIEL_ID],
  1512. [MATERIEL_CODE],
  1513. [MATERIEL_NAME],
  1514. [MATERIEL_BARCODE],
  1515. [QTY],
  1516. [TRAY_DTL_STATUS],
  1517. [DESCRIBE],
  1518. [CREATE_BY],
  1519. [CREATE_TIME],
  1520. [UPDATE_BY],
  1521. [UPDATE_TIME],
  1522. [DATA_VERSION],
  1523. [REMARKS1],
  1524. [REMARKS2],
  1525. [REMARKS3],
  1526. [REMARKS4],
  1527. [REMARKS5]
  1528. )
  1529. VALUES
  1530. (
  1531. '{item.TRAY_DTL_ID}',
  1532. '{item.TRAY_ID}',
  1533. '{item.MATERIEL_ID}',
  1534. '{item.MATERIEL_CODE}',
  1535. '{item.MATERIEL_NAME}',
  1536. '{item.MATERIEL_BARCODE}',
  1537. '{item.QTY}',
  1538. '{55}',
  1539. '{item.DESCRIBE}',
  1540. '{item.CREATE_BY}',
  1541. getdate(),
  1542. '{item.UPDATE_BY}',
  1543. getdate(),
  1544. 0,
  1545. NULL,
  1546. NULL,
  1547. NULL,
  1548. NULL,
  1549. NULL
  1550. );
  1551. ";
  1552. string sqlAddWmsStkTrayDtlExt = $@"
  1553. INSERT INTO [WMS_STK_TRAY_DTL_EXT] (
  1554. [TRAY_DTL_EXT_ID],
  1555. [TRAY_DTL_ID],
  1556. [MATERIEL_SPEC],
  1557. [PACKAGE_CODE],
  1558. [UNIT_CODE],
  1559. [BATCH_NO],
  1560. [SUPPLIER_CODE],
  1561. [SUPPLIER_NAME],
  1562. [PRODUCT_DATE],
  1563. [EXP_DATE],
  1564. [INSPECTION_RESULT],
  1565. [LOCK_FLAG],
  1566. [MIN_PKG_QTY],
  1567. [ECTEND_TIME_LEN],
  1568. [SUPPLIER_BATCH],
  1569. [ITEM_STATUS],
  1570. [DESCRIBE],
  1571. [CREATE_BY],
  1572. [CREATE_TIME],
  1573. [UPDATE_BY],
  1574. [UPDATE_TIME],
  1575. [DATA_VERSION],
  1576. [REMARKS1],
  1577. [REMARKS2],
  1578. [REMARKS3],
  1579. [REMARKS4],
  1580. [REMARKS5]
  1581. )
  1582. VALUES
  1583. (
  1584. '{trayDtlExtMd.TRAY_DTL_EXT_ID}',
  1585. '{trayDtlExtMd.TRAY_DTL_ID}',
  1586. '{trayDtlExtMd.MATERIEL_SPEC}',
  1587. '{trayDtlExtMd.PACKAGE_CODE}',
  1588. '{trayDtlExtMd.UNIT_CODE}',
  1589. '{trayDtlExtMd.BATCH_NO}',
  1590. '{trayDtlExtMd.SUPPLIER_CODE}',
  1591. '{trayDtlExtMd.SUPPLIER_NAME}',
  1592. '{trayDtlExtMd.PRODUCT_DATE}',
  1593. '{trayDtlExtMd.EXP_DATE}',
  1594. '{trayDtlExtMd.INSPECTION_RESULT}',
  1595. '{0}',
  1596. '{trayDtlExtMd.MIN_PKG_QTY}',
  1597. '{trayDtlExtMd.ECTEND_TIME_LEN}',
  1598. '{trayDtlExtMd.SUPPLIER_BATCH}',
  1599. '{trayDtlExtMd.ITEM_STATUS}',
  1600. '{trayDtlExtMd.DESCRIBE}',
  1601. '{trayDtlExtMd.CREATE_BY}',
  1602. getdate(),
  1603. '{trayDtlExtMd.UPDATE_BY}',
  1604. getdate(),
  1605. 0,
  1606. NULL,
  1607. NULL,
  1608. NULL,
  1609. NULL,
  1610. NULL
  1611. );
  1612. ";
  1613. sqlList_TrayDtlAndExt.Add(sqlAddWmsStkTrayDtl);
  1614. sqlList_TrayDtlAndExt.Add(sqlAddWmsStkTrayDtlExt);
  1615. }
  1616. sqlList.AddRange(sqlList_TrayDtlAndExt);
  1617. sqlList.AddRange(sqlList_ReceiprRecordAndPutAway);
  1618. foreach (int item in tmpReceiptIdLst)
  1619. {
  1620. string sqlUpdateWmsInReceipt = $@"
  1621. IF EXISTS (
  1622. SELECT
  1623. 1
  1624. FROM
  1625. WMS_IN_RECEIPT_DTL
  1626. WHERE
  1627. RECEIPT_DTL_STATUS = 55
  1628. AND RECEIPT_ID = '{item}'
  1629. ) UPDATE WMS_IN_RECEIPT
  1630. SET RECEIPT_STATUS = 55,
  1631. UPDATE_BY = '{wmsStkTrayResult.UPDATE_BY}',
  1632. UPDATE_TIME = GETDATE(),
  1633. DATA_VERSION = DATA_VERSION + 1
  1634. WHERE
  1635. RECEIPT_ID = '{item}' ;
  1636. ";
  1637. sqlList.Add(sqlUpdateWmsInReceipt);
  1638. }
  1639. #endregion
  1640. int row = new DataRepository<object>(_dataContext).ExecSqlListTran(sqlList);
  1641. if (row > 0)
  1642. {
  1643. return SuccessMessageStatus("新增收货组盘数据成功!", row);
  1644. }
  1645. else
  1646. {
  1647. return FailMessageStatus("新增收货组盘数据失败!", row);
  1648. }
  1649. }
  1650. else
  1651. {
  1652. return FailMessageStatus($"传入数据不存在组盘明细数据!");
  1653. }
  1654. }
  1655. catch (Exception ex)
  1656. {
  1657. return FailMessageStatus($"添加收货组盘数据发生异常,【{ex.Message}】");
  1658. }
  1659. }
  1660. public OperateResultInfo CheckPalletValidity(string palletCode)
  1661. {
  1662. try
  1663. {
  1664. string sqlQueryBasPallet = $@"
  1665. SELECT
  1666. *
  1667. FROM
  1668. BAS_PALLET
  1669. WHERE
  1670. PALLET_CODE = '{palletCode}'
  1671. ";
  1672. List<PalletResult> palletList = new DataRepository<PalletResult>(_dataContext).Query(sqlQueryBasPallet).ToList();
  1673. if (palletList == null && palletList.Count <= 0)
  1674. {
  1675. return FailMessageStatus($"托盘号:【{palletCode}】没有在基础托盘表维护数据,请先在维护托盘基础数据!");
  1676. }
  1677. string sqlQueryPutAway = $@"
  1678. SELECT
  1679. PUTAWAY_ID,
  1680. PUTAWAY_NO,
  1681. SOURCE_NO,
  1682. PUTAWAY_TYPE,
  1683. PUTAWAY_TYPE_NAME,
  1684. TRAY_CODE,
  1685. PALLET_CODE,
  1686. SBIN_CODE,
  1687. EBIN_CODE,
  1688. PUTAWAY_PRIORITY,
  1689. PUTAWAY_STATUS,
  1690. PUTAWAY_STATUS_NAME,
  1691. [DESCRIBE],
  1692. CREATE_BY,
  1693. CREATE_NAME,
  1694. CREATE_TIME,
  1695. UPDATE_BY,
  1696. UPDATE_NAME,
  1697. UPDATE_TIME
  1698. FROM
  1699. VW_WMS_IN_PUTAWAY
  1700. WHERE
  1701. PALLET_CODE = '{palletCode}' AND PUTAWAY_STATUS < 99
  1702. ";
  1703. List<WmsInPutAwayResult> putawayList = new DataRepository<WmsInPutAwayResult>(_dataContext).Query(sqlQueryPutAway).ToList();
  1704. if (putawayList != null && putawayList.Count > 0)
  1705. {
  1706. return FailMessageStatus($"托盘号:【{palletCode}】正在已存在未完成的上架单数据,无法再次进行组盘!");
  1707. }
  1708. string sqlQueryPutDown = $@"
  1709. SELECT
  1710. PUTDOWN_ID,
  1711. PUTDOWN_NO,
  1712. SOURCE_NO,
  1713. PUTDOWN_TYPE,
  1714. PUTDOWN_TYPE_NAME,
  1715. TRAY_CODE,
  1716. PALLET_CODE,
  1717. SBIN_CODE,
  1718. EBIN_CODE,
  1719. PUTDOWN_PRIORITY,
  1720. PUTDOWN_STATUS,
  1721. PUTDOWN_STATUS_NAME,
  1722. [DESCRIBE],
  1723. CREATE_BY,
  1724. CREATE_NAME,
  1725. CREATE_TIME,
  1726. UPDATE_BY,
  1727. UPDATE_NAME,
  1728. UPDATE_TIME
  1729. FROM
  1730. VW_WMS_OUT_PUTDOWN
  1731. WHERE
  1732. PALLET_CODE = '{palletCode}' AND PUTDOWN_STATUS < 99
  1733. ";
  1734. List<WmsOutPutDownResult> putdownList = new DataRepository<WmsOutPutDownResult>(_dataContext).Query(sqlQueryPutDown).ToList();
  1735. if (putdownList != null && putdownList.Count > 0)
  1736. {
  1737. return FailMessageStatus($"托盘号:【{palletCode}】正在已存在未完成的下架单数据,无法再次进行组盘!");
  1738. }
  1739. string sqlQueryWmsTask = $@"
  1740. SELECT
  1741. *
  1742. FROM
  1743. VW_WMS_TSK_TASK
  1744. WHERE
  1745. PALLET_CODE = '{palletCode}' AND TASK_STATUS < 99
  1746. ";
  1747. List<WmsTaskResult> wmstaskList = new DataRepository<WmsTaskResult>(_dataContext).Query(sqlQueryWmsTask).ToList();
  1748. if (wmstaskList != null && wmstaskList.Count > 0)
  1749. {
  1750. return FailMessageStatus($"托盘号:【{palletCode}】正在已存在未完成的WMS大任务数据,无法再次进行组盘!");
  1751. }
  1752. string sqlQueryCrnCmd = $@"
  1753. SELECT
  1754. *
  1755. FROM
  1756. VW_WCS_CRN_CMD
  1757. WHERE
  1758. PALLET_CODE = '{palletCode}' AND CMD_STATUS < 99
  1759. ";
  1760. List<WcsCrnCmdResult> crncmdList = new DataRepository<WcsCrnCmdResult>(_dataContext).Query(sqlQueryCrnCmd).ToList();
  1761. if (crncmdList != null && crncmdList.Count > 0)
  1762. {
  1763. return FailMessageStatus($"托盘号:【{palletCode}】正在已存在未完成的堆垛机指令数据,无法再次进行组盘!");
  1764. }
  1765. string sqlQueryTranCmd = $@"
  1766. SELECT
  1767. *
  1768. FROM
  1769. VW_WCS_TRAN_CMD
  1770. WHERE
  1771. PALLET_CODE = '{palletCode}' AND CMD_STATUS < 99
  1772. ";
  1773. List<WcsTranCmdResult> trancmdList = new DataRepository<WcsTranCmdResult>(_dataContext).Query(sqlQueryTranCmd).ToList();
  1774. if (trancmdList != null && trancmdList.Count > 0)
  1775. {
  1776. return FailMessageStatus($"托盘号:【{palletCode}】正在已存在未完成的输送线指令数据,无法再次进行组盘!");
  1777. }
  1778. string sqlQueryBalance = $@"
  1779. SELECT
  1780. *
  1781. FROM
  1782. VW_WMS_STK_BALANCE
  1783. WHERE
  1784. PALLET_CODE = '{palletCode}' AND BALANCE_STATUS < 99
  1785. ";
  1786. List<WmsStkBalanceResult> balanceList = new DataRepository<WmsStkBalanceResult>(_dataContext).Query(sqlQueryBalance).ToList();
  1787. if (balanceList != null && balanceList.Count > 0)
  1788. {
  1789. return FailMessageStatus($"托盘号:【{palletCode}】正在已存在库存数据,无法再次进行组盘!");
  1790. }
  1791. string sqlQueryWmsStkTray = $@"SELECT * FROM VW_WMS_STK_TRAY WHERE PALLET_CODE = '{palletCode}' AND TRAY_STATUS < 99";
  1792. List<WmsStkTrayResult> resultWmsStkTrayList = new DataRepository<WmsStkTrayResult>(_dataContext).Query(sqlQueryWmsStkTray).ToList();
  1793. if (balanceList != null && balanceList.Count > 0)
  1794. {
  1795. return FailMessageStatus($"托盘号:【{palletCode}】正在已存在组盘数据,无法再次进行组盘!");
  1796. }
  1797. return SuccessStatus();
  1798. }
  1799. catch (Exception ex)
  1800. {
  1801. return FailMessageStatus($"托盘号:【{palletCode}】合法性校验发生异常:{ex.Message}");
  1802. }
  1803. }
  1804. /// <summary>
  1805. /// 查询待检验的收货单数据
  1806. /// </summary>
  1807. /// <returns></returns>
  1808. public OperateResultInfo<List<WmsInReceiptDtlResult>> GetAllWaitForQaReceiptDtlData()
  1809. {
  1810. try
  1811. {
  1812. string sqlQueryWaitQaReceiptDtl = "SELECT * FROM VW_WMS_IN_RECEIPT_DTL WHERE RECEIPT_DTL_STATUS = 0 AND INSPECTION_RESULT = 'Wait'";
  1813. List<WmsInReceiptDtlResult> resultList = new DataRepository<WmsInReceiptDtlResult>(_dataContext).Query(sqlQueryWaitQaReceiptDtl).ToList();
  1814. OperateResultInfo<List<WmsInReceiptDtlResult>> retDataMsg = SuccessStatus(resultList);
  1815. return retDataMsg;
  1816. }
  1817. catch (Exception ex)
  1818. {
  1819. return FailMessageStatus<List<WmsInReceiptDtlResult>>($"查询待检验的收货单数据发生异常,【{ex.Message}】", null);
  1820. }
  1821. }
  1822. /// <summary>
  1823. /// 同步ERP
  1824. /// </summary>
  1825. /// <param name="wmsInPutAway"></param>
  1826. /// <returns>Erp生成的入库单号</returns>
  1827. public int AsyncErp(string ReceiptNo)
  1828. {
  1829. //获取入库单
  1830. var Receipt = new DataRepository<DataAccess.Entity.WMS_IN_RECEIPT>(this._dataContext).QueryFirst(" RECEIPT_NO=@ReceiptNo", new { ReceiptNo });
  1831. var RecepipRecord = new DataRepository<DataAccess.Entity.WMS_IN_RECEIPT_RECORD>(this._dataContext).Query(" RECEIPT_NO=@ReceiptNo", new { ReceiptNo });
  1832. var RecepipDetails = new DataRepository<DataAccess.Entity.WMS_IN_RECEIPT_DTL>(this._dataContext).Query("RECEIPT_ID=@ReceiptId", new { ReceiptId = Receipt.RECEIPT_ID });
  1833. //查询对应到货单信息
  1834. var Arrival = new DataRepository<DataAccess.Entity.WMS_IN_ARRIVAL>(this._dataContext).QueryFirst("ARRIVAL_NO=@ArrivalNo", new { ArrivalNo = Receipt.ARRIVAL_NO });
  1835. var ArrivalDetails = new DataRepository<DataAccess.Entity.WMS_IN_ARRIVAL_DTL>(this._dataContext).Query("ARRIVAL_ID=@ArrivalId", new { ArrivalId = Arrival.ARRIVAL_ID });
  1836. //构造查询对象
  1837. var lookupRecepipDetails = RecepipDetails.ToDictionary(m => m.RECEIPT_DTL_ID);
  1838. var lookupArrivalDetail = ArrivalDetails.ToDictionary(m => m.ARRIVAL_DTL_ID);
  1839. var inBound = new Model.AppModels.Result.ERP.Inbound()
  1840. {
  1841. InboundDate = DateTime.Now,
  1842. InboundNo = Receipt.ARRIVAL_NO,
  1843. InboundType = Model.AppModels.Result.ERP.InboundType.PurchaseIn,
  1844. SourceName = "采购到货单",
  1845. SourceNo = Arrival.ERP_ID,
  1846. WarehouseCode = "2"
  1847. };
  1848. foreach (var item in RecepipRecord)
  1849. {
  1850. int ERPDetailId = -1;
  1851. if (lookupRecepipDetails.TryGetValue(item.RECEIPT_DTL_ID, out var RecepipDetail))
  1852. {
  1853. if (lookupArrivalDetail.TryGetValue(RecepipDetail.ARRIVAL_DTL_ID.Value, out var ArrivalDetail))
  1854. {
  1855. ERPDetailId = ArrivalDetail.ERP_DTL_ID;
  1856. }
  1857. }
  1858. if (ERPDetailId != -1)
  1859. {
  1860. inBound.InboundDetail.Add(new Model.AppModels.Result.ERP.InboundDetail()
  1861. {
  1862. BinCode = item.BIN_CODE,
  1863. Qty = item.RECEIPT_QTY,
  1864. MaterialCode = item.MATERIEL_CODE,
  1865. SourceDtlId = ERPDetailId
  1866. });
  1867. }
  1868. }
  1869. return this._eRPServer.PuStockIn(inBound).Result;
  1870. }
  1871. }
  1872. }