纽威
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4173 lines
222 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. using ICSSoft.Common;
  2. using ICSSoft.Entity;
  3. using Newtonsoft.Json;
  4. using NFine.Code;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Data;
  8. using System.Data.SqlClient;
  9. using System.Linq;
  10. using System.Net.Http;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace ICSSoft.DataProject
  14. {
  15. /// <summary>
  16. /// 使用中
  17. /// 提交业务处理
  18. /// </summary>
  19. public class ICSSubmitService
  20. {
  21. private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  22. private static string connString = System.Configuration.ConfigurationManager.AppSettings["ConnStr"];
  23. #region 源头单据信息
  24. /// <summary>
  25. /// 源头单据信息
  26. /// </summary>
  27. /// <param name="JsonData"></param>
  28. /// <returns></returns>
  29. public static DataTable TransInformationGet(WMSSourceDocumentModel JsonData)
  30. {
  31. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  32. {
  33. conn.Open();
  34. SqlCommand cmd = new SqlCommand();
  35. cmd.Connection = conn;
  36. try
  37. {
  38. if (string.IsNullOrEmpty(JsonData.TransCode))
  39. {
  40. throw new Exception("单据号不能为空!");
  41. }
  42. else if (string.IsNullOrEmpty(JsonData.TransType))
  43. {
  44. throw new Exception("单据类型不能为空!");
  45. }
  46. else if (!EnumHelper.HasDescriptions(typeof(TransTypeEnum), JsonData.TransType))
  47. {
  48. throw new Exception("单据类型不存在!");
  49. }
  50. else if (string.IsNullOrEmpty(JsonData.WorkPoint))
  51. {
  52. throw new Exception("站点不能为空!");
  53. }
  54. string TransType = JsonData.TransType;
  55. #region SLQ
  56. string sql = @"IF NOT EXISTS(SELECT a.ID FROM {1} WHERE {2})
  57. BEGIN
  58. RAISERROR('{3} ',16,1);
  59. RETURN
  60. END
  61. SELECT a.ID,
  62. {0}
  63. a.InvCode,
  64. inv.InvName,
  65. inv.InvStd,
  66. a.Quantity,
  67. inv.InvUnit,
  68. a.Amount,
  69. a.WHCode,
  70. inv.AmountUnit,
  71. wh.WarehouseName AS WHName,
  72. ext.ProjectCode,
  73. CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  74. ext.Version,
  75. ext.Brand,
  76. ext.cFree1,
  77. ext.cFree2,
  78. ext.cFree3,
  79. ext.cFree4,
  80. ext.cFree5,
  81. ext.cFree6,
  82. ext.cFree7,
  83. ext.cFree8,
  84. ext.cFree9,
  85. ext.cFree10,
  86. a.MUSER AS [User],
  87. a.MTIME AS [MTime]
  88. FROM {1}
  89. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  90. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  91. LEFT JOIN ICSWarehouse wh ON a.WHCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint
  92. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WHCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  93. WHERE {2} ";
  94. #endregion
  95. bool isDeliveryNotice = false; //送货、到货、含委外
  96. string columns = string.Empty; //查询源头单据表的特殊列名
  97. string tableName = string.Empty; //查询源头单据表名
  98. string where = string.Empty; //查询源头单据的过滤条件
  99. #region 出库
  100. #region 采购退货
  101. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseReceiveDoctNegative))
  102. {
  103. isDeliveryNotice = true;
  104. columns = @"a.DNCode AS TransCode,
  105. a.DNDetailID AS DetailID,
  106. a.DNType AS Type,
  107. a.Sequence AS TransSequence,
  108. a.RCVQuantity AS IssueQuantity,
  109. a.Quantity,
  110. a.Amount,
  111. a.MUSER AS [User],
  112. a.MTIME AS [MTime],";
  113. tableName = @"ICSDeliveryNotice a ";
  114. where = @" a.DNCode='{0}' AND a.WorkPoint='{1}' AND a.DNType='2' ";
  115. }
  116. #endregion
  117. #region 委外发料
  118. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingIssueDoc))
  119. {
  120. columns = @"b.OOCode AS TransCode,
  121. a.PickID AS DetailID,
  122. a.SupplyType AS Type,
  123. b.Sequence+'-'+a.Sequence AS TransSequence,
  124. a.IssueQuantity AS IssueQuantity,";
  125. tableName = @"ICSOOPick a
  126. INNER JOIN ICSOutsourcingOrder b ON a.OODetailID=b.OODetailID AND a.WorkPoint=b.WorkPoint ";
  127. where = @" b.OOCode='{0}' AND a.WorkPoint='{1}' ";
  128. }
  129. #endregion
  130. #region 委外退货
  131. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingReturnBack))
  132. {
  133. isDeliveryNotice = true;
  134. columns = @"a.ODNCode AS TransCode,
  135. a.ODNDetailID AS DetailID,
  136. a.ODNType AS Type,
  137. a.Sequence AS TransSequence,
  138. a.RCVQuantity AS IssueQuantity,
  139. a.Quantity,
  140. a.Amount,
  141. a.MUSER AS [User],
  142. a.MTIME AS [MTime],";
  143. tableName = @"ICSODeliveryNotice a ";
  144. where = @" a.ODNCode='{0}' AND a.WorkPoint='{1}' AND a.ODNType='2' ";
  145. }
  146. #endregion
  147. #region 生产发料
  148. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOIssueDoc))
  149. {
  150. columns = @"b.MOCode AS TransCode,
  151. a.PickID AS DetailID,
  152. a.SupplyType AS Type,
  153. b.Sequence+'-'+a.Sequence AS TransSequence,
  154. a.IssueQuantity AS IssueQuantity,";
  155. tableName = @"ICSMOPick a
  156. INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint ";
  157. where = @" b.MOCode='{0}' AND a.WorkPoint='{1}' ";
  158. }
  159. #endregion
  160. #region 销售出库
  161. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.SalesShipmentDoc))
  162. {
  163. columns = @"a.SDNCode AS TransCode,
  164. a.SDNDetailID AS DetailID,
  165. a.Type,
  166. a.Sequence AS TransSequence,
  167. a.SDNQuantity AS IssueQuantity,";
  168. tableName = @"ICSSDN a ";
  169. where = @" a.SDNCode='{0}' AND a.WorkPoint='{1}' AND a.Type='1' ";
  170. }
  171. #endregion
  172. #region 盘点
  173. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.Check))
  174. {
  175. #region SLQ
  176. sql = @"IF NOT EXISTS(SELECT a.ID FROM {1} WHERE {2})
  177. BEGIN
  178. RAISERROR('{3} ',16,1);
  179. RETURN
  180. END
  181. SELECT a.ID,
  182. {0}
  183. a.InvCode,
  184. inv.InvName,
  185. inv.InvStd,
  186. a.Quantity,
  187. inv.InvUnit,
  188. a.Amount,
  189. a.WHCode,
  190. inv.AmountUnit,
  191. wh.WarehouseName AS WHName,
  192. a.MUSER AS [User],
  193. a.MTIME AS [MTime]
  194. FROM {1}
  195. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  196. LEFT JOIN ICSWarehouse wh ON a.WHCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint
  197. WHERE {2} ";
  198. #endregion
  199. columns = @"a.CheckCode AS TransCode,
  200. a.ID AS DetailID,
  201. '' AS Type,
  202. row_number() OVER (ORDER BY a.InvCode) AS TransSequence,
  203. a.ActualQuantity AS IssueQuantity,";
  204. tableName = @"ICSCheck a ";
  205. where = @" a.CheckCode='{0}' AND a.WorkPoint='{1}' ";
  206. }
  207. #endregion
  208. #region 一步调拨
  209. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OneStepTransferDocIn))
  210. {
  211. #region SLQ
  212. sql = @"IF NOT EXISTS(SELECT a.ID FROM {1} WHERE {2})
  213. BEGIN
  214. RAISERROR('{3} ',16,1);
  215. RETURN
  216. END
  217. SELECT a.ID,
  218. {0}
  219. a.InvCode,
  220. inv.InvName,
  221. inv.InvStd,
  222. a.Quantity,
  223. inv.InvUnit,
  224. a.Amount,
  225. a.FromWarehouseCode AS WHCode,
  226. inv.AmountUnit,
  227. wh.WarehouseName AS WHName,
  228. ext.ProjectCode,
  229. CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  230. ext.Version,
  231. ext.Brand,
  232. ext.cFree1,
  233. ext.cFree2,
  234. ext.cFree3,
  235. ext.cFree4,
  236. ext.cFree5,
  237. ext.cFree6,
  238. ext.cFree7,
  239. ext.cFree8,
  240. ext.cFree9,
  241. ext.cFree10,
  242. a.MUSER AS [User],
  243. a.MTIME AS [MTime]
  244. FROM {1}
  245. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  246. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  247. LEFT JOIN ICSWarehouse wh ON a.FromWarehouseCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint
  248. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  249. WHERE {2} ";
  250. #endregion
  251. columns = @"a.TransferNO AS TransCode,
  252. a.TransferDetailID AS DetailID,
  253. '' AS Type,
  254. a.Sequence AS TransSequence,
  255. a.TransferQuantity AS IssueQuantity,
  256. a.ToWarehouseCode,";
  257. tableName = @"ICSTransfer a ";
  258. where = @" a.TransferNO='{0}' AND a.WorkPoint='{1}' AND a.Status='1' ";
  259. }
  260. #endregion
  261. #region 两步调出
  262. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.TwoStepTransferDocOut))
  263. {
  264. columns = @"a.OutCode AS TransCode,
  265. a.OutDetailID AS DetailID,
  266. '' AS Type,
  267. a.Sequence AS TransSequence,
  268. a.OutQuantity AS IssueQuantity,";
  269. tableName = @"ICSOtherOut a
  270. INNER JOIN ICSTransfer tra ON a.TransferDetailID=tra.TransferDetailID AND a.WorkPoint=tra.WorkPoint ";
  271. where = @" a.OutCode='{0}' AND a.WorkPoint='{1}' ";
  272. }
  273. #endregion
  274. #region 其他出库
  275. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OtherOutDoc))
  276. {
  277. columns = @"a.OutCode AS TransCode,
  278. a.OutDetailID AS DetailID,
  279. '' AS Type,
  280. a.Sequence AS TransSequence,
  281. a.OutQuantity AS IssueQuantity,";
  282. tableName = @"ICSOtherOut a ";
  283. where = @" a.OutCode='{0}' AND a.WorkPoint='{1}' ";
  284. }
  285. #endregion
  286. #region 领料申请单发料
  287. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOApply))
  288. {
  289. columns = @"a.ApplyCode AS TransCode,
  290. a.ApplyDetailID AS DetailID,
  291. a.Type,
  292. a.Sequence AS TransSequence,
  293. a.IssueQuantity AS IssueQuantity,";
  294. tableName = @"ICSMOApply a ";
  295. where = @" a.ApplyCode='{0}' AND a.WorkPoint='{1}' ";
  296. }
  297. #endregion
  298. #region 委外领料申请单发料
  299. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OOApply))
  300. {
  301. columns = @"a.ApplyCode AS TransCode,
  302. a.ApplyDetailID AS DetailID,
  303. a.Type,
  304. a.Sequence AS TransSequence,
  305. a.IssueQuantity AS IssueQuantity,";
  306. tableName = @"ICSOApply a ";
  307. where = @" a.ApplyCode='{0}' AND a.WorkPoint='{1}' ";
  308. }
  309. #endregion
  310. #region 开立材料出库
  311. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOIssue))
  312. {
  313. columns = @"a.IssueCode AS TransCode,
  314. a.IssueDetailID AS DetailID,
  315. a.Type,
  316. a.Sequence AS TransSequence,
  317. a.IssueQuantity AS IssueQuantity,";
  318. tableName = @"ICSMOIssue a ";
  319. where = @" a.IssueCode='{0}' AND a.WorkPoint='{1}' ";
  320. }
  321. #endregion
  322. #region 开立委外材料出库
  323. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OOIssue))
  324. {
  325. columns = @"a.IssueCode AS TransCode,
  326. a.IssueDetailID AS DetailID,
  327. a.Type,
  328. a.Sequence AS TransSequence,
  329. a.IssueQuantity AS IssueQuantity,";
  330. tableName = @"ICSOIssue a ";
  331. where = @" a.IssueCode='{0}' AND a.WorkPoint='{1}' ";
  332. }
  333. #endregion
  334. #region 开立红字入库单
  335. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseReceive))
  336. {
  337. columns = @"a.RCVCode AS TransCode,
  338. a.RCVDetailID AS DetailID,
  339. a.Type,
  340. a.Sequence AS TransSequence,
  341. a.RCVQuantity AS IssueQuantity,";
  342. tableName = @"ICSPurchaseReceive a ";
  343. where = @" a.RCVCode='{0}' AND a.WorkPoint='{1}' AND a.Type='2' ";
  344. }
  345. #endregion
  346. #region 开立委外红字入库单
  347. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingReceiveDocNegative))
  348. {
  349. columns = @"a.RCVCode AS TransCode,
  350. a.RCVDetailID AS DetailID,
  351. a.Type,
  352. a.Sequence AS TransSequence,
  353. a.RCVQuantity AS IssueQuantity,";
  354. tableName = @"ICSOutsourcingReceive a ";
  355. where = @" a.RCVCode='{0}' AND a.WorkPoint='{1}' AND a.Type='2' ";
  356. }
  357. #endregion
  358. #region 借用
  359. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.BrrowDoc))
  360. {
  361. columns = @"a.BrrowCode AS TransCode,
  362. a.BrrowDetailID AS DetailID,
  363. '' AS Type,
  364. a.Sequence AS TransSequence,
  365. a.BrrowQuantity AS IssueQuantity,";
  366. tableName = @"ICSBrrow a ";
  367. where = @" a.BrrowCode='{0}' AND a.WorkPoint='{1}' ";
  368. }
  369. #endregion
  370. #region 送货单
  371. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ASN))
  372. {
  373. isDeliveryNotice = true;
  374. columns = @"asn.ASNCode AS TransCode,
  375. asn.ID AS DetailID,
  376. asn.LotNo,
  377. '' AS Type,
  378. asn.Sequence AS TransSequence,
  379. asn.DNQuantity AS IssueQuantity,
  380. asn.Quantity,
  381. asn.Quantity*a.AmountRate AS Amount,
  382. asn.MUSER AS [User],
  383. asn.MTIME AS [MTime],";
  384. tableName = @"ICSInventoryLot a
  385. INNER JOIN ICSASNDetail asn ON a.LotNo=asn.LotNo AND a.WorkPoint=asn.WorkPoint ";
  386. where = @" asn.ASNCode='{0}' AND a.WorkPoint='{1}' ";
  387. }
  388. #endregion
  389. #region 委外送货单
  390. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OASN))
  391. {
  392. isDeliveryNotice = true;
  393. columns = @"asn.OASNCode AS TransCode,
  394. asn.ID AS DetailID,
  395. asn.LotNo,
  396. '' AS Type,
  397. asn.Sequence AS TransSequence,
  398. asn.ODNQuantity AS IssueQuantity,
  399. asn.Quantity,
  400. asn.Quantity*a.AmountRate AS Amount,
  401. asn.MUSER AS [User],
  402. asn.MTIME AS [MTime],";
  403. tableName = @"ICSInventoryLot a
  404. INNER JOIN ICSOASNDetail asn ON a.LotNo=asn.LotNo AND a.WorkPoint=asn.WorkPoint ";
  405. where = @" asn.OASNCode='{0}' AND a.WorkPoint='{1}' ";
  406. }
  407. #endregion
  408. #endregion
  409. #region 入库
  410. #region 采购入库
  411. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseReceiveDoc))
  412. {
  413. }
  414. #endregion
  415. #region 审核的到货单
  416. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.DeliveryNotice))
  417. {
  418. }
  419. #endregion
  420. #region 采购拒收
  421. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseRejectDoc))
  422. {
  423. }
  424. #endregion
  425. #region 审核的委外到货单
  426. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ODeliveryNotice))
  427. {
  428. }
  429. #endregion
  430. #region 委外拒收
  431. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingRejectDoc))
  432. {
  433. }
  434. #endregion
  435. #region 委外退料
  436. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ICSOutsourcingIssueDoNegative))
  437. {
  438. }
  439. #endregion
  440. #region 委外入库
  441. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingReceiveDoc))
  442. {
  443. }
  444. #endregion
  445. #region 生产退料
  446. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOIssueDocNegative))
  447. {
  448. }
  449. #endregion
  450. #region 生产入库
  451. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ManufactureReceiveDoc))
  452. {
  453. }
  454. #endregion
  455. #region 开立的生产入库单
  456. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ManufactureReceive))
  457. {
  458. }
  459. #endregion
  460. #region 销售退货
  461. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.SalesShipmentDocNegative))
  462. {
  463. }
  464. #endregion
  465. #region 两步调入
  466. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.TwoStepTransferDocIn))
  467. {
  468. columns = @"a.InCode AS TransCode,
  469. a.InDetailID AS DetailID,
  470. '' AS Type,
  471. a.Sequence AS TransSequence,
  472. a.InQuantity AS IssueQuantity,";
  473. tableName = @"ICSOtherIn a
  474. INNER JOIN ICSTransfer tra ON a.TransferDetailID=tra.TransferDetailID AND a.WorkPoint=tra.WorkPoint ";
  475. where = @" a.InCode='{0}' AND a.WorkPoint='{1}' ";
  476. }
  477. #endregion
  478. #region 销售退货-原条码
  479. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.SalesReturnBack))
  480. {
  481. columns = @"a.SDNCode AS TransCode,
  482. a.SDNDetailID AS DetailID,
  483. a.Type,
  484. a.Sequence AS TransSequence,
  485. a.SDNQuantity AS IssueQuantity,";
  486. tableName = @"ICSSDN a ";
  487. where = @" a.SDNCode='{0}' AND a.WorkPoint='{1}' AND a.Type='2' ";
  488. }
  489. #endregion
  490. #region 其他入库
  491. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OtherInDoc))
  492. {
  493. }
  494. #endregion
  495. #region 拆卸单
  496. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.DisassemblyDoc))
  497. {
  498. columns = @"a.DABDOCCode AS TransCode,
  499. a.DABDOCDetailID AS DetailID,
  500. a.DABDOCType AS Type,
  501. a.Sequence AS TransSequence,
  502. a.DABDOCQuantity AS IssueQuantity,";
  503. tableName = @"ICSDisassemblyDoc a";
  504. where = @" a.DABDOCCode='{0}' AND a.WorkPoint='{1}' AND a.DABDOCType='2' ";
  505. }
  506. #endregion
  507. #region 归还
  508. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ReturnDoc))
  509. {
  510. }
  511. #endregion
  512. #endregion
  513. if (string.IsNullOrWhiteSpace(columns) || string.IsNullOrWhiteSpace(tableName) || string.IsNullOrWhiteSpace(where))
  514. throw new Exception("输入类型不符!");
  515. if (isDeliveryNotice)
  516. {
  517. #region SLQ
  518. sql = @"IF NOT EXISTS(SELECT a.ID FROM {1} WHERE {2})
  519. BEGIN
  520. RAISERROR('{3} ',16,1);
  521. RETURN
  522. END
  523. SELECT a.ID,
  524. {0}
  525. a.InvCode,
  526. inv.InvName,
  527. inv.InvStd,
  528. inv.InvUnit,
  529. '' AS WHCode,
  530. inv.AmountUnit,
  531. '' AS WHName,
  532. ext.ProjectCode,
  533. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  534. ext.Version,
  535. ext.Brand,
  536. ext.cFree1,
  537. ext.cFree2,
  538. ext.cFree3,
  539. ext.cFree4,
  540. ext.cFree5,
  541. ext.cFree6,
  542. ext.cFree7,
  543. ext.cFree8,
  544. ext.cFree9,
  545. ext.cFree10
  546. FROM {1}
  547. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  548. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  549. WHERE {2} ";
  550. #endregion
  551. }
  552. where = string.Format(where, JsonData.TransCode, JsonData.WorkPoint);
  553. sql = string.Format(sql, columns, tableName, where, JsonData.TransCode);
  554. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  555. return table;
  556. }
  557. catch (Exception ex)
  558. {
  559. log.Error(ex.Message);
  560. throw new Exception(ex.Message);
  561. }
  562. finally
  563. {
  564. if (conn.State == ConnectionState.Open)
  565. {
  566. conn.Close();
  567. }
  568. conn.Dispose();
  569. }
  570. }
  571. }
  572. #endregion
  573. #region 条码信息
  574. /// <summary>
  575. /// 条码信息
  576. /// </summary>
  577. /// <param name="JsonData"></param>
  578. /// <returns></returns>
  579. public static DataTable BarCodeInformationGet(BarCodeModel JsonData)
  580. {
  581. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  582. {
  583. conn.Open();
  584. SqlCommand cmd = new SqlCommand();
  585. cmd.Connection = conn;
  586. try
  587. {
  588. if (string.IsNullOrEmpty(JsonData.Code))
  589. {
  590. throw new Exception("条码不能为空!");
  591. }
  592. else if (string.IsNullOrEmpty(JsonData.TransType))
  593. {
  594. throw new Exception("单据类型不能为空!");
  595. }
  596. else if (!EnumHelper.HasDescriptions(typeof(TransTypeEnum), JsonData.TransType))
  597. {
  598. throw new Exception("单据类型不存在!");
  599. }
  600. else if (string.IsNullOrEmpty(JsonData.WorkPoint))
  601. {
  602. throw new Exception("站点不能为空!");
  603. }
  604. string TransType = JsonData.TransType;
  605. #region SLQ
  606. string sql = @"
  607. SELECT a.ID,
  608. con.ContainerCode,
  609. con.ContainerName,
  610. a.LotNo,
  611. a.InvCode,
  612. inv.InvName,
  613. inv.InvStd,
  614. inv.InvUnit,
  615. {0}
  616. inv.AmountUnit,
  617. ext.ProjectCode,
  618. ext.Version,
  619. ext.Brand,
  620. ext.cFree1,
  621. ext.cFree2,
  622. ext.cFree3,
  623. ext.cFree4,
  624. ext.cFree5,
  625. ext.cFree6,
  626. ext.cFree7,
  627. ext.cFree8,
  628. ext.cFree9,
  629. ext.cFree10,
  630. a.MUSER AS [User],
  631. a.MTIME AS [MTime]
  632. FROM {1}
  633. LEFT JOIN ICSContainerLot conlot ON a.LotNo=conlot.LotNo AND a.WorkPoint=conlot.WorkPoint
  634. LEFT JOIN ICSContainer con ON conlot.ContainerID=con.ID AND conlot.WorkPoint=con.WorkPoint
  635. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  636. WHERE a.LotNo='{2}' AND a.WorkPoint='{3}' ";
  637. #endregion
  638. bool isOut = false; //出库标记
  639. string columns = string.Empty; //查询源头单据表的特殊列名
  640. string tableName = string.Empty; //查询源头单据表名
  641. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseReceiveDoctNegative) //采购退货
  642. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingIssueDoc) //委外发料
  643. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingReturnBack) //委外退货
  644. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOIssueDoc) //生产发料
  645. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.SalesShipmentDoc) //销售出库
  646. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OneStepTransferDocIn) //一步调拨
  647. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.TwoStepTransferDocOut) //两步调出
  648. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OtherOutDoc) //其他出库
  649. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.Check) //盘点
  650. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOApply) //领料申请单
  651. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OOApply) //委外领料申请单
  652. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOIssue) //开立材料出库单
  653. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OOIssue) //开立委外材料出库单
  654. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseReceive) //开立红字入库单
  655. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingReceiveDocNegative)//开立委外红字入库单
  656. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.BrrowDoc) //借用
  657. || TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.TransferLibrary) //移库
  658. )
  659. {
  660. isOut = true;
  661. }
  662. //两步调入条码
  663. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.TwoStepTransferDocIn))
  664. {
  665. if (string.IsNullOrEmpty(JsonData.TransCode))
  666. {
  667. throw new Exception("单据号不能为空!");
  668. }
  669. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSOtherIn Otin
  670. INNER JOIN ICSTransfer tra ON Otin.TransferDetailID=tra.TransferDetailID AND Otin.WorkPoint=tra.WorkPoint
  671. INNER JOIN ICSOtherOut out ON out.TransferDetailID=tra.TransferDetailID AND out.WorkPoint=tra.WorkPoint
  672. INNER JOIN ICSWareHouseLotInfoLog log ON out.OutCode=log.TransCode AND out.Sequence=log.TransSequence AND out.WorkPoint=log.WorkPoint
  673. INNER JOIN ICSWareHouseLotInfo a ON a.LotNo=log.LotNo AND a.WorkPoint=log.WorkPoint
  674. WHERE a.LotNo='{2}' AND a.WorkPoint='{3}')
  675. BEGIN
  676. RAISERROR('{2} ',16,1);
  677. RETURN
  678. END
  679. " + sql + "AND Otin.InCode = '" + JsonData.TransCode + "'"
  680. + @"GROUP BY a.ID,con.ContainerCode,con.ContainerName,a.LotNo,a.InvCode,inv.InvName,inv.InvStd,inv.InvUnit,a.WarehouseCode,
  681. wh.WarehouseName,a.LocationCode,loc.LocationName,CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END,inv.AmountUnit,
  682. ext.ProjectCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10,a.MUSER,a.MTIME";
  683. columns = @"SUM(log.Quantity) AS Quantity,
  684. SUM(log.Quantity*lot.AmountRate) AS Amount,
  685. a.WarehouseCode AS WHCode,
  686. wh.WarehouseName AS WHName,
  687. a.LocationCode,
  688. loc.LocationName,
  689. CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,";
  690. tableName = @"ICSOtherIn Otin
  691. INNER JOIN ICSTransfer tra ON Otin.TransferDetailID=tra.TransferDetailID AND Otin.WorkPoint=tra.WorkPoint
  692. INNER JOIN ICSOtherOut out ON out.TransferDetailID=tra.TransferDetailID AND out.WorkPoint=tra.WorkPoint
  693. INNER JOIN ICSWareHouseLotInfoLog log ON out.OutCode=log.TransCode AND out.Sequence=log.TransSequence AND out.WorkPoint=log.WorkPoint
  694. INNER JOIN ICSWareHouseLotInfo a ON a.LotNo=log.LotNo AND a.WorkPoint=log.WorkPoint
  695. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  696. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  697. INNER JOIN ICSWarehouse wh ON a.WarehouseCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint
  698. INNER JOIN ICSLocation loc ON a.LocationCode=loc.LocationCode AND a.WorkPoint=loc.WorkPoint
  699. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint";
  700. }
  701. //销售退货-原条码
  702. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.SalesReturnBack))
  703. {
  704. if (string.IsNullOrEmpty(JsonData.TransCode))
  705. {
  706. throw new Exception("单据号不能为空!");
  707. }
  708. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSSDN sdn
  709. INNER JOIN ICSWareHouseLotInfoLog log ON sdn.SDNCode=log.TransCode AND sdn.Sequence=log.TransSequence AND sdn.WorkPoint=log.WorkPoint
  710. INNER JOIN ICSWareHouseLotInfo a ON a.LotNo=log.LotNo AND a.WorkPoint=log.WorkPoint
  711. WHERE a.LotNo='{2}' AND a.WorkPoint='{3}' AND sdn.Type='1')
  712. BEGIN
  713. RAISERROR('{2} ',16,1);
  714. RETURN
  715. END
  716. " + sql + "AND sdn.SDNCode = '" + JsonData.TransCode + "'"
  717. + @"GROUP BY a.ID,con.ContainerCode,con.ContainerName,a.LotNo,a.InvCode,inv.InvName,inv.InvStd,inv.InvUnit,a.WarehouseCode,
  718. wh.WarehouseName,a.LocationCode,loc.LocationName,CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END,inv.AmountUnit,
  719. ext.ProjectCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10,a.MUSER,a.MTIME";
  720. columns = @"SUM(log.Quantity) AS Quantity,
  721. SUM(log.Quantity*lot.AmountRate) AS Amount,
  722. a.WarehouseCode AS WHCode,
  723. wh.WarehouseName AS WHName,
  724. a.LocationCode,
  725. loc.LocationName,
  726. CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,";
  727. tableName = @"ICSSDN sdn
  728. INNER JOIN ICSWareHouseLotInfoLog log ON sdn.SDNCode=log.TransCode AND sdn.Sequence=log.TransSequence AND sdn.WorkPoint=log.WorkPoint
  729. INNER JOIN ICSWareHouseLotInfo a ON a.LotNo=log.LotNo AND a.WorkPoint=log.WorkPoint
  730. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  731. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  732. INNER JOIN ICSWarehouse wh ON a.WarehouseCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint
  733. INNER JOIN ICSLocation loc ON a.LocationCode=loc.LocationCode AND a.WorkPoint=loc.WorkPoint
  734. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint";
  735. }
  736. //分批
  737. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.LOTSplit))
  738. {
  739. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{2}' AND a.WorkPoint='{3}' AND a.Quantity>0)
  740. BEGIN
  741. RAISERROR('{2} ',16,1);
  742. RETURN
  743. END
  744. " + sql;
  745. columns = @"a.Quantity,
  746. a.Quantity*lot.AmountRate AS Amount,
  747. a.WarehouseCode AS WHCode,
  748. wh.WarehouseName AS WHName,
  749. a.LocationCode,
  750. loc.LocationName,
  751. CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  752. ISNULL(split.SplitLotNo, a.LotNo+'-1') AS SplitLotNo,";
  753. tableName = @"ICSWareHouseLotInfo a
  754. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  755. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  756. INNER JOIN ICSWarehouse wh ON a.WarehouseCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint
  757. INNER JOIN ICSLocation loc ON a.LocationCode=loc.LocationCode AND a.WorkPoint=loc.WorkPoint
  758. LEFT JOIN (SELECT EATTRIBUTE1 AS LotNo,WorkPoint,EATTRIBUTE1+'-'+CAST((MAX(CAST(SUBSTRING(LotNo, CHARINDEX('-', LotNo)+1, LEN(LotNo)-CHARINDEX('-', LotNo)) AS INT))+1) AS VARCHAR) AS SplitLotNo FROM ICSInventoryLot GROUP BY EATTRIBUTE1,WorkPoint) split ON a.LotNo=split.LotNo AND a.WorkPoint=split.WorkPoint
  759. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint";
  760. }
  761. //出库条码
  762. else if (isOut)
  763. {
  764. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{2}' AND a.WorkPoint='{3}' AND a.Quantity>0)
  765. BEGIN
  766. RAISERROR('{2} ',16,1);
  767. RETURN
  768. END
  769. " + sql;
  770. columns = @"a.Quantity,
  771. a.Quantity*lot.AmountRate AS Amount,
  772. a.WarehouseCode AS WHCode,
  773. wh.WarehouseName AS WHName,
  774. a.LocationCode,
  775. loc.LocationName,
  776. CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,";
  777. tableName = @"ICSWareHouseLotInfo a
  778. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  779. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  780. INNER JOIN ICSWarehouse wh ON a.WarehouseCode=wh.WarehouseCode AND a.WorkPoint=wh.WorkPoint
  781. INNER JOIN ICSLocation loc ON a.LocationCode=loc.LocationCode AND a.WorkPoint=loc.WorkPoint
  782. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.WarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint";
  783. }
  784. //入库条码
  785. else
  786. {
  787. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSInventoryLot a WHERE a.LotNo='{2}' AND a.WorkPoint='{3}')
  788. BEGIN
  789. RAISERROR('{2} ',16,1);
  790. RETURN
  791. END
  792. IF EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{2}' AND a.WorkPoint='{3}')
  793. BEGIN
  794. RAISERROR('{2} ',16,1);
  795. RETURN
  796. END
  797. IF EXISTS(SELECT a.ID FROM ICSInventoryLot a
  798. INNER JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  799. LEFT JOIN ICSInspection ins ON a.LotNo=ins.LotNo AND a.WorkPoint=ins.WorkPoint
  800. WHERE a.LotNo='{2}' AND a.WorkPoint='{3}' AND (b.InvIQC='1'AND ins.LotNo IS NULL))
  801. BEGIN
  802. RAISERROR('{2} ',16,1);
  803. RETURN
  804. END
  805. " + sql;
  806. columns = @"ISNULL(ins.QualifiedQuantity+ins.WaiveQuantity, a.Quantity) AS Quantity,
  807. a.Quantity*a.AmountRate AS Amount,
  808. '' AS WHCode,
  809. '' AS WHName,
  810. '' AS LocationCode,
  811. '' AS LocationName,
  812. ext.BatchCode AS BatchCode,";
  813. tableName = @"ICSInventoryLot a
  814. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  815. LEFT JOIN ICSInspection ins ON a.LotNo=ins.LotNo AND a.WorkPoint=ins.WorkPoint";
  816. }
  817. if (string.IsNullOrWhiteSpace(columns) || string.IsNullOrWhiteSpace(tableName))
  818. throw new Exception("输入类型不符!");
  819. sql = string.Format(sql, columns, tableName, JsonData.Code, JsonData.WorkPoint);
  820. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  821. if (table == null || table.Rows.Count <= 0)
  822. throw new Exception("未查询到条码数据!");
  823. #region 出库检验是否符合源头单据
  824. if (isOut && TransType != EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.TransferLibrary) && TransType != EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.LOTSplit))
  825. {
  826. if (string.IsNullOrEmpty(JsonData.TransCode))
  827. {
  828. throw new Exception("单据号不能为空!");
  829. }
  830. WMSSourceDocumentModel model = new WMSSourceDocumentModel();
  831. model.TransCode = JsonData.TransCode;
  832. model.TransType = JsonData.TransType;
  833. model.WorkPoint = JsonData.WorkPoint;
  834. DataTable TransData = TransInformationGet(model);
  835. DataView dataView = TransData.DefaultView;
  836. foreach (DataRow drLot in table.Rows)
  837. {
  838. string Lot = drLot["LotNo"].ToString();
  839. string rowFilter = "InvCode='" + drLot["InvCode"] + "'";
  840. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的料品与源头单据:{1} 不符!", Lot, drLot["InvCode"]));
  841. rowFilter += " AND (LEN(ISNULL(WHCode,''))<=0 OR (LEN(ISNULL(WHCode,''))>0 AND WHCode='" + drLot["WHCode"] + "'))";
  842. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的仓库与源头单据:{1} 不符!", Lot, drLot["WHCode"]));
  843. //盘点不需要对比以下属性
  844. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.Check))
  845. continue;
  846. rowFilter += " AND ProjectCode='" + drLot["ProjectCode"] + "'";
  847. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的项目号与源头单据:{1} 不符!", Lot, drLot["ProjectCode"]));
  848. rowFilter += " AND BatchCode='" + drLot["BatchCode"] + "'";
  849. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的批次与源头单据:{1} 不符!", Lot, drLot["BatchCode"]));
  850. rowFilter += " AND Version='" + drLot["Version"] + "'";
  851. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的版本与源头单据:{1} 不符!", Lot, drLot["Version"]));
  852. rowFilter += " AND Brand='" + drLot["Brand"] + "'";
  853. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的厂牌与源头单据:{1} 不符!", Lot, drLot["Brand"]));
  854. rowFilter += " AND cFree1='" + drLot["cFree1"] + "'";
  855. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的自由项1与源头单据:{1} 不符!", Lot, drLot["cFree1"]));
  856. rowFilter += " AND cFree2='" + drLot["cFree2"] + "'";
  857. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的自由项2与源头单据:{1} 不符!", Lot, drLot["cFree2"]));
  858. rowFilter += " AND cFree3='" + drLot["cFree3"] + "'";
  859. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的自由项3与源头单据:{1} 不符!", Lot, drLot["cFree3"]));
  860. rowFilter += " AND cFree4='" + drLot["cFree4"] + "'";
  861. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的自由项4与源头单据:{1} 不符!", Lot, drLot["cFree4"]));
  862. rowFilter += " AND cFree5='" + drLot["cFree5"] + "'";
  863. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的自由项5与源头单据:{1} 不符!", Lot, drLot["cFree5"]));
  864. rowFilter += " AND cFree6='" + drLot["cFree6"] + "'";
  865. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的自由项6与源头单据:{1} 不符!", Lot, drLot["cFree6"]));
  866. rowFilter += " AND cFree7='" + drLot["cFree7"] + "'";
  867. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的自由项7与源头单据:{1} 不符!", Lot, drLot["cFree7"]));
  868. rowFilter += " AND cFree8='" + drLot["cFree8"] + "'";
  869. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的自由项8与源头单据:{1} 不符!", Lot, drLot["cFree8"]));
  870. rowFilter += " AND cFree9='" + drLot["cFree9"] + "'";
  871. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的自由项9与源头单据:{1} 不符!", Lot, drLot["cFree9"]));
  872. rowFilter += " AND cFree10='" + drLot["cFree10"] + "'";
  873. CheckTrans(dataView, rowFilter, string.Format("条码:{0} 对应的自由项10与源头单据:{1} 不符!", Lot, drLot["cFree10"]));
  874. }
  875. }
  876. #endregion
  877. return table;
  878. }
  879. catch (Exception ex)
  880. {
  881. log.Error(ex.Message);
  882. throw new Exception(ex.Message);
  883. }
  884. finally
  885. {
  886. if (conn.State == ConnectionState.Open)
  887. {
  888. conn.Close();
  889. }
  890. conn.Dispose();
  891. }
  892. }
  893. }
  894. /// <summary>
  895. /// 校验条码对应的物料、自由项等信息是否与源头单据匹配
  896. /// </summary>
  897. private static void CheckTrans(DataView dataView, string rowFilter, string message)
  898. {
  899. dataView.RowFilter = rowFilter;
  900. if (dataView == null || dataView.Count <= 0)
  901. throw new Exception(message);
  902. }
  903. #endregion
  904. /// <summary>
  905. /// 上架
  906. /// </summary>BusinessCode,TransType 两个类型
  907. /// <param name="JsonData"></param>
  908. /// <returns></returns>
  909. public static DataTable LOTStockCreate(List<LOTStockUpCreateIModel> JsonData)
  910. {
  911. if (JsonData.Count <= 0)
  912. {
  913. throw new Exception("传送数据为空!");
  914. }
  915. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  916. {
  917. conn.Open();
  918. SqlTransaction sqlTran = conn.BeginTransaction();
  919. SqlCommand cmd = new SqlCommand();
  920. cmd.Transaction = sqlTran;
  921. cmd.Connection = conn;
  922. try
  923. {
  924. string TransType = string.Empty;
  925. string Identification = Guid.NewGuid().ToString();
  926. foreach (var item in JsonData)
  927. {
  928. TransType = item.TransType;
  929. if (!EnumHelper.HasDescriptions(typeof(TransTypeEnum), TransType))
  930. {
  931. throw new Exception("单据类型不存在!");
  932. }
  933. string WHTransType = "2";
  934. string BusinessCode = string.Empty;
  935. foreach (var itemInfo in item.detail)
  936. {
  937. #region 两步调入
  938. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.TwoStepTransferDocIn))
  939. {
  940. //更新源头单据数量
  941. ICSWareHouseService.TwoStepTransferDocIn(itemInfo.TransCode, itemInfo.TransSequence, itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  942. //入库
  943. ICSWareHouseLotInfoService.WareHouseLotInfoTwoStepTransferDocIn(Identification, itemInfo.TransCode, itemInfo.TransSequence,
  944. itemInfo.WarehouseCode, itemInfo.LocationCode, itemInfo.LotNo, itemInfo.Quantity, item.User, item.WorkPoint, "6", Convert.ToInt32(TransTypeEnum.TwoStepTransferDocIn).ToString(), cmd);
  945. }
  946. #endregion
  947. else
  948. {
  949. #region 采购入库
  950. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseReceiveDoc))
  951. {
  952. //更新源头单据数量
  953. ICSPurchaseService.PurchaseReceiveDoc(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  954. BusinessCode = Convert.ToInt32(TransTypeEnum.PurchaseReceiveDoc).ToString();
  955. }
  956. #endregion
  957. #region 审核的到货单
  958. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.DeliveryNotice))
  959. {
  960. //更新源头单据数量
  961. ICSPurchaseService.DeliveryNoticeIn(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  962. BusinessCode = Convert.ToInt32(TransTypeEnum.DeliveryNotice).ToString();
  963. }
  964. #endregion
  965. #region 采购拒收
  966. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseRejectDoc))
  967. {
  968. //更新源头单据数量
  969. ICSPurchaseService.PurchaseRejectDocIn(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  970. BusinessCode = Convert.ToInt32(TransTypeEnum.PurchaseRejectDoc).ToString();
  971. }
  972. #endregion
  973. #region 审核的委外到货单
  974. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ODeliveryNotice))
  975. {
  976. //更新源头单据数量
  977. ICSOutsourcingService.ODeliveryNoticeIn(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  978. BusinessCode = Convert.ToInt32(TransTypeEnum.ODeliveryNotice).ToString();
  979. }
  980. #endregion
  981. #region 委外拒收
  982. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingRejectDoc))
  983. {
  984. //更新源头单据数量
  985. ICSOutsourcingService.OutsourcingRejectDocIn(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  986. BusinessCode = Convert.ToInt32(TransTypeEnum.OutsourcingRejectDoc).ToString();
  987. }
  988. #endregion
  989. #region 委外退料
  990. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ICSOutsourcingIssueDoNegative))
  991. {
  992. //更新源头单据数量
  993. ICSOutsourcingService.OutsourcingIssueDoNegative(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  994. BusinessCode = Convert.ToInt32(TransTypeEnum.ICSOutsourcingIssueDoNegative).ToString();
  995. }
  996. #endregion
  997. #region 委外入库
  998. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingReceiveDoc))
  999. {
  1000. //更新源头单据数量
  1001. ICSOutsourcingService.OutsourcingReceiveDoc(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  1002. BusinessCode = Convert.ToInt32(TransTypeEnum.OutsourcingReceiveDoc).ToString();
  1003. }
  1004. #endregion
  1005. #region 生产退料
  1006. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOIssueDocNegative))
  1007. {
  1008. //更新源头单据数量
  1009. ICSManufactureService.MOIssueDocNegative(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  1010. BusinessCode = Convert.ToInt32(TransTypeEnum.MOIssueDocNegative).ToString();
  1011. }
  1012. #endregion
  1013. #region 生产入库
  1014. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ManufactureReceiveDoc))
  1015. {
  1016. //更新源头单据数量
  1017. ICSManufactureService.ManufactureReceiveDoc(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  1018. BusinessCode = Convert.ToInt32(TransTypeEnum.ManufactureReceiveDoc).ToString();
  1019. }
  1020. #endregion
  1021. #region 开立的生产入库单
  1022. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ManufactureReceive))
  1023. {
  1024. //更新源头单据数量
  1025. ICSManufactureService.ManufactureReceive(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  1026. BusinessCode = Convert.ToInt32(TransTypeEnum.ManufactureReceive).ToString();
  1027. }
  1028. #endregion
  1029. #region 销售退货
  1030. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.SalesShipmentDocNegative))
  1031. {
  1032. //更新源头单据数量
  1033. ICSSalesService.SalesShipmentDocNegative(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  1034. BusinessCode = Convert.ToInt32(TransTypeEnum.SalesShipmentDocNegative).ToString();
  1035. }
  1036. #endregion
  1037. #region 其他入库
  1038. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OtherInDoc))
  1039. {
  1040. //更新源头单据数量
  1041. ICSWareHouseService.OtherInDoc(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  1042. BusinessCode = Convert.ToInt32(TransTypeEnum.OtherInDoc).ToString();
  1043. }
  1044. #endregion
  1045. #region 拆卸单
  1046. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.DisassemblyDoc))
  1047. {
  1048. ICSWareHouseService.DisassemblyDoc(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  1049. WHTransType = "11";
  1050. BusinessCode = Convert.ToInt32(TransTypeEnum.DisassemblyDoc).ToString();
  1051. }
  1052. #endregion
  1053. #region 归还
  1054. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ReturnDoc))
  1055. {
  1056. //更新源头单据数量
  1057. ICSWareHouseService.ReturnDoc(itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  1058. BusinessCode = Convert.ToInt32(TransTypeEnum.ReturnDoc).ToString();
  1059. }
  1060. #endregion
  1061. #region 销售退货-原条码
  1062. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.SalesReturnBack))
  1063. {
  1064. //更新源头单据数量
  1065. ICSSalesService.SalesReturnBackIn(itemInfo.TransCode, itemInfo.TransSequence, itemInfo.LotNo, itemInfo.Quantity, item.WorkPoint, cmd);
  1066. //入库
  1067. BusinessCode = Convert.ToInt32(TransTypeEnum.SalesReturnBack).ToString();
  1068. }
  1069. #endregion
  1070. //入库
  1071. ICSWareHouseLotInfoService.WareHouseLotInfoUp(Identification, itemInfo.LocationCode, itemInfo.LotNo, itemInfo.Quantity,
  1072. item.User, item.WorkPoint, WHTransType, BusinessCode, cmd);
  1073. }
  1074. }
  1075. #region 拆卸单
  1076. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.DisassemblyDoc))
  1077. {
  1078. //更新套件锁定数量
  1079. ICSWareHouseService.DisassemblyDoc(Identification, cmd);
  1080. }
  1081. #endregion}
  1082. }
  1083. //上传ERP
  1084. if (Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["UploadERP"]))
  1085. {
  1086. //采购入库
  1087. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseReceiveDoc))
  1088. ICSPurchaseService.PurchaseReceiveDocERP(TransType, Identification, cmd);
  1089. //审核的到货单
  1090. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.DeliveryNotice))
  1091. ICSPurchaseService.DeliveryNoticeInERP(TransType, Identification, cmd);
  1092. //采购拒收
  1093. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseRejectDoc))
  1094. ICSPurchaseService.PurchaseRejectDocInERP(TransType, Identification, cmd);
  1095. //审核的委外到货单
  1096. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ODeliveryNotice))
  1097. ICSOutsourcingService.ODeliveryNoticeInERP(TransType, Identification, cmd);
  1098. //委外拒收
  1099. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingRejectDoc))
  1100. ICSOutsourcingService.OutsourcingRejectDocInERP(TransType, Identification, cmd);
  1101. //委外退料
  1102. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ICSOutsourcingIssueDoNegative))
  1103. ICSOutsourcingService.OutsourcingIssueDoNegativeERP(TransType, Identification, cmd);
  1104. //委外入库
  1105. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingReceiveDoc))
  1106. ICSOutsourcingService.OutsourcingReceiveDocERP(TransType, Identification, cmd);
  1107. //生产退料
  1108. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOIssueDocNegative))
  1109. ICSManufactureService.MOIssueDocNegativeERP(TransType, Identification, cmd);
  1110. //生产入库
  1111. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ManufactureReceiveDoc))
  1112. ICSManufactureService.ManufactureReceiveDocERP(TransType, Identification, cmd);
  1113. //开立的生产入库单
  1114. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ManufactureReceive))
  1115. ICSManufactureService.ManufactureReceiveERP(TransType, Identification, cmd);
  1116. //销售退货
  1117. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.SalesShipmentDocNegative))
  1118. ICSSalesService.SalesShipmentDocNegativeERP(TransType, Identification, cmd);
  1119. //两步调入
  1120. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.TwoStepTransferDocIn))
  1121. ICSWareHouseService.TwoStepTransferDocInERP(TransType, Identification, cmd);
  1122. //销售退货-原条码
  1123. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.SalesReturnBack))
  1124. ICSSalesService.SalesReturnBackInERP(TransType, Identification, cmd);
  1125. //其他入库
  1126. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OtherInDoc))
  1127. ICSWareHouseService.OtherInDocERP(TransType, Identification, cmd);
  1128. //拆卸单
  1129. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.DisassemblyDoc))
  1130. ICSWareHouseService.DisassemblyDocERP(TransType, Identification, cmd);
  1131. //归还
  1132. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.ReturnDoc))
  1133. ICSWareHouseService.ReturnDocERP(TransType, Identification, cmd);
  1134. }
  1135. DataTable table = GetData(Identification, 1, cmd);
  1136. cmd.Transaction.Commit();
  1137. return table;
  1138. }
  1139. catch (Exception ex)
  1140. {
  1141. if (cmd.Transaction != null)
  1142. cmd.Transaction.Rollback();
  1143. log.Error(ex.Message);
  1144. throw new Exception(ex.Message);
  1145. }
  1146. finally
  1147. {
  1148. if (conn.State == ConnectionState.Open)
  1149. {
  1150. conn.Close();
  1151. }
  1152. conn.Dispose();
  1153. }
  1154. }
  1155. }
  1156. /// <summary>
  1157. /// 下架
  1158. /// </summary>
  1159. /// <param name="JsonData"></param>
  1160. /// <returns></returns>
  1161. public static DataTable LOTStockDownCreate(List<LOTStockModel> JsonData)
  1162. {
  1163. if (JsonData.Count <= 0)
  1164. {
  1165. throw new Exception("传送数据为空!");
  1166. }
  1167. List<LOTStockModelList> model = new List<LOTStockModelList>();
  1168. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  1169. {
  1170. conn.Open();
  1171. SqlTransaction sqlTran = conn.BeginTransaction();
  1172. SqlCommand cmd = new SqlCommand();
  1173. cmd.Transaction = sqlTran;
  1174. cmd.Connection = conn;
  1175. try
  1176. {
  1177. string TransType = string.Empty;
  1178. string Identification = Guid.NewGuid().ToString();
  1179. foreach (var item in JsonData)
  1180. {
  1181. TransType = item.TransType;
  1182. if (!EnumHelper.HasDescriptions(typeof(TransTypeEnum), TransType))
  1183. {
  1184. throw new Exception("单据类型不存在!");
  1185. }
  1186. #region 采购退货
  1187. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseReceiveDoctNegative))
  1188. {
  1189. //更新源头单据数量
  1190. ICSPurchaseService.PurchaseReceiveDoctNegative(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1191. foreach (var itemInfo in item.detail)
  1192. {
  1193. //出库
  1194. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.PurchaseReceiveDoctNegative).ToString(), cmd);
  1195. }
  1196. }
  1197. #endregion
  1198. #region 委外发料
  1199. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingIssueDoc))
  1200. {
  1201. //更新源头单据数量
  1202. ICSOutsourcingService.OutsourcingIssueDoc(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1203. foreach (var itemInfo in item.detail)
  1204. {
  1205. //出库
  1206. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.OutsourcingIssueDoc).ToString(), cmd);
  1207. }
  1208. }
  1209. #endregion
  1210. #region 委外退货
  1211. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingReturnBack))
  1212. {
  1213. //更新源头单据数量
  1214. ICSOutsourcingService.OutsourcingReturnBack(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1215. foreach (var itemInfo in item.detail)
  1216. {
  1217. //出库
  1218. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.OutsourcingReturnBack).ToString(), cmd);
  1219. }
  1220. }
  1221. #endregion
  1222. #region 生产发料
  1223. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOIssueDoc))
  1224. {
  1225. //更新源头单据数量
  1226. ICSManufactureService.MOIssueDoc(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1227. foreach (var itemInfo in item.detail)
  1228. {
  1229. //出库
  1230. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.MOIssueDoc).ToString(), cmd);
  1231. }
  1232. }
  1233. #endregion
  1234. #region 销售出库
  1235. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.SalesShipmentDoc))
  1236. {
  1237. //更新源头单据数量
  1238. ICSSalesService.SalesShipmentDoc(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1239. foreach (var itemInfo in item.detail)
  1240. {
  1241. //出库
  1242. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.SalesShipmentDoc).ToString(), cmd);
  1243. }
  1244. }
  1245. #endregion
  1246. #region 两步调出
  1247. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.TwoStepTransferDocOut))
  1248. {
  1249. //更新源头单据数量
  1250. ICSWareHouseService.TwoStepTransferDocOut(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1251. foreach (var itemInfo in item.detail)
  1252. {
  1253. //出库
  1254. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "6", Convert.ToInt32(TransTypeEnum.TwoStepTransferDocOut).ToString(), cmd);
  1255. }
  1256. }
  1257. #endregion
  1258. #region 其他出库
  1259. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OtherOutDoc))
  1260. {
  1261. //更新源头单据数量
  1262. ICSWareHouseService.OtherOutDoc(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1263. foreach (var itemInfo in item.detail)
  1264. {
  1265. //出库
  1266. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.OtherOutDoc).ToString(), cmd);
  1267. }
  1268. }
  1269. #endregion
  1270. #region 领料申请单发料
  1271. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOApply))
  1272. {
  1273. //更新源头单据数量
  1274. ICSManufactureService.MOApply(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1275. foreach (var itemInfo in item.detail)
  1276. {
  1277. //出库
  1278. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.MOApply).ToString(), cmd);
  1279. }
  1280. }
  1281. #endregion
  1282. #region 委外领料申请单发料
  1283. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OOApply))
  1284. {
  1285. //更新源头单据数量
  1286. ICSOutsourcingService.OOApply(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1287. foreach (var itemInfo in item.detail)
  1288. {
  1289. //出库
  1290. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.OOApply).ToString(), cmd);
  1291. }
  1292. }
  1293. #endregion
  1294. #region 开立材料出库
  1295. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOIssue))
  1296. {
  1297. //更新源头单据数量
  1298. ICSManufactureService.MOIssue(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1299. foreach (var itemInfo in item.detail)
  1300. {
  1301. //出库
  1302. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.MOIssue).ToString(), cmd);
  1303. }
  1304. }
  1305. #endregion
  1306. #region 开立委外材料出库
  1307. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OOIssue))
  1308. {
  1309. //更新源头单据数量
  1310. ICSOutsourcingService.OOIssue(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1311. foreach (var itemInfo in item.detail)
  1312. {
  1313. //出库
  1314. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.OOIssue).ToString(), cmd);
  1315. }
  1316. }
  1317. #endregion
  1318. #region 开立红字入库单
  1319. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseReceive))
  1320. {
  1321. //更新源头单据数量
  1322. ICSPurchaseService.PurchaseReceive(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1323. foreach (var itemInfo in item.detail)
  1324. {
  1325. //出库
  1326. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.PurchaseReceive).ToString(), cmd);
  1327. }
  1328. }
  1329. #endregion
  1330. #region 开立委外红字入库单
  1331. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingReceiveDocNegative))
  1332. {
  1333. //更新源头单据数量
  1334. ICSOutsourcingService.OutsourcingReceiveDocNegative(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1335. foreach (var itemInfo in item.detail)
  1336. {
  1337. //出库
  1338. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.OutsourcingReceiveDocNegative).ToString(), cmd);
  1339. }
  1340. }
  1341. #endregion
  1342. #region 借用
  1343. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.BrrowDoc))
  1344. {
  1345. //更新源头单据数量
  1346. ICSWareHouseService.BrrowDoc(item.TransCode, item.TransSequence, item.Quantity, item.WorkPoint, cmd);
  1347. foreach (var itemInfo in item.detail)
  1348. {
  1349. //出库
  1350. ICSWareHouseLotInfoService.WareHouseLotInfoDown(Identification, item.TransCode, item.TransSequence, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "3", Convert.ToInt32(TransTypeEnum.BrrowDoc).ToString(), cmd);
  1351. }
  1352. }
  1353. #endregion
  1354. }
  1355. //上传ERP
  1356. if (Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["UploadERP"]))
  1357. {
  1358. //采购退货
  1359. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseReceiveDoctNegative))
  1360. ICSPurchaseService.PurchaseReceiveDoctNegativeERP(TransType, Identification, cmd);
  1361. //委外发料
  1362. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingIssueDoc))
  1363. ICSOutsourcingService.OutsourcingIssueDocERP(TransType, Identification, cmd);
  1364. //委外退货
  1365. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingReturnBack))
  1366. ICSOutsourcingService.OutsourcingReturnBackERP(TransType, Identification, cmd);
  1367. //生产发料
  1368. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOIssueDoc))
  1369. ICSManufactureService.MOIssueDocERP(TransType, Identification, cmd);
  1370. //销售出库
  1371. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.SalesShipmentDoc))
  1372. ICSSalesService.SalesShipmentDocERP(TransType, Identification, cmd);
  1373. //两步调出
  1374. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.TwoStepTransferDocOut))
  1375. ICSWareHouseService.TwoStepTransferDocOutERP(TransType, Identification, cmd);
  1376. //其他出库
  1377. else if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OtherOutDoc))
  1378. ICSWareHouseService.OtherOutDocERP(TransType, Identification, cmd);
  1379. //领料申请单发料
  1380. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOApply))
  1381. ICSManufactureService.MOApplyERP(TransType, Identification, cmd);
  1382. //委外领料申请单发料
  1383. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OOApply))
  1384. ICSOutsourcingService.OOApplyERP(TransType, Identification, cmd);
  1385. //开立材料出库
  1386. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.MOIssue))
  1387. ICSManufactureService.MOIssueERP(TransType, Identification, cmd);
  1388. //开立委外材料出库
  1389. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OOIssue))
  1390. ICSOutsourcingService.OOIssueERP(TransType, Identification, cmd);
  1391. //开立红字入库单
  1392. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.PurchaseReceive))
  1393. ICSPurchaseService.PurchaseReceiveERP(TransType, Identification, cmd);
  1394. //开立委外红字入库单
  1395. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OutsourcingReceiveDocNegative))
  1396. ICSOutsourcingService.OutsourcingReceiveDocNegativeERP(TransType, Identification, cmd);
  1397. //借用
  1398. if (TransType == EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.BrrowDoc))
  1399. ICSWareHouseService.BrrowDocERP(TransType, Identification, cmd);
  1400. }
  1401. DataTable table = GetData(Identification, 2, cmd);
  1402. cmd.Transaction.Commit();
  1403. return table;
  1404. }
  1405. catch (Exception ex)
  1406. {
  1407. if (cmd.Transaction != null)
  1408. cmd.Transaction.Rollback();
  1409. log.Error(ex.Message);
  1410. throw new Exception(ex.Message);
  1411. }
  1412. finally
  1413. {
  1414. if (conn.State == ConnectionState.Open)
  1415. {
  1416. conn.Close();
  1417. }
  1418. conn.Dispose();
  1419. }
  1420. }
  1421. }
  1422. #region 采购
  1423. /// <summary>
  1424. /// 采购到货
  1425. /// </summary>
  1426. /// <param name="JsonData"></param>
  1427. /// <returns></returns>
  1428. public static DataTable DeliveryNoticeCreate(List<ICSDeliveryNotice> JsonData)
  1429. {
  1430. if (JsonData.Count <= 0)
  1431. {
  1432. throw new Exception("传送数据为空!");
  1433. }
  1434. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  1435. {
  1436. conn.Open();
  1437. SqlTransaction sqlTran = conn.BeginTransaction();
  1438. SqlCommand cmd = new SqlCommand();
  1439. cmd.Transaction = sqlTran;
  1440. cmd.Connection = conn;
  1441. try
  1442. {
  1443. string asncodes = string.Empty;
  1444. string sql = string.Empty;
  1445. foreach (var item in JsonData)
  1446. {
  1447. if (string.IsNullOrEmpty(item.ASNCode))
  1448. {
  1449. throw new Exception("送货单号不能为空!");
  1450. }
  1451. //获取单号
  1452. sql = @"IF EXISTS(SELECT a.ID FROM ICSDeliveryNotice a WHERE a.ASNCode='{0}' AND DNType = '1' AND a.WorkPoint='{1}')
  1453. BEGIN
  1454. RAISERROR('{0} ',16,1);
  1455. RETURN
  1456. END
  1457. DECLARE @Status VARCHAR(10)
  1458. SELECT @Status=Status FROM ICSASN WHERE ASNCode='{0}' and WorkPoint='{1}'
  1459. IF (@Status IS NULL)
  1460. BEGIN
  1461. RAISERROR('{0} ',16,1);
  1462. RETURN
  1463. END
  1464. ELSE IF (@Status!='2')
  1465. BEGIN
  1466. RAISERROR('{0} ',16,1);
  1467. RETURN
  1468. END
  1469. DECLARE @MaxNO INT,@date varchar(20)='DN'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
  1470. SELECT @MaxNO=SUBSTRING(MAX(DNCode),LEN(@date)+1,LEN(MAX(DNCode))-LEN(@date))+1 FROM ICSDeliveryNotice
  1471. WHERE SUBSTRING(DNCode, 1, LEN(@date))=@date
  1472. IF @MaxNO IS NULL
  1473. BEGIN
  1474. SELECT @date+'00001' AS Code
  1475. END
  1476. ELSE
  1477. BEGIN
  1478. SELECT @date+REPLICATE('0',5-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS Code
  1479. END ";
  1480. sql = string.Format(sql, item.ASNCode, item.WorkPoint);
  1481. string Code = DBHelper.ExecuteScalar(sql, cmd).ToString();
  1482. //修改送货单到货数量
  1483. foreach (var itemInfo in item.detail)
  1484. {
  1485. sql = @"UPDATE ICSASNDetail SET DNQuantity=ISNULL(DNQuantity, 0)+'{2}'
  1486. WHERE LotNo='{0}' AND WorkPoint='{1}'";
  1487. sql = string.Format(sql, itemInfo.LotNo, item.WorkPoint, itemInfo.Quantity);
  1488. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1489. {
  1490. throw new Exception("委外送货单子表信息更新失败!");
  1491. }
  1492. }
  1493. //创建到货单信息
  1494. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{1}' AND F_Location='{2}')
  1495. BEGIN
  1496. RAISERROR('{1} ',16,1);
  1497. RETURN
  1498. END
  1499. INSERT INTO ICSDeliveryNotice(ID,DNCode,Sequence,VenCode,DepCode,
  1500. DNType,InvCode,Quantity,Amount,RCVQuantity,
  1501. UnitPrice,Currency,Status,CreatePerson,CreateDateTime,
  1502. POID,PODetailID,DNID,DNDetailID,ExtensionID,
  1503. MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,ASNCode)
  1504. SELECT NEWID(),'{0}',row_number() OVER (ORDER BY b.InvCode),d.VenCode,d.DepCode,
  1505. '1',b.InvCode,SUM(a.DNQuantity),'0','0',
  1506. d.UnitPrice,d.Currency,'2',e.F_Account,GETDATE(),
  1507. d.POID,d.PODetailID,newid(),newid(),b.ExtensionID,
  1508. e.F_Account,e.F_RealName,GETDATE(),a.WorkPoint,'',a.ASNCode
  1509. FROM ICSASNDetail a
  1510. INNER JOIN ICSInventoryLot b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1511. INNER JOIN ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=c.WorkPoint
  1512. INNER JOIN ICSPurchaseOrder d ON c.TransCode=d.POCode AND c.TransSequence=d.Sequence AND c.WorkPoint=d.WorkPoint
  1513. INNER JOIN Sys_SRM_User e ON e.F_Account='{1}' AND e.F_Location='{2}'
  1514. WHERE a.ASNCode='{3}' AND a.WorkPoint='{2}'
  1515. GROUP BY d.POID,d.PODetailID,d.VenCode,d.UnitPrice,d.Currency,d.DepCode,b.ExtensionID,b.InvCode,a.ASNCode,e.F_Account,e.F_RealName,a.WorkPoint";
  1516. sql = string.Format(sql, Code, item.User, item.WorkPoint, item.ASNCode);
  1517. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1518. {
  1519. throw new Exception("到货单信息创建失败!");
  1520. }
  1521. ICSPurchaseService.DeliveryNoticeERP(Code, item.WorkPoint, cmd);
  1522. asncodes += "'" + item.ASNCode + item.WorkPoint + "',";
  1523. }
  1524. if (string.IsNullOrWhiteSpace(asncodes))
  1525. {
  1526. throw new Exception("请传入送货单信息!");
  1527. }
  1528. #region 查询返回数据
  1529. sql = @"SELECT
  1530. n.POCode,
  1531. n.Sequence AS POSequence,
  1532. a.ASNCode,
  1533. a.DNCode,
  1534. a.Sequence,
  1535. a.VenCode,
  1536. a.DepCode,
  1537. a.InvCode,
  1538. inv.InvName,
  1539. inv.InvStd,
  1540. a.Quantity,
  1541. inv.InvUnit,
  1542. a.Amount,
  1543. inv.AmountUnit,
  1544. a.RCVQuantity,
  1545. a.UnitPrice,
  1546. a.Currency,
  1547. a.POID,
  1548. a.PODetailID,
  1549. a.DNID,
  1550. a.DNDetailID,
  1551. ext.ProjectCode,
  1552. ext.BatchCode,
  1553. ext.Version,
  1554. ext.Brand,
  1555. ext.cFree1,
  1556. ext.cFree2,
  1557. ext.cFree3,
  1558. ext.cFree4,
  1559. ext.cFree5,
  1560. ext.cFree6,
  1561. ext.cFree7,
  1562. ext.cFree8,
  1563. ext.cFree9,
  1564. ext.cFree10,
  1565. a.MUSER AS [User],
  1566. a.MTIME AS [MTime]
  1567. FROM ICSDeliveryNotice a
  1568. INNER JOIN ICSPurchaseOrder n ON a.POID =n.POID AND a.PODetailID=n.PODetailID AND a.WorkPoint=n.WorkPoint
  1569. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1570. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1571. WHERE a.ASNCode+a.WorkPoint IN ({0})";
  1572. sql = string.Format(sql, asncodes.Substring(0, asncodes.Length - 1));
  1573. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  1574. #endregion
  1575. cmd.Transaction.Commit();
  1576. return data;
  1577. }
  1578. catch (Exception ex)
  1579. {
  1580. if (cmd.Transaction != null)
  1581. cmd.Transaction.Rollback();
  1582. log.Error(ex.Message);
  1583. throw new Exception(ex.Message);
  1584. }
  1585. finally
  1586. {
  1587. if (conn.State == ConnectionState.Open)
  1588. {
  1589. conn.Close();
  1590. }
  1591. conn.Dispose();
  1592. }
  1593. }
  1594. }
  1595. /// <summary>
  1596. /// 采购拒收
  1597. /// </summary>
  1598. /// <param name="JsonData"></param>
  1599. /// <returns></returns>
  1600. public static DataTable PurchaseRejectDocCreate(List<ICSDeliveryNotice> JsonData)
  1601. {
  1602. if (JsonData.Count <= 0)
  1603. {
  1604. throw new Exception("传送数据为空!");
  1605. }
  1606. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  1607. {
  1608. conn.Open();
  1609. SqlTransaction sqlTran = conn.BeginTransaction();
  1610. SqlCommand cmd = new SqlCommand();
  1611. cmd.Transaction = sqlTran;
  1612. cmd.Connection = conn;
  1613. try
  1614. {
  1615. string lots = string.Empty;
  1616. string sql = string.Empty;
  1617. foreach (var item in JsonData)
  1618. {
  1619. if (string.IsNullOrEmpty(item.DNCode))
  1620. {
  1621. throw new Exception("到货单号不能为空!");
  1622. }
  1623. //获取单号
  1624. sql = @"DECLARE @Status VARCHAR(10)
  1625. SELECT @Status=Status FROM ICSDeliveryNotice WHERE DNCode='{0}' and DNType='1' and WorkPoint='{1}'
  1626. IF (@Status IS NULL)
  1627. BEGIN
  1628. RAISERROR('{0} ',16,1);
  1629. RETURN
  1630. END
  1631. ELSE IF (@Status!='2')
  1632. BEGIN
  1633. RAISERROR('{0} ',16,1);
  1634. RETURN
  1635. END
  1636. DECLARE @MaxNO INT,@date varchar(20)='RJT'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
  1637. SELECT @MaxNO=SUBSTRING(MAX(DNCode),LEN(@date)+1,LEN(MAX(DNCode))-LEN(@date))+1 FROM ICSDeliveryNotice
  1638. WHERE SUBSTRING(DNCode, 1, LEN(@date))=@date
  1639. IF @MaxNO IS NULL
  1640. BEGIN
  1641. SELECT @date+'00001' AS Code
  1642. END
  1643. ELSE
  1644. BEGIN
  1645. SELECT @date+REPLICATE('0',5-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS Code
  1646. END ";
  1647. sql = string.Format(sql, item.DNCode, item.WorkPoint);
  1648. string Code = DBHelper.ExecuteScalar(sql, cmd).ToString();
  1649. //修改送货单到货数量
  1650. foreach (var itemInfo in item.detail)
  1651. {
  1652. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{3}' AND F_Location='{2}')
  1653. BEGIN
  1654. RAISERROR('{3} ',16,1);
  1655. RETURN
  1656. END
  1657. IF EXISTS(SELECT a.ID FROM ICSDeliveryNotice a WHERE a.EATTRIBUTE1='{1}' AND DNType = '3' AND a.WorkPoint='{2}')
  1658. BEGIN
  1659. RAISERROR('{1} ',16,1);
  1660. RETURN
  1661. END
  1662. INSERT INTO ICSDeliveryNotice(ID,DNCode,Sequence,VenCode,DepCode,
  1663. DNType,InvCode,Quantity,Amount,RCVQuantity,
  1664. UnitPrice,Currency,Status,CreatePerson,CreateDateTime,
  1665. POID,PODetailID,DNID,DNDetailID,ExtensionID,
  1666. MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,ASNCode)
  1667. SELECT NEWID(),'{4}', '{11}', '{5}', '{6}',
  1668. '3',d.InvCode,'{7}', '{8}', 0,
  1669. '{9}', '{10}', '2', e.F_Account, SYSDATETIME(),
  1670. a.DNID,a.DNDetailID, '0', '0', a.ExtensionID,
  1671. e.F_Account,e.F_RealName, SYSDATETIME(), a.WorkPoint, b.LOTNO,''
  1672. FROM ICSDeliveryNotice a
  1673. INNER JOIN ICSASNDetail b ON a.ASNCode=b.ASNCode AND a.WorkPoint=b.WorkPoint
  1674. INNER JOIN ICSInventoryLot d ON b.LotNo=d.LotNo AND a.InvCode=d.InvCode AND b.WorkPoint=d.WorkPoint
  1675. INNER JOIN ICSInventoryLotDetail m on d.LotNo=m.LotNo and d.WorkPoint=m.WorkPoint
  1676. INNER JOIN ICSPurchaseOrder n ON m.TransCode =n.POCode AND m.TransSequence=n.Sequence AND a.PODetailID=n.PODetailID AND m.WorkPoint=n.WorkPoint
  1677. INNER JOIN ICSInspection h ON h.LotNo=b.LotNo AND h.WorkPoint=b.WorkPoint
  1678. INNER JOIN Sys_SRM_User e ON e.F_Account='{3}' AND e.F_Location='{2}'
  1679. WHERE a.DNCode='{0}' and b.LOTNO='{1}' AND a.WorkPoint='{2}'";
  1680. sql = string.Format(sql, item.DNCode, itemInfo.LotNo, item.WorkPoint, item.User, Code, item.VenCode, item.DepCode, itemInfo.Quantity, itemInfo.Amount, itemInfo.UnitPrice, itemInfo.Currency, itemInfo.Sequence);
  1681. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1682. {
  1683. throw new Exception("拒收单创建失败!");
  1684. }
  1685. lots += "'" + itemInfo.LotNo + item.WorkPoint + "',";
  1686. }
  1687. }
  1688. if (string.IsNullOrWhiteSpace(lots))
  1689. {
  1690. throw new Exception("请传入条码信息!");
  1691. }
  1692. #region 查询返回数据
  1693. sql = @"SELECT
  1694. n.DNCode,
  1695. n.Sequence,
  1696. a.DNCode AS RJTCode,
  1697. a.Sequence AS RJTSequence,
  1698. a.VenCode,
  1699. a.DepCode,
  1700. a.InvCode,
  1701. inv.InvName,
  1702. inv.InvStd,
  1703. a.Quantity,
  1704. inv.InvUnit,
  1705. a.Amount,
  1706. inv.AmountUnit,
  1707. a.RCVQuantity,
  1708. a.UnitPrice,
  1709. a.Currency,
  1710. a.POID,
  1711. a.PODetailID,
  1712. a.DNID,
  1713. a.DNDetailID,
  1714. ext.ProjectCode,
  1715. ext.BatchCode,
  1716. ext.Version,
  1717. ext.Brand,
  1718. ext.cFree1,
  1719. ext.cFree2,
  1720. ext.cFree3,
  1721. ext.cFree4,
  1722. ext.cFree5,
  1723. ext.cFree6,
  1724. ext.cFree7,
  1725. ext.cFree8,
  1726. ext.cFree9,
  1727. ext.cFree10,
  1728. a.MUSER AS [User],
  1729. a.MTIME AS [MTime]
  1730. FROM ICSDeliveryNotice a
  1731. INNER JOIN ICSDeliveryNotice n ON a.POID =n.DNID AND a.PODetailID=n.DNDetailID AND a.WorkPoint=n.WorkPoint
  1732. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1733. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1734. WHERE a.EATTRIBUTE1+a.WorkPoint IN ({0})";
  1735. sql = string.Format(sql, lots.Substring(0, lots.Length - 1));
  1736. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  1737. #endregion
  1738. cmd.Transaction.Commit();
  1739. return data;
  1740. }
  1741. catch (Exception ex)
  1742. {
  1743. if (cmd.Transaction != null)
  1744. cmd.Transaction.Rollback();
  1745. log.Error(ex.Message);
  1746. throw new Exception(ex.Message);
  1747. }
  1748. finally
  1749. {
  1750. if (conn.State == ConnectionState.Open)
  1751. {
  1752. conn.Close();
  1753. }
  1754. conn.Dispose();
  1755. }
  1756. }
  1757. }
  1758. #endregion
  1759. #region 委外
  1760. /// <summary>
  1761. /// 委外退料 新建
  1762. /// </summary>
  1763. /// <param name="JsonData"></param>
  1764. /// <returns></returns>
  1765. public static DataTable OutsourcingIssueDoNegativeApplyCreate(List<ICSOApplyNeg> JsonData)
  1766. {
  1767. if (JsonData.Count <= 0)
  1768. {
  1769. throw new Exception("传送数据为空!");
  1770. }
  1771. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  1772. {
  1773. conn.Open();
  1774. SqlTransaction sqlTran = conn.BeginTransaction();
  1775. SqlCommand cmd = new SqlCommand();
  1776. cmd.Transaction = sqlTran;
  1777. cmd.Connection = conn;
  1778. try
  1779. {
  1780. string codes = string.Empty;
  1781. string sql = string.Empty;
  1782. foreach (var item in JsonData)
  1783. {
  1784. //获取单号
  1785. sql = @"DECLARE @MaxNO INT,@date varchar(20)='OOIA'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
  1786. SELECT @MaxNO=SUBSTRING(MAX(OApplyNegCode),LEN(@date)+1,LEN(MAX(OApplyNegCode))-LEN(@date))+1 FROM ICSOApplyNeg
  1787. WHERE SUBSTRING(OApplyNegCode, 1, LEN(@date))=@date
  1788. IF @MaxNO IS NULL
  1789. BEGIN
  1790. SELECT @date+'00001' AS Code
  1791. END
  1792. ELSE
  1793. BEGIN
  1794. SELECT @date+REPLICATE('0',5-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS Code
  1795. END ";
  1796. string Code = DBHelper.ExecuteScalar(sql, cmd).ToString();
  1797. //创建主表
  1798. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{4}')
  1799. BEGIN
  1800. RAISERROR('{2} ',16,1);
  1801. RETURN
  1802. END
  1803. INSERT INTO ICSOApplyNeg(ID,OApplyNegCode,WHCode,Status,Type,Memo,CreatePerson,CreateDateTime,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  1804. VALUES (NEWID(),'{0}','{1}','1','1','','{2}','{3}','{2}',(select F_RealName from Sys_SRM_User where F_Account='{2}' and F_Location='{4}'),'{3}','{4}','')";
  1805. sql = string.Format(sql, Code, item.WHCode, item.User, item.MTime, item.WorkPoint);
  1806. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1807. {
  1808. throw new Exception("委外退料单信息创建失败!");
  1809. }
  1810. foreach (var itemInfo in item.detail)
  1811. {
  1812. //创建子表
  1813. sql = @"INSERT INTO ICSOApplyNegDetail(ID,OApplyNegCode,Sequence,SourceDetailID,InvCode,
  1814. Quantity,Amount,IssueNegQuantity,ExtensionID,MUSER,
  1815. MUSERName,MTIME,WorkPoint,EATTRIBUTE)
  1816. VALUES (NEWID(),'{0}','{1}','{2}','{3}',
  1817. '{4}','{5}',0,'{6}','{7}',
  1818. (select F_RealName from Sys_SRM_User where F_Account='{7}' and F_Location='{8}'),SYSDATETIME(),'{8}','')";
  1819. sql = string.Format(sql, Code, itemInfo.Sequence, itemInfo.SourceDetailID, itemInfo.InvCode, itemInfo.Quantity, itemInfo.Amount, itemInfo.ExtensionID, item.User, item.WorkPoint);
  1820. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1821. {
  1822. throw new Exception("委外退料单子表信息创建失败!");
  1823. }
  1824. }
  1825. //校验退料数量是否超出领料数量
  1826. sql = @"DECLARE @PickID VARCHAR(10)
  1827. SELECT @PickID=b.PickID
  1828. FROM ICSOApplyNegDetail a
  1829. INNER JOIN ICSOOPick b ON a.SourceDetailID=b.PickID AND a.WorkPoint=b.WorkPoint
  1830. INNER JOIN ICSOApplyNeg c ON a.OApplyNegCode=c.OApplyNegCode AND a.WorkPoint=c.WorkPoint
  1831. WHERE c.ID='{0}' AND a.WorkPoint='{1}'
  1832. GROUP BY b.PickID
  1833. HAVING MAX(b.Quantity)<SUM(a.Quantity)
  1834. IF (@PickID IS NOT NULL)
  1835. BEGIN
  1836. DECLARE @InvCode VARCHAR(100)
  1837. SELECT @InvCode=''+InvCode+' 退' FROM ICSMOPick WHERE PickID=@PickID AND WorkPoint='{1}'
  1838. RAISERROR(@InvCode,16,1);
  1839. RETURN
  1840. END ";
  1841. sql = string.Format(sql, item.id, item.WorkPoint);
  1842. DBHelper.ExecuteNonQuery(sql, cmd);
  1843. codes += "'" + Code + item.WorkPoint + "',";
  1844. }
  1845. if (string.IsNullOrWhiteSpace(codes))
  1846. {
  1847. throw new Exception("单据号不能为空!");
  1848. }
  1849. #region 查询返回数据
  1850. sql = @"SELECT a.OApplyNegCode,
  1851. c.WHCode,
  1852. c.Memo,
  1853. d.Name AS Status,
  1854. a.Sequence,
  1855. a.InvCode,
  1856. inv.InvName,
  1857. inv.InvStd,
  1858. a.Quantity,
  1859. inv.InvUnit,
  1860. a.Amount,
  1861. inv.AmountUnit,
  1862. a.IssueNegQuantity,
  1863. ext.ProjectCode,
  1864. ext.BatchCode,
  1865. ext.Version,
  1866. ext.Brand,
  1867. ext.cFree1,
  1868. ext.cFree2,
  1869. ext.cFree3,
  1870. ext.cFree4,
  1871. ext.cFree5,
  1872. ext.cFree6,
  1873. ext.cFree7,
  1874. ext.cFree8,
  1875. ext.cFree9,
  1876. ext.cFree10,
  1877. a.MUSER AS [User],
  1878. a.MTIME AS [MTime]
  1879. FROM ICSOApplyNegDetail a
  1880. INNER JOIN ICSOApplyNeg c ON a.OApplyNegCode=c.OApplyNegCode AND a.WorkPoint=c.WorkPoint
  1881. LEFT JOIN ICSType d ON d.TableCode='ICSOApplyNeg' AND d.ColumnCode='Status' AND c.Status=d.Code AND c.WorkPoint=d.WorkPoint
  1882. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1883. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1884. WHERE a.OApplyNegCode+a.WorkPoint IN ({0})";
  1885. sql = string.Format(sql, codes.Substring(0, codes.Length - 1));
  1886. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  1887. #endregion
  1888. cmd.Transaction.Commit();
  1889. return data;
  1890. }
  1891. catch (Exception ex)
  1892. {
  1893. if (cmd.Transaction != null)
  1894. cmd.Transaction.Rollback();
  1895. log.Error(ex.Message);
  1896. throw new Exception(ex.Message);
  1897. }
  1898. finally
  1899. {
  1900. if (conn.State == ConnectionState.Open)
  1901. {
  1902. conn.Close();
  1903. }
  1904. conn.Dispose();
  1905. }
  1906. }
  1907. }
  1908. /// <summary>
  1909. /// 委外退料 修改
  1910. /// </summary>
  1911. /// <param name="JsonData"></param>
  1912. /// <returns></returns>
  1913. public static DataTable OutsourcingIssueDoNegativeApplyUpdate(List<ICSOApplyNeg> JsonData)
  1914. {
  1915. if (JsonData.Count <= 0)
  1916. {
  1917. throw new Exception("传送数据为空!");
  1918. }
  1919. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  1920. {
  1921. conn.Open();
  1922. SqlTransaction sqlTran = conn.BeginTransaction();
  1923. SqlCommand cmd = new SqlCommand();
  1924. cmd.Transaction = sqlTran;
  1925. cmd.Connection = conn;
  1926. try
  1927. {
  1928. string sql = string.Empty;
  1929. string Code = string.Empty;
  1930. string ids = string.Empty;
  1931. foreach (var item in JsonData)
  1932. {
  1933. //主表修改
  1934. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{1}' AND F_Location='{4}')
  1935. BEGIN
  1936. RAISERROR('{1} ',16,1);
  1937. RETURN
  1938. END
  1939. DECLARE @Status VARCHAR(10)
  1940. SELECT @Status=Status FROM ICSOApplyNeg WHERE ID='{3}' and WorkPoint='{4}'
  1941. IF (@Status IS NULL)
  1942. BEGIN
  1943. RAISERROR('退{3} ',16,1);
  1944. RETURN
  1945. END
  1946. ELSE IF (@Status!='1')
  1947. BEGIN
  1948. RAISERROR('退{3} ',16,1);
  1949. RETURN
  1950. END
  1951. update ICSOApplyNeg set WHCode='{0}',MUSER='{1}',MUSERName=(select F_RealName from Sys_SRM_User where F_Account='{1}' and F_Location='{4}'),MTIME='{2}' where ID='{3}' and WorkPoint='{4}' ";
  1952. sql = string.Format(sql, item.WHCode, item.User, item.MTime, item.id, item.WorkPoint);
  1953. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1954. {
  1955. throw new Exception("委外退料单信息修改失败!");
  1956. }
  1957. var detail = item.detail.Where(a => a.DetailID.Length <= 0).Count();
  1958. if (detail > 0)
  1959. {
  1960. sql = @"SELECT OApplyNegCode FROM ICSOApplyNeg where ID='{0}' and WorkPoint='{1}'";
  1961. sql = string.Format(sql, item.id, item.WorkPoint);
  1962. Code = DBHelper.ExecuteScalar(sql, cmd).ToString();
  1963. }
  1964. foreach (var itemInfo in item.detail)
  1965. {
  1966. if (string.IsNullOrWhiteSpace(itemInfo.DetailID))
  1967. {
  1968. //创建子表
  1969. sql = @"INSERT INTO ICSOApplyNegDetail(ID,OApplyNegCode,Sequence,SourceDetailID,InvCode,
  1970. Quantity,Amount,IssueNegQuantity,ExtensionID,MUSER,
  1971. MUSERName,MTIME,WorkPoint,EATTRIBUTE)
  1972. VALUES (NEWID(),'{0}','{1}','{2}','{3}',
  1973. '{4}','{5}',0,'{6}','{7}',
  1974. (select F_RealName from Sys_SRM_User where F_Account='{7}' and F_Location='{8}'),SYSDATETIME(),'{8}','')";
  1975. sql = string.Format(sql, Code, itemInfo.Sequence, itemInfo.SourceDetailID, itemInfo.InvCode, itemInfo.Quantity, itemInfo.Amount, itemInfo.ExtensionID, item.User, item.WorkPoint);
  1976. }
  1977. else
  1978. {
  1979. //子表修改
  1980. sql = @"update ICSOApplyNegDetail set InvCode='{0}' ,Quantity='{1}',Amount='{2}',SourceDetailID='{3}',MUSER='{6}',MUSERName=(select F_RealName from Sys_SRM_User where F_Account='{6}' and F_Location='{5}') where ID='{4}' and WorkPoint='{5}'";
  1981. sql = string.Format(sql, itemInfo.InvCode, itemInfo.Quantity, itemInfo.Amount, itemInfo.SourceDetailID, itemInfo.DetailID, item.WorkPoint, item.User);
  1982. }
  1983. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1984. {
  1985. throw new Exception("委外退料单子表信息修改失败!");
  1986. }
  1987. }
  1988. //校验退料数量是否超出领料数量
  1989. sql = @"DECLARE @PickID VARCHAR(10)
  1990. SELECT @PickID=b.PickID
  1991. FROM ICSOApplyNegDetail a
  1992. INNER JOIN ICSOOPick b ON a.SourceDetailID=b.PickID AND a.WorkPoint=b.WorkPoint
  1993. INNER JOIN ICSOApplyNeg c ON a.OApplyNegCode=c.OApplyNegCode AND a.WorkPoint=c.WorkPoint
  1994. WHERE c.ID='{0}' AND a.WorkPoint='{1}'
  1995. GROUP BY b.PickID
  1996. HAVING MAX(b.Quantity)<SUM(a.Quantity)
  1997. IF (@PickID IS NOT NULL)
  1998. BEGIN
  1999. DECLARE @InvCode VARCHAR(100)
  2000. SELECT @InvCode=''+InvCode+' 退' FROM ICSMOPick WHERE PickID=@PickID AND WorkPoint='{1}'
  2001. RAISERROR(@InvCode,16,1);
  2002. RETURN
  2003. END ";
  2004. sql = string.Format(sql, item.id, item.WorkPoint);
  2005. DBHelper.ExecuteNonQuery(sql, cmd);
  2006. ids += "'" + item.id + "',";
  2007. }
  2008. if (string.IsNullOrWhiteSpace(ids))
  2009. {
  2010. throw new Exception("单据号不能为空!");
  2011. }
  2012. #region 查询返回数据
  2013. sql = @"SELECT a.OApplyNegCode,
  2014. c.WHCode,
  2015. c.Memo,
  2016. d.Name AS Status,
  2017. a.Sequence,
  2018. a.InvCode,
  2019. inv.InvName,
  2020. inv.InvStd,
  2021. a.Quantity,
  2022. inv.InvUnit,
  2023. a.Amount,
  2024. inv.AmountUnit,
  2025. a.IssueNegQuantity,
  2026. ext.ProjectCode,
  2027. ext.BatchCode,
  2028. ext.Version,
  2029. ext.Brand,
  2030. ext.cFree1,
  2031. ext.cFree2,
  2032. ext.cFree3,
  2033. ext.cFree4,
  2034. ext.cFree5,
  2035. ext.cFree6,
  2036. ext.cFree7,
  2037. ext.cFree8,
  2038. ext.cFree9,
  2039. ext.cFree10,
  2040. a.MUSER AS [User],
  2041. a.MTIME AS [MTime]
  2042. FROM ICSOApplyNegDetail a
  2043. INNER JOIN ICSOApplyNeg c ON a.OApplyNegCode=c.OApplyNegCode AND a.WorkPoint=c.WorkPoint
  2044. LEFT JOIN ICSType d ON d.TableCode='ICSOApplyNeg' AND d.ColumnCode='Status' AND c.Status=d.Code AND c.WorkPoint=d.WorkPoint
  2045. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2046. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2047. WHERE c.ID IN ({0})";
  2048. sql = string.Format(sql, ids.Substring(0, ids.Length - 1));
  2049. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  2050. #endregion
  2051. cmd.Transaction.Commit();
  2052. return data;
  2053. }
  2054. catch (Exception ex)
  2055. {
  2056. if (cmd.Transaction != null)
  2057. cmd.Transaction.Rollback();
  2058. log.Error(ex.Message);
  2059. throw new Exception(ex.Message);
  2060. }
  2061. finally
  2062. {
  2063. if (conn.State == ConnectionState.Open)
  2064. {
  2065. conn.Close();
  2066. }
  2067. conn.Dispose();
  2068. }
  2069. }
  2070. }
  2071. /// <summary>
  2072. /// 委外退料审核
  2073. /// </summary>
  2074. /// <param name="JsonData"></param>
  2075. /// <returns></returns>
  2076. public static DataTable OutsourcingIssueDoNegativeApplyApprove(List<ICSUser> JsonData)
  2077. {
  2078. if (JsonData.Count <= 0)
  2079. {
  2080. throw new Exception("传送数据为空!");
  2081. }
  2082. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  2083. {
  2084. conn.Open();
  2085. SqlTransaction sqlTran = conn.BeginTransaction();
  2086. SqlCommand cmd = new SqlCommand();
  2087. cmd.Transaction = sqlTran;
  2088. cmd.Connection = conn;
  2089. try
  2090. {
  2091. string sql = string.Empty;
  2092. string ids = string.Empty;
  2093. foreach (var item in JsonData)
  2094. {
  2095. if (string.IsNullOrEmpty(item.ID))
  2096. {
  2097. throw new Exception("单据ID不能为空!");
  2098. }
  2099. if (string.IsNullOrEmpty(item.User))
  2100. {
  2101. throw new Exception("操作人不能为空!");
  2102. }
  2103. if (item.MTime <= new DateTime(2000, 1, 1))
  2104. {
  2105. throw new Exception("操作时间不能为空!");
  2106. }
  2107. //获取单号
  2108. sql = @"DECLARE @Status VARCHAR(10)
  2109. SELECT @Status=Status FROM ICSOApplyNeg WHERE ID='{0}'
  2110. IF (@Status IS NULL)
  2111. BEGIN
  2112. RAISERROR('退{0} ',16,1);
  2113. RETURN
  2114. END
  2115. ELSE IF (@Status!='1')
  2116. BEGIN
  2117. RAISERROR('退{0} ',16,1);
  2118. RETURN
  2119. END
  2120. update ICSOApplyNeg set Status='2',MUSER='{1}',MTIME='{2}' where ID='{0}'";
  2121. sql = string.Format(sql, item.ID, item.User, item.MTime);
  2122. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2123. {
  2124. throw new Exception("委外退料申请单审核失败!");
  2125. }
  2126. ids += "'" + item.ID + "',";
  2127. }
  2128. if (string.IsNullOrWhiteSpace(ids))
  2129. {
  2130. throw new Exception("单据号不能为空!");
  2131. }
  2132. #region 查询返回数据
  2133. sql = @"SELECT a.OApplyNegCode,
  2134. c.WHCode,
  2135. c.Memo,
  2136. d.Name AS Status,
  2137. a.Sequence,
  2138. a.InvCode,
  2139. inv.InvName,
  2140. inv.InvStd,
  2141. a.Quantity,
  2142. inv.InvUnit,
  2143. a.Amount,
  2144. inv.AmountUnit,
  2145. a.IssueNegQuantity,
  2146. ext.ProjectCode,
  2147. ext.BatchCode,
  2148. ext.Version,
  2149. ext.Brand,
  2150. ext.cFree1,
  2151. ext.cFree2,
  2152. ext.cFree3,
  2153. ext.cFree4,
  2154. ext.cFree5,
  2155. ext.cFree6,
  2156. ext.cFree7,
  2157. ext.cFree8,
  2158. ext.cFree9,
  2159. ext.cFree10,
  2160. a.MUSER AS [User],
  2161. a.MTIME AS [MTime]
  2162. FROM ICSOApplyNegDetail a
  2163. INNER JOIN ICSOApplyNeg c ON a.OApplyNegCode=c.OApplyNegCode AND a.WorkPoint=c.WorkPoint
  2164. LEFT JOIN ICSType d ON d.TableCode='ICSOApplyNeg' AND d.ColumnCode='Status' AND c.Status=d.Code AND c.WorkPoint=d.WorkPoint
  2165. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2166. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2167. WHERE c.ID IN ({0})";
  2168. sql = string.Format(sql, ids.Substring(0, ids.Length - 1));
  2169. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  2170. #endregion
  2171. cmd.Transaction.Commit();
  2172. return data;
  2173. }
  2174. catch (Exception ex)
  2175. {
  2176. if (cmd.Transaction != null)
  2177. cmd.Transaction.Rollback();
  2178. log.Error(ex.Message);
  2179. throw new Exception(ex.Message);
  2180. }
  2181. finally
  2182. {
  2183. if (conn.State == ConnectionState.Open)
  2184. {
  2185. conn.Close();
  2186. }
  2187. conn.Dispose();
  2188. }
  2189. }
  2190. }
  2191. /// <summary>
  2192. /// 委外到货
  2193. /// </summary>
  2194. /// <param name="JsonData"></param>
  2195. /// <returns></returns>
  2196. public static DataTable OutsourcingDeliveryNoticeCreate(List<ICSDeliveryNotice> JsonData)
  2197. {
  2198. if (JsonData.Count <= 0)
  2199. {
  2200. throw new Exception("传送数据为空!");
  2201. }
  2202. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  2203. {
  2204. conn.Open();
  2205. SqlTransaction sqlTran = conn.BeginTransaction();
  2206. SqlCommand cmd = new SqlCommand();
  2207. cmd.Transaction = sqlTran;
  2208. cmd.Connection = conn;
  2209. try
  2210. {
  2211. string asncodes = string.Empty;
  2212. string sql = string.Empty;
  2213. foreach (var item in JsonData)
  2214. {
  2215. if (string.IsNullOrEmpty(item.OASNCode))
  2216. {
  2217. throw new Exception("送货单号不能为空!");
  2218. }
  2219. //获取单号
  2220. sql = @"IF EXISTS(SELECT a.ID FROM ICSODeliveryNotice a WHERE a.OASNCode='{0}' AND ODNType = '1' AND a.WorkPoint='{1}')
  2221. BEGIN
  2222. RAISERROR('{0} ',16,1);
  2223. RETURN
  2224. END
  2225. DECLARE @Status VARCHAR(10)
  2226. SELECT @Status=Status FROM ICSOASN WHERE OASNCode='{0}' and WorkPoint='{1}'
  2227. IF (@Status IS NULL)
  2228. BEGIN
  2229. RAISERROR('{0} ',16,1);
  2230. RETURN
  2231. END
  2232. ELSE IF (@Status!='2')
  2233. BEGIN
  2234. RAISERROR('{0} ',16,1);
  2235. RETURN
  2236. END
  2237. DECLARE @MaxNO INT,@date varchar(20)='ODN'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
  2238. SELECT @MaxNO=SUBSTRING(MAX(ODNCode),LEN(@date)+1,LEN(MAX(ODNCode))-LEN(@date))+1 FROM ICSODeliveryNotice
  2239. WHERE SUBSTRING(ODNCode, 1, LEN(@date))=@date
  2240. IF @MaxNO IS NULL
  2241. BEGIN
  2242. SELECT @date+'00001' AS Code
  2243. END
  2244. ELSE
  2245. BEGIN
  2246. SELECT @date+REPLICATE('0',5-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS Code
  2247. END ";
  2248. sql = string.Format(sql, item.OASNCode, item.WorkPoint);
  2249. string Code = DBHelper.ExecuteScalar(sql, cmd).ToString();
  2250. //修改送货单到货数量
  2251. foreach (var itemInfo in item.detail)
  2252. {
  2253. sql = @"UPDATE ICSOASNDetail SET ODNQuantity=ISNULL(ODNQuantity, 0)+'{2}'
  2254. WHERE LotNo='{0}' AND WorkPoint='{1}'";
  2255. sql = string.Format(sql, itemInfo.LotNo, item.WorkPoint, itemInfo.Quantity);
  2256. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2257. {
  2258. throw new Exception("委外送货单子表信息更新失败!");
  2259. }
  2260. }
  2261. //创建到货单信息
  2262. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{1}' AND F_Location='{2}')
  2263. BEGIN
  2264. RAISERROR('{1} ',16,1);
  2265. RETURN
  2266. END
  2267. INSERT INTO ICSODeliveryNotice(ID,ODNCode,Sequence,VenCode,DepCode,
  2268. ODNType,InvCode,Quantity,Amount,RCVQuantity,
  2269. UnitPrice,Currency,Status,CreatePerson,CreateDateTime,
  2270. OOID,OODetailID,ODNID,ODNDetailID,ExtensionID,
  2271. MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,OASNCode)
  2272. SELECT NEWID(),'{0}',row_number() OVER (ORDER BY b.InvCode),d.VenCode,d.DepCode,
  2273. '1',b.InvCode,SUM(a.ODNQuantity),'0','0',
  2274. d.UnitPrice,d.Currency,'2',e.F_Account,GETDATE(),
  2275. d.OOID,d.OODetailID,newid(),newid(),b.ExtensionID,
  2276. e.F_Account,e.F_RealName,GETDATE(),a.WorkPoint,'',a.OASNCode
  2277. FROM ICSOASNDetail a
  2278. INNER JOIN ICSInventoryLot b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2279. INNER JOIN ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=c.WorkPoint
  2280. INNER JOIN ICSOutsourcingOrder d ON c.TransCode=d.OOCode AND c.TransSequence=d.Sequence AND c.WorkPoint=d.WorkPoint
  2281. INNER JOIN Sys_SRM_User e ON e.F_Account='{1}' AND e.F_Location='{2}'
  2282. WHERE a.OASNCode='{3}' AND a.WorkPoint='{2}'
  2283. GROUP BY d.OOID,d.OODetailID,d.VenCode,d.UnitPrice,d.Currency,d.DepCode,b.ExtensionID,b.InvCode,a.OASNCode,e.F_Account,e.F_RealName,a.WorkPoint";
  2284. sql = string.Format(sql, Code, item.User, item.WorkPoint, item.OASNCode);
  2285. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2286. {
  2287. throw new Exception("到货单信息创建失败!");
  2288. }
  2289. ICSOutsourcingService.OutsourcingDeliveryNoticeERP(Code, item.WorkPoint, cmd);
  2290. asncodes += "'" + item.OASNCode + item.WorkPoint + "',";
  2291. }
  2292. if (string.IsNullOrWhiteSpace(asncodes))
  2293. {
  2294. throw new Exception("请传入送货单信息!");
  2295. }
  2296. #region 查询返回数据
  2297. sql = @"SELECT
  2298. n.OOCode,
  2299. n.Sequence AS OOSequence,
  2300. a.OASNCode,
  2301. a.ODNCode,
  2302. a.Sequence,
  2303. a.VenCode,
  2304. a.DepCode,
  2305. a.InvCode,
  2306. inv.InvName,
  2307. inv.InvStd,
  2308. a.Quantity,
  2309. inv.InvUnit,
  2310. a.Amount,
  2311. inv.AmountUnit,
  2312. a.RCVQuantity,
  2313. a.UnitPrice,
  2314. a.Currency,
  2315. a.OOID,
  2316. a.OODetailID,
  2317. a.ODNID,
  2318. a.ODNDetailID,
  2319. ext.ProjectCode,
  2320. ext.BatchCode,
  2321. ext.Version,
  2322. ext.Brand,
  2323. ext.cFree1,
  2324. ext.cFree2,
  2325. ext.cFree3,
  2326. ext.cFree4,
  2327. ext.cFree5,
  2328. ext.cFree6,
  2329. ext.cFree7,
  2330. ext.cFree8,
  2331. ext.cFree9,
  2332. ext.cFree10,
  2333. a.MUSER AS [User],
  2334. a.MTIME AS [MTime]
  2335. FROM ICSODeliveryNotice a
  2336. INNER JOIN ICSOutsourcingOrder n ON a.OOID =n.OOID AND a.OODetailID=n.OODetailID AND a.WorkPoint=n.WorkPoint
  2337. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2338. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2339. WHERE a.OASNCode+a.WorkPoint IN ({0})";
  2340. sql = string.Format(sql, asncodes.Substring(0, asncodes.Length - 1));
  2341. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  2342. #endregion
  2343. cmd.Transaction.Commit();
  2344. return data;
  2345. }
  2346. catch (Exception ex)
  2347. {
  2348. if (cmd.Transaction != null)
  2349. cmd.Transaction.Rollback();
  2350. log.Error(ex.Message);
  2351. throw new Exception(ex.Message);
  2352. }
  2353. finally
  2354. {
  2355. if (conn.State == ConnectionState.Open)
  2356. {
  2357. conn.Close();
  2358. }
  2359. conn.Dispose();
  2360. }
  2361. }
  2362. }
  2363. /// <summary>
  2364. /// 委外拒收
  2365. /// </summary>
  2366. /// <param name="JsonData"></param>
  2367. /// <returns></returns>
  2368. public static DataTable OutsourcingRejectDocCreate(List<ICSDeliveryNotice> JsonData)
  2369. {
  2370. if (JsonData.Count <= 0)
  2371. {
  2372. throw new Exception("传送数据为空!");
  2373. }
  2374. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  2375. {
  2376. conn.Open();
  2377. SqlTransaction sqlTran = conn.BeginTransaction();
  2378. SqlCommand cmd = new SqlCommand();
  2379. cmd.Transaction = sqlTran;
  2380. cmd.Connection = conn;
  2381. try
  2382. {
  2383. string lots = string.Empty;
  2384. string sql = string.Empty;
  2385. foreach (var item in JsonData)
  2386. {
  2387. if (string.IsNullOrEmpty(item.ODNCode))
  2388. {
  2389. throw new Exception("到货单号不能为空!");
  2390. }
  2391. //获取单号
  2392. sql = @"DECLARE @Status VARCHAR(10)
  2393. SELECT @Status=Status FROM ICSODeliveryNotice WHERE ODNCode='{0}' and ODNType='1' and WorkPoint='{1}'
  2394. IF (@Status IS NULL)
  2395. BEGIN
  2396. RAISERROR('{0} ',16,1);
  2397. RETURN
  2398. END
  2399. ELSE IF (@Status!='2')
  2400. BEGIN
  2401. RAISERROR('{0} ',16,1);
  2402. RETURN
  2403. END
  2404. DECLARE @MaxNO INT,@date varchar(20)='ORJT'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
  2405. SELECT @MaxNO=SUBSTRING(MAX(ODNCode),LEN(@date)+1,LEN(MAX(ODNCode))-LEN(@date))+1 FROM ICSODeliveryNotice
  2406. WHERE SUBSTRING(ODNCode, 1, LEN(@date))=@date
  2407. IF @MaxNO IS NULL
  2408. BEGIN
  2409. SELECT @date+'00001' AS Code
  2410. END
  2411. ELSE
  2412. BEGIN
  2413. SELECT @date+REPLICATE('0',5-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS Code
  2414. END ";
  2415. sql = string.Format(sql, item.ODNCode, item.WorkPoint);
  2416. string Code = DBHelper.ExecuteScalar(sql, cmd).ToString();
  2417. //修改送货单到货数量
  2418. foreach (var itemInfo in item.detail)
  2419. {
  2420. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{3}' AND F_Location='{2}')
  2421. BEGIN
  2422. RAISERROR('{3} ',16,1);
  2423. RETURN
  2424. END
  2425. IF EXISTS(SELECT a.ID FROM ICSODeliveryNotice a WHERE a.EATTRIBUTE1='{1}' AND ODNType = '3' AND a.WorkPoint='{2}')
  2426. BEGIN
  2427. RAISERROR('{1} ',16,1);
  2428. RETURN
  2429. END
  2430. INSERT INTO ICSODeliveryNotice(ID,ODNCode,Sequence,VenCode,DepCode,
  2431. ODNType,InvCode,Quantity,Amount,RCVQuantity,
  2432. UnitPrice,Currency,Status,CreatePerson,CreateDateTime,
  2433. OOID,OODetailID,ODNID,ODNDetailID,ExtensionID,
  2434. MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,OASNCode)
  2435. SELECT NEWID(),'{4}', '{11}', '{5}', '{6}',
  2436. '3',d.InvCode,'{7}', '{8}', 0,
  2437. '{9}', '{10}', '2', e.F_Account, SYSDATETIME(),
  2438. a.ODNID,a.ODNDetailID, '0', '0', a.ExtensionID,
  2439. e.F_Account,e.F_RealName, SYSDATETIME(), a.WorkPoint, b.LOTNO,''
  2440. FROM ICSODeliveryNotice a
  2441. INNER JOIN ICSOASNDetail b ON a.OASNCode=b.OASNCode AND a.WorkPoint=b.WorkPoint
  2442. INNER JOIN ICSInventoryLot d ON b.LotNo=d.LotNo AND a.InvCode=d.InvCode AND b.WorkPoint=d.WorkPoint
  2443. INNER JOIN ICSInventoryLotDetail m on d.LotNo=m.LotNo and d.WorkPoint=m.WorkPoint
  2444. INNER JOIN ICSOutsourcingOrder n ON m.TransCode =n.OOCode AND m.TransSequence=n.Sequence AND a.OODetailID=n.OODetailID AND m.WorkPoint=n.WorkPoint
  2445. INNER JOIN ICSInspection h ON h.LotNo=b.LotNo AND h.WorkPoint=b.WorkPoint
  2446. INNER JOIN Sys_SRM_User e ON e.F_Account='{3}' AND e.F_Location='{2}'
  2447. WHERE a.ODNCode='{0}' and b.LOTNO='{1}' AND a.WorkPoint='{2}'";
  2448. sql = string.Format(sql, item.ODNCode, itemInfo.LotNo, item.WorkPoint, item.User, Code, item.VenCode, item.DepCode, itemInfo.Quantity, itemInfo.Amount, itemInfo.UnitPrice, itemInfo.Currency, itemInfo.Sequence);
  2449. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2450. {
  2451. throw new Exception("拒收单创建失败!");
  2452. }
  2453. lots += "'" + itemInfo.LotNo + item.WorkPoint + "',";
  2454. }
  2455. }
  2456. if (string.IsNullOrWhiteSpace(lots))
  2457. {
  2458. throw new Exception("请传入条码信息!");
  2459. }
  2460. #region 查询返回数据
  2461. sql = @"SELECT
  2462. n.ODNCode,
  2463. n.Sequence,
  2464. a.ODNCode AS RJTCode,
  2465. a.Sequence AS RJTSequence,
  2466. a.VenCode,
  2467. a.DepCode,
  2468. a.InvCode,
  2469. inv.InvName,
  2470. inv.InvStd,
  2471. a.Quantity,
  2472. inv.InvUnit,
  2473. a.Amount,
  2474. inv.AmountUnit,
  2475. a.RCVQuantity,
  2476. a.UnitPrice,
  2477. a.Currency,
  2478. a.OOID,
  2479. a.OODetailID,
  2480. a.ODNID,
  2481. a.ODNDetailID,
  2482. ext.ProjectCode,
  2483. ext.BatchCode,
  2484. ext.Version,
  2485. ext.Brand,
  2486. ext.cFree1,
  2487. ext.cFree2,
  2488. ext.cFree3,
  2489. ext.cFree4,
  2490. ext.cFree5,
  2491. ext.cFree6,
  2492. ext.cFree7,
  2493. ext.cFree8,
  2494. ext.cFree9,
  2495. ext.cFree10,
  2496. a.MUSER AS [User],
  2497. a.MTIME AS [MTime]
  2498. FROM ICSODeliveryNotice a
  2499. INNER JOIN ICSODeliveryNotice n ON a.OOID =n.ODNID AND a.OODetailID=n.ODNDetailID AND a.WorkPoint=n.WorkPoint
  2500. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2501. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2502. WHERE a.EATTRIBUTE1+a.WorkPoint IN ({0})";
  2503. sql = string.Format(sql, lots.Substring(0, lots.Length - 1));
  2504. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  2505. #endregion
  2506. cmd.Transaction.Commit();
  2507. return data;
  2508. }
  2509. catch (Exception ex)
  2510. {
  2511. if (cmd.Transaction != null)
  2512. cmd.Transaction.Rollback();
  2513. log.Error(ex.Message);
  2514. throw new Exception(ex.Message);
  2515. }
  2516. finally
  2517. {
  2518. if (conn.State == ConnectionState.Open)
  2519. {
  2520. conn.Close();
  2521. }
  2522. conn.Dispose();
  2523. }
  2524. }
  2525. }
  2526. #endregion
  2527. #region 生产
  2528. /// <summary>
  2529. /// 生产退料 新建
  2530. /// </summary>
  2531. /// <param name="JsonData"></param>
  2532. /// <returns></returns>
  2533. public static DataTable MOIssueDocNegativeApplyCreate(List<ICSMOApplyNeg> JsonData)
  2534. {
  2535. if (JsonData.Count <= 0)
  2536. {
  2537. throw new Exception("传送数据为空!");
  2538. }
  2539. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  2540. {
  2541. conn.Open();
  2542. SqlTransaction sqlTran = conn.BeginTransaction();
  2543. SqlCommand cmd = new SqlCommand();
  2544. cmd.Transaction = sqlTran;
  2545. cmd.Connection = conn;
  2546. try
  2547. {
  2548. string codes = string.Empty;
  2549. string sql = string.Empty;
  2550. foreach (var item in JsonData)
  2551. {
  2552. //获取单号
  2553. sql = @"DECLARE @MaxNO INT,@date varchar(20)='OOIA'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
  2554. SELECT @MaxNO=SUBSTRING(MAX(ApplyNegCode),LEN(@date)+1,LEN(MAX(ApplyNegCode))-LEN(@date))+1 FROM ICSMOApplyNeg
  2555. WHERE SUBSTRING(ApplyNegCode, 1, LEN(@date))=@date
  2556. IF @MaxNO IS NULL
  2557. BEGIN
  2558. SELECT @date+'00001' AS Code
  2559. END
  2560. ELSE
  2561. BEGIN
  2562. SELECT @date+REPLICATE('0',5-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS Code
  2563. END ";
  2564. string Code = DBHelper.ExecuteScalar(sql, cmd).ToString();
  2565. //创建主表
  2566. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{4}')
  2567. BEGIN
  2568. RAISERROR('{2} ',16,1);
  2569. RETURN
  2570. END
  2571. INSERT INTO ICSMOApplyNeg(ID,ApplyNegCode,WHCode,Status,Type,Memo,CreatePerson,CreateDateTime,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2572. VALUES (NEWID(),'{0}','{1}','1','1','','{2}','{3}','{2}',(select F_RealName from Sys_SRM_User where F_Account='{2}' and F_Location='{4}'),'{3}','{4}','')";
  2573. sql = string.Format(sql, Code, item.WHCode, item.User, item.MTime, item.WorkPoint);
  2574. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2575. {
  2576. throw new Exception("生产退料单信息创建失败!");
  2577. }
  2578. foreach (var itemInfo in item.detail)
  2579. {
  2580. //创建子表
  2581. sql = @"INSERT INTO ICSMOApplyNegDetail(ID,ApplyNegCode,Sequence,SourceDetailID,InvCode,
  2582. Quantity,Amount,IssueNegQuantity,ExtensionID,MUSER,
  2583. MUSERName,MTIME,WorkPoint,EATTRIBUTE)
  2584. VALUES (NEWID(),'{0}','{1}','{2}','{3}',
  2585. '{4}','{5}',0,'{6}','{7}',
  2586. (select F_RealName from Sys_SRM_User where F_Account='{7}' and F_Location='{8}'),SYSDATETIME(),'{8}','')";
  2587. sql = string.Format(sql, Code, itemInfo.Sequence, itemInfo.SourceDetailID, itemInfo.InvCode, itemInfo.Quantity, itemInfo.Amount, itemInfo.ExtensionID, item.User, item.WorkPoint);
  2588. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2589. {
  2590. throw new Exception("生产退料单子表信息创建失败!");
  2591. }
  2592. }
  2593. //校验退料数量是否超出领料数量
  2594. sql = @"DECLARE @PickID VARCHAR(10)
  2595. SELECT @PickID=b.PickID
  2596. FROM ICSMOApplyNegDetail a
  2597. INNER JOIN ICSMOPick b ON a.SourceDetailID=b.PickID AND a.WorkPoint=b.WorkPoint
  2598. INNER JOIN ICSMOApplyNeg c ON a.ApplyNegCode=c.ApplyNegCode AND a.WorkPoint=c.WorkPoint
  2599. WHERE c.ID='{0}' AND a.WorkPoint='{1}'
  2600. GROUP BY b.PickID
  2601. HAVING MAX(b.Quantity)<SUM(a.Quantity)
  2602. IF (@PickID IS NOT NULL)
  2603. BEGIN
  2604. DECLARE @InvCode VARCHAR(100)
  2605. SELECT @InvCode=''+InvCode+' 退' FROM ICSMOPick WHERE PickID=@PickID AND WorkPoint='{1}'
  2606. RAISERROR(@InvCode,16,1);
  2607. RETURN
  2608. END ";
  2609. sql = string.Format(sql, item.ID, item.WorkPoint);
  2610. DBHelper.ExecuteNonQuery(sql, cmd);
  2611. codes += "'" + Code + item.WorkPoint + "',";
  2612. }
  2613. if (string.IsNullOrWhiteSpace(codes))
  2614. {
  2615. throw new Exception("单据号不能为空!");
  2616. }
  2617. #region 查询返回数据
  2618. sql = @"SELECT a.ApplyNegCode,
  2619. c.WHCode,
  2620. c.Memo,
  2621. d.Name AS Status,
  2622. a.Sequence,
  2623. a.InvCode,
  2624. inv.InvName,
  2625. inv.InvStd,
  2626. a.Quantity,
  2627. inv.InvUnit,
  2628. a.Amount,
  2629. inv.AmountUnit,
  2630. a.IssueNegQuantity,
  2631. ext.ProjectCode,
  2632. ext.BatchCode,
  2633. ext.Version,
  2634. ext.Brand,
  2635. ext.cFree1,
  2636. ext.cFree2,
  2637. ext.cFree3,
  2638. ext.cFree4,
  2639. ext.cFree5,
  2640. ext.cFree6,
  2641. ext.cFree7,
  2642. ext.cFree8,
  2643. ext.cFree9,
  2644. ext.cFree10,
  2645. a.MUSER AS [User],
  2646. a.MTIME AS [MTime]
  2647. FROM ICSMOApplyNegDetail a
  2648. INNER JOIN ICSMOApplyNeg c ON a.ApplyNegCode=c.ApplyNegCode AND a.WorkPoint=c.WorkPoint
  2649. LEFT JOIN ICSType d ON d.TableCode='ICSMOApplyNeg' AND d.ColumnCode='Status' AND c.Status=d.Code AND c.WorkPoint=d.WorkPoint
  2650. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2651. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2652. WHERE a.ApplyNegCode+a.WorkPoint IN ({0})";
  2653. sql = string.Format(sql, codes.Substring(0, codes.Length - 1));
  2654. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  2655. #endregion
  2656. cmd.Transaction.Commit();
  2657. return data;
  2658. }
  2659. catch (Exception ex)
  2660. {
  2661. if (cmd.Transaction != null)
  2662. cmd.Transaction.Rollback();
  2663. log.Error(ex.Message);
  2664. throw new Exception(ex.Message);
  2665. }
  2666. finally
  2667. {
  2668. if (conn.State == ConnectionState.Open)
  2669. {
  2670. conn.Close();
  2671. }
  2672. conn.Dispose();
  2673. }
  2674. }
  2675. }
  2676. /// <summary>
  2677. /// 生产退料 修改
  2678. /// </summary>
  2679. /// <param name="JsonData"></param>
  2680. /// <returns></returns>
  2681. public static DataTable MOIssueDocNegativeApplyUpdate(List<ICSMOApplyNeg> JsonData)
  2682. {
  2683. if (JsonData.Count <= 0)
  2684. {
  2685. throw new Exception("传送数据为空!");
  2686. }
  2687. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  2688. {
  2689. conn.Open();
  2690. SqlTransaction sqlTran = conn.BeginTransaction();
  2691. SqlCommand cmd = new SqlCommand();
  2692. cmd.Transaction = sqlTran;
  2693. cmd.Connection = conn;
  2694. try
  2695. {
  2696. string sql = string.Empty;
  2697. string Code = string.Empty;
  2698. string ids = string.Empty;
  2699. foreach (var item in JsonData)
  2700. {
  2701. //主表修改
  2702. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{1}' AND F_Location='{4}')
  2703. BEGIN
  2704. RAISERROR('{1} ',16,1);
  2705. RETURN
  2706. END
  2707. DECLARE @Status VARCHAR(10)
  2708. SELECT @Status=Status FROM ICSMOApplyNeg WHERE ID='{3}' and WorkPoint='{4}'
  2709. IF (@Status IS NULL)
  2710. BEGIN
  2711. RAISERROR('退{3} ',16,1);
  2712. RETURN
  2713. END
  2714. ELSE IF (@Status!='1')
  2715. BEGIN
  2716. RAISERROR('退{3} ',16,1);
  2717. RETURN
  2718. END
  2719. update ICSMOApplyNeg set WHCode='{0}',MUSER='{1}',MUSERName=(select F_RealName from Sys_SRM_User where F_Account='{1}' and F_Location='{4}'),MTIME='{2}' where ID='{3}' and WorkPoint='{4}' ";
  2720. sql = string.Format(sql, item.WHCode, item.User, item.MTime, item.ID, item.WorkPoint);
  2721. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2722. {
  2723. throw new Exception("生产退料单信息修改失败!");
  2724. }
  2725. var detail = item.detail.Where(a => a.DetailID.Length <= 0).Count();
  2726. if (detail > 0)
  2727. {
  2728. sql = @"SELECT ApplyNegCode FROM ICSMOApplyNeg where ID='{0}' and WorkPoint='{1}'";
  2729. sql = string.Format(sql, item.ID, item.WorkPoint);
  2730. Code = DBHelper.ExecuteScalar(sql, cmd).ToString();
  2731. }
  2732. foreach (var itemInfo in item.detail)
  2733. {
  2734. if (string.IsNullOrWhiteSpace(itemInfo.DetailID))
  2735. {
  2736. //创建子表
  2737. sql = @"INSERT INTO ICSMOApplyNegDetail(ID,ApplyNegCode,Sequence,SourceDetailID,InvCode,Quantity,Amount,IssueNegQuantity,ExtensionID,MUSER,
  2738. MUSERName,MTIME,WorkPoint,EATTRIBUTE)
  2739. VALUES (NEWID(),'{0}','{1}','{2}','{3}',
  2740. '{4}','{5}',0,'{6}','{7}',
  2741. (select F_RealName from Sys_SRM_User where F_Account='{7}' and F_Location='{8}'),SYSDATETIME(),'{8}','')";
  2742. sql = string.Format(sql, Code, itemInfo.Sequence, itemInfo.SourceDetailID, itemInfo.InvCode, itemInfo.Quantity, itemInfo.Amount, itemInfo.ExtensionID, item.User, item.WorkPoint);
  2743. }
  2744. else
  2745. {
  2746. //子表修改
  2747. sql = @"update ICSMOApplyNegDetail set InvCode='{0}' ,Quantity='{1}',Amount='{2}',SourceDetailID='{3}',MUSER='{6}',MUSERName=(select F_RealName from Sys_SRM_User where F_Account='{6}' and F_Location='{5}') where ID='{4}' and WorkPoint='{5}'";
  2748. sql = string.Format(sql, itemInfo.InvCode, itemInfo.Quantity, itemInfo.Amount, itemInfo.SourceDetailID, itemInfo.DetailID, item.WorkPoint, item.User);
  2749. }
  2750. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2751. {
  2752. throw new Exception("生产退料单子表信息修改失败!");
  2753. }
  2754. }
  2755. //校验退料数量是否超出领料数量
  2756. sql = @"DECLARE @PickID VARCHAR(10)
  2757. SELECT @PickID=b.PickID
  2758. FROM ICSMOApplyNegDetail a
  2759. INNER JOIN ICSMOPick b ON a.SourceDetailID=b.PickID AND a.WorkPoint=b.WorkPoint
  2760. INNER JOIN ICSMOApplyNeg c ON a.ApplyNegCode=c.ApplyNegCode AND a.WorkPoint=c.WorkPoint
  2761. WHERE c.ID='{0}' AND a.WorkPoint='{1}'
  2762. GROUP BY b.PickID
  2763. HAVING MAX(b.Quantity)<SUM(a.Quantity)
  2764. IF (@PickID IS NOT NULL)
  2765. BEGIN
  2766. DECLARE @InvCode VARCHAR(100)
  2767. SELECT @InvCode=''+InvCode+' 退' FROM ICSMOPick WHERE PickID=@PickID AND WorkPoint='{1}'
  2768. RAISERROR(@InvCode,16,1);
  2769. RETURN
  2770. END ";
  2771. sql = string.Format(sql, item.ID, item.WorkPoint);
  2772. DBHelper.ExecuteNonQuery(sql, cmd);
  2773. ids += "'" + item.ID + "',";
  2774. }
  2775. if (string.IsNullOrWhiteSpace(ids))
  2776. {
  2777. throw new Exception("单据号不能为空!");
  2778. }
  2779. #region 查询返回数据
  2780. sql = @"SELECT a.ApplyNegCode,
  2781. c.WHCode,
  2782. c.Memo,
  2783. d.Name AS Status,
  2784. a.Sequence,
  2785. a.InvCode,
  2786. inv.InvName,
  2787. inv.InvStd,
  2788. a.Quantity,
  2789. inv.InvUnit,
  2790. a.Amount,
  2791. inv.AmountUnit,
  2792. a.IssueNegQuantity,
  2793. ext.ProjectCode,
  2794. ext.BatchCode,
  2795. ext.Version,
  2796. ext.Brand,
  2797. ext.cFree1,
  2798. ext.cFree2,
  2799. ext.cFree3,
  2800. ext.cFree4,
  2801. ext.cFree5,
  2802. ext.cFree6,
  2803. ext.cFree7,
  2804. ext.cFree8,
  2805. ext.cFree9,
  2806. ext.cFree10,
  2807. a.MUSER AS [User],
  2808. a.MTIME AS [MTime]
  2809. FROM ICSMOApplyNegDetail a
  2810. INNER JOIN ICSMOApplyNeg c ON a.ApplyNegCode=c.ApplyNegCode AND a.WorkPoint=c.WorkPoint
  2811. LEFT JOIN ICSType d ON d.TableCode='ICSMOApplyNeg' AND d.ColumnCode='Status' AND c.Status=d.Code AND c.WorkPoint=d.WorkPoint
  2812. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2813. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2814. WHERE c.ID IN ({0})";
  2815. sql = string.Format(sql, ids.Substring(0, ids.Length - 1));
  2816. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  2817. #endregion
  2818. cmd.Transaction.Commit();
  2819. return data;
  2820. }
  2821. catch (Exception ex)
  2822. {
  2823. if (cmd.Transaction != null)
  2824. cmd.Transaction.Rollback();
  2825. log.Error(ex.Message);
  2826. throw new Exception(ex.Message);
  2827. }
  2828. finally
  2829. {
  2830. if (conn.State == ConnectionState.Open)
  2831. {
  2832. conn.Close();
  2833. }
  2834. conn.Dispose();
  2835. }
  2836. }
  2837. }
  2838. /// <summary>
  2839. /// 生产退料审核
  2840. /// </summary>
  2841. /// <param name="JsonData"></param>
  2842. /// <returns></returns>
  2843. public static DataTable MOIssueDocNegativeApplyApprove(List<ICSUser> JsonData)
  2844. {
  2845. if (JsonData.Count <= 0)
  2846. {
  2847. throw new Exception("传送数据为空!");
  2848. }
  2849. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  2850. {
  2851. conn.Open();
  2852. SqlTransaction sqlTran = conn.BeginTransaction();
  2853. SqlCommand cmd = new SqlCommand();
  2854. cmd.Transaction = sqlTran;
  2855. cmd.Connection = conn;
  2856. try
  2857. {
  2858. string sql = string.Empty;
  2859. string ids = string.Empty;
  2860. foreach (var item in JsonData)
  2861. {
  2862. if (string.IsNullOrEmpty(item.ID))
  2863. {
  2864. throw new Exception("单据ID不能为空!");
  2865. }
  2866. if (string.IsNullOrEmpty(item.User))
  2867. {
  2868. throw new Exception("操作人不能为空!");
  2869. }
  2870. if (item.MTime <= new DateTime(2000, 1, 1))
  2871. {
  2872. throw new Exception("操作时间不能为空!");
  2873. }
  2874. //获取单号
  2875. sql = @"DECLARE @Status VARCHAR(10)
  2876. SELECT @Status=Status FROM ICSMOApplyNeg WHERE ID='{0}'
  2877. IF (@Status IS NULL)
  2878. BEGIN
  2879. RAISERROR('退{0} ',16,1);
  2880. RETURN
  2881. END
  2882. ELSE IF (@Status!='1')
  2883. BEGIN
  2884. RAISERROR('退{0} ',16,1);
  2885. RETURN
  2886. END
  2887. update ICSMOApplyNeg set Status='2',MUSER='{1}',MTIME='{2}' where ID='{0}'";
  2888. sql = string.Format(sql, item.ID, item.User, item.MTime);
  2889. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2890. {
  2891. throw new Exception("生产退料申请单审核失败!");
  2892. }
  2893. ids += "'" + item.ID + "',";
  2894. }
  2895. if (string.IsNullOrWhiteSpace(ids))
  2896. {
  2897. throw new Exception("单据号不能为空!");
  2898. }
  2899. #region 查询返回数据
  2900. sql = @"SELECT a.ApplyNegCode,
  2901. c.WHCode,
  2902. c.Memo,
  2903. d.Name AS Status,
  2904. a.Sequence,
  2905. a.InvCode,
  2906. inv.InvName,
  2907. inv.InvStd,
  2908. a.Quantity,
  2909. inv.InvUnit,
  2910. a.Amount,
  2911. inv.AmountUnit,
  2912. a.IssueNegQuantity,
  2913. ext.ProjectCode,
  2914. ext.BatchCode,
  2915. ext.Version,
  2916. ext.Brand,
  2917. ext.cFree1,
  2918. ext.cFree2,
  2919. ext.cFree3,
  2920. ext.cFree4,
  2921. ext.cFree5,
  2922. ext.cFree6,
  2923. ext.cFree7,
  2924. ext.cFree8,
  2925. ext.cFree9,
  2926. ext.cFree10,
  2927. a.MUSER AS [User],
  2928. a.MTIME AS [MTime]
  2929. FROM ICSMOApplyNegDetail a
  2930. INNER JOIN ICSMOApplyNeg c ON a.ApplyNegCode=c.ApplyNegCode AND a.WorkPoint=c.WorkPoint
  2931. LEFT JOIN ICSType d ON d.TableCode='ICSMOApplyNeg' AND d.ColumnCode='Status' AND c.Status=d.Code AND c.WorkPoint=d.WorkPoint
  2932. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  2933. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  2934. WHERE c.ID IN ({0})";
  2935. sql = string.Format(sql, ids.Substring(0, ids.Length - 1));
  2936. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  2937. #endregion
  2938. cmd.Transaction.Commit();
  2939. return data;
  2940. }
  2941. catch (Exception ex)
  2942. {
  2943. if (cmd.Transaction != null)
  2944. cmd.Transaction.Rollback();
  2945. log.Error(ex.Message);
  2946. throw new Exception(ex.Message);
  2947. }
  2948. finally
  2949. {
  2950. if (conn.State == ConnectionState.Open)
  2951. {
  2952. conn.Close();
  2953. }
  2954. conn.Dispose();
  2955. }
  2956. }
  2957. }
  2958. #endregion
  2959. #region 调拨
  2960. /// <summary>
  2961. /// 一步调拨
  2962. /// </summary>
  2963. /// <param name="JsonData"></param>
  2964. /// <returns></returns>
  2965. public static DataTable OneStepTransferDocIn(List<TransferDoc> JsonData)
  2966. {
  2967. if (JsonData.Count <= 0)
  2968. {
  2969. throw new Exception("传送数据为空!");
  2970. }
  2971. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  2972. {
  2973. conn.Open();
  2974. SqlTransaction sqlTran = conn.BeginTransaction();
  2975. SqlCommand cmd = new SqlCommand();
  2976. cmd.Transaction = sqlTran;
  2977. cmd.Connection = conn;
  2978. try
  2979. {
  2980. string sql = string.Empty;
  2981. string Identification = Guid.NewGuid().ToString();
  2982. foreach (var item in JsonData)
  2983. {
  2984. if (string.IsNullOrEmpty(item.TransCode))
  2985. {
  2986. throw new Exception("调拨单号不能为空!");
  2987. }
  2988. //验证信息
  2989. sql = @"DECLARE @Status VARCHAR(10)
  2990. SELECT @Status=Status FROM ICSTransfer WHERE TransferNO='{0}' and WorkPoint='{1}' AND Type = '1'
  2991. IF (@Status IS NULL)
  2992. BEGIN
  2993. RAISERROR('{0} ',16,1);
  2994. RETURN
  2995. END
  2996. ELSE IF (@Status!='1')
  2997. BEGIN
  2998. RAISERROR('{0} ',16,1);
  2999. RETURN
  3000. END";
  3001. sql = string.Format(sql, item.TransCode, item.WorkPoint);
  3002. DBHelper.ExecuteNonQuery(sql, cmd);
  3003. foreach (var itemInfo in item.Detail)
  3004. {
  3005. //验证仓库库位信息
  3006. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouse a WHERE a.WarehouseCode='{0}' AND a.WorkPoint='{1}')
  3007. BEGIN
  3008. RAISERROR('{0} ',16,1);
  3009. RETURN
  3010. END
  3011. IF NOT EXISTS(SELECT a.ID FROM ICSLocation a WHERE a.LocationCode='{2}' AND a.WorkPoint='{1}')
  3012. BEGIN
  3013. RAISERROR('{2} ',16,1);
  3014. RETURN
  3015. END
  3016. IF NOT EXISTS(SELECT a.ID
  3017. FROM ICSWareHouse a
  3018. INNER JOIN ICSLocation b ON a.ID=b.WHID AND a.WorkPoint=b.WorkPoint
  3019. WHERE a.WarehouseCode='{0}' AND a.WorkPoint='{1}' AND b.LocationCode='{2}')
  3020. BEGIN
  3021. RAISERROR('{0} {2} ',16,1);
  3022. RETURN
  3023. END";
  3024. sql = string.Format(sql, itemInfo.WarehouseCode, item.WorkPoint, itemInfo.LocationCode);
  3025. DBHelper.ExecuteNonQuery(sql, cmd);
  3026. //更新源头单据信息
  3027. ICSWareHouseService.OneStepTransferDocIn(item.TransCode, item.TransSequence, item.WorkPoint, itemInfo.CurrentQuantity, cmd);
  3028. //更新条码信息
  3029. ICSWareHouseLotInfoService.WareHouseLotInfoTransfer(Identification, item.TransCode, item.TransSequence, itemInfo.WarehouseCode, itemInfo.LocationCode, itemInfo.LotNo, itemInfo.CurrentQuantity, item.User, item.WorkPoint, "6", "21", cmd);
  3030. }
  3031. }
  3032. ICSWareHouseService.OneStepTransferDocInERP(EnumHelper.GetEnumDescription<TransTypeEnum>(TransTypeEnum.OneStepTransferDocIn), Identification, cmd);
  3033. DataTable table = GetData(Identification, 3, cmd);
  3034. cmd.Transaction.Commit();
  3035. return table;
  3036. }
  3037. catch (Exception ex)
  3038. {
  3039. if (cmd.Transaction != null)
  3040. cmd.Transaction.Rollback();
  3041. log.Error(ex.Message);
  3042. throw new Exception(ex.Message);
  3043. }
  3044. finally
  3045. {
  3046. if (conn.State == ConnectionState.Open)
  3047. {
  3048. conn.Close();
  3049. }
  3050. conn.Dispose();
  3051. }
  3052. }
  3053. }
  3054. #endregion
  3055. #region 移库
  3056. /// <summary>
  3057. /// 移库
  3058. /// </summary>
  3059. /// <param name="JsonData"></param>
  3060. /// <returns></returns>
  3061. public static DataTable LibraryUpdate(List<ICSLibraryModel> JsonData)
  3062. {
  3063. if (JsonData.Count <= 0)
  3064. {
  3065. throw new Exception("传送数据为空!");
  3066. }
  3067. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  3068. {
  3069. conn.Open();
  3070. SqlTransaction sqlTran = conn.BeginTransaction();
  3071. SqlCommand cmd = new SqlCommand();
  3072. cmd.Transaction = sqlTran;
  3073. cmd.Connection = conn;
  3074. try
  3075. {
  3076. string sql = string.Empty;
  3077. string Identification = Guid.NewGuid().ToString();
  3078. foreach (var item in JsonData)
  3079. {
  3080. if (string.IsNullOrEmpty(item.LotNo))
  3081. {
  3082. throw new Exception("条码不能为空!");
  3083. }
  3084. //验证仓库库位信息
  3085. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouse a WHERE a.WarehouseCode='{0}' AND a.WorkPoint='{1}')
  3086. BEGIN
  3087. RAISERROR('{0} ',16,1);
  3088. RETURN
  3089. END
  3090. IF NOT EXISTS(SELECT a.ID FROM ICSLocation a WHERE a.LocationCode='{2}' AND a.WorkPoint='{1}')
  3091. BEGIN
  3092. RAISERROR('{2} ',16,1);
  3093. RETURN
  3094. END
  3095. IF NOT EXISTS(SELECT a.ID
  3096. FROM ICSWareHouse a
  3097. INNER JOIN ICSLocation b ON a.ID=b.WHID AND a.WorkPoint=b.WorkPoint
  3098. WHERE a.WarehouseCode='{0}' AND a.WorkPoint='{1}' AND b.LocationCode='{2}')
  3099. BEGIN
  3100. RAISERROR('{0} {2} ',16,1);
  3101. RETURN
  3102. END";
  3103. sql = string.Format(sql, item.WarehouseCode, item.WorkPoint, item.LocationCode);
  3104. DBHelper.ExecuteNonQuery(sql, cmd);
  3105. //更新条码信息
  3106. ICSWareHouseLotInfoService.WareHouseLotInfoLibrary(Identification, item.TransCode, item.TransSequence, item.WarehouseCode, item.LocationCode, item.LotNo, item.User, item.WorkPoint, "7", "29", cmd);
  3107. }
  3108. DataTable table = GetData(Identification, 3, cmd);
  3109. cmd.Transaction.Commit();
  3110. return table;
  3111. }
  3112. catch (Exception ex)
  3113. {
  3114. if (cmd.Transaction != null)
  3115. cmd.Transaction.Rollback();
  3116. log.Error(ex.Message);
  3117. throw new Exception(ex.Message);
  3118. }
  3119. finally
  3120. {
  3121. if (conn.State == ConnectionState.Open)
  3122. {
  3123. conn.Close();
  3124. }
  3125. conn.Dispose();
  3126. }
  3127. }
  3128. }
  3129. #endregion
  3130. #region 合并
  3131. /// <summary>
  3132. /// 合并
  3133. /// </summary>
  3134. /// <param name="JsonData"></param>
  3135. /// <returns></returns>
  3136. public static DataTable LOTMergeCreate(List<LOTCreateIModel> JsonData)
  3137. {
  3138. if (JsonData.Count <= 0)
  3139. {
  3140. throw new Exception("传送数据为空!");
  3141. }
  3142. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  3143. {
  3144. conn.Open();
  3145. SqlTransaction sqlTran = conn.BeginTransaction();
  3146. SqlCommand cmd = new SqlCommand();
  3147. cmd.Transaction = sqlTran;
  3148. cmd.Connection = conn;
  3149. try
  3150. {
  3151. string Identification = Guid.NewGuid().ToString();
  3152. foreach (var item in JsonData)
  3153. {
  3154. if (string.IsNullOrEmpty(item.LotNo))
  3155. {
  3156. throw new Exception("条码不能为空!");
  3157. }
  3158. else if (item.detail.Count <= 0)
  3159. {
  3160. throw new Exception("明细信息不能为空!");
  3161. }
  3162. //合并前日志
  3163. ICSWareHouseLotInfoService.WareHouseLotInfoLog(Identification, item.LotNo, item.User, item.WorkPoint, "5", Convert.ToInt32(TransTypeEnum.LOTMergeBefore).ToString(), cmd);
  3164. foreach (var info in item.detail)
  3165. {
  3166. //合并前日志
  3167. ICSWareHouseLotInfoService.WareHouseLotInfoLog(Identification, info.CurrentLotNo, item.User, item.WorkPoint, "5", Convert.ToInt32(TransTypeEnum.LOTMergeBefore).ToString(), cmd);
  3168. //更新条码信息
  3169. ICSWareHouseLotInfoService.WareHouseLotInfoMerge(Identification, item.LotNo, info.CurrentLotNo, info.CurrentQuantity, item.User, item.WorkPoint, "5", Convert.ToInt32(TransTypeEnum.LOTMergeAfter).ToString(), cmd);
  3170. }
  3171. //合并后日志
  3172. ICSWareHouseLotInfoService.WareHouseLotInfoLog(Identification, item.LotNo, item.User, item.WorkPoint, "5", Convert.ToInt32(TransTypeEnum.LOTMergeAfter).ToString(), cmd);
  3173. }
  3174. DataTable table = GetData(Identification, 1, cmd);
  3175. cmd.Transaction.Commit();
  3176. return table;
  3177. }
  3178. catch (Exception ex)
  3179. {
  3180. if (cmd.Transaction != null)
  3181. cmd.Transaction.Rollback();
  3182. log.Error(ex.Message);
  3183. throw new Exception(ex.Message);
  3184. }
  3185. finally
  3186. {
  3187. if (conn.State == ConnectionState.Open)
  3188. {
  3189. conn.Close();
  3190. }
  3191. conn.Dispose();
  3192. }
  3193. }
  3194. }
  3195. #endregion
  3196. #region 拆分
  3197. /// <summary>
  3198. /// 拆分
  3199. /// </summary>
  3200. /// <param name="JsonData"></param>
  3201. /// <returns></returns>
  3202. public static DataTable LOTSplitCreate(List<LOTCreateIModel> JsonData)
  3203. {
  3204. if (JsonData.Count <= 0)
  3205. {
  3206. throw new Exception("传送数据为空!");
  3207. }
  3208. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  3209. {
  3210. conn.Open();
  3211. SqlTransaction sqlTran = conn.BeginTransaction();
  3212. SqlCommand cmd = new SqlCommand();
  3213. cmd.Transaction = sqlTran;
  3214. cmd.Connection = conn;
  3215. try
  3216. {
  3217. string Identification = Guid.NewGuid().ToString();
  3218. foreach (var item in JsonData)
  3219. {
  3220. if (string.IsNullOrEmpty(item.LotNo))
  3221. {
  3222. throw new Exception("条码不能为空!");
  3223. }
  3224. else if (item.detail.Count <= 0)
  3225. {
  3226. throw new Exception("明细信息不能为空!");
  3227. }
  3228. //拆分前日志
  3229. ICSWareHouseLotInfoService.WareHouseLotInfoLog(Identification, item.LotNo, item.User, item.WorkPoint, "4", Convert.ToInt32(TransTypeEnum.LOTSplitBefore).ToString(), cmd);
  3230. foreach (var info in item.detail)
  3231. {
  3232. //更新条码信息
  3233. ICSWareHouseLotInfoService.WareHouseLotInfoSplit(Identification, item.LotNo, info.CurrentLotNo, info.CurrentQuantity, item.User, item.WorkPoint, "4", Convert.ToInt32(TransTypeEnum.LOTSplitAfter).ToString(), cmd);
  3234. }
  3235. //拆分后日志
  3236. ICSWareHouseLotInfoService.WareHouseLotInfoLog(Identification, item.LotNo, item.User, item.WorkPoint, "4", Convert.ToInt32(TransTypeEnum.LOTSplitAfter).ToString(), cmd);
  3237. }
  3238. DataTable table = GetData(Identification, 1, cmd);
  3239. cmd.Transaction.Commit();
  3240. return table;
  3241. }
  3242. catch (Exception ex)
  3243. {
  3244. if (cmd.Transaction != null)
  3245. cmd.Transaction.Rollback();
  3246. log.Error(ex.Message);
  3247. throw new Exception(ex.Message);
  3248. }
  3249. finally
  3250. {
  3251. if (conn.State == ConnectionState.Open)
  3252. {
  3253. conn.Close();
  3254. }
  3255. conn.Dispose();
  3256. }
  3257. }
  3258. }
  3259. #endregion
  3260. /// <summary>
  3261. /// 获取出入库记录信息
  3262. /// </summary>
  3263. /// <param name="Identification"></param>
  3264. /// <param name="type">1:入库,2:出库,3:调拨</param>
  3265. /// <param name="cmd"></param>
  3266. /// <returns></returns>
  3267. private static DataTable GetData(string Identification, int type, SqlCommand cmd)
  3268. {
  3269. #region SLQ
  3270. string sql = @"SELECT log.ID,
  3271. log.TransCode,
  3272. log.TransSequence,
  3273. log.LotNo,
  3274. log.InvCode,
  3275. inv.InvName,
  3276. inv.InvStd,
  3277. log.Quantity,
  3278. inv.InvUnit,
  3279. log.Quantity*lot.AmountRate AS Amount,
  3280. inv.AmountUnit,
  3281. {1}
  3282. ext.ProjectCode,
  3283. CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  3284. ext.Version,
  3285. ext.Brand,
  3286. ext.cFree1,
  3287. ext.cFree2,
  3288. ext.cFree3,
  3289. ext.cFree4,
  3290. ext.cFree5,
  3291. ext.cFree6,
  3292. ext.cFree7,
  3293. ext.cFree8,
  3294. ext.cFree9,
  3295. ext.cFree10,
  3296. type.Name AS TransType,
  3297. log.MUSER AS [User],
  3298. log.MTIME AS [MTime]
  3299. FROM ICSWareHouseLotInfoLog log
  3300. LEFT JOIN ICSType type ON type.TableCode='ICSWareHouseLotInfoLog' AND type.ColumnCode='BusinessCode' AND log.BusinessCode=type.Code AND log.WorkPoint=type.WorkPoint
  3301. INNER JOIN ICSInventoryLot lot ON log.LotNo=lot.LotNo AND log.WorkPoint=lot.WorkPoint
  3302. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3303. INNER JOIN ICSInventory inv ON log.InvCode=inv.InvCode AND log.WorkPoint=inv.WorkPoint
  3304. {2}
  3305. LEFT JOIN ICSInventoryBatchEnable invBat ON log.InvCode=invBat.InvCode AND log.FromWarehouseCode=invBat.WHCode AND log.WorkPoint=invBat.WorkPoint
  3306. WHERE log.Identification='{0}'";
  3307. #endregion
  3308. string columns = @"log.ToWarehouseCode AS WHCode,
  3309. log.ToLocationCode AS LocationCode,
  3310. wh.WarehouseName AS WHName,
  3311. loc.LocationName AS LocationName,";
  3312. string tables = @"INNER JOIN ICSWarehouse wh ON log.ToWarehouseCode=wh.WarehouseCode AND log.WorkPoint=wh.WorkPoint
  3313. INNER JOIN ICSLocation loc ON log.ToLocationCode=loc.LocationCode AND log.WorkPoint=loc.WorkPoint";
  3314. if (type == 2)//出库
  3315. {
  3316. columns = @"log.FromWarehouseCode AS WHCode,
  3317. log.FromLocationCode AS LocationCode,
  3318. wh.WarehouseName AS WHName,
  3319. loc.LocationName AS LocationName,";
  3320. tables = @"INNER JOIN ICSWarehouse wh ON log.FromWarehouseCode=wh.WarehouseCode AND log.WorkPoint=wh.WorkPoint
  3321. INNER JOIN ICSLocation loc ON log.FromLocationCode=loc.LocationCode AND log.WorkPoint=loc.WorkPoint";
  3322. }
  3323. else if (type == 3)//调拨
  3324. {
  3325. columns = @"log.FromWarehouseCode AS FromWHCode,
  3326. log.FromLocationCode,
  3327. wh.WarehouseName AS FromWHName,
  3328. loc.LocationName AS FromLocationName,
  3329. log.ToWarehouseCode AS ToWHCode,
  3330. log.ToLocationCode,
  3331. whto.WarehouseName AS ToWHName,
  3332. locto.LocationName AS ToLocationName,";
  3333. tables = @"INNER JOIN ICSWarehouse wh ON log.FromWarehouseCode=wh.WarehouseCode AND log.WorkPoint=wh.WorkPoint
  3334. INNER JOIN ICSLocation loc ON log.FromLocationCode=loc.LocationCode AND log.WorkPoint=loc.WorkPoint
  3335. INNER JOIN ICSWarehouse whto ON log.ToWarehouseCode=whto.WarehouseCode AND log.WorkPoint=whto.WorkPoint
  3336. INNER JOIN ICSLocation locto ON log.ToLocationCode=locto.LocationCode AND log.WorkPoint=locto.WorkPoint";
  3337. }
  3338. sql = string.Format(sql, Identification, columns, tables);
  3339. return DBHelper.SQlReturnData(sql, cmd);
  3340. }
  3341. /// <summary>
  3342. /// 先进先出批次管控
  3343. /// </summary>
  3344. /// <param name="LotNo"></param>
  3345. /// <param name="WorkPoitCode"></param>
  3346. /// <param name="cmd"></param>
  3347. /// <returns></returns>
  3348. public static string CanOut(string LotNo, string WorkPoitCode, SqlCommand cmd)
  3349. {
  3350. try
  3351. {
  3352. string sql = @"DECLARE @CountNO INT
  3353. SET @CountNO=(
  3354. SELECT
  3355. COUNT(LotNO)
  3356. FROM
  3357. ICSWareHouseLotInfo a
  3358. WHERE CONVERT(varchar(100), MTIME, 23)<(SELECT CONVERT(varchar(100), MTIME, 23) FROM ICSWareHouseLotInfo WHERE INVCode=a.INVCode AND LotNO='{0}' AND WorkPoint='{1}')
  3359. AND WorkPoint='{1}' AND ISNULL(Quantity,0)>0
  3360. )
  3361. IF @CountNO>0
  3362. BEGIN
  3363. SELECT TOP 1 CASE a.F_ItemCode WHEN '0000501' THEN '1' WHEN '0000502' THEN '2' ELSE '3' END AS Type
  3364. FROM Sys_SRM_ItemsDetail a
  3365. INNER JOIN Sys_SRM_Items b ON a.F_ItemId=b.F_Id
  3366. WHERE b.F_EnCode='FIFO' AND a.F_EnabledMark='1'
  3367. ORDER BY a.F_SortCode DESC
  3368. END
  3369. ELSE
  3370. BEGIN
  3371. SELECT @CountNO
  3372. END";
  3373. //0 - 已经是最早的批次
  3374. //1 - 不管控
  3375. //2 - 提醒
  3376. //3 - 限制
  3377. sql = string.Format(sql, LotNo, WorkPoitCode);
  3378. var res = DBHelper.ExecuteScalar(sql, cmd).ToString();
  3379. if (string.IsNullOrWhiteSpace(res))
  3380. {
  3381. throw new Exception("查询管控信息失败!!");
  3382. }
  3383. else
  3384. return res;
  3385. }
  3386. catch (Exception ex)
  3387. {
  3388. throw new Exception(ex.Message);
  3389. }
  3390. }
  3391. #region 包装
  3392. /// <summary>
  3393. /// 查询包装信息
  3394. /// </summary>
  3395. /// <param name="JsonData"></param>
  3396. /// <returns></returns>
  3397. public static object boxGet(ICSContainer JsonData)
  3398. {
  3399. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  3400. {
  3401. conn.Open();
  3402. SqlTransaction sqlTran = conn.BeginTransaction();
  3403. SqlCommand cmd = new SqlCommand();
  3404. cmd.Transaction = sqlTran;
  3405. cmd.Connection = conn;
  3406. try
  3407. {
  3408. string sql = string.Empty;
  3409. //目标包装
  3410. if (JsonData.ToContainerCode != null)
  3411. {
  3412. sql = @"IF NOT EXISTS(SELECT ID FROM ICSContainer WHERE ContainerCODE ='{0}' and WorkPoint='{1}')
  3413. BEGIN
  3414. RAISERROR('{0} ',16,1);
  3415. RETURN
  3416. END
  3417. SELECT ContainerCode,ContainerName FROM ICSContainer WHERE ContainerCODE ='{0}' and WorkPoint='{1}'";
  3418. sql = string.Format(sql, JsonData.ToContainerCode, JsonData.WorkPoint);
  3419. }
  3420. ///原包装
  3421. else if (JsonData.FromContainerCode != null)
  3422. {
  3423. sql = @"IF NOT EXISTS(SELECT ID FROM ICSContainer WHERE ContainerCODE ='{0}' and WorkPoint='{1}')
  3424. BEGIN
  3425. RAISERROR('{0} ',16,1);
  3426. RETURN
  3427. END
  3428. IF NOT EXISTS(SELECT a.ID FROM ICSContainer a
  3429. INNER JOIN ICSContainerLot b ON a.ID=b.ContainerID
  3430. WHERE a.ContainerCODE ='{0}' and a.WorkPoint='{1}')
  3431. BEGIN
  3432. RAISERROR('{0} ',16,1);
  3433. RETURN
  3434. END
  3435. SELECT ContainerCode,ContainerName FROM ICSContainer WHERE ContainerCODE ='{0}' and WorkPoint='{1}'";
  3436. sql = string.Format(sql, JsonData.FromContainerCode, JsonData.WorkPoint);
  3437. }
  3438. else
  3439. {
  3440. throw new Exception("请传入包装条码!");
  3441. }
  3442. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  3443. cmd.Transaction.Commit();
  3444. return table;
  3445. }
  3446. catch (Exception ex)
  3447. {
  3448. if (cmd.Transaction != null)
  3449. cmd.Transaction.Rollback();
  3450. log.Error(ex.Message);
  3451. throw new Exception(ex.Message);
  3452. }
  3453. finally
  3454. {
  3455. if (conn.State == ConnectionState.Open)
  3456. {
  3457. conn.Close();
  3458. }
  3459. conn.Dispose();
  3460. }
  3461. }
  3462. }
  3463. /// <summary>
  3464. /// 修改包装信息
  3465. /// </summary>
  3466. /// <param name="JsonData"></param>
  3467. /// <returns></returns>
  3468. public static object boxUpdate(List<ICSContainer> JsonData)
  3469. {
  3470. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  3471. {
  3472. conn.Open();
  3473. SqlTransaction sqlTran = conn.BeginTransaction();
  3474. SqlCommand cmd = new SqlCommand();
  3475. cmd.Transaction = sqlTran;
  3476. cmd.Connection = conn;
  3477. try
  3478. {
  3479. foreach (ICSContainer container in JsonData)
  3480. {
  3481. string sql = @"IF NOT EXISTS(SELECT ID FROM ICSContainer WHERE ContainerCODE ='{0}' and WorkPoint='{1}')
  3482. BEGIN
  3483. RAISERROR('{0} ',16,1);
  3484. RETURN
  3485. END
  3486. IF NOT EXISTS(SELECT a.ID FROM ICSContainer a
  3487. INNER JOIN ICSContainerLot b ON a.ID=b.ContainerID
  3488. WHERE a.ContainerCODE ='{0}' and a.WorkPoint='{1}')
  3489. BEGIN
  3490. RAISERROR('{0} ',16,1);
  3491. RETURN
  3492. END
  3493. IF NOT EXISTS(SELECT ID FROM ICSContainer WHERE ContainerCODE ='{2}' and WorkPoint='{1}')
  3494. BEGIN
  3495. RAISERROR('{2} ',16,1);
  3496. RETURN
  3497. END
  3498. UPDATE b SET ContainerID=c.ID
  3499. FROM ICSContainer a
  3500. INNER JOIN ICSContainerLot b ON a.ID=b.ContainerID
  3501. INNER JOIN ICSContainer c ON c.ContainerCODE ='{2}' and a.WorkPoint=c.WorkPoint
  3502. WHERE a.ContainerCODE ='{0}' and a.WorkPoint='{1}'";
  3503. sql = string.Format(sql, container.FromContainerCode, container.WorkPoint, container.ToContainerCode);
  3504. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3505. {
  3506. throw new Exception("包装更新失败!");
  3507. }
  3508. }
  3509. cmd.Transaction.Commit();
  3510. return "操作成功!";
  3511. }
  3512. catch (Exception ex)
  3513. {
  3514. if (cmd.Transaction != null)
  3515. cmd.Transaction.Rollback();
  3516. log.Error(ex.Message);
  3517. throw new Exception(ex.Message);
  3518. }
  3519. finally
  3520. {
  3521. if (conn.State == ConnectionState.Open)
  3522. {
  3523. conn.Close();
  3524. }
  3525. conn.Dispose();
  3526. }
  3527. }
  3528. }
  3529. #endregion
  3530. #region 盘点
  3531. /// <summary>
  3532. /// 创建盘点单
  3533. /// </summary>
  3534. /// <param name="JsonData"></param>
  3535. /// <returns></returns>
  3536. public static DataTable CheckCreate(List<ICSCheck> JsonData)
  3537. {
  3538. if (JsonData.Count <= 0)
  3539. {
  3540. throw new Exception("传送数据为空!");
  3541. }
  3542. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  3543. {
  3544. conn.Open();
  3545. SqlTransaction sqlTran = conn.BeginTransaction();
  3546. SqlCommand cmd = new SqlCommand();
  3547. cmd.Transaction = sqlTran;
  3548. cmd.Connection = conn;
  3549. try
  3550. {
  3551. string Code = string.Empty;
  3552. string sql = string.Empty;
  3553. foreach (var item in JsonData)
  3554. {
  3555. if (string.IsNullOrEmpty(item.User))
  3556. {
  3557. throw new Exception("操作人不能为空!");
  3558. }
  3559. if (string.IsNullOrEmpty(item.WorkPoint))
  3560. {
  3561. throw new Exception("站点不能为空!");
  3562. }
  3563. //获取单号
  3564. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{0}' AND F_Location='{1}')
  3565. BEGIN
  3566. RAISERROR('{0} ',16,1);
  3567. RETURN
  3568. END
  3569. DECLARE @MaxNO INT,@date varchar(20)='CHK'+SUBSTRING(CONVERT(varchar(8), GETDATE(), 112), 1, 8)
  3570. SELECT @MaxNO=SUBSTRING(MAX(CheckCode),LEN(@date)+1,LEN(MAX(CheckCode))-LEN(@date))+1 FROM ICSCheck
  3571. WHERE SUBSTRING(CheckCode, 1, LEN(@date))=@date
  3572. IF @MaxNO IS NULL
  3573. BEGIN
  3574. SELECT @date+'00001' AS Code
  3575. END
  3576. ELSE
  3577. BEGIN
  3578. SELECT @date+REPLICATE('0',5-LEN(@MaxNO))+CAST(@MaxNO AS nvarchar(10)) AS Code
  3579. END ";
  3580. sql = string.Format(sql, item.User, item.WorkPoint);
  3581. Code = DBHelper.ExecuteScalar(sql, cmd).ToString();
  3582. //创建盘点单
  3583. foreach (var itemInfo in item.detail)
  3584. {
  3585. sql = @"IF NOT EXISTS(SELECT WarehouseCode FROM ICSWareHouseLotInfo WHERE WarehouseCode='{1}' AND WorkPoint='{3}')
  3586. BEGIN
  3587. RAISERROR('{1} ',16,1);
  3588. RETURN
  3589. END
  3590. INSERT INTO ICSCheck (ID,CheckCode,WHCode,InvCode,Status,Quantity,Amount,ActualQuantity,ActualAmount,MUSER,MUSERName,MTIME,WorkPoint)
  3591. SELECT NEWID(),'{0}',a.WarehouseCode,a.InvCode,'2',SUM(a.Quantity),0,0,0,b.F_Account,b.F_RealName,GETDATE(),a.WorkPoint
  3592. FROM ICSWareHouseLotInfo a
  3593. INNER JOIN Sys_SRM_User b ON b.F_Account='{2}' AND b.F_Location='{3}'
  3594. WHERE a.WarehouseCode='{1}' and a.WorkPoint='{3}'
  3595. GROUP BY a.WarehouseCode,a.InvCode,b.F_Account,b.F_RealName,a.WorkPoint";
  3596. sql = string.Format(sql, Code, itemInfo.WHCode, item.User, item.WorkPoint);
  3597. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3598. {
  3599. throw new Exception("盘点单创建失败!");
  3600. }
  3601. }
  3602. }
  3603. if (string.IsNullOrWhiteSpace(Code))
  3604. {
  3605. throw new Exception("盘点单单号不能为空!");
  3606. }
  3607. #region 查询返回数据
  3608. sql = @"SELECT a.ID,a.CheckCode,a.WHCode,a.ActualQuantity,a.ActualAmount,
  3609. a.InvCode,
  3610. inv.InvName,
  3611. inv.InvStd,
  3612. a.Quantity,
  3613. inv.InvUnit,
  3614. a.Amount,
  3615. inv.AmountUnit,
  3616. a.MUSER AS [User],
  3617. a.MTIME AS [MTime]
  3618. FROM ICSCheck a
  3619. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3620. WHERE a.CheckCode='{0}'";
  3621. sql = string.Format(sql, Code);
  3622. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  3623. #endregion
  3624. cmd.Transaction.Commit();
  3625. return data;
  3626. }
  3627. catch (Exception ex)
  3628. {
  3629. if (cmd.Transaction != null)
  3630. cmd.Transaction.Rollback();
  3631. log.Error(ex.Message);
  3632. throw new Exception(ex.Message);
  3633. }
  3634. finally
  3635. {
  3636. if (conn.State == ConnectionState.Open)
  3637. {
  3638. conn.Close();
  3639. }
  3640. conn.Dispose();
  3641. }
  3642. }
  3643. }
  3644. /// <summary>
  3645. /// 盘点扫描
  3646. /// </summary>
  3647. /// <param name="JsonData"></param>
  3648. /// <returns></returns>
  3649. public static DataTable LOTCheckCreate(List<ICSCheck> JsonData)
  3650. {
  3651. if (JsonData.Count <= 0)
  3652. {
  3653. throw new Exception("传送数据为空!");
  3654. }
  3655. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  3656. {
  3657. conn.Open();
  3658. SqlTransaction sqlTran = conn.BeginTransaction();
  3659. SqlCommand cmd = new SqlCommand();
  3660. cmd.Transaction = sqlTran;
  3661. cmd.Connection = conn;
  3662. try
  3663. {
  3664. string lots = string.Empty;
  3665. string sql = string.Empty;
  3666. string Identification = Guid.NewGuid().ToString();
  3667. foreach (var item in JsonData)
  3668. {
  3669. if (string.IsNullOrEmpty(item.User))
  3670. {
  3671. throw new Exception("操作人不能为空!");
  3672. }
  3673. if (string.IsNullOrEmpty(item.WorkPoint))
  3674. {
  3675. throw new Exception("站点不能为空!");
  3676. }
  3677. if (string.IsNullOrEmpty(item.CheckCode))
  3678. {
  3679. throw new Exception("盘点单号不能为空!");
  3680. }
  3681. //校验
  3682. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{0}' AND F_Location='{1}')
  3683. BEGIN
  3684. RAISERROR('{0} ',16,1);
  3685. RETURN
  3686. END
  3687. IF NOT EXISTS(SELECT ID FROM ICSCheck WHERE CheckCode='{2}' AND WorkPoint='{1}')
  3688. BEGIN
  3689. RAISERROR('{2} ',16,1);
  3690. RETURN
  3691. END";
  3692. sql = string.Format(sql, item.User, item.WorkPoint, item.CheckCode);
  3693. DBHelper.ExecuteNonQuery(sql, cmd);
  3694. //创建盘点单
  3695. foreach (var itemInfo in item.detail)
  3696. {
  3697. sql = @"IF NOT EXISTS(SELECT LotNo FROM ICSWareHouseLotInfo WHERE LotNo='{1}' AND WorkPoint='{3}')
  3698. BEGIN
  3699. RAISERROR('{1} ',16,1);
  3700. RETURN
  3701. END
  3702. IF EXISTS(SELECT LotNo FROM ICSCheckDetail WHERE CheckCode='{0}' AND LotNo='{1}' AND WorkPoint='{3}')
  3703. BEGIN
  3704. UPDATE a SET ActualQuantity='{4}',MUSER=b.F_Account,MUSERName=b.F_RealName,MTIME=GETDATE()
  3705. FROM ICSCheckDetail a
  3706. INNER JOIN Sys_SRM_User b ON b.F_Account='{2}' AND b.F_Location='{3}'
  3707. WHERE a.CheckCode='{0}' AND a.LotNo='{1}' and a.WorkPoint='{3}'
  3708. END
  3709. ELSE
  3710. BEGIN
  3711. INSERT INTO ICSCheckDetail (ID,CheckCode,LotNo,Quantity,ActualQuantity,MUSER,MUSERName,MTIME,WorkPoint)
  3712. SELECT NEWID(),'{0}',a.LotNo,a.Quantity,'{4}',b.F_Account,b.F_RealName,GETDATE(),a.WorkPoint
  3713. FROM ICSWareHouseLotInfo a
  3714. INNER JOIN Sys_SRM_User b ON b.F_Account='{2}' AND b.F_Location='{3}'
  3715. WHERE a.LotNo='{1}' and a.WorkPoint='{3}'
  3716. END";
  3717. sql = string.Format(sql, item.CheckCode, itemInfo.LotNo, item.User, item.WorkPoint, itemInfo.ActualQuantity);
  3718. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3719. {
  3720. throw new Exception("盘点扫描创建失败!");
  3721. }
  3722. #region 更新库存
  3723. if (item.UpdateWHLI)
  3724. {
  3725. ICSWareHouseLotInfoService.WareHouseLotInfoUpdate(Identification, item.CheckCode, "", itemInfo.LotNo, itemInfo.ActualQuantity, item.User, item.WorkPoint, "9", cmd);
  3726. }
  3727. #endregion
  3728. lots += "'" + itemInfo.LotNo + item.WorkPoint + "',";
  3729. }
  3730. if (string.IsNullOrWhiteSpace(lots))
  3731. {
  3732. throw new Exception("请传入条码信息!");
  3733. }
  3734. sql = @"UPDATE a SET ActualQuantity=b.ActualQuantity
  3735. FROM ICSCheck a
  3736. INNER JOIN (SELECT x.CheckCode,x.WorkPoint,y.WarehouseCode,y.InvCode,SUM(ActualQuantity) AS ActualQuantity FROM ICSCheckDetail x INNER JOIN ICSWareHouseLotInfo y ON x.LotNo=y.LotNo AND x.WorkPoint=y.WorkPoint WHERE x.LotNo+x.WorkPoint IN ({2}) GROUP BY x.CheckCode,x.WorkPoint,y.WarehouseCode,y.InvCode) b ON a.CheckCode=b.CheckCode AND a.WorkPoint=b.WorkPoint AND a.WHCode=b.WarehouseCode AND a.InvCode=b.InvCode
  3737. WHERE a.CheckCode='{0}' and a.WorkPoint='{1}'";
  3738. sql = string.Format(sql, item.CheckCode, item.WorkPoint, lots.Substring(0, lots.Length - 1));
  3739. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3740. {
  3741. throw new Exception("盘点扫描更新盘点单失败!");
  3742. }
  3743. }
  3744. #region 查询返回数据
  3745. sql = @"SELECT x.ID,x.CheckCode,y.WarehouseCode AS WHCode,x.LotNo,
  3746. y.InvCode,
  3747. inv.InvName,
  3748. inv.InvStd,
  3749. x.Quantity,x.ActualQuantity,
  3750. inv.InvUnit,
  3751. x.MUSER AS [User],
  3752. x.MTIME AS [MTime]
  3753. FROM ICSCheckDetail x
  3754. INNER JOIN ICSWareHouseLotInfo y ON x.LotNo=y.LotNo AND x.WorkPoint=y.WorkPoint
  3755. INNER JOIN ICSInventory inv ON y.InvCode=inv.InvCode AND y.WorkPoint=inv.WorkPoint
  3756. WHERE x.LotNo+x.WorkPoint IN ({0})";
  3757. sql = string.Format(sql, lots.Substring(0, lots.Length - 1));
  3758. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  3759. #endregion
  3760. cmd.Transaction.Commit();
  3761. return data;
  3762. }
  3763. catch (Exception ex)
  3764. {
  3765. if (cmd.Transaction != null)
  3766. cmd.Transaction.Rollback();
  3767. log.Error(ex.Message);
  3768. throw new Exception(ex.Message);
  3769. }
  3770. finally
  3771. {
  3772. if (conn.State == ConnectionState.Open)
  3773. {
  3774. conn.Close();
  3775. }
  3776. conn.Dispose();
  3777. }
  3778. }
  3779. }
  3780. #endregion
  3781. #region 多语言
  3782. /// <summary>
  3783. /// 多语言查询
  3784. /// </summary>
  3785. /// <param name="JsonData"></param>
  3786. /// <returns></returns>
  3787. public static DataTable PromptInformationGet(WMSBarCoreModel JsonData)
  3788. {
  3789. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  3790. {
  3791. conn.Open();
  3792. SqlTransaction sqlTran = conn.BeginTransaction();
  3793. SqlCommand cmd = new SqlCommand();
  3794. cmd.Transaction = sqlTran;
  3795. cmd.Connection = conn;
  3796. try
  3797. {
  3798. string sql = @"select cnValue AS Name,Code from Sys_Language where 1=1";
  3799. if (!string.IsNullOrWhiteSpace(JsonData.Code))
  3800. {
  3801. sql += " and Code='{0}'";
  3802. }
  3803. sql = string.Format(sql, JsonData.Code);
  3804. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  3805. cmd.Transaction.Commit();
  3806. return data;
  3807. }
  3808. catch (Exception ex)
  3809. {
  3810. if (cmd.Transaction != null)
  3811. cmd.Transaction.Rollback();
  3812. log.Error(ex.Message);
  3813. throw new Exception(ex.Message);
  3814. }
  3815. finally
  3816. {
  3817. if (conn.State == ConnectionState.Open)
  3818. {
  3819. conn.Close();
  3820. }
  3821. conn.Dispose();
  3822. }
  3823. }
  3824. }
  3825. #endregion
  3826. #region 仓库/库位
  3827. /// <summary>
  3828. /// 仓库/库位
  3829. /// </summary>
  3830. /// <param name="JsonData"></param>
  3831. /// <returns></returns>
  3832. public static DataTable LocationGet(ICSLocation JsonData)
  3833. {
  3834. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  3835. {
  3836. conn.Open();
  3837. SqlTransaction sqlTran = conn.BeginTransaction();
  3838. SqlCommand cmd = new SqlCommand();
  3839. cmd.Transaction = sqlTran;
  3840. cmd.Connection = conn;
  3841. try
  3842. {
  3843. string sql = @"IF NOT EXISTS(SELECT LocationCode FROM ICSLocation a where LocationCode='{0}' AND a.WorkPoint='{1}')
  3844. BEGIN
  3845. RAISERROR('{0} ',16,1);
  3846. RETURN
  3847. END
  3848. IF NOT EXISTS(SELECT LocationCode FROM ICSLocation a INNER JOIN ICSWarehouse b on a.WHID=b.ID and a.WorkPoint=b.WorkPoint where LocationCode='{0}' AND a.WorkPoint='{1}')
  3849. BEGIN
  3850. RAISERROR('{0} ',16,1);
  3851. RETURN
  3852. END
  3853. IF NOT EXISTS(SELECT LocationCode FROM ICSLocation a INNER JOIN ICSWarehouse b on a.WHID=b.ID and a.WorkPoint=b.WorkPoint where LocationCode='{0}' AND a.WorkPoint='{1}' and b.Enable='1')
  3854. BEGIN
  3855. RAISERROR('{0} ',16,1);
  3856. RETURN
  3857. END
  3858. SELECT
  3859. LocationCode,
  3860. LocationName ,
  3861. WarehouseCode,
  3862. WarehouseName
  3863. FROM ICSLocation a
  3864. INNER JOIN ICSWarehouse b on a.WHID=b.ID and a.WorkPoint=b.WorkPoint where LocationCode='{0}' AND a.WorkPoint='{1}' and b.Enable='1'";
  3865. sql = string.Format(sql, JsonData.LocationCode,JsonData.WorkPoint);
  3866. DataTable data = DBHelper.SQlReturnData(sql, cmd);
  3867. cmd.Transaction.Commit();
  3868. return data;
  3869. }
  3870. catch (Exception ex)
  3871. {
  3872. if (cmd.Transaction != null)
  3873. cmd.Transaction.Rollback();
  3874. log.Error(ex.Message);
  3875. throw new Exception(ex.Message);
  3876. }
  3877. finally
  3878. {
  3879. if (conn.State == ConnectionState.Open)
  3880. {
  3881. conn.Close();
  3882. }
  3883. conn.Dispose();
  3884. }
  3885. }
  3886. }
  3887. #endregion
  3888. #region 登陆
  3889. public static object CheckLogin(Sys_SRM_User userModel)
  3890. {
  3891. using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
  3892. {
  3893. conn.Open();
  3894. SqlCommand cmd = new SqlCommand();
  3895. cmd.Connection = conn;
  3896. try
  3897. {
  3898. string sql = @"select F_Account from Sys_SRM_User where F_Account='{0}' and F_Location='{1}' and F_EnabledMark='1'";//已经启用的账号
  3899. sql = string.Format(sql, userModel.UserCode, userModel.WorkPoint);
  3900. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  3901. if (dt != null && dt.Rows.Count > 0)//查询的数据不为空
  3902. {
  3903. sql = @" select a.[F_Id] as UserId
  3904. ,[F_Account] as userCode
  3905. ,[F_RealName] as UserName
  3906. ,[F_NickName]
  3907. ,b.F_UserPassword
  3908. ,b.F_UserSecretkey
  3909. ,[F_HeadIcon]
  3910. ,[F_Gender]
  3911. ,[F_Birthday]
  3912. ,[F_MobilePhone]
  3913. ,[F_Email]
  3914. ,[F_WeChat]
  3915. ,[F_ManagerId]
  3916. ,[F_SecurityLevel]
  3917. ,[F_Signature]
  3918. ,[F_OrganizeId]
  3919. ,[F_DepartmentId]
  3920. ,[F_RoleId]
  3921. ,[F_DutyId]
  3922. ,[F_IsAdministrator]
  3923. ,[F_SortCode]
  3924. ,[F_DeleteMark]
  3925. ,[F_EnabledMark]
  3926. ,[F_Description]
  3927. ,[F_CreatorTime]
  3928. ,[F_CreatorUserId]
  3929. ,[F_LastModifyTime]
  3930. ,[F_LastModifyUserId]
  3931. ,[F_DeleteTime]
  3932. ,[F_DeleteUserId]
  3933. ,[F_Location] as WorkPoint
  3934. ,[F_VenCode]
  3935. from Sys_SRM_User a
  3936. left join Sys_SRM_UserLogOn b on b.F_UserId=a.F_Id
  3937. where F_Account='{0}' and F_Location='{1}' and F_EnabledMark='1'";
  3938. sql = string.Format(sql, userModel.UserCode, userModel.WorkPoint);
  3939. dt = DBHelper.SQlReturnData(sql, cmd);
  3940. IList<UserLogOnEntity> users = DBHelper.ModelConvertHelper<UserLogOnEntity>.ConvertToModel(dt);
  3941. // string dbPassword = Md5.md5(DESEncrypt.Encrypt(userModel.F_UserPassword.ToLower(), item.F_UserSecretkey.ToLower()).ToLower(), 32).ToLower();
  3942. foreach (var item in users)
  3943. {
  3944. //string UserPassword = Md5.md5(DESEncrypt.Encrypt(userModel.F_UserPassword.ToLower()),16).ToLower();
  3945. string dbPassword = Md5.md5(DESEncrypt.Encrypt(userModel.UserPassword.ToLower(), item.F_UserSecretkey.ToLower()).ToLower(), 32).ToLower();
  3946. if (dbPassword == item.F_UserPassword)
  3947. {
  3948. string json = JsonConvert.SerializeObject(dt);
  3949. List<Sys_SRM_User> userLogOnEntity = JsonConvert.DeserializeObject<List<Sys_SRM_User>>(json);
  3950. return userLogOnEntity;
  3951. }
  3952. else
  3953. {
  3954. throw new Exception("密码不正确,请重新输入");
  3955. }
  3956. }
  3957. }
  3958. else
  3959. {
  3960. throw new Exception("用户名不存在,请重新输入!");
  3961. }
  3962. return null;
  3963. }
  3964. catch (Exception ex)
  3965. {
  3966. log.Error(ex.Message);
  3967. throw new Exception(ex.Message);
  3968. }
  3969. finally
  3970. {
  3971. if (conn.State == ConnectionState.Open)
  3972. {
  3973. conn.Close();
  3974. }
  3975. conn.Dispose();
  3976. }
  3977. }
  3978. }
  3979. #endregion
  3980. }
  3981. }