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.

4790 lines
310 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. using ICSSoft.Common;
  2. using ICSSoft.Entity;
  3. using Newtonsoft.Json;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Data.SqlClient;
  8. using System.Linq;
  9. using System.Net.Http;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace ICSSoft.DataProject
  13. {
  14. /// <summary>
  15. /// 使用中
  16. /// 更新库存表、日志表
  17. /// </summary>
  18. public class ICSWareHouseLotInfoService
  19. {
  20. private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  21. /// <summary>
  22. /// 分批
  23. /// </summary>
  24. /// <param name="Identification"></param>
  25. /// <param name="TransCode"></param>
  26. /// <param name="TransSequence"></param>
  27. /// <param name="LotNo"></param>
  28. /// <param name="Quantity"></param>
  29. /// <param name="User"></param>
  30. /// <param name="WorkPoint"></param>
  31. /// <param name="TransType"></param>
  32. /// <param name="BusinessCode"></param>
  33. /// <param name="cmd"></param>
  34. public static void WareHouseLotInfoInBatches(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  35. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID = "")
  36. {
  37. }
  38. /// <summary>
  39. /// 添加库存
  40. /// </summary>
  41. /// <param name="LocationCode"></param>
  42. /// <param name="LotNo"></param>
  43. /// <param name="Quantity"></param>
  44. /// <param name="User"></param>
  45. /// <param name="WorkPoint"></param>
  46. /// <param name="TransType"></param>
  47. /// <param name="BusinessCode"></param>
  48. /// <param name="cmd"></param>
  49. /// <param name="jointLotNo"></param>
  50. public static void WareHouseLotInfoUp(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  51. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID,string jointLotNo, string TransCode, string TransSequence)
  52. {
  53. try
  54. {
  55. #region 正常入库
  56. ///添加库存(原条码退回,更新库存;新条码直接入库)
  57. //stirng locationcode = "";
  58. string sql = string.Empty;
  59. string locationcode = "";
  60. if (BusinessCode != TransTypeEnum.SalesReturnBack.GetDescription<DBValue>())
  61. {
  62. if (string.IsNullOrWhiteSpace(LogID))
  63. {
  64. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  65. BEGIN
  66. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  67. RETURN
  68. END ";
  69. }
  70. else
  71. {
  72. sql = @"SELECT LocationCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  73. sql = string.Format(sql, LotNo, WorkPoint);
  74. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  75. if (dt == null || dt.Rows.Count <= 0)
  76. {
  77. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  78. }
  79. locationcode = dt.Rows[0]["LocationCode"].ToString();
  80. }
  81. }
  82. if (BusinessCode == TransTypeEnum.MOStockINByProductNoTrans.GetDescription<DBValue>())
  83. {
  84. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  85. BEGIN
  86. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  87. RETURN
  88. END
  89. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  90. BEGIN
  91. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  92. BEGIN
  93. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  94. From ICSWareHouseLotInfo a
  95. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  96. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  97. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  98. END
  99. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  100. BEGIN
  101. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  102. WHERE LotNo='{0}' AND WorkPoint='{1}'
  103. END
  104. ELSE IF('" + locationcode + @"' != '{4}')
  105. BEGIN
  106. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  107. RETURN
  108. END
  109. END
  110. ELSE
  111. BEGIN
  112. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  113. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  114. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  115. BEGIN
  116. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  117. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  118. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  119. BEGIN
  120. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  121. RETURN
  122. END
  123. END
  124. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  125. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  126. FROM ICSInventoryLot a
  127. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  128. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  129. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  130. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  131. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  132. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  133. END";
  134. }
  135. else
  136. {
  137. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  138. BEGIN
  139. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  140. RETURN
  141. END
  142. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  143. BEGIN
  144. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  145. BEGIN
  146. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  147. From ICSWareHouseLotInfo a
  148. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  149. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  150. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  151. END
  152. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  153. BEGIN
  154. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  155. WHERE LotNo='{0}' AND WorkPoint='{1}'
  156. END
  157. ELSE IF('" + locationcode + @"' != '{4}')
  158. BEGIN
  159. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  160. RETURN
  161. END
  162. END
  163. ELSE
  164. BEGIN
  165. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  166. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  167. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  168. BEGIN
  169. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  170. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  171. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  172. BEGIN
  173. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  174. RETURN
  175. END
  176. END
  177. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  178. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  179. FROM ICSInventoryLot a
  180. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  181. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  182. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  183. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  184. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  185. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  186. END";
  187. }
  188. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  189. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  190. {
  191. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  192. }
  193. if (BusinessCode == TransTypeEnum.MOStockINByProductNoTrans.GetDescription<DBValue>())
  194. {
  195. ///添加日志
  196. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  197. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  198. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  199. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  200. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  201. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  202. '','',c.WarehouseCode,c.LocationCode,'{6}',
  203. '','0','{4}','{5}','0','',
  204. '','','',f.F_Account ,f.F_RealName ,
  205. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  206. FROM ICSInventoryLot a
  207. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  208. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  209. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  210. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  211. ";
  212. }
  213. else
  214. {
  215. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  216. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  217. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  218. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  219. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  220. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  221. '','',c.WarehouseCode,c.LocationCode,'{6}',
  222. '','0','{4}','{5}','0','',
  223. '','','',f.F_Account ,f.F_RealName ,
  224. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  225. FROM ICSInventoryLot a
  226. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  227. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  228. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  229. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  230. ";
  231. }
  232. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  233. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  234. {
  235. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  236. }
  237. #endregion
  238. #region 管控方式是"料品"时
  239. ControlMode mode = ICSControlModeService.GetControlMode();
  240. if (mode.itemCode.Equals("ControlMode02"))
  241. {
  242. //查询是否存在料品管控的条码
  243. string sqlStrNew = @"SELECT a.ID,
  244. con.ContainerCode,
  245. con.ContainerName,
  246. a.LotNo,
  247. a.InvCode,
  248. inv.InvName,
  249. inv.InvStd,
  250. inv.InvUnit,-- {0}
  251. inv.AmountUnit,
  252. ext.ID AS ExtensionID,
  253. ext.ProjectCode,
  254. ext.Version,
  255. ext.BatchCode,
  256. ext.Brand,
  257. ext.cFree1,
  258. ext.cFree2,
  259. ext.cFree3,
  260. ext.cFree4,
  261. ext.cFree5,
  262. ext.cFree6,
  263. ext.cFree7,
  264. ext.cFree8,
  265. ext.cFree9,
  266. ext.cFree10,
  267. a.MUSER AS [ USER ],
  268. a.MTIME AS [ MTime ]
  269. FROM
  270. ICSInventoryLot a
  271. LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
  272. LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
  273. INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint
  274. INNER JOIN ICSExtension ext ON a.ExtensionID = ext.ID AND a.WorkPoint = ext.WorkPoint
  275. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  276. sqlStrNew = string.Format(sqlStrNew, jointLotNo, WorkPoint);
  277. DataTable table = DBHelper.SQlReturnData(sqlStrNew, cmd);
  278. string json = JsonConvert.SerializeObject(table);
  279. List<LotNoMode> modelNew = JsonConvert.DeserializeObject<List<LotNoMode>>(json);
  280. //当不存在料品管控条码时,生成新条码
  281. if (!(modelNew.Count > 0))
  282. {
  283. //获取旧条码的信息
  284. string jsonStr = ICSControlModeService.QueryLotNo(LotNo, WorkPoint);
  285. List<LotNoMode> model = JsonConvert.DeserializeObject<List<LotNoMode>>(jsonStr);
  286. //在条码表中插入一条新数据,在条码表中插入一条新数据,并在库存表中添加新数据
  287. LotNoMode lotNoMode = model[0];
  288. CreateLotNo(jointLotNo, Quantity, "", "", WorkPoint, Identification, User, lotNoMode.InvCode, BusinessCode, lotNoMode.ProjectCode, lotNoMode.BatchCode,
  289. lotNoMode.Version, lotNoMode.Brand, lotNoMode.cFree1, lotNoMode.cFree2, lotNoMode.cFree3, lotNoMode.cFree4, lotNoMode.cFree5, lotNoMode.cFree6, lotNoMode.cFree7,
  290. lotNoMode.cFree8, lotNoMode.cFree9, lotNoMode.cFree10, cmd, language, LocationCode, LotNo);
  291. }
  292. try
  293. {
  294. //合并前日志
  295. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  296. TransTypeEnum.LOTMergeBefore.GetDescription<DBValue>(),"", cmd, language);
  297. //更新目标条码库存
  298. WareHouseLotInfoMerge(Identification, jointLotNo, LotNo, Quantity, User, WorkPoint, "2",
  299. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), cmd, language);
  300. //合并后日志
  301. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  302. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), "",cmd, language);
  303. }
  304. catch (Exception)
  305. {
  306. throw;
  307. }
  308. }
  309. #endregion
  310. #region 成品(生产)入库,倒冲
  311. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
  312. {
  313. #region sql
  314. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  315. SELECT
  316. c.MOCode AS TransCode,
  317. a.MODetailID AS DetailID,
  318. a.InvCode,
  319. b.InvName,
  320. b.InvStd,
  321. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  322. a.Amount,
  323. a.Sequence AS TransSequence,
  324. a.IssueQuantity,
  325. c.Sequence,
  326. inv.InvUnit,
  327. 0 AS LocationQty,
  328. inv.AmountUnit,
  329. a.ExtensionID,
  330. a.WorkPoint,
  331. ext.ProjectCode,
  332. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  333. ext.Version,
  334. ext.Brand,
  335. ext.cFree1,
  336. ext.cFree2,
  337. ext.cFree3,
  338. ext.cFree4,
  339. ext.cFree5,
  340. ext.cFree6,
  341. ext.cFree7,
  342. ext.cFree8,
  343. ext.cFree9,
  344. ext.cFree10
  345. INTO #maintemp
  346. FROM
  347. ICSMOPick a
  348. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  349. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  350. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  351. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  352. INNER JOIN (
  353. SELECT a.MOCode,a.Sequence,a.WorkPoint
  354. FROM ICSMO a
  355. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  356. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  357. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  358. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  359. WHERE a.SupplyType='1'
  360. GROUP BY c.MOCode,a.ParentQuantity,a.Quantity,c.Quantity,a.InvCode,b.InvName,b.InvStd,a.WhCode,a.ExtensionID,a.WorkPoint,inv.BatchEnable,a.MODetailID,a.Amount,a.Sequence,a.IssueQuantity,inv.InvName,inv.InvCode,inv.InvUnit,inv.AmountUnit,c.Sequence,
  361. ext.ProjectCode,ext.BatchCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10;
  362. select * into #resulttemp from #maintemp
  363. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  364. delete from #resulttemp
  365. -- 2.maintemp barcodetemp
  366. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  367. (select #maintemp.invcode from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC
  368. -- 3.maintemp ID barcodetemp
  369. BEGIN
  370. DECLARE @transSequence int;--
  371. DECLARE @qty int;--
  372. DECLARE @needqty int;--
  373. DECLARE @lotno VARCHAR(50);--
  374. DECLARE @DetailID VARCHAR(50);--ID
  375. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  376. OPEN tempCursor; --
  377. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  378. WHILE @@fetch_status=0
  379. BEGIN
  380. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  381. PRINT @transSequence
  382. WHILE @needqty>0
  383. BEGIN
  384. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  385. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  386. BEGIN
  387. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  388. BEGIN
  389. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  390. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  391. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  392. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  393. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  394. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  395. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  396. delete from #barcodetemp where lotno = @lotno
  397. SET @needqty=@needqty-@qty
  398. END
  399. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  400. BEGIN
  401. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  402. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  403. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  404. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  405. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  406. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  407. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  408. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  409. SET @needqty=@needqty-@qty
  410. END
  411. ELSE
  412. BEGIN
  413. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  414. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  415. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  416. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  417. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  418. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  419. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  420. SET @needqty=0
  421. END
  422. END
  423. END
  424. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  425. END
  426. CLOSE tempCursor
  427. DEALLOCATE tempCursor
  428. END
  429. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  430. --select * from #resulttemp
  431. DROP table #maintemp
  432. DROP table #resulttemp
  433. DROP table #barcodetemp";
  434. #endregion
  435. sql = String.Format(sql,LotNo,WorkPoint, Quantity);
  436. DataTable table = DBHelper.SQlReturnData(sql,cmd);
  437. string json = JsonConvert.SerializeObject(table);
  438. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  439. foreach (DownItemModel model in downItemModels)
  440. {
  441. if (model != null && model.LotNo == null || "" == model.LotNo)
  442. {
  443. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  444. }
  445. WareHouseLotInfoDown(Identification,model.TransCode,model.Sequence + "~" + model.TransSequence,model.LotNo,model.Quantity,User,WorkPoint,"12",BusinessCode,cmd,language,"","");
  446. //回写已领数量
  447. sql = @"UPDATE ICSMOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity+") WHERE MODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  448. sql = String.Format(sql,model.DetailID,model.TransSequence,WorkPoint);
  449. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  450. {
  451. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  452. }
  453. }
  454. }
  455. #endregion
  456. #region 委外入库,倒冲
  457. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>()))
  458. {
  459. #region sql
  460. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  461. SELECT
  462. c.OOCode AS TransCode,
  463. a.OODetailID AS DetailID,
  464. a.InvCode,
  465. b.InvName,
  466. b.InvStd,
  467. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  468. a.Amount,
  469. a.Sequence AS TransSequence,
  470. a.IssueQuantity,
  471. c.Sequence,
  472. inv.InvUnit,
  473. 0 AS LocationQty,
  474. inv.AmountUnit,
  475. a.ExtensionID,
  476. a.WorkPoint,
  477. ext.ProjectCode,
  478. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  479. ext.Version,
  480. ext.Brand,
  481. ext.cFree1,
  482. ext.cFree2,
  483. ext.cFree3,
  484. ext.cFree4,
  485. ext.cFree5,
  486. ext.cFree6,
  487. ext.cFree7,
  488. ext.cFree8,
  489. ext.cFree9,
  490. ext.cFree10
  491. INTO #maintemp
  492. FROM
  493. ICSOOPick a
  494. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  495. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  496. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  497. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  498. INNER JOIN (
  499. SELECT a.OOCode,a.Sequence,a.WorkPoint
  500. FROM ICSOutsourcingOrder a
  501. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  502. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  503. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  504. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  505. WHERE a.SupplyType='1'
  506. GROUP BY c.OOCode,a.ParentQuantity,a.Quantity,c.Quantity,a.InvCode,b.InvName,b.InvStd,a.WhCode,a.ExtensionID,a.WorkPoint,inv.BatchEnable,a.OODetailID,a.Amount,a.Sequence,a.IssueQuantity,inv.InvName,inv.InvCode,inv.InvUnit,inv.AmountUnit,c.Sequence,
  507. ext.ProjectCode,ext.BatchCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10;
  508. select * into #resulttemp from #maintemp
  509. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  510. delete from #resulttemp
  511. -- 2.maintemp barcodetemp
  512. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  513. (select #maintemp.invcode from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC
  514. -- 3.maintemp ID barcodetemp
  515. BEGIN
  516. DECLARE @transSequence int;--
  517. DECLARE @qty int;--
  518. DECLARE @needqty int;--
  519. DECLARE @lotno VARCHAR(50);--
  520. DECLARE @DetailID VARCHAR(50);--ID
  521. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  522. OPEN tempCursor; --
  523. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  524. WHILE @@fetch_status=0
  525. BEGIN
  526. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  527. PRINT @transSequence
  528. WHILE @needqty>0
  529. BEGIN
  530. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  531. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  532. BEGIN
  533. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  534. BEGIN
  535. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  536. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  537. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  538. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  539. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  540. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  541. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  542. delete from #barcodetemp where lotno = @lotno
  543. SET @needqty=@needqty-@qty
  544. END
  545. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  546. BEGIN
  547. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  548. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  549. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  550. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  551. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  552. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  553. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  554. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  555. SET @needqty=@needqty-@qty
  556. END
  557. ELSE
  558. BEGIN
  559. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  560. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  561. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  562. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  563. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  564. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  565. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  566. SET @needqty=0
  567. END
  568. END
  569. END
  570. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  571. END
  572. CLOSE tempCursor
  573. DEALLOCATE tempCursor
  574. END
  575. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  576. --select * from #resulttemp
  577. DROP table #maintemp
  578. DROP table #resulttemp
  579. DROP table #barcodetemp";
  580. #endregion
  581. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  582. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  583. string json = JsonConvert.SerializeObject(table);
  584. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  585. foreach (DownItemModel model in downItemModels)
  586. {
  587. if (model != null && model.LotNo == null || "" == model.LotNo)
  588. {
  589. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  590. }
  591. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "13", BusinessCode, cmd, language,"","");
  592. //回写已领数量
  593. sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity+") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  594. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  595. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  596. {
  597. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  598. }
  599. }
  600. }
  601. #endregion
  602. }
  603. catch (Exception)
  604. {
  605. throw;
  606. }
  607. }
  608. /// <summary>
  609. /// 添加库存(奥美专用)
  610. /// </summary>
  611. /// <param name="LocationCode"></param>
  612. /// <param name="LotNo"></param>
  613. /// <param name="Quantity"></param>
  614. /// <param name="User"></param>
  615. /// <param name="WorkPoint"></param>
  616. /// <param name="TransType"></param>
  617. /// <param name="BusinessCode"></param>
  618. /// <param name="cmd"></param>
  619. /// <param name="jointLotNo"></param>
  620. public static void WareHouseLotInfoUpAM(string Identification, string LocationCode, string LotNo, string Quantity, string User,
  621. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo,string TransCode,string TransSequence)
  622. {
  623. try
  624. {
  625. #region 正常入库
  626. ///添加库存(原条码退回,更新库存;新条码直接入库)
  627. //stirng locationcode = "";
  628. string sql = string.Empty;
  629. string locationcode = "";
  630. string newlocationcode = "";
  631. string amount = "";
  632. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  633. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  634. //sqql = string.Format(sqql, LotNo, WorkPoint);
  635. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  636. //amount = dtaa.Rows[0]["Amount"].ToString();
  637. //string cheksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot a
  638. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  639. // INNER JOIN ICSInventory d on a.InvCode=d.InvCode and a.WorkPoint=d.WorkPoint
  640. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.AmountEnable='1'";
  641. //cheksql = string.Format(cheksql, LotNo, WorkPoint);
  642. //DataTable dta = DBHelper.SQlReturnData(cheksql, cmd);
  643. //if (dta.Rows.Count > 0)
  644. //{
  645. // Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  646. //}
  647. if (BusinessCode != TransTypeEnum.SalesReturnBack.GetDescription<DBValue>())
  648. {
  649. if (string.IsNullOrWhiteSpace(LogID))
  650. {
  651. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  652. BEGIN
  653. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  654. RETURN
  655. END ";
  656. }
  657. else
  658. {
  659. sql = @"SELECT LocationCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  660. sql = string.Format(sql, LotNo, WorkPoint);
  661. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  662. if (dt == null || dt.Rows.Count <= 0)
  663. {
  664. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  665. }
  666. locationcode = dt.Rows[0]["LocationCode"].ToString();
  667. }
  668. }
  669. if(BusinessCode == TransTypeEnum.MOIssueDocNegative.GetDescription<DBValue>())
  670. {
  671. sql = @"SELECT FromLocationCode FROM ICSWareHouseLotInfoLog a WHERE LotNo='{0}' AND WorkPoint='{1}' AND ID='{2}'";
  672. sql = string.Format(sql, LotNo, WorkPoint,LogID);
  673. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  674. if (dt == null || dt.Rows.Count <= 0)
  675. {
  676. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  677. }
  678. newlocationcode = dt.Rows[0]["FromLocationCode"].ToString();
  679. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  680. BEGIN
  681. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  682. RETURN
  683. END
  684. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  685. BEGIN
  686. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  687. BEGIN
  688. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  689. From ICSWareHouseLotInfo a
  690. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  691. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  692. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  693. END
  694. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode=(select a.FromLocationCode FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='CP-41100212' AND a.WorkPoint='UFDATA_999_2021' AND a.id='{5}'
  695. AND a.FromLocationCode='" + locationcode + @"'))
  696. BEGIN
  697. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  698. WHERE LotNo='{0}' AND WorkPoint='{1}'
  699. END
  700. ELSE
  701. BEGIN
  702. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  703. RETURN
  704. END
  705. END
  706. ELSE
  707. BEGIN
  708. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  709. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  710. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  711. BEGIN
  712. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  713. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  714. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  715. BEGIN
  716. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  717. RETURN
  718. END
  719. END
  720. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  721. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  722. FROM ICSInventoryLot a
  723. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  724. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  725. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  726. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  727. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  728. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  729. END";
  730. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, newlocationcode, LogID);
  731. }
  732. else if (BusinessCode == TransTypeEnum.MOStockINByProductNoTrans.GetDescription<DBValue>())
  733. {
  734. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  735. BEGIN
  736. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  737. RETURN
  738. END
  739. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  740. BEGIN
  741. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  742. BEGIN
  743. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  744. From ICSWareHouseLotInfo a
  745. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  746. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  747. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  748. END
  749. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  750. BEGIN
  751. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  752. WHERE LotNo='{0}' AND WorkPoint='{1}'
  753. END
  754. ELSE IF('" + locationcode + @"' != '{4}')
  755. BEGIN
  756. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  757. RETURN
  758. END
  759. END
  760. ELSE
  761. BEGIN
  762. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  763. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  764. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  765. BEGIN
  766. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  767. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  768. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  769. BEGIN
  770. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  771. RETURN
  772. END
  773. END
  774. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  775. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  776. FROM ICSInventoryLot a
  777. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  778. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  779. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  780. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  781. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  782. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  783. END";
  784. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  785. }
  786. else
  787. {
  788. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  789. BEGIN
  790. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  791. RETURN
  792. END
  793. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  794. BEGIN
  795. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  796. BEGIN
  797. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  798. From ICSWareHouseLotInfo a
  799. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  800. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  801. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  802. END
  803. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  804. BEGIN
  805. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  806. WHERE LotNo='{0}' AND WorkPoint='{1}'
  807. END
  808. ELSE IF('" + locationcode + @"' != '{4}')
  809. BEGIN
  810. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  811. RETURN
  812. END
  813. END
  814. ELSE
  815. BEGIN
  816. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  817. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  818. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  819. BEGIN
  820. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  821. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  822. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  823. BEGIN
  824. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  825. RETURN
  826. END
  827. END
  828. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  829. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  830. FROM ICSInventoryLot a
  831. --INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  832. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  833. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  834. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  835. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  836. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  837. END";
  838. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  839. }
  840. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  841. {
  842. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  843. }
  844. if (BusinessCode == TransTypeEnum.MOIssueDocNegative.GetDescription<DBValue>())
  845. {
  846. ///添加日志
  847. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  848. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  849. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  850. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  851. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  852. SELECT NEWID(),'{3}','{8}','{9}',a.LotNo ,a.InvCode ,
  853. '','',c.WarehouseCode,c.LocationCode,'{6}',
  854. '','0','{4}','{5}','0','',
  855. '','','',f.F_Account ,f.F_RealName ,
  856. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  857. FROM ICSInventoryLot a
  858. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  859. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  860. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  861. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  862. ";
  863. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID,TransCode,TransSequence);
  864. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  865. {
  866. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  867. }
  868. }
  869. else if (BusinessCode == TransTypeEnum.MOStockINByProduct.GetDescription<DBValue>())
  870. {
  871. ///添加日志
  872. sql = @"IF EXISTS(SELECT 1 FROM ICSInventoryLot lot WHERE lot.LotNo='{0}' AND lot.WorkPoint='{1}' AND lot.Type=19)
  873. BEGIN
  874. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  875. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  876. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  877. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  878. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  879. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  880. '','',c.WarehouseCode,c.LocationCode,'{6}',
  881. '','0','{4}','{5}','0','',
  882. '','','',f.F_Account ,f.F_RealName ,
  883. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  884. FROM ICSInventoryLot a
  885. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  886. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  887. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  888. END
  889. ELSE
  890. BEGIN
  891. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  892. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  893. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  894. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  895. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  896. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  897. '','',c.WarehouseCode,c.LocationCode,'{6}',
  898. '','0','{4}','{5}','0','',
  899. '','','',f.F_Account ,f.F_RealName ,
  900. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  901. FROM ICSInventoryLot a
  902. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  903. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  904. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  905. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  906. END
  907. ";
  908. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  909. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  910. {
  911. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  912. }
  913. }
  914. else if (BusinessCode == TransTypeEnum.MOStockINByProductNoTrans.GetDescription<DBValue>())
  915. {
  916. ///添加日志
  917. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  918. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  919. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  920. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  921. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  922. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  923. '','',c.WarehouseCode,c.LocationCode,'{6}',
  924. '','0','{4}','{5}','0','',
  925. '','','',f.F_Account ,f.F_RealName ,
  926. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  927. FROM ICSInventoryLot a
  928. LEFT JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  929. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  930. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  931. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  932. ";
  933. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  934. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  935. {
  936. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  937. }
  938. }
  939. else if (BusinessCode == TransTypeEnum.OOStockINByProduct.GetDescription<DBValue>())
  940. {
  941. ///添加日志
  942. sql = @"IF EXISTS(SELECT 1 FROM ICSInventoryLot lot WHERE lot.LotNo='{0}' AND lot.WorkPoint='{1}' AND lot.Type=19)
  943. BEGIN
  944. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  945. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  946. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  947. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  948. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  949. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  950. '','',c.WarehouseCode,c.LocationCode,'{6}',
  951. '','0','{4}','{5}','0','',
  952. '','','',f.F_Account ,f.F_RealName ,
  953. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  954. FROM ICSInventoryLot a
  955. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  956. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  957. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  958. END
  959. ELSE
  960. BEGIN
  961. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  962. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  963. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  964. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  965. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  966. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  967. '','',c.WarehouseCode,c.LocationCode,'{6}',
  968. '','0','{4}','{5}','0','',
  969. '','','',f.F_Account ,f.F_RealName ,
  970. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  971. FROM ICSInventoryLot a
  972. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  973. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  974. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  975. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  976. END
  977. ";
  978. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  979. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  980. {
  981. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  982. }
  983. }
  984. else
  985. {
  986. ///添加日志
  987. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  988. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  989. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  990. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  991. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  992. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  993. '','',c.WarehouseCode,c.LocationCode,'{6}',
  994. '','0','{4}','{5}','0','',
  995. '','','',f.F_Account ,f.F_RealName ,
  996. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  997. FROM ICSInventoryLot a
  998. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  999. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1000. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1001. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1002. ";
  1003. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  1004. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1005. {
  1006. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1007. }
  1008. }
  1009. #endregion
  1010. #region 管控方式是"料品"时
  1011. ControlMode mode = ICSControlModeService.GetControlMode();
  1012. if (mode.itemCode.Equals("ControlMode02"))
  1013. {
  1014. //查询是否存在料品管控的条码
  1015. string sqlStrNew = @"SELECT a.ID,
  1016. con.ContainerCode,
  1017. con.ContainerName,
  1018. a.LotNo,
  1019. a.InvCode,
  1020. inv.InvName,
  1021. inv.InvStd,
  1022. inv.InvUnit,-- {0}
  1023. inv.AmountUnit,
  1024. ext.ID AS ExtensionID,
  1025. ext.ProjectCode,
  1026. ext.Version,
  1027. ext.BatchCode,
  1028. ext.Brand,
  1029. ext.cFree1,
  1030. ext.cFree2,
  1031. ext.cFree3,
  1032. ext.cFree4,
  1033. ext.cFree5,
  1034. ext.cFree6,
  1035. ext.cFree7,
  1036. ext.cFree8,
  1037. ext.cFree9,
  1038. ext.cFree10,
  1039. a.MUSER AS [ USER ],
  1040. a.MTIME AS [ MTime ]
  1041. FROM
  1042. ICSInventoryLot a
  1043. LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
  1044. LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
  1045. INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint
  1046. INNER JOIN ICSExtension ext ON a.ExtensionID = ext.ID AND a.WorkPoint = ext.WorkPoint
  1047. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  1048. sqlStrNew = string.Format(sqlStrNew, jointLotNo, WorkPoint);
  1049. DataTable table = DBHelper.SQlReturnData(sqlStrNew, cmd);
  1050. string json = JsonConvert.SerializeObject(table);
  1051. List<LotNoMode> modelNew = JsonConvert.DeserializeObject<List<LotNoMode>>(json);
  1052. //当不存在料品管控条码时,生成新条码
  1053. if (!(modelNew.Count > 0))
  1054. {
  1055. //获取旧条码的信息
  1056. string jsonStr = ICSControlModeService.QueryLotNo(LotNo, WorkPoint);
  1057. List<LotNoMode> model = JsonConvert.DeserializeObject<List<LotNoMode>>(jsonStr);
  1058. //在条码表中插入一条新数据,在条码表中插入一条新数据,并在库存表中添加新数据
  1059. LotNoMode lotNoMode = model[0];
  1060. CreateLotNo(jointLotNo, Quantity, "", "", WorkPoint, Identification, User, lotNoMode.InvCode, BusinessCode, lotNoMode.ProjectCode, lotNoMode.BatchCode,
  1061. lotNoMode.Version, lotNoMode.Brand, lotNoMode.cFree1, lotNoMode.cFree2, lotNoMode.cFree3, lotNoMode.cFree4, lotNoMode.cFree5, lotNoMode.cFree6, lotNoMode.cFree7,
  1062. lotNoMode.cFree8, lotNoMode.cFree9, lotNoMode.cFree10, cmd, language, LocationCode, LotNo);
  1063. }
  1064. try
  1065. {
  1066. //合并前日志
  1067. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  1068. TransTypeEnum.LOTMergeBefore.GetDescription<DBValue>(), "", cmd, language);
  1069. //更新目标条码库存
  1070. WareHouseLotInfoMerge(Identification, jointLotNo, LotNo, Quantity, User, WorkPoint, "2",
  1071. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), cmd, language);
  1072. //合并后日志
  1073. WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
  1074. TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), "", cmd, language);
  1075. }
  1076. catch (Exception)
  1077. {
  1078. throw;
  1079. }
  1080. }
  1081. #endregion
  1082. #region 成品(生产)入库,倒冲
  1083. if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
  1084. {
  1085. #region sql
  1086. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1087. SELECT
  1088. c.MOCode AS TransCode,
  1089. a.MODetailID AS DetailID,
  1090. a.InvCode,
  1091. b.InvName,
  1092. b.InvStd,
  1093. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  1094. a.Amount,
  1095. a.Sequence AS TransSequence,
  1096. a.IssueQuantity,
  1097. c.Sequence,
  1098. inv.InvUnit,
  1099. 0 AS LocationQty,
  1100. inv.AmountUnit,
  1101. a.ExtensionID,
  1102. a.WorkPoint,
  1103. ext.ProjectCode,
  1104. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1105. ext.Version,
  1106. ext.Brand,
  1107. ext.cFree1,
  1108. ext.cFree2,
  1109. ext.cFree3,
  1110. ext.cFree4,
  1111. ext.cFree5,
  1112. ext.cFree6,
  1113. ext.cFree7,
  1114. ext.cFree8,
  1115. ext.cFree9,
  1116. ext.cFree10
  1117. INTO #maintemp
  1118. FROM
  1119. ICSMOPick a
  1120. inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
  1121. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1122. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1123. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1124. INNER JOIN (
  1125. SELECT a.MOCode,a.Sequence,a.WorkPoint
  1126. FROM ICSMO a
  1127. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1128. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1129. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1130. ) temp ON c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1131. WHERE a.SupplyType='1'
  1132. GROUP BY c.MOCode,a.ParentQuantity,a.Quantity,c.Quantity,a.InvCode,b.InvName,b.InvStd,a.WhCode,a.ExtensionID,a.WorkPoint,inv.BatchEnable,a.MODetailID,a.Amount,a.Sequence,a.IssueQuantity,inv.InvName,inv.InvCode,inv.InvUnit,inv.AmountUnit,c.Sequence,
  1133. ext.ProjectCode,ext.BatchCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10;
  1134. select * into #resulttemp from #maintemp
  1135. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1136. delete from #resulttemp
  1137. -- 2.maintemp barcodetemp
  1138. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  1139. (select #maintemp.invcode from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC
  1140. -- 3.maintemp ID barcodetemp
  1141. BEGIN
  1142. DECLARE @transSequence int;--
  1143. DECLARE @qty int;--
  1144. DECLARE @needqty int;--
  1145. DECLARE @lotno VARCHAR(50);--
  1146. DECLARE @DetailID VARCHAR(50);--ID
  1147. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1148. OPEN tempCursor; --
  1149. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1150. WHILE @@fetch_status=0
  1151. BEGIN
  1152. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1153. PRINT @transSequence
  1154. WHILE @needqty>0
  1155. BEGIN
  1156. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1157. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1158. BEGIN
  1159. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1160. BEGIN
  1161. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1162. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1163. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1164. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1165. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1166. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1167. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1168. delete from #barcodetemp where lotno = @lotno
  1169. SET @needqty=@needqty-@qty
  1170. END
  1171. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1172. BEGIN
  1173. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1174. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1175. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1176. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1177. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1178. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1179. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1180. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1181. SET @needqty=@needqty-@qty
  1182. END
  1183. ELSE
  1184. BEGIN
  1185. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1186. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1187. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1188. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1189. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1190. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1191. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1192. SET @needqty=0
  1193. END
  1194. END
  1195. END
  1196. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1197. END
  1198. CLOSE tempCursor
  1199. DEALLOCATE tempCursor
  1200. END
  1201. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1202. --select * from #resulttemp
  1203. DROP table #maintemp
  1204. DROP table #resulttemp
  1205. DROP table #barcodetemp";
  1206. #endregion
  1207. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  1208. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1209. string json = JsonConvert.SerializeObject(table);
  1210. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  1211. foreach (DownItemModel model in downItemModels)
  1212. {
  1213. if (model != null && model.LotNo == null || "" == model.LotNo)
  1214. {
  1215. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1216. }
  1217. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "12", BusinessCode, cmd, language, "", "");
  1218. //回写已领数量
  1219. sql = @"UPDATE ICSMOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE MODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  1220. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  1221. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1222. {
  1223. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  1224. }
  1225. }
  1226. }
  1227. #endregion
  1228. #region 委外入库,倒冲
  1229. if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>()))
  1230. {
  1231. #region sql
  1232. sql = @"-- 1.创建临时表 初始单据数据 maintemp
  1233. SELECT
  1234. c.OOCode AS TransCode,
  1235. a.OODetailID AS DetailID,
  1236. a.InvCode,
  1237. b.InvName,
  1238. b.InvStd,
  1239. a.ParentQuantity/c.Quantity*{2} AS Quantity,
  1240. a.Amount,
  1241. a.Sequence AS TransSequence,
  1242. a.IssueQuantity,
  1243. c.Sequence,
  1244. inv.InvUnit,
  1245. 0 AS LocationQty,
  1246. inv.AmountUnit,
  1247. a.ExtensionID,
  1248. a.WorkPoint,
  1249. ext.ProjectCode,
  1250. CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
  1251. ext.Version,
  1252. ext.Brand,
  1253. ext.cFree1,
  1254. ext.cFree2,
  1255. ext.cFree3,
  1256. ext.cFree4,
  1257. ext.cFree5,
  1258. ext.cFree6,
  1259. ext.cFree7,
  1260. ext.cFree8,
  1261. ext.cFree9,
  1262. ext.cFree10
  1263. INTO #maintemp
  1264. FROM
  1265. ICSOOPick a
  1266. inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
  1267. LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
  1268. INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
  1269. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  1270. INNER JOIN (
  1271. SELECT a.OOCode,a.Sequence,a.WorkPoint
  1272. FROM ICSOutsourcingOrder a
  1273. INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
  1274. INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
  1275. WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
  1276. ) temp ON c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
  1277. WHERE a.SupplyType='1'
  1278. GROUP BY c.OOCode,a.ParentQuantity,a.Quantity,c.Quantity,a.InvCode,b.InvName,b.InvStd,a.WhCode,a.ExtensionID,a.WorkPoint,inv.BatchEnable,a.OODetailID,a.Amount,a.Sequence,a.IssueQuantity,inv.InvName,inv.InvCode,inv.InvUnit,inv.AmountUnit,c.Sequence,
  1279. ext.ProjectCode,ext.BatchCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10;
  1280. select * into #resulttemp from #maintemp
  1281. ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
  1282. delete from #resulttemp
  1283. -- 2.maintemp barcodetemp
  1284. select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
  1285. (select #maintemp.invcode from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC
  1286. -- 3.maintemp ID barcodetemp
  1287. BEGIN
  1288. DECLARE @transSequence int;--
  1289. DECLARE @qty int;--
  1290. DECLARE @needqty int;--
  1291. DECLARE @lotno VARCHAR(50);--
  1292. DECLARE @DetailID VARCHAR(50);--ID
  1293. DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp); --tempCursor
  1294. OPEN tempCursor; --
  1295. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID; --
  1296. WHILE @@fetch_status=0
  1297. BEGIN
  1298. select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
  1299. PRINT @transSequence
  1300. WHILE @needqty>0
  1301. BEGIN
  1302. select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
  1303. RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode ORDER BY mtime
  1304. BEGIN
  1305. IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
  1306. BEGIN
  1307. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1308. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1309. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1310. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1311. ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
  1312. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1313. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1314. delete from #barcodetemp where lotno = @lotno
  1315. SET @needqty=@needqty-@qty
  1316. END
  1317. ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
  1318. BEGIN
  1319. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1320. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1321. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1322. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1323. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
  1324. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1325. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1326. update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
  1327. SET @needqty=@needqty-@qty
  1328. END
  1329. ELSE
  1330. BEGIN
  1331. insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
  1332. Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
  1333. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
  1334. SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
  1335. ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
  1336. ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
  1337. where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
  1338. SET @needqty=0
  1339. END
  1340. END
  1341. END
  1342. FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
  1343. END
  1344. CLOSE tempCursor
  1345. DEALLOCATE tempCursor
  1346. END
  1347. select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
  1348. --select * from #resulttemp
  1349. DROP table #maintemp
  1350. DROP table #resulttemp
  1351. DROP table #barcodetemp";
  1352. #endregion
  1353. sql = String.Format(sql, LotNo, WorkPoint, Quantity);
  1354. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1355. string json = JsonConvert.SerializeObject(table);
  1356. List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
  1357. foreach (DownItemModel model in downItemModels)
  1358. {
  1359. if (model != null && model.LotNo == null || "" == model.LotNo)
  1360. {
  1361. throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
  1362. }
  1363. WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "13", BusinessCode, cmd, language, "", "");
  1364. //回写已领数量
  1365. sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
  1366. sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
  1367. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1368. {
  1369. throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
  1370. }
  1371. }
  1372. }
  1373. #endregion
  1374. }
  1375. catch (Exception)
  1376. {
  1377. throw;
  1378. }
  1379. }
  1380. /// <summary>
  1381. /// 减少库存
  1382. /// </summary>
  1383. /// <param name="Identification"></param>
  1384. /// <param name="TransCode"></param>
  1385. /// <param name="TransSequence"></param>
  1386. /// <param name="LotNo"></param>
  1387. /// <param name="Quantity"></param>
  1388. /// <param name="User"></param>
  1389. /// <param name="WorkPoint"></param>
  1390. /// <param name="TransType"></param>
  1391. /// <param name="BusinessCode"></param>
  1392. /// <param name="cmd"></param>
  1393. public static DataTable WareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  1394. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string MergeID = "")
  1395. {
  1396. decimal LotQTYYY = 0;
  1397. decimal LotQTY = 0;
  1398. string LotEnable = "";
  1399. string chekEnable = "";
  1400. string DisPrintEnable = "";
  1401. string PrintEnable = "";
  1402. string sql = "";
  1403. string lotstr = "";
  1404. int result = 0;
  1405. List<string> NewBarCodeList = new List<string>();
  1406. DataTable dtLotno = new DataTable();
  1407. DataTable lstDt = new DataTable();
  1408. DataTable ZLtable = new DataTable();
  1409. try
  1410. {
  1411. //检验是否分批
  1412. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  1413. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  1414. where a.LotNo='{0}' and a.WorkPoint='{1}'
  1415. ";
  1416. sql = string.Format(sql, LotNo, WorkPoint);
  1417. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  1418. if (dt.Rows.Count == 0)
  1419. {
  1420. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1421. }
  1422. else
  1423. {
  1424. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  1425. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  1426. }
  1427. string cheksql = @"IF NOT EXISTS(select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  1428. from Sys_SRM_Items a
  1429. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1430. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  1431. BEGIN
  1432. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  1433. RETURN
  1434. END
  1435. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  1436. from Sys_SRM_Items a
  1437. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1438. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  1439. ";
  1440. cheksql = string.Format(cheksql, BusinessCode);
  1441. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1442. if (chekdt.Rows.Count == 0)
  1443. {
  1444. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1445. }
  1446. else
  1447. {
  1448. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  1449. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  1450. }
  1451. sql = @"select Quantity from ICSWareHouseLotInfo
  1452. where LotNO='{0}' AND WorkPoint='{1}'";
  1453. sql = string.Format(sql, LotNo, WorkPoint);
  1454. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  1455. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  1456. LotQTY = Convert.ToDecimal(Quantity);
  1457. if (!LotEnable.Equals("False")&&!chekEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  1458. {
  1459. ZLtable = ICSControlModeService.GetZL();
  1460. if (ZLtable == null)
  1461. {
  1462. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  1463. }
  1464. for (int i = 0; i < ZLtable.Rows.Count; i++)
  1465. {
  1466. string zlName = ZLtable.Rows[i]["Name"].ToString();
  1467. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  1468. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  1469. if (zlTransCode.Equals(BusinessCode))
  1470. {
  1471. if (Enable.Equals("True"))
  1472. {
  1473. ///更新日志
  1474. sql = @"
  1475. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  1476. BEGIN
  1477. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  1478. RETURN
  1479. END
  1480. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  1481. ";
  1482. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  1483. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1484. {
  1485. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  1486. }
  1487. ///更新库存
  1488. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1489. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1490. BEGIN
  1491. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1492. RETURN
  1493. END";
  1494. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1495. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1496. {
  1497. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1498. }
  1499. }
  1500. else
  1501. {
  1502. ///更新库存
  1503. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1504. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1505. BEGIN
  1506. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1507. RETURN
  1508. END";
  1509. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1510. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1511. {
  1512. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1513. }
  1514. }
  1515. }
  1516. }
  1517. ///分批前添加日志
  1518. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1519. BEGIN
  1520. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1521. RETURN
  1522. END
  1523. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1524. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1525. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1526. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1527. MTIME,WorkPoint,EATTRIBUTE1)
  1528. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  1529. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  1530. '','0','{4}','31','0','',
  1531. '','','',f.F_Account ,f.F_RealName ,
  1532. SYSDATETIME() ,a.WorkPoint ,''
  1533. FROM ICSInventoryLot a
  1534. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1535. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1536. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1537. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1538. ";
  1539. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  1540. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1541. {
  1542. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1543. }
  1544. #region 获取分批后的条码(lotstr)
  1545. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  1546. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  1547. sql = string.Format(sql, LotNo, WorkPoint);
  1548. dt = DBHelper.SQlReturnData(sql, cmd);
  1549. if (dt.Rows.Count == 0)
  1550. {
  1551. lotstr = LotNo + "-" + 1;
  1552. }
  1553. else
  1554. {
  1555. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  1556. }
  1557. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  1558. #endregion
  1559. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  1560. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  1561. Quantity,Amount,ExtensionID,Type,PrintTimes,
  1562. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  1563. WorkPoint,EATTRIBUTE1)
  1564. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  1565. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  1566. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  1567. a.WorkPoint ,'{1}'
  1568. From ICSInventoryLot a
  1569. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  1570. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1571. cmd.CommandText = sql;
  1572. result = cmd.ExecuteNonQuery();
  1573. if (result <= 0)
  1574. {
  1575. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  1576. }
  1577. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  1578. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  1579. ,MUSER,MUSERName,GETDATE(),'{3}',''
  1580. from ICSWareHouseLotInfo
  1581. where LotNO='{1}' AND WorkPoint='{3}'";
  1582. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1583. cmd.CommandText = sql;
  1584. result = cmd.ExecuteNonQuery();
  1585. if (result <= 0)
  1586. {
  1587. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  1588. }
  1589. //插入条码单据表
  1590. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  1591. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  1592. FROM ICSInventoryLot a
  1593. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1594. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1595. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  1596. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  1597. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1598. {
  1599. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  1600. }
  1601. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1602. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1603. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1604. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1605. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  1606. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  1607. c.WarehouseCode,c.LocationCode,'','','{6}',
  1608. '','0','{7}','{8}','0','',
  1609. '','','',f.F_Account ,f.F_RealName ,
  1610. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1611. FROM ICSInventoryLot a
  1612. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1613. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1614. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1615. ";
  1616. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
  1617. cmd.CommandText = sql;
  1618. result = cmd.ExecuteNonQuery();
  1619. if (result <= 0)
  1620. {
  1621. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  1622. }
  1623. if (PrintEnable.Equals("True")&& DisPrintEnable.Equals("True"))
  1624. {
  1625. sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  1626. from ICSWareHouseLotInfolog A
  1627. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  1628. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  1629. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  1630. where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  1631. ";
  1632. sql = string.Format(sql, lotstr, WorkPoint,BusinessCode);
  1633. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  1634. lstDt=dtLotno;
  1635. }
  1636. ///添加日志
  1637. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1638. BEGIN
  1639. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1640. RETURN
  1641. END
  1642. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1643. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1644. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1645. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1646. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  1647. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  1648. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  1649. '','0','{7}','32','0','',
  1650. '','','',f.F_Account ,f.F_RealName ,
  1651. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1652. FROM ICSInventoryLot a
  1653. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1654. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1655. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1656. ";
  1657. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  1658. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1659. {
  1660. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1661. }
  1662. #endregion
  1663. }
  1664. else
  1665. {
  1666. NewBarCodeList.Add(LotNo);
  1667. ///添加日志
  1668. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1669. BEGIN
  1670. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1671. RETURN
  1672. END
  1673. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1674. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1675. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1676. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1677. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  1678. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  1679. c.WarehouseCode,c.LocationCode,'','','{6}',
  1680. '','0','{7}','{8}','0','',
  1681. '','','',f.F_Account ,f.F_RealName ,
  1682. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  1683. FROM ICSInventoryLot a
  1684. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1685. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1686. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1687. ";
  1688. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  1689. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1690. {
  1691. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1692. }
  1693. ZLtable = ICSControlModeService.GetZL();
  1694. if (ZLtable == null)
  1695. {
  1696. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  1697. }
  1698. for (int i = 0; i < ZLtable.Rows.Count; i++)
  1699. {
  1700. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  1701. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  1702. if (zlTransCode.Equals(BusinessCode))
  1703. {
  1704. if (Enable.Equals("True"))
  1705. {
  1706. ///更新日志
  1707. sql = @"
  1708. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  1709. BEGIN
  1710. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  1711. RETURN
  1712. END
  1713. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  1714. ";
  1715. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  1716. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1717. {
  1718. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  1719. }
  1720. ///更新库存
  1721. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1722. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1723. BEGIN
  1724. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1725. RETURN
  1726. END";
  1727. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1728. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1729. {
  1730. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1731. }
  1732. }
  1733. else
  1734. {
  1735. ///更新库存
  1736. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1737. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1738. BEGIN
  1739. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1740. RETURN
  1741. END";
  1742. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1743. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1744. {
  1745. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1746. }
  1747. }
  1748. }
  1749. }
  1750. /////更新库存
  1751. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1752. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  1753. // BEGIN
  1754. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1755. // RETURN
  1756. // END";
  1757. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1758. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1759. //{
  1760. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1761. //}
  1762. }
  1763. }
  1764. catch (Exception)
  1765. {
  1766. throw;
  1767. }
  1768. return lstDt;
  1769. }
  1770. /// <summary>
  1771. /// 减少库存(奥美专用)
  1772. /// </summary>
  1773. /// <param name="Identification"></param>
  1774. /// <param name="TransCode"></param>
  1775. /// <param name="TransSequence"></param>
  1776. /// <param name="LotNo"></param>
  1777. /// <param name="Quantity"></param>
  1778. /// <param name="User"></param>
  1779. /// <param name="WorkPoint"></param>
  1780. /// <param name="TransType"></param>
  1781. /// <param name="BusinessCode"></param>
  1782. /// <param name="cmd"></param>
  1783. public static DataTable AMWareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  1784. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string MergeID = "")
  1785. {
  1786. decimal LotQTYYY = 0;
  1787. decimal LotQTY = 0;
  1788. string LotEnable = "";
  1789. string chekEnable = "";
  1790. string DisPrintEnable = "";
  1791. string PrintEnable = "";
  1792. string sql = "";
  1793. string lotstr = "";
  1794. int result = 0;
  1795. List<string> NewBarCodeList = new List<string>();
  1796. DataTable dtLotno = new DataTable();
  1797. DataTable lstDt = new DataTable();
  1798. DataTable ZLtable = new DataTable();
  1799. try
  1800. {
  1801. string amount = "";
  1802. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  1803. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  1804. //sqql = string.Format(sqql, LotNo, WorkPoint);
  1805. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  1806. //amount = dtaa.Rows[0]["Amount"].ToString();
  1807. //string chekksql = @"select c.EATTRIBUTE1 FROM ICSMOPick a
  1808. // INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
  1809. // INNER JOIN ICSInventory c on a.InvCode=c.InvCode and a.WorkPoint=c.WorkPoint
  1810. // WHERE b.MOCode='{0}' AND b.Sequence+'~'+a.Sequence='{3}' AND a.WorkPoint='{1}' and c.AmountEnable='1'";
  1811. //chekksql = string.Format(chekksql, TransCode, WorkPoint, Quantity, TransSequence);
  1812. //DataTable dta = DBHelper.SQlReturnData(chekksql, cmd);
  1813. //if (dta.Rows.Count > 0)
  1814. //{
  1815. // Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  1816. //}
  1817. //检验是否分批
  1818. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  1819. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  1820. where a.LotNo='{0}' and a.WorkPoint='{1}'
  1821. ";
  1822. sql = string.Format(sql, LotNo, WorkPoint);
  1823. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  1824. if (dt.Rows.Count == 0)
  1825. {
  1826. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1827. }
  1828. else
  1829. {
  1830. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  1831. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  1832. }
  1833. string cheksql = @"IF NOT EXISTS(select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  1834. from Sys_SRM_Items a
  1835. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1836. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}' )
  1837. BEGIN
  1838. RAISERROR('" + language.GetNameByCode("WMSAPIInfo470") + @"',16,1);
  1839. RETURN
  1840. END
  1841. select b.F_ItemCode as Code ,b.F_ItemName as Name,b.F_EnabledMark AS Enable ,b.F_IsDefault AS DisPrintEnable
  1842. from Sys_SRM_Items a
  1843. left join Sys_SRM_ItemsDetail b on a.F_Id=b.F_ItemId
  1844. where a.F_EnCode='TransBatch' and b.F_ItemCode='{0}'
  1845. ";
  1846. cheksql = string.Format(cheksql, BusinessCode);
  1847. DataTable chekdt = DBHelper.SQlReturnData(cheksql, cmd);
  1848. if (chekdt.Rows.Count == 0)
  1849. {
  1850. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  1851. }
  1852. else
  1853. {
  1854. chekEnable = chekdt.Rows[0]["Enable"].ToString();
  1855. DisPrintEnable = chekdt.Rows[0]["DisPrintEnable"].ToString();
  1856. }
  1857. sql = @"select Quantity from ICSWareHouseLotInfo
  1858. where LotNO='{0}' AND WorkPoint='{1}'";
  1859. sql = string.Format(sql, LotNo, WorkPoint);
  1860. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  1861. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  1862. LotQTY = Convert.ToDecimal(Quantity);
  1863. if (!LotEnable.Equals("False") && !chekEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  1864. {
  1865. ZLtable = ICSControlModeService.GetZL();
  1866. if (ZLtable == null)
  1867. {
  1868. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  1869. }
  1870. for (int i = 0; i < ZLtable.Rows.Count; i++)
  1871. {
  1872. string zlName = ZLtable.Rows[i]["Name"].ToString();
  1873. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  1874. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  1875. if (zlTransCode.Equals(BusinessCode))
  1876. {
  1877. if (Enable.Equals("True"))
  1878. {
  1879. ///更新日志
  1880. sql = @"
  1881. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  1882. BEGIN
  1883. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  1884. RETURN
  1885. END
  1886. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  1887. ";
  1888. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  1889. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1890. {
  1891. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  1892. }
  1893. ///更新库存
  1894. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1895. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1896. BEGIN
  1897. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1898. RETURN
  1899. END";
  1900. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1901. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1902. {
  1903. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1904. }
  1905. }
  1906. else
  1907. {
  1908. ///更新库存
  1909. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1910. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  1911. BEGIN
  1912. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1913. RETURN
  1914. END";
  1915. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1916. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1917. {
  1918. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1919. }
  1920. }
  1921. }
  1922. }
  1923. ///分批前添加日志
  1924. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1925. BEGIN
  1926. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1927. RETURN
  1928. END
  1929. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1930. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1931. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1932. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1933. MTIME,WorkPoint,EATTRIBUTE1)
  1934. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  1935. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  1936. '','0','{4}','31','0','',
  1937. '','','',f.F_Account ,f.F_RealName ,
  1938. SYSDATETIME() ,a.WorkPoint ,''
  1939. FROM ICSInventoryLot a
  1940. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1941. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1942. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1943. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1944. ";
  1945. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  1946. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1947. {
  1948. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1949. }
  1950. #region 获取分批后的条码(lotstr)
  1951. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  1952. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  1953. sql = string.Format(sql, LotNo, WorkPoint);
  1954. dt = DBHelper.SQlReturnData(sql, cmd);
  1955. if (dt.Rows.Count == 0)
  1956. {
  1957. lotstr = LotNo + "-" + 1;
  1958. }
  1959. else
  1960. {
  1961. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  1962. }
  1963. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  1964. #endregion
  1965. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  1966. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  1967. Quantity,Amount,ExtensionID,Type,PrintTimes,
  1968. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  1969. WorkPoint,EATTRIBUTE1)
  1970. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  1971. '{2}',a.Amount/a.Quantity*Quantity,a.ExtensionID,a.Type,a.PrintTimes,
  1972. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  1973. a.WorkPoint ,'{1}'
  1974. From ICSInventoryLot a
  1975. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  1976. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1977. cmd.CommandText = sql;
  1978. result = cmd.ExecuteNonQuery();
  1979. if (result <= 0)
  1980. {
  1981. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  1982. }
  1983. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  1984. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  1985. ,MUSER,MUSERName,GETDATE(),'{3}',''
  1986. from ICSWareHouseLotInfo
  1987. where LotNO='{1}' AND WorkPoint='{3}'";
  1988. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  1989. cmd.CommandText = sql;
  1990. result = cmd.ExecuteNonQuery();
  1991. if (result <= 0)
  1992. {
  1993. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  1994. }
  1995. //插入条码单据表
  1996. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  1997. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  1998. FROM ICSInventoryLot a
  1999. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2000. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2001. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2002. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  2003. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2004. {
  2005. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  2006. }
  2007. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2008. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2009. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2010. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2011. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2012. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  2013. c.WarehouseCode,c.LocationCode,'','','{6}',
  2014. '','0','{7}','{8}','0','',
  2015. '','','',f.F_Account ,f.F_RealName ,
  2016. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2017. FROM ICSInventoryLot a
  2018. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2019. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2020. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2021. ";
  2022. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
  2023. cmd.CommandText = sql;
  2024. result = cmd.ExecuteNonQuery();
  2025. if (result <= 0)
  2026. {
  2027. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  2028. }
  2029. if (PrintEnable.Equals("True") && DisPrintEnable.Equals("True"))
  2030. {
  2031. sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  2032. from ICSWareHouseLotInfolog A
  2033. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2034. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2035. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2036. where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  2037. ";
  2038. sql = string.Format(sql, lotstr, WorkPoint, BusinessCode);
  2039. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2040. lstDt = dtLotno;
  2041. }
  2042. ///添加日志
  2043. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2044. BEGIN
  2045. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2046. RETURN
  2047. END
  2048. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2049. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2050. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2051. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2052. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2053. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2054. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  2055. '','0','{7}','32','0','',
  2056. '','','',f.F_Account ,f.F_RealName ,
  2057. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2058. FROM ICSInventoryLot a
  2059. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2060. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2061. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2062. ";
  2063. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  2064. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2065. {
  2066. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2067. }
  2068. #endregion
  2069. }
  2070. else
  2071. {
  2072. NewBarCodeList.Add(LotNo);
  2073. ///添加日志
  2074. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2075. BEGIN
  2076. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2077. RETURN
  2078. END
  2079. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2080. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2081. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2082. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2083. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2084. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2085. c.WarehouseCode,c.LocationCode,'','','{6}',
  2086. '','0','{7}','{8}','0','',
  2087. '','','',f.F_Account ,f.F_RealName ,
  2088. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2089. FROM ICSInventoryLot a
  2090. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2091. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2092. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2093. ";
  2094. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  2095. log.Debug("出库增加日志:" + sql);
  2096. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2097. {
  2098. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2099. }
  2100. ZLtable = ICSControlModeService.GetZL();
  2101. if (ZLtable == null)
  2102. {
  2103. throw new Exception(language.GetNameByCode("WMSAPIInfo471"));
  2104. }
  2105. for (int i = 0; i < ZLtable.Rows.Count; i++)
  2106. {
  2107. string zlTransCode = ZLtable.Rows[i]["BusinessCode"].ToString();
  2108. string Enable = ZLtable.Rows[i]["Enable"].ToString();
  2109. if (zlTransCode.Equals(BusinessCode))
  2110. {
  2111. if (Enable.Equals("True"))
  2112. {
  2113. ///更新日志
  2114. sql = @"
  2115. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfoLog a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and transtype='15')
  2116. BEGIN
  2117. RAISERROR('" + language.GetNameByCode("WMSAPIInfo472") + @"',16,1);
  2118. RETURN
  2119. END
  2120. UPDATE ICSWareHouseLotInfoLog SET EATTRIBUTE2='1' WHERE LotNo='{0}' AND WorkPoint='{1}' and transtype='15'
  2121. ";
  2122. sql = string.Format(sql, LotNo, WorkPoint, LogID);
  2123. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2124. {
  2125. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"占料标识更新失败!");
  2126. }
  2127. ///更新库存
  2128. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}',LockQuantity=ISNULL(LockQuantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2129. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  2130. BEGIN
  2131. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2132. RETURN
  2133. END";
  2134. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2135. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2136. {
  2137. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2138. }
  2139. }
  2140. else
  2141. {
  2142. ///更新库存
  2143. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2144. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity-LockQuantity<0)
  2145. BEGIN
  2146. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2147. RETURN
  2148. END";
  2149. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2150. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2151. {
  2152. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2153. }
  2154. }
  2155. }
  2156. }
  2157. /////更新库存
  2158. //sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2159. // IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2160. // BEGIN
  2161. // RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2162. // RETURN
  2163. // END";
  2164. //sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2165. //if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2166. //{
  2167. // throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2168. //}
  2169. }
  2170. }
  2171. catch (Exception)
  2172. {
  2173. throw;
  2174. }
  2175. return lstDt;
  2176. }
  2177. /// <summary>
  2178. /// 无源头调拨
  2179. /// </summary>
  2180. /// <param name="LocationCode"></param>
  2181. /// <param name="LotNo"></param>
  2182. /// <param name="Quantity"></param>
  2183. /// <param name="User"></param>
  2184. /// <param name="WorkPoint"></param>
  2185. /// <param name="TransType"></param>
  2186. /// <param name="BusinessCode"></param>
  2187. /// <param name="cmd"></param>
  2188. public static DataTable WareHouseLotInfoNoTransfer(string Identification, string WarehouseCode, string LocationCode,
  2189. string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
  2190. {
  2191. decimal LotQTYYY = 0;
  2192. decimal LotQTY = 0;
  2193. String LotEnable = "";
  2194. String PrintEnable = "";
  2195. String ToWareHouseCode = "";
  2196. String ToLocationCode = "";
  2197. string lotstr = "";
  2198. int result = 0;
  2199. DataTable dtLotno = new DataTable();
  2200. DataTable lstDt = new DataTable();
  2201. List<string> NewBarCodeList = new List<string>();
  2202. try
  2203. {
  2204. //检验是否分批
  2205. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  2206. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  2207. where a.LotNo='{0}' and a.WorkPoint='{1}'
  2208. ";
  2209. sql = string.Format(sql, LotNo, WorkPoint);
  2210. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2211. if (dt.Rows.Count == 0)
  2212. {
  2213. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2214. }
  2215. else
  2216. {
  2217. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  2218. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  2219. }
  2220. sql = @"select Quantity from ICSWareHouseLotInfo
  2221. where LotNO='{0}' AND WorkPoint='{1}'";
  2222. sql = string.Format(sql, LotNo, WorkPoint);
  2223. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  2224. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  2225. LotQTY = Convert.ToDecimal(Quantity);
  2226. if (!LotEnable.Equals("False") && LotQTYYY - LotQTY > 0)
  2227. {
  2228. ///更新库存
  2229. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2230. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2231. BEGIN
  2232. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2233. RETURN
  2234. END";
  2235. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2236. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2237. {
  2238. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2239. }
  2240. ///分批前添加日志
  2241. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2242. BEGIN
  2243. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2244. RETURN
  2245. END
  2246. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2247. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2248. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2249. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2250. MTIME,WorkPoint,EATTRIBUTE1)
  2251. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  2252. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  2253. '','0','{4}','31','0','',
  2254. '','','',f.F_Account ,f.F_RealName ,
  2255. SYSDATETIME() ,a.WorkPoint ,''
  2256. FROM ICSInventoryLot a
  2257. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2258. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2259. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2260. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2261. ";
  2262. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity);
  2263. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2264. {
  2265. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2266. }
  2267. #region 获取分批后的条码(lotstr)
  2268. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  2269. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  2270. sql = string.Format(sql, LotNo, WorkPoint);
  2271. dt = DBHelper.SQlReturnData(sql, cmd);
  2272. if (dt.Rows.Count == 0)
  2273. {
  2274. lotstr = LotNo + "-" + 1;
  2275. }
  2276. else
  2277. {
  2278. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  2279. }
  2280. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  2281. #endregion
  2282. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  2283. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  2284. Quantity,Amount,ExtensionID,Type,PrintTimes,
  2285. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  2286. WorkPoint,EATTRIBUTE1)
  2287. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  2288. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  2289. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  2290. a.WorkPoint ,'{1}'
  2291. From ICSInventoryLot a
  2292. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  2293. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  2294. cmd.CommandText = sql;
  2295. result = cmd.ExecuteNonQuery();
  2296. if (result <= 0)
  2297. {
  2298. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  2299. }
  2300. #endregion
  2301. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2302. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  2303. ,MUSER,MUSERName,GETDATE(),'{3}',''
  2304. from ICSWareHouseLotInfo
  2305. where LotNO='{1}' AND WorkPoint='{3}'";
  2306. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint, WarehouseCode, LocationCode);
  2307. cmd.CommandText = sql;
  2308. result = cmd.ExecuteNonQuery();
  2309. if (result <= 0)
  2310. {
  2311. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  2312. }
  2313. //插入条码单据表
  2314. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  2315. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  2316. FROM ICSInventoryLot a
  2317. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2318. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2319. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2320. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  2321. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2322. {
  2323. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  2324. }
  2325. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2326. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2327. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2328. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2329. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2330. SELECT NEWID(),'{3}','','','{8}' ,a.InvCode ,
  2331. c.WarehouseCode,c.LocationCode,'{9}','{10}','{4}',
  2332. '','0','{5}','{6}','0','',
  2333. '','','',f.F_Account ,f.F_RealName ,
  2334. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2335. FROM ICSInventoryLot a
  2336. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2337. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2338. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2339. ";
  2340. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  2341. cmd.CommandText = sql;
  2342. result = cmd.ExecuteNonQuery();
  2343. if (result <= 0)
  2344. {
  2345. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  2346. }
  2347. ///添加日志
  2348. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2349. BEGIN
  2350. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2351. RETURN
  2352. END
  2353. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2354. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2355. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2356. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2357. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2358. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  2359. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  2360. '','0','{5}','32','0','',
  2361. '','','',f.F_Account ,f.F_RealName ,
  2362. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  2363. FROM ICSInventoryLot a
  2364. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2365. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2366. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2367. ";
  2368. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, MergeID);
  2369. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2370. {
  2371. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2372. }
  2373. if (PrintEnable.Equals("True"))
  2374. {
  2375. sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNO, B.Quantity AS LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode
  2376. from ICSWareHouseLotInfolog A
  2377. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2378. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2379. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2380. where a.BusinessCode ='105'
  2381. and A.lotno like'{0}%' and a.workpoint='{1}'
  2382. ";
  2383. sql = string.Format(sql, LotNo, WorkPoint);
  2384. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2385. lstDt = dtLotno;
  2386. }
  2387. }
  2388. else
  2389. {
  2390. ///添加日志
  2391. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2392. BEGIN
  2393. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2394. RETURN
  2395. END
  2396. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{7}' AND LocationCode='{8}' AND WorkPoint='{1}' AND LotNo = '{0}')
  2397. BEGIN
  2398. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  2399. RETURN
  2400. END
  2401. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2402. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2403. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2404. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2405. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2406. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  2407. c.WarehouseCode,c.LocationCode,'{7}','{8}',{4},
  2408. '','0','{5}','{6}','0','',
  2409. '','','',f.F_Account ,f.F_RealName ,
  2410. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2411. FROM ICSInventoryLot a
  2412. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2413. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2414. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2415. ";
  2416. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  2417. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2418. {
  2419. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2420. }
  2421. ///更新库存
  2422. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2423. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2424. BEGIN
  2425. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2426. RETURN
  2427. END";
  2428. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  2429. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2430. {
  2431. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2432. }
  2433. }
  2434. }
  2435. catch (Exception)
  2436. {
  2437. throw;
  2438. }
  2439. return lstDt;
  2440. }
  2441. /// <summary>
  2442. /// 修改库存
  2443. /// </summary>
  2444. /// <param name="Identification"></param>
  2445. /// <param name="TransCode"></param>
  2446. /// <param name="TransSequence"></param>
  2447. /// <param name="LotNo"></param>
  2448. /// <param name="Quantity"></param>
  2449. /// <param name="User"></param>
  2450. /// <param name="WorkPoint"></param>
  2451. /// <param name="TransType"></param>
  2452. /// <param name="cmd"></param>
  2453. public static void WareHouseLotInfoUpdate(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  2454. string WorkPoint, string TransType,string CheckKind, SqlCommand cmd, Dictionary<string, string> language)
  2455. {
  2456. try
  2457. {
  2458. ///添加日志
  2459. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2460. BEGIN
  2461. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2462. RETURN
  2463. END
  2464. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2465. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2466. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2467. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2468. MTIME,WorkPoint,EATTRIBUTE1)
  2469. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2470. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  2471. '{8}','0','{6}','{7}','0','',
  2472. '','','',f.F_Account ,f.F_RealName ,
  2473. SYSDATETIME() ,a.WorkPoint ,''
  2474. FROM ICSWareHouseLotInfo a
  2475. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2476. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2477. ";
  2478. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckBefore.GetDescription<DBValue>(), CheckKind);
  2479. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2480. {
  2481. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2482. }
  2483. ///更新库存
  2484. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity='{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'";
  2485. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2486. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2487. {
  2488. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2489. }
  2490. ///添加日志
  2491. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2492. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2493. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2494. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2495. MTIME,WorkPoint,EATTRIBUTE1)
  2496. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2497. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  2498. '{8}','0','{6}','{7}','0','',
  2499. '','','',f.F_Account ,f.F_RealName ,
  2500. SYSDATETIME() ,a.WorkPoint ,''
  2501. FROM ICSWareHouseLotInfo a
  2502. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2503. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2504. ";
  2505. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckAfter.GetDescription<DBValue>(), CheckKind);
  2506. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2507. {
  2508. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2509. }
  2510. }
  2511. catch (Exception)
  2512. {
  2513. throw;
  2514. }
  2515. }
  2516. /// <summary>
  2517. /// 调拨
  2518. /// </summary>
  2519. /// <param name="LocationCode"></param>
  2520. /// <param name="LotNo"></param>
  2521. /// <param name="Quantity"></param>
  2522. /// <param name="User"></param>
  2523. /// <param name="WorkPoint"></param>
  2524. /// <param name="TransType"></param>
  2525. /// <param name="BusinessCode"></param>
  2526. /// <param name="cmd"></param>
  2527. public static DataTable WareHouseLotInfoTransfer(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  2528. string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
  2529. {
  2530. decimal LotQTYYY = 0;
  2531. decimal LotQTY = 0;
  2532. String LotEnable = "";
  2533. String PrintEnable = "";
  2534. string lotstr = "";
  2535. int result = 0;
  2536. DataTable dtLotno = new DataTable();
  2537. DataTable lstDt = new DataTable();
  2538. List<string> NewBarCodeList = new List<string>();
  2539. try
  2540. {
  2541. //检验是否分批
  2542. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  2543. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  2544. where a.LotNo='{0}' and a.WorkPoint='{1}'
  2545. ";
  2546. sql = string.Format(sql, LotNo, WorkPoint);
  2547. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2548. if (dt.Rows.Count == 0)
  2549. {
  2550. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2551. }
  2552. else
  2553. {
  2554. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  2555. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  2556. }
  2557. sql = @"select Quantity from ICSWareHouseLotInfo
  2558. where LotNO='{0}' AND WorkPoint='{1}'";
  2559. sql = string.Format(sql, LotNo, WorkPoint);
  2560. DataTable dtt = DBHelper.SQlReturnData(sql, cmd);
  2561. LotQTYYY = Convert.ToDecimal(dtt.Rows[0]["Quantity"]);
  2562. LotQTY = Convert.ToDecimal(Quantity);
  2563. if (!LotEnable.Equals("False") && LotQTYYY - LotQTY > 0)//增加数量判断
  2564. {
  2565. ///更新库存
  2566. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2567. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2568. BEGIN
  2569. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2570. RETURN
  2571. END";
  2572. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  2573. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2574. {
  2575. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2576. }
  2577. ///分批前添加日志
  2578. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2579. BEGIN
  2580. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2581. RETURN
  2582. END
  2583. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2584. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2585. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2586. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2587. MTIME,WorkPoint,EATTRIBUTE1)
  2588. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  2589. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  2590. '','0','{4}','31','0','',
  2591. '','','',f.F_Account ,f.F_RealName ,
  2592. SYSDATETIME() ,a.WorkPoint ,''
  2593. FROM ICSInventoryLot a
  2594. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2595. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2596. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2597. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2598. ";
  2599. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  2600. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2601. {
  2602. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2603. }
  2604. #region 获取分批后的条码(lotstr)
  2605. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  2606. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  2607. sql = string.Format(sql, LotNo, WorkPoint);
  2608. dt = DBHelper.SQlReturnData(sql, cmd);
  2609. if (dt.Rows.Count == 0)
  2610. {
  2611. lotstr = LotNo + "-" + 1;
  2612. }
  2613. else
  2614. {
  2615. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  2616. }
  2617. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  2618. #endregion
  2619. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  2620. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  2621. Quantity,Amount,ExtensionID,Type,PrintTimes,
  2622. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  2623. WorkPoint,EATTRIBUTE1)
  2624. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  2625. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  2626. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  2627. a.WorkPoint ,'{1}'
  2628. From ICSInventoryLot a
  2629. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  2630. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  2631. cmd.CommandText = sql;
  2632. result = cmd.ExecuteNonQuery();
  2633. if (result <= 0)
  2634. {
  2635. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  2636. }
  2637. #endregion
  2638. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  2639. select NEWID(),'{0}','{4}','{5}',InvCode,'{2}',InDate,LockQuantity
  2640. ,MUSER,MUSERName,GETDATE(),'{3}',''
  2641. from ICSWareHouseLotInfo
  2642. where LotNO='{1}' AND WorkPoint='{3}'";
  2643. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint,WarehouseCode,LocationCode);
  2644. cmd.CommandText = sql;
  2645. result = cmd.ExecuteNonQuery();
  2646. if (result <= 0)
  2647. {
  2648. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  2649. }
  2650. //插入条码单据表
  2651. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  2652. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  2653. FROM ICSInventoryLot a
  2654. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  2655. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2656. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  2657. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  2658. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2659. {
  2660. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  2661. }
  2662. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2663. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2664. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2665. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2666. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  2667. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  2668. c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
  2669. '','0','{7}','{8}','0','',
  2670. '','','',f.F_Account ,f.F_RealName ,
  2671. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2672. FROM ICSInventoryLot a
  2673. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2674. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2675. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2676. ";
  2677. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
  2678. cmd.CommandText = sql;
  2679. result = cmd.ExecuteNonQuery();
  2680. if (result <= 0)
  2681. {
  2682. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  2683. }
  2684. ///添加日志
  2685. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2686. BEGIN
  2687. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2688. RETURN
  2689. END
  2690. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2691. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2692. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2693. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2694. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2695. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2696. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  2697. '','0','{7}','32','0','',
  2698. '','','',f.F_Account ,f.F_RealName ,
  2699. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  2700. FROM ICSInventoryLot a
  2701. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2702. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2703. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2704. ";
  2705. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  2706. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2707. {
  2708. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2709. }
  2710. if (PrintEnable.Equals("True"))
  2711. {
  2712. sql = @"select A.LotNO AS OLDLotNo , C.Quantity AS OLDLotQty, A.eattribute1 as LotNo, B.Quantity AS LotQty ,b.InvCode,d.InvStd,d.InvName,b.MTime,A.TransCode
  2713. from ICSWareHouseLotInfolog A
  2714. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  2715. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  2716. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  2717. where A.lotno ='{0}' and a.workpoint='{1}' and a.BusinessCode='{2}'
  2718. ";
  2719. sql = string.Format(sql, lotstr, WorkPoint, BusinessCode);
  2720. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  2721. lstDt = dtLotno;
  2722. }
  2723. }
  2724. else
  2725. {
  2726. ///添加日志
  2727. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2728. BEGIN
  2729. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2730. RETURN
  2731. END
  2732. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND WorkPoint='{1}' AND LotNo = '{0}')
  2733. BEGIN
  2734. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  2735. RETURN
  2736. END
  2737. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2738. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2739. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2740. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2741. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  2742. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2743. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  2744. '','0','{7}','{8}','0','',
  2745. '','','',f.F_Account ,f.F_RealName ,
  2746. SYSDATETIME() ,a.WorkPoint ,'','{11}'
  2747. FROM ICSInventoryLot a
  2748. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2749. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2750. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2751. ";
  2752. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  2753. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2754. {
  2755. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2756. }
  2757. ///更新库存
  2758. sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2759. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  2760. BEGIN
  2761. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  2762. RETURN
  2763. END";
  2764. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  2765. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2766. {
  2767. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  2768. }
  2769. }
  2770. DateTime now = DateTime.Now;
  2771. sql = @"select 1 from ICSContainerLot
  2772. where LotNo='{0}' and WorkPoint='{1}'
  2773. ";
  2774. sql = string.Format(sql, LotNo, WorkPoint);
  2775. log.Debug("查询容器条码关联表是否存在");
  2776. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  2777. if (dttte.Rows.Count > 0)
  2778. {
  2779. ///删除条码关联表数据
  2780. sql = @"DELETE FROM ICSContainerLot
  2781. where LotNo='{0}' and WorkPoint='{1}'
  2782. ";
  2783. sql = string.Format(sql, LotNo, WorkPoint);
  2784. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2785. {
  2786. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  2787. }
  2788. }
  2789. }
  2790. catch (Exception)
  2791. {
  2792. throw;
  2793. }
  2794. return lstDt;
  2795. }
  2796. /// <summary>
  2797. /// 移库
  2798. /// </summary>
  2799. /// <param name="LocationCode"></param>
  2800. /// <param name="LotNo"></param>
  2801. /// <param name="Quantity"></param>
  2802. /// <param name="User"></param>
  2803. /// <param name="WorkPoint"></param>
  2804. /// <param name="TransType"></param>
  2805. /// <param name="BusinessCode"></param>
  2806. /// <param name="cmd"></param>
  2807. public static void WareHouseLotInfoLibrary(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  2808. string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  2809. {
  2810. try
  2811. {
  2812. string sql = @"SELECT WarehouseCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  2813. sql = string.Format(sql, LotNo,WorkPoint);
  2814. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2815. if (dt == null || dt.Rows.Count <= 0)
  2816. {
  2817. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  2818. }
  2819. string whcode = dt.Rows[0]["WarehouseCode"].ToString();
  2820. ///添加日志
  2821. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2822. BEGIN
  2823. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2824. RETURN
  2825. END
  2826. IF('" + whcode + @"' != '{8}')
  2827. BEGIN
  2828. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo394"), "{8}", whcode) + @"', 16, 1);
  2829. RETURN
  2830. END
  2831. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2832. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2833. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2834. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2835. MTIME,WorkPoint,EATTRIBUTE1 )
  2836. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2837. c.WarehouseCode,c.LocationCode,'{8}','{9}',c.Quantity,
  2838. '','0','{6}','{7}','0','',
  2839. '','','',f.F_Account ,f.F_RealName ,
  2840. SYSDATETIME() ,a.WorkPoint ,''
  2841. FROM ICSInventoryLot a
  2842. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2843. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2844. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2845. ";
  2846. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, BusinessCode, WarehouseCode, LocationCode);
  2847. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2848. {
  2849. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2850. }
  2851. ///添加库存
  2852. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity>0)
  2853. BEGIN
  2854. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  2855. RETURN
  2856. END
  2857. IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.WarehouseCode='{2}')
  2858. BEGIN
  2859. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  2860. RETURN
  2861. END
  2862. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2863. ";
  2864. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  2865. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2866. {
  2867. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  2868. }
  2869. DateTime now = DateTime.Now;
  2870. sql = @"select 1 from ICSContainerLot
  2871. where LotNo='{0}' and WorkPoint='{1}'
  2872. ";
  2873. sql = string.Format(sql, LotNo, WorkPoint);
  2874. log.Debug("查询容器条码关联表是否存在");
  2875. DataTable dttte = DBHelper.SQlReturnData(sql, cmd);
  2876. if (dttte.Rows.Count > 0)
  2877. {
  2878. ///删除条码关联表数据
  2879. sql = @"DELETE FROM ICSContainerLot
  2880. where LotNo='{0}' and WorkPoint='{1}'
  2881. ";
  2882. sql = string.Format(sql, LotNo, WorkPoint);
  2883. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2884. {
  2885. throw new Exception(language.GetNameByCode("容器条码关联表数据删除失败"));
  2886. }
  2887. }
  2888. }
  2889. catch (Exception)
  2890. {
  2891. throw;
  2892. }
  2893. }
  2894. /// <summary>
  2895. /// 两步调入
  2896. /// </summary>
  2897. /// <param name="LocationCode"></param>
  2898. /// <param name="LotNo"></param>
  2899. /// <param name="Quantity"></param>
  2900. /// <param name="User"></param>
  2901. /// <param name="WorkPoint"></param>
  2902. /// <param name="TransType"></param>
  2903. /// <param name="BusinessCode"></param>
  2904. /// <param name="cmd"></param>
  2905. public static void WareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  2906. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  2907. {
  2908. try
  2909. {
  2910. ///添加日志
  2911. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2912. BEGIN
  2913. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2914. RETURN
  2915. END
  2916. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2917. ToWarehouseCode,ToLocationCode,Quantity,
  2918. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2919. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2920. MTIME,WorkPoint,EATTRIBUTE1)
  2921. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  2922. '{9}','{10}','{6}',
  2923. '','0','{7}','{8}','0','',
  2924. '','','',f.F_Account ,f.F_RealName ,
  2925. SYSDATETIME() ,a.WorkPoint ,''
  2926. FROM ICSInventoryLot a
  2927. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  2928. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  2929. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  2930. ";
  2931. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  2932. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2933. {
  2934. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  2935. }
  2936. ///添加库存
  2937. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  2938. BEGIN
  2939. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  2940. RETURN
  2941. END
  2942. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}',Quantity=Quantity+'{4}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  2943. ";
  2944. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, Quantity);
  2945. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  2946. {
  2947. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  2948. }
  2949. }
  2950. catch (Exception)
  2951. {
  2952. throw;
  2953. }
  2954. }
  2955. /// <summary>
  2956. /// 合并日志
  2957. /// </summary>
  2958. /// <param name="Identification"></param>
  2959. /// <param name="LotNo"></param>
  2960. /// <param name="User"></param>
  2961. /// <param name="WorkPoint"></param>
  2962. /// <param name="TransType"></param>
  2963. /// <param name="BusinessCode"></param>
  2964. /// <param name="cmd"></param>
  2965. public static DataTable WareHouseLotInfoLogMerge(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  2966. {
  2967. String LotEnable = "";
  2968. String PrintEnable = "";
  2969. DataTable dtLotno = new DataTable();
  2970. DataTable lstDt = new DataTable();
  2971. try
  2972. {
  2973. //检验是否分批
  2974. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  2975. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  2976. where a.LotNo='{0}' and a.WorkPoint='{1}'
  2977. ";
  2978. sql = string.Format(sql, LotNo, WorkPoint);
  2979. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  2980. if (dt.Rows.Count == 0)
  2981. {
  2982. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  2983. }
  2984. else
  2985. {
  2986. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  2987. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  2988. }
  2989. ///添加日志
  2990. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  2991. BEGIN
  2992. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  2993. RETURN
  2994. END
  2995. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  2996. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  2997. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  2998. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  2999. MTIME,WorkPoint,EATTRIBUTE1)
  3000. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  3001. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  3002. '','0','{4}','{5}','0','',
  3003. '','','',f.F_Account ,f.F_RealName ,
  3004. SYSDATETIME() ,a.WorkPoint ,''
  3005. FROM ICSInventoryLot a
  3006. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3007. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3008. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3009. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3010. ";
  3011. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  3012. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3013. {
  3014. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3015. }
  3016. if (PrintEnable.Equals("True"))
  3017. {
  3018. sql = @"select A.LotNO , B.Quantity AS OLDLotQty, C.Quantity AS LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode
  3019. from ICSWareHouseLotInfolog A
  3020. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3021. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3022. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3023. where a.BusinessCode='34'
  3024. and A.lotno = '{0}' and a.workpoint='{1}'
  3025. ";
  3026. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode, newLotno);
  3027. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3028. lstDt = dtLotno;
  3029. }
  3030. }
  3031. catch (Exception)
  3032. {
  3033. throw;
  3034. }
  3035. return lstDt;
  3036. }
  3037. /// <summary>
  3038. /// 拆分、合并日志
  3039. /// </summary>
  3040. /// <param name="Identification"></param>
  3041. /// <param name="LotNo"></param>
  3042. /// <param name="User"></param>
  3043. /// <param name="WorkPoint"></param>
  3044. /// <param name="TransType"></param>
  3045. /// <param name="BusinessCode"></param>
  3046. /// <param name="cmd"></param>
  3047. public static DataTable WareHouseLotInfoLog(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode,string newLotno, SqlCommand cmd, Dictionary<string, string> language)
  3048. {
  3049. String LotEnable = "";
  3050. String PrintEnable = "";
  3051. DataTable dtLotno = new DataTable();
  3052. DataTable lstDt = new DataTable();
  3053. try{
  3054. //检验是否分批
  3055. string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  3056. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  3057. where a.LotNo='{0}' and a.WorkPoint='{1}'
  3058. ";
  3059. sql = string.Format(sql, LotNo, WorkPoint);
  3060. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  3061. if (dt.Rows.Count == 0)
  3062. {
  3063. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  3064. }
  3065. else
  3066. {
  3067. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  3068. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  3069. }
  3070. ///添加日志
  3071. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3072. BEGIN
  3073. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3074. RETURN
  3075. END
  3076. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3077. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3078. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3079. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3080. MTIME,WorkPoint,EATTRIBUTE1)
  3081. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  3082. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  3083. '','0','{4}','{5}','0','',
  3084. '','','',f.F_Account ,f.F_RealName ,
  3085. SYSDATETIME() ,a.WorkPoint ,''
  3086. FROM ICSInventoryLot a
  3087. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3088. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3089. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3090. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3091. ";
  3092. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  3093. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3094. {
  3095. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3096. }
  3097. if (PrintEnable.Equals("True"))
  3098. {
  3099. sql = @"select A.LotNO , C.Quantity AS OLDLotQty, B.Quantity AS LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode,c.LocationCode,f.BatchCode
  3100. from ICSWareHouseLotInfolog A
  3101. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  3102. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  3103. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  3104. left JOIN ICSExtension f on b.ExtensionID=f.id and b.WorkPoint=f.WorkPoint
  3105. where a.BusinessCode='32'
  3106. and A.lotno = '{3}' and a.workpoint='{1}'
  3107. ";
  3108. sql = string.Format(sql, LotNo, WorkPoint, BusinessCode,newLotno);
  3109. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  3110. lstDt = dtLotno;
  3111. }
  3112. }
  3113. catch (Exception)
  3114. {
  3115. throw;
  3116. }
  3117. return lstDt;
  3118. }
  3119. /// <summary>
  3120. /// 合并
  3121. /// </summary>
  3122. /// <param name="Identification"></param>
  3123. /// <param name="LotNo"></param>
  3124. /// <param name="User"></param>
  3125. /// <param name="WorkPoint"></param>
  3126. /// <param name="TransType"></param>
  3127. /// <param name="BusinessCode"></param>
  3128. /// <param name="cmd"></param>
  3129. public static void WareHouseLotInfoMerge(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  3130. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  3131. {
  3132. try
  3133. {
  3134. ///更新目标条码库存
  3135. string sql = @"IF NOT EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  3136. INNER JOIN ICSInventoryLot b ON b.LotNo='{3}' AND a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  3137. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  3138. BEGIN
  3139. RAISERROR('" + language.GetNameByCode("WMSAPIInfo170") + @"',16,1);
  3140. RETURN
  3141. END
  3142. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  3143. BEGIN
  3144. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  3145. RETURN
  3146. END
  3147. IF EXISTS(
  3148. SELECT * FROM ICSWareHouseLotInfo a
  3149. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  3150. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  3151. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  3152. )
  3153. BEGIN
  3154. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3155. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  3156. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  3157. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  3158. INNER JOIN ICSExtension e on c.ExtensionID=e.ID and c.WorkPoint=e.WorkPoint
  3159. INNER JOIN ICSExtension f on d.ExtensionID=f.id and d.WorkPoint=f.WorkPoint
  3160. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and e.ID=f.ID)
  3161. BEGIN
  3162. RAISERROR('/',16,1);
  3163. RETURN
  3164. END
  3165. END
  3166. IF NOT EXISTS(
  3167. SELECT * FROM ICSWareHouseLotInfo a
  3168. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  3169. INNER JOIN ICSInventory d on c.invcode=d.invcode and c.WorkPoint=d.WorkPoint
  3170. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.BatchEnable='1'
  3171. )
  3172. BEGIN
  3173. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a
  3174. INNER JOIN ICSWareHouseLotInfo b ON b.LotNo='{3}' AND a.WarehouseCode=b.WarehouseCode AND a.WorkPoint=b.WorkPoint
  3175. INNER JOIN ICSInventoryLot c on a.LotNo=c.LotNo and a.WorkPoint=c.WorkPoint
  3176. INNER JOIN ICSInventoryLot d on b.LotNo=d.LotNo and b.WorkPoint=d.WorkPoint
  3177. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  3178. BEGIN
  3179. RAISERROR('/',16,1);
  3180. RETURN
  3181. END
  3182. END
  3183. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3184. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)+(select Amount from
  3185. ICSInventoryLot where LotNo='{3}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  3186. ";
  3187. sql = string.Format(sql, LotNo, WorkPoint, Quantity, CurrentLotNo);
  3188. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3189. {
  3190. throw new Exception(language.GetNameByCode("WMSAPIInfo169"));//"目标条码库存更新失败!");
  3191. }
  3192. ///更新原条码库存
  3193. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3194. UPDATE ICSInventoryLot SET Amount=(ISNULL(Amount,0)-(select Amount from
  3195. ICSInventoryLot where LotNo='{0}' AND WorkPoint='{1}')) WHERE LotNo='{0}' AND WorkPoint='{1}'
  3196. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3197. BEGIN
  3198. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3199. RETURN
  3200. END";
  3201. sql = string.Format(sql, CurrentLotNo, WorkPoint, Quantity);
  3202. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3203. {
  3204. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3205. }
  3206. ///添加日志
  3207. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3208. BEGIN
  3209. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3210. RETURN
  3211. END
  3212. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3213. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3214. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3215. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3216. MTIME,WorkPoint,EATTRIBUTE1)
  3217. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  3218. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  3219. '','0','{4}','{5}','0','',
  3220. '','','',f.F_Account ,f.F_RealName ,
  3221. SYSDATETIME() ,a.WorkPoint ,''
  3222. FROM ICSInventoryLot a
  3223. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3224. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3225. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3226. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3227. ";
  3228. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  3229. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3230. {
  3231. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3232. }
  3233. }
  3234. catch (Exception)
  3235. {
  3236. throw;
  3237. }
  3238. }
  3239. /// <summary>
  3240. /// 拆分
  3241. /// </summary>
  3242. /// <param name="Identification"></param>
  3243. /// <param name="LotNo"></param>
  3244. /// <param name="User"></param>
  3245. /// <param name="WorkPoint"></param>
  3246. /// <param name="TransType"></param>
  3247. /// <param name="BusinessCode"></param>
  3248. /// <param name="cmd"></param>
  3249. public static void WareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  3250. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  3251. {
  3252. try
  3253. {
  3254. ///更新库存
  3255. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3256. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3257. BEGIN
  3258. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3259. RETURN
  3260. END";
  3261. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3262. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3263. {
  3264. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3265. }
  3266. #region 添加库存
  3267. //插入条码表
  3268. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3269. BEGIN
  3270. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3271. RETURN
  3272. END
  3273. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  3274. BEGIN
  3275. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  3276. RETURN
  3277. END
  3278. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3279. SELECT NEWID(),'{4}' ,a.InvCode,a.ProductDate,a.ExpirationDate ,'{3}',a.Amount/a.Quantity*{3},a.ExtensionID,'101',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,a.LotNo
  3280. FROM ICSInventoryLot a
  3281. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3282. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3283. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  3284. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3285. {
  3286. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  3287. }
  3288. //插入条码单据表
  3289. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3290. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3291. FROM ICSInventoryLot a
  3292. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3293. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3294. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3295. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  3296. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3297. {
  3298. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3299. }
  3300. ///添加库存
  3301. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  3302. BEGIN
  3303. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  3304. RETURN
  3305. END
  3306. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3307. SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  3308. FROM ICSInventoryLot a
  3309. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3310. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  3311. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3312. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3313. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  3314. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3315. {
  3316. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  3317. }
  3318. ///添加日志
  3319. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3320. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3321. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3322. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3323. MTIME,WorkPoint,EATTRIBUTE1)
  3324. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  3325. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  3326. '','0','{4}','{5}','0','',
  3327. '','','',f.F_Account ,f.F_RealName ,
  3328. SYSDATETIME() ,a.WorkPoint ,''
  3329. FROM ICSInventoryLot a
  3330. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3331. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3332. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3333. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3334. ";
  3335. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  3336. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3337. {
  3338. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3339. }
  3340. #endregion
  3341. }
  3342. catch (Exception)
  3343. {
  3344. throw;
  3345. }
  3346. }
  3347. /// <summary>
  3348. /// 拆分(奥美)
  3349. /// </summary>
  3350. /// <param name="Identification"></param>
  3351. /// <param name="LotNo"></param>
  3352. /// <param name="User"></param>
  3353. /// <param name="WorkPoint"></param>
  3354. /// <param name="TransType"></param>
  3355. /// <param name="BusinessCode"></param>
  3356. /// <param name="cmd"></param>
  3357. public static void AMWareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  3358. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  3359. {
  3360. try
  3361. {
  3362. string amount = "";
  3363. //string sqql = @"select a.Amount FROM ICSInventoryLot a
  3364. // WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3365. //sqql = string.Format(sqql, LotNo, WorkPoint);
  3366. //DataTable dtaa = DBHelper.SQlReturnData(sqql, cmd);
  3367. //amount = dtaa.Rows[0]["Amount"].ToString();
  3368. string cheksql = @"select d.EATTRIBUTE1 FROM ICSInventoryLot a
  3369. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3370. INNER JOIN ICSInventory d on a.InvCode=d.InvCode and a.WorkPoint=d.WorkPoint
  3371. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' and d.AmountEnable='1'";
  3372. cheksql = string.Format(cheksql, LotNo, WorkPoint);
  3373. DataTable dta = DBHelper.SQlReturnData(cheksql, cmd);
  3374. if (dta.Rows.Count > 0)
  3375. {
  3376. Quantity = (decimal.Parse(Quantity) * decimal.Parse(dta.Rows[0]["EATTRIBUTE1"].ToString())).ToString();
  3377. }
  3378. ///更新库存
  3379. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  3380. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  3381. BEGIN
  3382. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  3383. RETURN
  3384. END";
  3385. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  3386. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3387. {
  3388. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  3389. }
  3390. #region 添加库存
  3391. //插入条码表
  3392. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  3393. BEGIN
  3394. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  3395. RETURN
  3396. END
  3397. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  3398. BEGIN
  3399. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  3400. RETURN
  3401. END
  3402. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3403. SELECT NEWID(),'{4}' ,a.InvCode,a.ProductDate,a.ExpirationDate ,'{3}',a.Amount/a.Quantity*{3},a.ExtensionID,'101',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,a.LotNo
  3404. FROM ICSInventoryLot a
  3405. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3406. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3407. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  3408. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3409. {
  3410. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  3411. }
  3412. //插入条码单据表
  3413. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  3414. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  3415. FROM ICSInventoryLot a
  3416. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3417. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3418. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3419. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  3420. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3421. {
  3422. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  3423. }
  3424. ///添加库存
  3425. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  3426. BEGIN
  3427. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  3428. RETURN
  3429. END
  3430. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  3431. SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  3432. FROM ICSInventoryLot a
  3433. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3434. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  3435. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3436. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  3437. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  3438. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3439. {
  3440. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  3441. }
  3442. ///添加日志
  3443. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  3444. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  3445. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  3446. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  3447. MTIME,WorkPoint,EATTRIBUTE1)
  3448. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  3449. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  3450. '','0','{4}','{5}','0','',
  3451. '','','',f.F_Account ,f.F_RealName ,
  3452. SYSDATETIME() ,a.WorkPoint ,''
  3453. FROM ICSInventoryLot a
  3454. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3455. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  3456. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  3457. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  3458. ";
  3459. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  3460. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  3461. {
  3462. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  3463. }
  3464. #endregion
  3465. }
  3466. catch (Exception)
  3467. {
  3468. throw;
  3469. }
  3470. }
  3471. /// <summary>
  3472. /// 回写ERP ID
  3473. /// </summary>
  3474. /// <param name="TransType"></param>
  3475. /// <param name="SourceDetailID"></param>
  3476. /// <param name="Identification"></param>
  3477. /// <param name="ID"></param>
  3478. /// <param name="DetailID"></param>
  3479. /// <param name="Code"></param>
  3480. /// <param name="Sequence"></param>
  3481. /// <param name="cmd"></param>
  3482. public static void WareHouseLotInfoLogUpdate(string TransType, string SourceDetailID, string Identification, string ID, string DetailID, string Code, string Sequence, string col, SqlCommand cmd, Dictionary<string, string> language, string BusinessCode)
  3483. {
  3484. string ERPupdate = string.Empty;
  3485. string NewERPupdate = string.Empty;
  3486. try
  3487. {
  3488. //采购入库
  3489. if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
  3490. {
  3491. ERPupdate = @"SELECT a.id
  3492. INTO #NewTempERP
  3493. FROM ICSWareHouseLotInfoLog a
  3494. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3495. INNER JOIN ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3496. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3497. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3498. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3499. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3500. WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3501. and (ISNULL(a.towarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3502. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3503. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3504. where ID in (select id from #NewTempERP)
  3505. DROP TABLE #NewTempERP";
  3506. }
  3507. //审核的到货单
  3508. else if (TransType == TransTypeEnum.DeliveryNotice.GetDescription())
  3509. {
  3510. ERPupdate = @"SELECT a.id
  3511. INTO #NewTempERP
  3512. FROM ICSWareHouseLotInfoLog a
  3513. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3514. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3515. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3516. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3517. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3518. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3519. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3520. and (ISNULL(a.towarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3521. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3522. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3523. where ID in (select id from #NewTempERP)
  3524. DROP TABLE #NewTempERP
  3525. ";
  3526. }
  3527. //采购拒收
  3528. else if (TransType == TransTypeEnum.PurchaseRejectDoc.GetDescription())
  3529. {
  3530. ERPupdate = @"SELECT a.id
  3531. INTO #NewTempERP
  3532. FROM ICSWareHouseLotInfoLog a
  3533. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3534. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3535. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3536. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3537. where ID in (select id from #NewTempERP)
  3538. DROP TABLE #NewTempERP
  3539. ";
  3540. }
  3541. //审核的委外到货单
  3542. else if (TransType == TransTypeEnum.ODeliveryNotice.GetDescription())
  3543. {
  3544. ERPupdate = @"SELECT a.id
  3545. INTO #NewTempERP
  3546. FROM ICSWareHouseLotInfoLog a
  3547. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3548. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3549. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3550. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3551. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3552. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3553. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3554. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3555. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3556. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3557. where ID in (select id from #NewTempERP)
  3558. DROP TABLE #NewTempERP
  3559. ";
  3560. }
  3561. //委外拒收
  3562. else if (TransType == TransTypeEnum.OutsourcingRejectDoc.GetDescription())
  3563. {
  3564. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3565. FROM ICSWareHouseLotInfoLog a
  3566. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3567. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3568. ";
  3569. }
  3570. //采购退货
  3571. else if (TransType == TransTypeEnum.PurchaseReceiveDoctNegative.GetDescription())
  3572. {
  3573. ERPupdate = @"SELECT a.id
  3574. INTO #NewTempERP
  3575. FROM ICSWareHouseLotInfoLog a
  3576. INNER JOIN ICSDeliveryNotice c ON a.TransCode=c.DNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3577. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3578. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3579. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3580. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3581. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.DNType='2' AND a.BusinessCode ='{7}'
  3582. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3583. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3584. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3585. where ID in (select id from #NewTempERP)
  3586. DROP TABLE #NewTempERP
  3587. ";
  3588. }
  3589. //委外发料
  3590. else if (TransType == TransTypeEnum.OutsourcingIssueDoc.GetDescription())
  3591. {
  3592. ERPupdate = @"SELECT a.id
  3593. INTO #NewTempERP
  3594. FROM ICSWareHouseLotInfoLog a
  3595. INNER JOIN ICSOutsourcingOrder y ON a.TransCode=y.OOCode AND a.WorkPoint=y.WorkPoint
  3596. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  3597. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3598. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3599. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3600. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3601. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3602. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3603. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3604. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3605. where ID in (select id from #NewTempERP)
  3606. DROP TABLE #NewTempERP
  3607. ";
  3608. }
  3609. //委外退料
  3610. else if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegative.GetDescription()
  3611. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeApply.GetDescription()
  3612. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeIssue.GetDescription())
  3613. {
  3614. ERPupdate = @"--根据退料单退料
  3615. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3616. FROM ICSWareHouseLotInfoLog a
  3617. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3618. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  3619. INNER JOIN ICSOApplyNeg d ON c.OApplyNegCode=d.OApplyNegCode AND c.WorkPoint=d.WorkPoint
  3620. Left JOIN ICSOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  3621. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3622. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3623. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3624. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3625. WHERE ISNULL(m.ApplyDetailID,ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3626. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3627. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3628. --退-
  3629. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3630. FROM ICSWareHouseLotInfoLog a
  3631. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3632. INNER JOIN ICSOutsourcingOrder y ON b.TransCode=y.OOCode AND b.WorkPoint=y.WorkPoint
  3633. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  3634. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3635. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3636. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3637. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3638. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3639. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3640. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3641. --退-
  3642. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3643. FROM ICSWareHouseLotInfoLog a
  3644. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3645. INNER JOIN ICSOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  3646. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3647. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3648. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3649. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3650. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3651. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3652. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3653. --退-
  3654. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3655. FROM ICSWareHouseLotInfoLog a
  3656. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3657. INNER JOIN ICSOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  3658. LEFT JOIN ICSOOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  3659. LEFT JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  3660. LEFT JOIN ICSOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  3661. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3662. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3663. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3664. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3665. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3666. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3667. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3668. ";
  3669. }
  3670. //委外入库
  3671. else if (TransType == TransTypeEnum.OutsourcingReceiveDoc.GetDescription())
  3672. {
  3673. ERPupdate = @"SELECT a.id
  3674. INTO #NewTempERP
  3675. FROM ICSWareHouseLotInfoLog a
  3676. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3677. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3678. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3679. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3680. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3681. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3682. WHERE c.OODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3683. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3684. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3685. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3686. where ID in (select id from #NewTempERP)
  3687. DROP TABLE #NewTempERP";
  3688. }
  3689. //委外退货
  3690. else if (TransType == TransTypeEnum.OutsourcingReturnBack.GetDescription())
  3691. {
  3692. ERPupdate = @"SELECT a.id
  3693. INTO #NewTempERP
  3694. FROM ICSWareHouseLotInfoLog a
  3695. INNER JOIN ICSODeliveryNotice c ON a.TransCode=c.ODNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3696. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3697. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3698. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3699. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3700. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.ODNType='2' AND a.BusinessCode ='{7}'
  3701. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3702. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3703. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3704. where ID in (select id from #NewTempERP)
  3705. DROP TABLE #NewTempERP
  3706. ";
  3707. }
  3708. //生产发料
  3709. else if (TransType == TransTypeEnum.MOIssueDoc.GetDescription())
  3710. {
  3711. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3712. // FROM ICSWareHouseLotInfoLog a
  3713. // INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  3714. // INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  3715. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3716. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3717. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3718. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3719. // WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3720. // and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3721. // ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3722. // ";
  3723. ERPupdate = @"SELECT a.id
  3724. INTO #NewTempERP
  3725. FROM ICSWareHouseLotInfoLog a
  3726. INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  3727. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  3728. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3729. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3730. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3731. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3732. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3733. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3734. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3735. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3736. where ID in (select id from #NewTempERP)
  3737. DROP TABLE #NewTempERP";
  3738. }
  3739. //生产退料
  3740. else if (TransType == TransTypeEnum.MOIssueDocNegative.GetDescription()
  3741. || TransType == TransTypeEnum.MOIssueDocNegativeApply.GetDescription()
  3742. || TransType == TransTypeEnum.MOIssueDocNegativeIssue.GetDescription())
  3743. {
  3744. ERPupdate = @"--根据退料单退料
  3745. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3746. FROM ICSWareHouseLotInfoLog a
  3747. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3748. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  3749. INNER JOIN ICSMOApplyNeg d ON c.ApplyNegCode=d.ApplyNegCode AND c.WorkPoint=d.WorkPoint
  3750. left JOIN ICSMOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  3751. WHERE ISNULL(m.ApplyDetailID, ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3752. --退-
  3753. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3754. FROM ICSWareHouseLotInfoLog a
  3755. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3756. INNER JOIN ICSMO y ON b.TransCode=y.MOCode AND b.WorkPoint=y.WorkPoint
  3757. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  3758. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3759. --退-
  3760. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3761. FROM ICSWareHouseLotInfoLog a
  3762. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3763. INNER JOIN ICSMOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  3764. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3765. --退-
  3766. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3767. FROM ICSWareHouseLotInfoLog a
  3768. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  3769. INNER JOIN ICSMOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  3770. LEFT JOIN ICSMOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  3771. LEFT JOIN ICSMO y ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint
  3772. LEFT JOIN ICSMOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  3773. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  3774. ";
  3775. }
  3776. //生产入库
  3777. else if (TransType == TransTypeEnum.ManufactureReceiveDoc.GetDescription())
  3778. {
  3779. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3780. // FROM ICSWareHouseLotInfoLog a
  3781. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3782. // INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3783. // INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  3784. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3785. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3786. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3787. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3788. // WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3789. // and (ISNULL(a.fromwarehousecode, '')
  3790. // + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  3791. // + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  3792. // + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  3793. // + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  3794. // + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  3795. // + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  3796. // + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  3797. // + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  3798. // + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  3799. // + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  3800. // + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  3801. // + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  3802. // + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  3803. // + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  3804. //";
  3805. ERPupdate = @"SELECT a.id
  3806. INTO #NewTempERP
  3807. FROM ICSWareHouseLotInfoLog a
  3808. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3809. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3810. INNER JOIN ICSExtension docext ON docext.ID=c.ExtensionID AND docext.WorkPoint=c.WorkPoint
  3811. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3812. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3813. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3814. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3815. WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3816. and (ISNULL(a.fromwarehousecode, '')
  3817. + CASE WHEN ISNULL(docext.ProjectCode,'')!='' Then ISNULL(ext.ProjectCode, '') ELSE '' END
  3818. + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END
  3819. + CASE WHEN ISNULL(docext.Version,'')!='' Then ISNULL(ext.Version, '') ELSE '' END
  3820. + CASE WHEN ISNULL(docext.Brand,'')!='' THEN ISNULL(ext.Brand, '') ELSE '' END
  3821. + CASE WHEN ISNULL(docext.cFree1,'')!='' THEN ISNULL(ext.cFree1, '') ELSE '' END
  3822. + CASE WHEN ISNULL(docext.cFree2,'')!='' THEN ISNULL(ext.cFree2, '') ELSE '' END
  3823. + CASE WHEN ISNULL(docext.cFree3,'')!='' THEN ISNULL(ext.cFree3, '') ELSE '' END
  3824. + CASE WHEN ISNULL(docext.cFree4,'')!='' THEN ISNULL(ext.cFree4, '') ELSE '' END
  3825. + CASE WHEN ISNULL(docext.cFree5,'')!='' THEN ISNULL(ext.cFree5, '') ELSE '' END
  3826. + CASE WHEN ISNULL(docext.cFree6,'')!='' THEN ISNULL(ext.cFree6, '') ELSE '' END
  3827. + CASE WHEN ISNULL(docext.cFree7,'')!='' THEN ISNULL(ext.cFree7, '') ELSE '' END
  3828. + CASE WHEN ISNULL(docext.cFree8,'')!='' THEN ISNULL(ext.cFree8, '') ELSE '' END
  3829. + CASE WHEN ISNULL(docext.cFree9,'')!='' THEN ISNULL(ext.cFree9, '') ELSE '' END
  3830. + CASE WHEN ISNULL(docext.cFree10,'')!='' THEN ISNULL(ext.cFree10, '') ELSE '' END)='{6}'
  3831. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3832. where ID in (select id from #NewTempERP)
  3833. DROP TABLE #NewTempERP
  3834. ";
  3835. }
  3836. //开立的生产入库单
  3837. else if (TransType == TransTypeEnum.ManufactureReceive.GetDescription())
  3838. {
  3839. ERPupdate = @"SELECT a.id
  3840. INTO #NewTempERP
  3841. FROM ICSWareHouseLotInfoLog a
  3842. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3843. INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3844. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  3845. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3846. where ID in (select id from #NewTempERP)
  3847. DROP TABLE #NewTempERP
  3848. ";
  3849. }
  3850. //销售出库
  3851. else if (TransType == TransTypeEnum.SalesShipmentDoc.GetDescription())
  3852. {
  3853. ERPupdate = @"SELECT a.id
  3854. INTO #NewTempERP
  3855. FROM ICSWareHouseLotInfoLog a
  3856. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3857. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3858. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3859. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3860. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3861. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  3862. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3863. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3864. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3865. where ID in (select id from #NewTempERP)
  3866. DROP TABLE #NewTempERP
  3867. ";
  3868. }
  3869. //销售退货
  3870. else if (TransType == TransTypeEnum.SalesShipmentDocNegative.GetDescription())
  3871. {
  3872. ERPupdate = @"SELECT a.id
  3873. INTO #NewTempERP
  3874. FROM ICSWareHouseLotInfoLog a
  3875. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3876. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3877. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3878. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3879. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3880. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  3881. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3882. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3883. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3884. where ID in (select id from #NewTempERP)
  3885. DROP TABLE #NewTempERP";
  3886. }
  3887. //返工工单
  3888. else if (TransType == TransTypeEnum.ReWorkReceiveMo.GetDescription())
  3889. {
  3890. ERPupdate = @"SELECT a.id
  3891. INTO #NewTempERP
  3892. FROM ICSWareHouseLotInfoLog a
  3893. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  3894. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.WorkPoint=c.WorkPoint
  3895. INNER JOIN ICSMOPick d ON d.MODetailID=c.MODetailID AND d.WorkPoint=c.WorkPoint and b.TransSequence=c.Sequence+'-'+d.Sequence
  3896. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3897. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3898. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3899. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3900. WHERE d.PickID='{3}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3901. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3902. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3903. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3904. where ID in (select id from #NewTempERP)
  3905. DROP TABLE #NewTempERP
  3906. ";
  3907. }
  3908. //一步调拨
  3909. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  3910. {
  3911. ERPupdate = @"SELECT a.id
  3912. INTO #NewTempERP
  3913. FROM ICSWareHouseLotInfoLog a
  3914. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3915. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  3916. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3917. where ID in (select id from #NewTempERP)
  3918. DROP TABLE #NewTempERP
  3919. ";
  3920. }
  3921. //调拨
  3922. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  3923. {
  3924. ERPupdate = @"SELECT a.id
  3925. INTO #NewTempERP
  3926. FROM ICSWareHouseLotInfoLog a
  3927. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3928. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
  3929. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3930. where ID in (select id from #NewTempERP)
  3931. DROP TABLE #NewTempERP
  3932. ";
  3933. }
  3934. //无源头调拨
  3935. else if (TransType == TransTypeEnum.StepNoTransferDocIn.GetDescription())
  3936. {
  3937. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3938. FROM ICSWareHouseLotInfoLog a
  3939. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3940. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3941. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3942. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3943. WHERE a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode='70'
  3944. and (ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3945. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3946. ";
  3947. }
  3948. //两步调出
  3949. else if (TransType == TransTypeEnum.TwoStepTransferDocOut.GetDescription())
  3950. {
  3951. ERPupdate = @"SELECT a.id
  3952. INTO #NewTempERP
  3953. FROM ICSWareHouseLotInfoLog a
  3954. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3955. INNER JOIN ICSTransfer d ON c.TransferDetailID=d.TransferDetailID AND c.WorkPoint=d.WorkPoint
  3956. WHERE c.OutID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3957. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3958. where ID in (select id from #NewTempERP)
  3959. DROP TABLE #NewTempERP
  3960. ";
  3961. }
  3962. //两步调入
  3963. else if (TransType == TransTypeEnum.TwoStepTransferDocIn.GetDescription())
  3964. {
  3965. ERPupdate = @"SELECT a.id
  3966. INTO #NewTempERP
  3967. FROM ICSWareHouseLotInfoLog a
  3968. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  3969. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  3970. WHERE b.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  3971. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3972. where ID in (select id from #NewTempERP)
  3973. DROP TABLE #NewTempERP
  3974. ";
  3975. }
  3976. //销售退货-原条码
  3977. else if (TransType == TransTypeEnum.SalesReturnBack.GetDescription())
  3978. {
  3979. ERPupdate = @"SELECT a.id
  3980. INTO #NewTempERP
  3981. FROM ICSWareHouseLotInfoLog a
  3982. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  3983. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  3984. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  3985. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  3986. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  3987. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  3988. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  3989. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  3990. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  3991. where ID in (select id from #NewTempERP)
  3992. DROP TABLE #NewTempERP";
  3993. }
  3994. //其他出库
  3995. else if (TransType == TransTypeEnum.OtherOutDoc.GetDescription())
  3996. {
  3997. ERPupdate = @"SELECT a.id
  3998. INTO #NewTempERP
  3999. FROM ICSWareHouseLotInfoLog a
  4000. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4001. WHERE c.OutID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND a.BusinessCode ='{7}'
  4002. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4003. where ID in (select id from #NewTempERP)
  4004. DROP TABLE #NewTempERP
  4005. ";
  4006. }
  4007. //其他入库
  4008. else if (TransType == TransTypeEnum.OtherInDoc.GetDescription())
  4009. {
  4010. ERPupdate = @"SELECT a.id
  4011. INTO #NewTempERP
  4012. FROM ICSWareHouseLotInfoLog a
  4013. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4014. INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  4015. WHERE c.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4016. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4017. where ID in (select id from #NewTempERP)
  4018. DROP TABLE #NewTempERP
  4019. ";
  4020. }
  4021. //拆卸单
  4022. else if (TransType == TransTypeEnum.DisassemblyDoc.GetDescription())
  4023. {
  4024. ERPupdate = @"UPDATE d set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4025. FROM ICSWareHouseLotInfoLog a
  4026. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4027. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  4028. INNER JOIN ICSWareHouseLotInfoLog d ON b.TransCode=d.TransCode AND d.TransSequence='1' AND b.WorkPoint=d.WorkPoint
  4029. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND d.ERPUpload='0' AND a.BusinessCode ='{7}'
  4030. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4031. FROM ICSWareHouseLotInfoLog a
  4032. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4033. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  4034. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.DABDOCType='2' AND a.BusinessCode ='{7}'
  4035. ";
  4036. }
  4037. //领料申请单
  4038. else if (TransType == TransTypeEnum.MOApply.GetDescription())
  4039. {
  4040. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4041. // FROM ICSWareHouseLotInfoLog a
  4042. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4043. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4044. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4045. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4046. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4047. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4048. // and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  4049. // ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  4050. // ";
  4051. ERPupdate = @"SELECT a.id
  4052. INTO #NewTempERP
  4053. FROM ICSWareHouseLotInfoLog a
  4054. INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4055. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4056. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4057. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4058. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4059. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4060. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  4061. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  4062. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4063. where ID in (select id from #NewTempERP)
  4064. DROP TABLE #NewTempERP
  4065. ";
  4066. }
  4067. //补料申请单
  4068. else if (TransType == TransTypeEnum.MOReplenishment.GetDescription())
  4069. {
  4070. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4071. // FROM ICSWareHouseLotInfoLog a
  4072. // INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4073. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4074. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4075. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4076. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4077. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4078. // and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  4079. // ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  4080. // ";
  4081. ERPupdate = @"SELECT a.id
  4082. INTO #NewTempERP
  4083. FROM ICSWareHouseLotInfoLog a
  4084. INNER JOIN ICSMOReplenishment c ON a.TransCode=c.ReplenishmentCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4085. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4086. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4087. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4088. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4089. WHERE c.ReplenishmentDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4090. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  4091. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  4092. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4093. where ID in (select id from #NewTempERP)
  4094. DROP TABLE #NewTempERP
  4095. ";
  4096. }
  4097. //委外领料申请单
  4098. else if (TransType == TransTypeEnum.OOApply.GetDescription())
  4099. {
  4100. //ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4101. // FROM ICSWareHouseLotInfoLog a
  4102. // INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4103. // INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4104. // INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4105. // INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4106. // LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4107. // WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4108. // and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  4109. // ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  4110. // ";
  4111. ERPupdate = @"SELECT a.id
  4112. INTO #NewTempERP
  4113. FROM ICSWareHouseLotInfoLog a
  4114. INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4115. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4116. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4117. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4118. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4119. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4120. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  4121. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  4122. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4123. where ID in (select id from #NewTempERP)
  4124. DROP TABLE #NewTempERP
  4125. ";
  4126. }
  4127. //开立材料出库
  4128. else if (TransType == TransTypeEnum.MOIssue.GetDescription())
  4129. {
  4130. ERPupdate = @"SELECT a.id
  4131. INTO #NewTempERP
  4132. FROM ICSWareHouseLotInfoLog a
  4133. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4134. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4135. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4136. where ID in (select id from #NewTempERP)
  4137. DROP TABLE #NewTempERP
  4138. ";
  4139. }
  4140. //开立委外材料出库
  4141. else if (TransType == TransTypeEnum.OOIssue.GetDescription())
  4142. {
  4143. ERPupdate = @"SELECT a.id
  4144. INTO #NewTempERP
  4145. FROM ICSWareHouseLotInfoLog a
  4146. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4147. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4148. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4149. where ID in (select id from #NewTempERP)
  4150. DROP TABLE #NewTempERP
  4151. ";
  4152. }
  4153. //开立红字入库单
  4154. else if (TransType == TransTypeEnum.PurchaseReceive.GetDescription())
  4155. {
  4156. ERPupdate = @"SELECT a.id
  4157. INTO #NewTempERP
  4158. FROM ICSWareHouseLotInfoLog a
  4159. INNER JOIN ICSPurchaseReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4160. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  4161. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4162. where ID in (select id from #NewTempERP)
  4163. DROP TABLE #NewTempERP
  4164. ";
  4165. }
  4166. //开立委外红字入库单
  4167. else if (TransType == TransTypeEnum.OutsourcingReceiveDocNegative.GetDescription())
  4168. {
  4169. ERPupdate = @"SELECT a.id
  4170. INTO #NewTempERP
  4171. FROM ICSWareHouseLotInfoLog a
  4172. INNER JOIN ICSOutsourcingReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4173. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
  4174. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4175. where ID in (select id from #NewTempERP)
  4176. DROP TABLE #NewTempERP
  4177. ";
  4178. }
  4179. //借用
  4180. else if (TransType == TransTypeEnum.BrrowDoc.GetDescription())
  4181. {
  4182. ERPupdate = @"SELECT a.id
  4183. INTO #NewTempERP
  4184. FROM ICSWareHouseLotInfoLog a
  4185. INNER JOIN ICSBrrow c ON a.TransCode=c.BrrowCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  4186. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4187. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4188. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4189. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4190. WHERE c.BrrowDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4191. and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  4192. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  4193. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4194. where ID in (select id from #NewTempERP)
  4195. DROP TABLE #NewTempERP";
  4196. }
  4197. //归还
  4198. else if (TransType == TransTypeEnum.ReturnDoc.GetDescription())
  4199. {
  4200. ERPupdate = @"SELECT a.id
  4201. INTO #NewTempERP
  4202. FROM ICSWareHouseLotInfoLog a
  4203. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4204. INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  4205. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  4206. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  4207. INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
  4208. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  4209. WHERE c.ReturnDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND a.BusinessCode ='{7}'
  4210. and (ISNULL(a.tohwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
  4211. ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
  4212. UPDATE ICSWareHouseLotInfoLog set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  4213. where ID in (select id from #NewTempERP)
  4214. DROP TABLE #NewTempERP";
  4215. }
  4216. ERPupdate = string.Format(ERPupdate, SourceDetailID, Identification, ID, DetailID, Code, Sequence, col, BusinessCode);
  4217. if (!DBHelper.ExecuteNonQuery(ERPupdate, cmd))
  4218. {
  4219. throw new Exception(TransType + language.GetNameByCode("WMSAPIInfo175"));//"回写日志失败!");
  4220. }
  4221. }
  4222. catch (Exception ex)
  4223. {
  4224. log.Debug(ex.ToString());
  4225. log.Debug(TransType + Environment.NewLine + ERPupdate);
  4226. throw;
  4227. }
  4228. }
  4229. /// <summary>
  4230. /// 倒冲时子件已领数量回写
  4231. /// </summary>
  4232. public static void DetailQTYUpdate()
  4233. {
  4234. }
  4235. /// <summary>
  4236. /// 生成条码
  4237. /// </summary>
  4238. /// <param name="LotNo"></param>
  4239. /// <param name="Quantity"></param>
  4240. /// <param name="TransCode"></param>
  4241. /// <param name="TransSequence"></param>
  4242. /// <param name="WorkPoint"></param>
  4243. /// <param name="Identification"></param>
  4244. /// <param name="User"></param>
  4245. /// <param name="InvCode"></param>
  4246. /// <param name="BusinessCode"></param>
  4247. /// <param name="ProjectCode"></param>
  4248. /// <param name="BatchCode"></param>
  4249. /// <param name="Version"></param>
  4250. /// <param name="Brand"></param>
  4251. /// <param name="cFree1"></param>
  4252. /// <param name="cFree2"></param>
  4253. /// <param name="cFree3"></param>
  4254. /// <param name="cFree4"></param>
  4255. /// <param name="cFree5"></param>
  4256. /// <param name="cFree6"></param>
  4257. /// <param name="cFree7"></param>
  4258. /// <param name="cFree8"></param>
  4259. /// <param name="cFree9"></param>
  4260. /// <param name="cFree10"></param>
  4261. /// <param name="cmd"></param>
  4262. /// <param name="language"></param>
  4263. public static void CreateLotNo(string LotNo, string Quantity, string TransCode, string TransSequence, string WorkPoint, string Identification, string User, string InvCode, string BusinessCode,
  4264. string ProjectCode, string BatchCode, string Version, string Brand, string cFree1, string cFree2, string cFree3, string cFree4, string cFree5,string cFree6, string cFree7, string cFree8, string cFree9, string cFree10, SqlCommand cmd, Dictionary<string, string> language,string LocationCode,string OLDLotNo)
  4265. {
  4266. try
  4267. {
  4268. String EffectiveEnable = "";
  4269. String Colspan = "";
  4270. String IDD = "";
  4271. int EffectiveDays = 0;
  4272. String Time = "";
  4273. int EffectiveDayss = 0;
  4274. DateTime dtt;
  4275. DateTime now = DateTime.Now;
  4276. string sql = string.Empty;
  4277. //string sql = @"select EffectiveEnable,EffectiveDays from ICSInventory a
  4278. // Left Join ICSMO b ON a.InvCode=b.InvCode and a.WorkPoint = b.WorkPoint
  4279. // where b.MoCode='{0}' and b.WorkPoint='{1}'";
  4280. //sql = string.Format(sql, TransCode, WorkPoint);
  4281. //DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  4282. //if (dt.Rows.Count == 0)
  4283. //{
  4284. // throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  4285. //}
  4286. //else
  4287. //{
  4288. // EffectiveEnable = dt.Rows[0]["EffectiveEnable"].ToString();
  4289. //EffectiveDays = Convert.ToInt32(dt.Rows[0]["EffectiveDays"]);
  4290. //}
  4291. //EffectiveDayss = Convert.ToInt32(EffectiveDays);
  4292. //if (!EffectiveEnable.Equals("False"))
  4293. //{
  4294. int year = now.Year;
  4295. int month = now.Month;
  4296. int day = now.Day;
  4297. int n = DateTime.DaysInMonth(year, month);
  4298. int k = day + EffectiveDays;
  4299. if (k > n)
  4300. {
  4301. day = EffectiveDays - (n - day);
  4302. month = month + 1;
  4303. if (month > 12)
  4304. {
  4305. month = 1;
  4306. year = year + 1;
  4307. }
  4308. }
  4309. else
  4310. {
  4311. day = day + EffectiveDays;
  4312. }
  4313. Time = year + "-" + month + "-" + day;
  4314. //}
  4315. //else
  4316. //{
  4317. // Time = "2999-12-31 00:00:00.000";
  4318. //}
  4319. dtt = Convert.ToDateTime(Time);
  4320. //检验自由项
  4321. Colspan = ProjectCode + "~" + BatchCode + "~" + Version
  4322. + "~" + Brand + "~" + cFree1
  4323. + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
  4324. + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
  4325. + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
  4326. sql = @"select ID,Colspan from ICSExtension a
  4327. where Colspan='{0}' and WorkPoint='{1}'";
  4328. sql = string.Format(sql, Colspan, WorkPoint);
  4329. DataTable dttt = DBHelper.SQlReturnData(sql, cmd);
  4330. if (dttt.Rows.Count == 0)
  4331. {
  4332. IDD = Guid.NewGuid().ToString();
  4333. sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint)
  4334. select '{17}','{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}',GETDATE(),'{15}',f.F_RealName,'{16}'from Sys_SRM_User f where f.F_Account='{15}' and f.F_Location='{16}'";
  4335. sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
  4336. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4337. {
  4338. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  4339. }
  4340. }
  4341. else
  4342. {
  4343. IDD = dttt.Rows[0]["ID"].ToString();
  4344. }
  4345. //存入条码表
  4346. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{4}')
  4347. BEGIN
  4348. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4349. RETURN
  4350. END
  4351. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  4352. Quantity,Amount,ExtensionID,Type,PrintTimes,
  4353. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  4354. WorkPoint,EATTRIBUTE1)
  4355. SELECT TOP 1 NEWID(),'{0}','{8}',GETDATE(),'{6}',
  4356. '{1}','0','{7}','16',null,
  4357. null,null,'{2}' ,f.F_RealName ,GETDATE(),
  4358. '{4}' ,''
  4359. FROM Sys_SRM_User f
  4360. where f.F_Account='{2}' and f.F_Location='{4}'
  4361. ";
  4362. sql = string.Format(sql, LotNo, Quantity, User, TransCode, WorkPoint, TransSequence, dtt, IDD,InvCode);
  4363. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4364. {
  4365. throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
  4366. }
  4367. ///存入条码关联表
  4368. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{3}')
  4369. BEGIN
  4370. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  4371. RETURN
  4372. END
  4373. INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,
  4374. WorkPoint,EATTRIBUTE1)
  4375. SELECT '{4}','{0}','{1}',f.F_Account ,f.F_RealName,GETDATE(),
  4376. a.WorkPoint,''
  4377. FROM ICSInventoryLot a
  4378. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4379. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4380. WHERE a.LotNo='{5}' AND a.WorkPoint='{3}'
  4381. ";
  4382. sql = string.Format(sql, TransCode, TransSequence, User, WorkPoint, LotNo, OLDLotNo);
  4383. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4384. {
  4385. throw new Exception(language.GetNameByCode("WMSAPIInfo367"));
  4386. }
  4387. //存入库存表
  4388. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  4389. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'0',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  4390. FROM ICSInventoryLot a
  4391. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  4392. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  4393. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  4394. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  4395. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  4396. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  4397. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  4398. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  4399. {
  4400. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  4401. }
  4402. }
  4403. catch (Exception)
  4404. {
  4405. throw;
  4406. }
  4407. }
  4408. }
  4409. }