纽威
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.

1684 lines
104 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. using ICSSoft.Common;
  2. using ICSSoft.Entity;
  3. using Newtonsoft.Json;
  4. using 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)
  52. {
  53. try
  54. {
  55. ///添加库存(原条码退回,更新库存;新条码直接入库)
  56. string sql = string.Empty;
  57. string locationcode = "";
  58. if (BusinessCode != TransTypeEnum.SalesReturnBack.GetDescription<DBValue>())
  59. {
  60. if (string.IsNullOrWhiteSpace(LogID))
  61. {
  62. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  63. BEGIN
  64. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  65. RETURN
  66. END ";
  67. }
  68. else
  69. {
  70. sql = @"SELECT LocationCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
  71. sql = string.Format(sql, LotNo, WorkPoint);
  72. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  73. if (dt == null || dt.Rows.Count <= 0)
  74. {
  75. throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
  76. }
  77. locationcode = dt.Rows[0]["LocationCode"].ToString();
  78. }
  79. }
  80. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  81. BEGIN
  82. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  83. RETURN
  84. END
  85. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  86. BEGIN
  87. IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
  88. BEGIN
  89. UPDATE a SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
  90. From ICSWareHouseLotInfo a
  91. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  92. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  93. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  94. END
  95. ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
  96. BEGIN
  97. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}'
  98. WHERE LotNo='{0}' AND WorkPoint='{1}'
  99. END
  100. ELSE IF('" + locationcode + @"' != '{4}')
  101. BEGIN
  102. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
  103. RETURN
  104. END
  105. END
  106. ELSE
  107. BEGIN
  108. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  109. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  110. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  111. BEGIN
  112. IF NOT 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}' AND il.LocationCode='{4}')
  115. BEGIN
  116. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  117. RETURN
  118. END
  119. END
  120. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  121. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  122. FROM ICSInventoryLot a
  123. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  124. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  125. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  126. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  127. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  128. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  129. END";
  130. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);
  131. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  132. {
  133. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  134. }
  135. ///添加日志
  136. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  137. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  138. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  139. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  140. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  141. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  142. '','',c.WarehouseCode,c.LocationCode,'{6}',
  143. '','0','{4}','{5}','0','',
  144. '','','',f.F_Account ,f.F_RealName ,
  145. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  146. FROM ICSInventoryLot a
  147. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  148. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  149. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  150. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  151. ";
  152. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  153. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  154. {
  155. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  156. }
  157. ControlMode mode = ICSControlModeService.GetControlMode();
  158. //管控方式是"料品"时
  159. if (mode.itemCode.Equals("ControlMode02"))
  160. {
  161. ///将物料编码作为物料条码添加库存(原条码退回,更新库存;新条码直接入库)
  162. if (BusinessCode != TransTypeEnum.SalesReturnBack.GetDescription<DBValue>()
  163. && string.IsNullOrWhiteSpace(LogID))
  164. {
  165. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  166. BEGIN
  167. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  168. RETURN
  169. END ";
  170. }
  171. sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  172. BEGIN
  173. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  174. RETURN
  175. END
  176. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  177. BEGIN
  178. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  179. END
  180. ELSE
  181. BEGIN
  182. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  183. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  184. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  185. BEGIN
  186. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  187. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  188. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
  189. BEGIN
  190. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  191. RETURN
  192. END
  193. END
  194. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  195. SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  196. FROM ICSInventoryLot a
  197. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  198. --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  199. INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
  200. INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
  201. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  202. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  203. END";
  204. sql = string.Format(sql, jointLotNo, WorkPoint, User, Quantity, LocationCode);
  205. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  206. {
  207. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  208. }
  209. ///添加日志
  210. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  211. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  212. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  213. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  214. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  215. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  216. '','',c.WarehouseCode,c.LocationCode,'{6}',
  217. '','0','{4}','{5}','0','',
  218. '','','',f.F_Account ,f.F_RealName ,
  219. SYSDATETIME() ,a.WorkPoint ,'','{7}'
  220. FROM ICSInventoryLot a
  221. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  222. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  223. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  224. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  225. ";
  226. sql = string.Format(sql, jointLotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);
  227. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  228. {
  229. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  230. }
  231. }
  232. }
  233. catch (Exception)
  234. {
  235. throw;
  236. }
  237. }
  238. /// <summary>
  239. /// 减少库存
  240. /// </summary>
  241. /// <param name="Identification"></param>
  242. /// <param name="TransCode"></param>
  243. /// <param name="TransSequence"></param>
  244. /// <param name="LotNo"></param>
  245. /// <param name="Quantity"></param>
  246. /// <param name="User"></param>
  247. /// <param name="WorkPoint"></param>
  248. /// <param name="TransType"></param>
  249. /// <param name="BusinessCode"></param>
  250. /// <param name="cmd"></param>
  251. public static DataTable WareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  252. string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID = "")
  253. {
  254. String LotEnable = "";
  255. String PrintEnable = "";
  256. string lotstr = "";
  257. int result = 0;
  258. List<string> NewBarCodeList = new List<string>();
  259. DataTable dtLotno = new DataTable();
  260. DataTable lstDt = new DataTable();
  261. try
  262. {
  263. ///更新库存
  264. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  265. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  266. BEGIN
  267. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  268. RETURN
  269. END";
  270. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  271. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  272. {
  273. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  274. }
  275. //检验是否分批
  276. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  277. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  278. where a.LotNo='{0}' and a.WorkPoint='{1}'
  279. ";
  280. sql = string.Format(sql, LotNo, WorkPoint);
  281. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  282. if (dt.Rows.Count == 0)
  283. {
  284. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  285. }
  286. else
  287. {
  288. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  289. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  290. }
  291. if (LotEnable.Equals("True"))
  292. {
  293. ///分批前添加日志
  294. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  295. BEGIN
  296. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  297. RETURN
  298. END
  299. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  300. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  301. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  302. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  303. MTIME,WorkPoint,EATTRIBUTE1)
  304. SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
  305. c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
  306. '','0','{4}','31','0','',
  307. '','','',f.F_Account ,f.F_RealName ,
  308. SYSDATETIME() ,a.WorkPoint ,''
  309. FROM ICSInventoryLot a
  310. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  311. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  312. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  313. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  314. ";
  315. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);
  316. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  317. {
  318. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  319. }
  320. #region 获取分批后的条码(lotstr)
  321. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  322. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  323. sql = string.Format(sql, LotNo, WorkPoint);
  324. dt = DBHelper.SQlReturnData(sql, cmd);
  325. if (dt.Rows.Count == 0)
  326. {
  327. lotstr = LotNo + "-" + 1;
  328. }
  329. else
  330. {
  331. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  332. }
  333. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  334. #endregion
  335. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  336. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  337. Quantity,Amount,ExtensionID,Type,PrintTimes,
  338. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  339. WorkPoint,EATTRIBUTE1)
  340. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  341. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  342. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  343. a.WorkPoint ,'{1}'
  344. From ICSInventoryLot a
  345. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  346. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  347. cmd.CommandText = sql;
  348. result = cmd.ExecuteNonQuery();
  349. if (result <= 0)
  350. {
  351. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  352. }
  353. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  354. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
  355. ,MUSER,MUSERName,GETDATE(),'{3}',''
  356. from ICSWareHouseLotInfo
  357. where LotNO='{1}' AND WorkPoint='{3}'";
  358. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  359. cmd.CommandText = sql;
  360. result = cmd.ExecuteNonQuery();
  361. if (result <= 0)
  362. {
  363. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  364. }
  365. //插入条码单据表
  366. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  367. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  368. FROM ICSInventoryLot a
  369. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  370. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  371. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  372. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  373. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  374. {
  375. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  376. }
  377. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  378. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  379. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  380. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  381. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  382. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  383. c.WarehouseCode,c.LocationCode,'','','{6}',
  384. '','0','{7}','{8}','0','',
  385. '','','',f.F_Account ,f.F_RealName ,
  386. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  387. FROM ICSInventoryLot a
  388. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  389. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  390. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  391. ";
  392. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
  393. cmd.CommandText = sql;
  394. result = cmd.ExecuteNonQuery();
  395. if (result <= 0)
  396. {
  397. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  398. }
  399. if (PrintEnable.Equals("True"))
  400. {
  401. 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
  402. from ICSWareHouseLotInfolog A
  403. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  404. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  405. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  406. where a.BusinessCode ='105'
  407. and A.lotno like'{0}%' and a.workpoint='{1}'
  408. ";
  409. sql = string.Format(sql, LotNo, WorkPoint);
  410. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  411. lstDt=dtLotno;
  412. }
  413. ///添加日志
  414. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  415. BEGIN
  416. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  417. RETURN
  418. END
  419. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  420. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  421. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  422. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  423. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  424. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  425. c.WarehouseCode,c.LocationCode,'','',c.Quantity,
  426. '','0','{7}','32','0','',
  427. '','','',f.F_Account ,f.F_RealName ,
  428. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  429. FROM ICSInventoryLot a
  430. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  431. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  432. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  433. ";
  434. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  435. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  436. {
  437. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  438. }
  439. #endregion
  440. }
  441. else
  442. {
  443. NewBarCodeList.Add(LotNo);
  444. ///添加日志
  445. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  446. BEGIN
  447. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  448. RETURN
  449. END
  450. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  451. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  452. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  453. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  454. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  455. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  456. c.WarehouseCode,c.LocationCode,'','','{6}',
  457. '','0','{7}','{8}','0','',
  458. '','','',f.F_Account ,f.F_RealName ,
  459. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  460. FROM ICSInventoryLot a
  461. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  462. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  463. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  464. ";
  465. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);
  466. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  467. {
  468. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  469. }
  470. }
  471. }
  472. catch (Exception)
  473. {
  474. throw;
  475. }
  476. return lstDt;
  477. }
  478. /// <summary>
  479. /// 修改库存
  480. /// </summary>
  481. /// <param name="Identification"></param>
  482. /// <param name="TransCode"></param>
  483. /// <param name="TransSequence"></param>
  484. /// <param name="LotNo"></param>
  485. /// <param name="Quantity"></param>
  486. /// <param name="User"></param>
  487. /// <param name="WorkPoint"></param>
  488. /// <param name="TransType"></param>
  489. /// <param name="cmd"></param>
  490. public static void WareHouseLotInfoUpdate(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
  491. string WorkPoint, string TransType,string CheckKind, SqlCommand cmd, Dictionary<string, string> language)
  492. {
  493. try
  494. {
  495. ///添加日志
  496. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  497. BEGIN
  498. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  499. RETURN
  500. END
  501. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  502. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  503. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  504. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  505. MTIME,WorkPoint,EATTRIBUTE1)
  506. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  507. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  508. '{8}','0','{6}','{7}','0','',
  509. '','','',f.F_Account ,f.F_RealName ,
  510. SYSDATETIME() ,a.WorkPoint ,''
  511. FROM ICSWareHouseLotInfo a
  512. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  513. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  514. ";
  515. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckBefore.GetDescription<DBValue>(), CheckKind);
  516. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  517. {
  518. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  519. }
  520. ///更新库存
  521. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity='{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'";
  522. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  523. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  524. {
  525. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  526. }
  527. ///添加日志
  528. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  529. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  530. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  531. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  532. MTIME,WorkPoint,EATTRIBUTE1)
  533. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  534. a.WarehouseCode,a.LocationCode,'','',a.Quantity,
  535. '','0','{6}','{7}','0','',
  536. '','','',f.F_Account ,f.F_RealName ,
  537. SYSDATETIME() ,a.WorkPoint ,''
  538. FROM ICSWareHouseLotInfo a
  539. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  540. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  541. ";
  542. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckAfter.GetDescription<DBValue>());
  543. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  544. {
  545. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  546. }
  547. }
  548. catch (Exception)
  549. {
  550. throw;
  551. }
  552. }
  553. /// <summary>
  554. /// 调拨
  555. /// </summary>
  556. /// <param name="LocationCode"></param>
  557. /// <param name="LotNo"></param>
  558. /// <param name="Quantity"></param>
  559. /// <param name="User"></param>
  560. /// <param name="WorkPoint"></param>
  561. /// <param name="TransType"></param>
  562. /// <param name="BusinessCode"></param>
  563. /// <param name="cmd"></param>
  564. public static DataTable WareHouseLotInfoTransfer(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  565. string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
  566. {
  567. String LotEnable = "";
  568. String PrintEnable = "";
  569. string lotstr = "";
  570. int result = 0;
  571. DataTable dtLotno = new DataTable();
  572. DataTable lstDt = new DataTable();
  573. List<string> NewBarCodeList = new List<string>();
  574. try
  575. {
  576. ///分批前添加日志
  577. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  578. BEGIN
  579. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  580. RETURN
  581. END
  582. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  583. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  584. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  585. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  586. MTIME,WorkPoint,EATTRIBUTE1)
  587. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  588. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  589. '','0','{4}','31','0','',
  590. '','','',f.F_Account ,f.F_RealName ,
  591. SYSDATETIME() ,a.WorkPoint ,''
  592. FROM ICSInventoryLot a
  593. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  594. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  595. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  596. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  597. ";
  598. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  599. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  600. {
  601. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  602. }
  603. //检验是否分批
  604. sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
  605. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  606. where a.LotNo='{0}' and a.WorkPoint='{1}'
  607. ";
  608. sql = string.Format(sql, LotNo, WorkPoint);
  609. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  610. if (dt.Rows.Count == 0)
  611. {
  612. throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
  613. }
  614. else
  615. {
  616. LotEnable = dt.Rows[0]["LotEnable"].ToString();
  617. PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
  618. }
  619. if (!LotEnable.Equals("False"))
  620. {
  621. #region 获取分批后的条码(lotstr)
  622. sql = @"SELECT TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}'
  623. ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
  624. sql = string.Format(sql, LotNo, WorkPoint);
  625. dt = DBHelper.SQlReturnData(sql, cmd);
  626. if (dt.Rows.Count == 0)
  627. {
  628. lotstr = LotNo + "-" + 1;
  629. }
  630. else
  631. {
  632. lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
  633. }
  634. NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
  635. #endregion
  636. #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
  637. sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
  638. Quantity,Amount,ExtensionID,Type,PrintTimes,
  639. LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
  640. WorkPoint,EATTRIBUTE1)
  641. SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
  642. '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
  643. a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
  644. a.WorkPoint ,'{1}'
  645. From ICSInventoryLot a
  646. where a.LotNo='{1}' and a.WorkPoint='{3}'";
  647. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  648. cmd.CommandText = sql;
  649. result = cmd.ExecuteNonQuery();
  650. if (result <= 0)
  651. {
  652. throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
  653. }
  654. #endregion
  655. sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  656. select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'{2}',InDate,LockQuantity
  657. ,MUSER,MUSERName,GETDATE(),'{3}',''
  658. from ICSWareHouseLotInfo
  659. where LotNO='{1}' AND WorkPoint='{3}'";
  660. sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
  661. cmd.CommandText = sql;
  662. result = cmd.ExecuteNonQuery();
  663. if (result <= 0)
  664. {
  665. throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
  666. }
  667. //插入条码单据表
  668. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  669. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  670. FROM ICSInventoryLot a
  671. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  672. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  673. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  674. sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);
  675. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  676. {
  677. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  678. }
  679. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  680. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  681. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  682. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  683. MTIME,WorkPoint,EATTRIBUTE1,LogID)
  684. SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
  685. c.WarehouseCode,c.LocationCode,'','','{6}',
  686. '','0','{7}','105','0','',
  687. '','','',f.F_Account ,f.F_RealName ,
  688. SYSDATETIME() ,a.WorkPoint ,'','{9}'
  689. FROM ICSInventoryLot a
  690. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  691. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  692. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  693. ";
  694. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
  695. cmd.CommandText = sql;
  696. result = cmd.ExecuteNonQuery();
  697. if (result <= 0)
  698. {
  699. throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
  700. }
  701. ///添加日志
  702. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  703. BEGIN
  704. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  705. RETURN
  706. END
  707. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND WorkPoint='{1}' AND LotNo = '{0}')
  708. BEGIN
  709. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  710. RETURN
  711. END
  712. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  713. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  714. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  715. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  716. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  717. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  718. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  719. '','0','{7}','32','0','',
  720. '','','',f.F_Account ,f.F_RealName ,
  721. SYSDATETIME() ,a.WorkPoint ,'','{11}'
  722. FROM ICSInventoryLot a
  723. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  724. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  725. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  726. ";
  727. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  728. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  729. {
  730. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  731. }
  732. if (PrintEnable.Equals("True"))
  733. {
  734. 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
  735. from ICSWareHouseLotInfolog A
  736. left join ICSInventoryLot B on A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint
  737. left join ICSWareHouseLotInfo C ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint
  738. left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint
  739. where a.BusinessCode ='105'
  740. and A.lotno like'{0}%' and a.workpoint='{1}'
  741. ";
  742. sql = string.Format(sql, LotNo, WorkPoint);
  743. dtLotno = DBHelper.SQlReturnData(sql, cmd);
  744. lstDt = dtLotno;
  745. }
  746. }
  747. else
  748. {
  749. ///添加日志
  750. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  751. BEGIN
  752. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  753. RETURN
  754. END
  755. IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND WorkPoint='{1}' AND LotNo = '{0}')
  756. BEGIN
  757. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
  758. RETURN
  759. END
  760. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  761. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  762. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  763. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  764. MTIME,WorkPoint,EATTRIBUTE1,MergeID)
  765. SELECT NEWID(),'{3}','','',a.LotNo ,a.InvCode ,
  766. c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
  767. '','0','{7}','{8}','0','',
  768. '','','',f.F_Account ,f.F_RealName ,
  769. SYSDATETIME() ,a.WorkPoint ,'','{11}'
  770. FROM ICSInventoryLot a
  771. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  772. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  773. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  774. ";
  775. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);
  776. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  777. {
  778. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  779. }
  780. }
  781. ///添加库存
  782. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity>0)
  783. BEGIN
  784. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  785. RETURN
  786. END
  787. IF EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}' AND a.Quantity<{4})
  788. BEGIN
  789. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  790. RETURN
  791. END
  792. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  793. ";
  794. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, Quantity);
  795. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  796. {
  797. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  798. }
  799. }
  800. catch (Exception)
  801. {
  802. throw;
  803. }
  804. return lstDt;
  805. }
  806. /// <summary>
  807. /// 移库
  808. /// </summary>
  809. /// <param name="LocationCode"></param>
  810. /// <param name="LotNo"></param>
  811. /// <param name="Quantity"></param>
  812. /// <param name="User"></param>
  813. /// <param name="WorkPoint"></param>
  814. /// <param name="TransType"></param>
  815. /// <param name="BusinessCode"></param>
  816. /// <param name="cmd"></param>
  817. public static void WareHouseLotInfoLibrary(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
  818. string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  819. {
  820. try
  821. {
  822. // IF("+whcode+@" != '{8}')
  823. // BEGIN
  824. // RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo394"), "{8}",whcode) + @"', 16, 1);
  825. // RETURN
  826. //END
  827. ///添加日志
  828. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  829. BEGIN
  830. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  831. RETURN
  832. END
  833. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  834. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  835. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  836. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  837. MTIME,WorkPoint,EATTRIBUTE1)
  838. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  839. c.WarehouseCode,c.LocationCode,'{8}','{9}',c.Quantity,
  840. '','0','{6}','{7}','0','',
  841. '','','',f.F_Account ,f.F_RealName ,
  842. SYSDATETIME() ,a.WorkPoint ,''
  843. FROM ICSInventoryLot a
  844. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  845. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  846. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  847. ";
  848. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, BusinessCode, WarehouseCode, LocationCode);
  849. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  850. {
  851. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  852. }
  853. ///添加库存
  854. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity>0)
  855. BEGIN
  856. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  857. RETURN
  858. END
  859. IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.WarehouseCode='{2}')
  860. BEGIN
  861. RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
  862. RETURN
  863. END
  864. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  865. ";
  866. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);
  867. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  868. {
  869. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  870. }
  871. }
  872. catch (Exception)
  873. {
  874. throw;
  875. }
  876. }
  877. /// <summary>
  878. /// 两步调入
  879. /// </summary>
  880. /// <param name="LocationCode"></param>
  881. /// <param name="LotNo"></param>
  882. /// <param name="Quantity"></param>
  883. /// <param name="User"></param>
  884. /// <param name="WorkPoint"></param>
  885. /// <param name="TransType"></param>
  886. /// <param name="BusinessCode"></param>
  887. /// <param name="cmd"></param>
  888. public static void WareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
  889. string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  890. {
  891. try
  892. {
  893. ///添加日志
  894. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  895. BEGIN
  896. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  897. RETURN
  898. END
  899. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  900. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  901. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  902. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  903. MTIME,WorkPoint,EATTRIBUTE1)
  904. SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
  905. c.WarehouseCode,c.LocationCode,'{9}','{10}','{6}',
  906. '','0','{7}','{8}','0','',
  907. '','','',f.F_Account ,f.F_RealName ,
  908. SYSDATETIME() ,a.WorkPoint ,''
  909. FROM ICSInventoryLot a
  910. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  911. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  912. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  913. ";
  914. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);
  915. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  916. {
  917. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  918. }
  919. ///添加库存
  920. sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  921. BEGIN
  922. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  923. RETURN
  924. END
  925. UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}',Quantity='{4}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  926. ";
  927. sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, Quantity);
  928. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  929. {
  930. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
  931. }
  932. }
  933. catch (Exception)
  934. {
  935. throw;
  936. }
  937. }
  938. /// <summary>
  939. /// 拆分、合并日志
  940. /// </summary>
  941. /// <param name="Identification"></param>
  942. /// <param name="LotNo"></param>
  943. /// <param name="User"></param>
  944. /// <param name="WorkPoint"></param>
  945. /// <param name="TransType"></param>
  946. /// <param name="BusinessCode"></param>
  947. /// <param name="cmd"></param>
  948. public static void WareHouseLotInfoLog(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  949. {
  950. try
  951. {
  952. ///添加日志
  953. string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  954. BEGIN
  955. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  956. RETURN
  957. END
  958. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  959. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  960. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  961. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  962. MTIME,WorkPoint,EATTRIBUTE1)
  963. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  964. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  965. '','0','{4}','{5}','0','',
  966. '','','',f.F_Account ,f.F_RealName ,
  967. SYSDATETIME() ,a.WorkPoint ,''
  968. FROM ICSInventoryLot a
  969. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  970. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  971. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  972. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  973. ";
  974. sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  975. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  976. {
  977. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  978. }
  979. }
  980. catch (Exception)
  981. {
  982. throw;
  983. }
  984. }
  985. /// <summary>
  986. /// 合并
  987. /// </summary>
  988. /// <param name="Identification"></param>
  989. /// <param name="LotNo"></param>
  990. /// <param name="User"></param>
  991. /// <param name="WorkPoint"></param>
  992. /// <param name="TransType"></param>
  993. /// <param name="BusinessCode"></param>
  994. /// <param name="cmd"></param>
  995. public static void WareHouseLotInfoMerge(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  996. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  997. {
  998. try
  999. {
  1000. ///更新目标条码库存
  1001. string sql = @"IF NOT EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  1002. INNER JOIN ICSInventoryLot b ON b.LotNo='{3}' AND a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  1003. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  1004. BEGIN
  1005. RAISERROR('" + language.GetNameByCode("WMSAPIInfo170") + @"',16,1);
  1006. RETURN
  1007. END
  1008. IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  1009. BEGIN
  1010. RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
  1011. RETURN
  1012. END
  1013. UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1014. ";
  1015. sql = string.Format(sql, LotNo, WorkPoint, Quantity, CurrentLotNo);
  1016. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1017. {
  1018. throw new Exception(language.GetNameByCode("WMSAPIInfo169"));//"目标条码库存更新失败!");
  1019. }
  1020. ///更新原条码库存
  1021. sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1022. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  1023. BEGIN
  1024. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1025. RETURN
  1026. END";
  1027. sql = string.Format(sql, CurrentLotNo, WorkPoint, Quantity);
  1028. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1029. {
  1030. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1031. }
  1032. ///添加日志
  1033. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1034. BEGIN
  1035. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1036. RETURN
  1037. END
  1038. INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1039. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1040. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1041. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1042. MTIME,WorkPoint,EATTRIBUTE1)
  1043. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  1044. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  1045. '','0','{4}','{5}','0','',
  1046. '','','',f.F_Account ,f.F_RealName ,
  1047. SYSDATETIME() ,a.WorkPoint ,''
  1048. FROM ICSInventoryLot a
  1049. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1050. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1051. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1052. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1053. ";
  1054. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  1055. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1056. {
  1057. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1058. }
  1059. }
  1060. catch (Exception)
  1061. {
  1062. throw;
  1063. }
  1064. }
  1065. /// <summary>
  1066. /// 拆分
  1067. /// </summary>
  1068. /// <param name="Identification"></param>
  1069. /// <param name="LotNo"></param>
  1070. /// <param name="User"></param>
  1071. /// <param name="WorkPoint"></param>
  1072. /// <param name="TransType"></param>
  1073. /// <param name="BusinessCode"></param>
  1074. /// <param name="cmd"></param>
  1075. public static void WareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
  1076. string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
  1077. {
  1078. try
  1079. {
  1080. ///更新库存
  1081. string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
  1082. IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
  1083. BEGIN
  1084. RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
  1085. RETURN
  1086. END";
  1087. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  1088. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1089. {
  1090. throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
  1091. }
  1092. #region 添加库存
  1093. //插入条码表
  1094. sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
  1095. BEGIN
  1096. RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
  1097. RETURN
  1098. END
  1099. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
  1100. BEGIN
  1101. RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
  1102. RETURN
  1103. END
  1104. INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  1105. SELECT NEWID(),'{4}' ,a.InvCode,a.ProductDate,a.ExpirationDate ,'{3}',a.ExtensionID,'101',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,a.LotNo
  1106. FROM ICSInventoryLot a
  1107. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1108. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  1109. sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);
  1110. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1111. {
  1112. throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
  1113. }
  1114. //插入条码单据表
  1115. sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
  1116. SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
  1117. FROM ICSInventoryLot a
  1118. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1119. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1120. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  1121. sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);
  1122. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1123. {
  1124. throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
  1125. }
  1126. ///添加库存
  1127. sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
  1128. BEGIN
  1129. RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
  1130. RETURN
  1131. END
  1132. IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  1133. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  1134. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  1135. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  1136. BEGIN
  1137. IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
  1138. INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
  1139. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint AND il.LocationCode=d.LocationCode
  1140. WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
  1141. BEGIN
  1142. RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
  1143. RETURN
  1144. END
  1145. END
  1146. INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
  1147. SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
  1148. FROM ICSInventoryLot a
  1149. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1150. INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
  1151. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1152. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
  1153. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);
  1154. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1155. {
  1156. throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
  1157. }
  1158. ///添加日志
  1159. sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
  1160. FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
  1161. Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
  1162. ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
  1163. MTIME,WorkPoint,EATTRIBUTE1)
  1164. SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
  1165. '','',c.WarehouseCode,c.LocationCode,c.Quantity,
  1166. '','0','{4}','{5}','0','',
  1167. '','','',f.F_Account ,f.F_RealName ,
  1168. SYSDATETIME() ,a.WorkPoint ,''
  1169. FROM ICSInventoryLot a
  1170. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1171. INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
  1172. INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
  1173. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  1174. ";
  1175. sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);
  1176. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1177. {
  1178. throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
  1179. }
  1180. #endregion
  1181. }
  1182. catch (Exception)
  1183. {
  1184. throw;
  1185. }
  1186. }
  1187. /// <summary>
  1188. /// 回写ERP ID
  1189. /// </summary>
  1190. /// <param name="TransType"></param>
  1191. /// <param name="SourceDetailID"></param>
  1192. /// <param name="Identification"></param>
  1193. /// <param name="ID"></param>
  1194. /// <param name="DetailID"></param>
  1195. /// <param name="Code"></param>
  1196. /// <param name="Sequence"></param>
  1197. /// <param name="cmd"></param>
  1198. public static void WareHouseLotInfoLogUpdate(string TransType, string SourceDetailID, string Identification, string ID, string DetailID, string Code, string Sequence, SqlCommand cmd, Dictionary<string, string> language)
  1199. {
  1200. string ERPupdate = string.Empty;
  1201. try
  1202. {
  1203. //采购入库
  1204. if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
  1205. {
  1206. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1207. FROM ICSWareHouseLotInfoLog a
  1208. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1209. INNER JOIN ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1210. WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1211. ";
  1212. }
  1213. //审核的到货单
  1214. else if (TransType == TransTypeEnum.DeliveryNotice.GetDescription())
  1215. {
  1216. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1217. FROM ICSWareHouseLotInfoLog a
  1218. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1219. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1220. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1221. ";
  1222. }
  1223. //采购拒收
  1224. else if (TransType == TransTypeEnum.PurchaseRejectDoc.GetDescription())
  1225. {
  1226. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1227. FROM ICSWareHouseLotInfoLog a
  1228. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1229. INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1230. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1231. ";
  1232. }
  1233. //审核的委外到货单
  1234. else if (TransType == TransTypeEnum.ODeliveryNotice.GetDescription())
  1235. {
  1236. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1237. FROM ICSWareHouseLotInfoLog a
  1238. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1239. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1240. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1241. ";
  1242. }
  1243. //委外拒收
  1244. else if (TransType == TransTypeEnum.OutsourcingRejectDoc.GetDescription())
  1245. {
  1246. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1247. FROM ICSWareHouseLotInfoLog a
  1248. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1249. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1250. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1251. ";
  1252. }
  1253. //采购退货
  1254. else if (TransType == TransTypeEnum.PurchaseReceiveDoctNegative.GetDescription())
  1255. {
  1256. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1257. FROM ICSWareHouseLotInfoLog a
  1258. INNER JOIN ICSDeliveryNotice c ON a.TransCode=c.DNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1259. WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.DNType='2' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1260. ";
  1261. }
  1262. //委外发料
  1263. else if (TransType == TransTypeEnum.OutsourcingIssueDoc.GetDescription())
  1264. {
  1265. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1266. FROM ICSWareHouseLotInfoLog a
  1267. INNER JOIN ICSOutsourcingOrder y ON a.TransCode=y.OOCode AND a.WorkPoint=y.WorkPoint
  1268. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  1269. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1270. ";
  1271. }
  1272. //委外退料
  1273. else if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegative.GetDescription()
  1274. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeApply.GetDescription()
  1275. || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeIssue.GetDescription())
  1276. {
  1277. ERPupdate = @"--根据退料单退料
  1278. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1279. FROM ICSWareHouseLotInfoLog a
  1280. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1281. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  1282. INNER JOIN ICSOApplyNeg d ON c.OApplyNegCode=d.OApplyNegCode AND c.WorkPoint=d.WorkPoint
  1283. Left JOIN ICSOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  1284. WHERE ISNULL(m.ApplyDetailID,ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1285. --退-
  1286. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1287. FROM ICSWareHouseLotInfoLog a
  1288. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  1289. INNER JOIN ICSOutsourcingOrder y ON b.TransCode=y.OOCode AND b.WorkPoint=y.WorkPoint
  1290. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  1291. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1292. --退-
  1293. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1294. FROM ICSWareHouseLotInfoLog a
  1295. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  1296. INNER JOIN ICSOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  1297. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1298. --退-
  1299. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1300. FROM ICSWareHouseLotInfoLog a
  1301. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  1302. INNER JOIN ICSOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  1303. LEFT JOIN ICSOOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  1304. LEFT JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  1305. LEFT JOIN ICSOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  1306. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1307. ";
  1308. }
  1309. //委外入库
  1310. else if (TransType == TransTypeEnum.OutsourcingReceiveDoc.GetDescription())
  1311. {
  1312. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1313. FROM ICSWareHouseLotInfoLog a
  1314. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1315. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1316. WHERE c.OODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1317. ";
  1318. }
  1319. //委外退货
  1320. else if (TransType == TransTypeEnum.OutsourcingReturnBack.GetDescription())
  1321. {
  1322. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1323. FROM ICSWareHouseLotInfoLog a
  1324. INNER JOIN ICSODeliveryNotice c ON a.TransCode=c.ODNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1325. WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.ODNType='2' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1326. ";
  1327. }
  1328. //生产发料
  1329. else if (TransType == TransTypeEnum.MOIssueDoc.GetDescription())
  1330. {
  1331. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1332. FROM ICSWareHouseLotInfoLog a
  1333. INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  1334. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
  1335. WHERE x.PickID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1336. ";
  1337. }
  1338. //生产退料
  1339. else if (TransType == TransTypeEnum.MOIssueDocNegative.GetDescription()
  1340. || TransType == TransTypeEnum.MOIssueDocNegativeApply.GetDescription()
  1341. || TransType == TransTypeEnum.MOIssueDocNegativeIssue.GetDescription())
  1342. {
  1343. ERPupdate = @"--根据退料单退料
  1344. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1345. FROM ICSWareHouseLotInfoLog a
  1346. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1347. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  1348. INNER JOIN ICSMOApplyNeg d ON c.ApplyNegCode=d.ApplyNegCode AND c.WorkPoint=d.WorkPoint
  1349. left JOIN ICSMOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
  1350. WHERE ISNULL(m.ApplyDetailID, ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1351. --退-
  1352. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1353. FROM ICSWareHouseLotInfoLog a
  1354. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  1355. INNER JOIN ICSMO y ON b.TransCode=y.MOCode AND b.WorkPoint=y.WorkPoint
  1356. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
  1357. WHERE x.PickID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1358. --退-
  1359. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1360. FROM ICSWareHouseLotInfoLog a
  1361. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  1362. INNER JOIN ICSMOApply z ON b.TransCode=z.ApplyCode AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
  1363. WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1364. --退-
  1365. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1366. FROM ICSWareHouseLotInfoLog a
  1367. INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
  1368. INNER JOIN ICSMOIssue m ON b.TransCode=m.IssueCode AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
  1369. LEFT JOIN ICSMOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  1370. LEFT JOIN ICSMO y ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint
  1371. LEFT JOIN ICSMOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  1372. WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1373. ";
  1374. }
  1375. //生产入库
  1376. else if (TransType == TransTypeEnum.ManufactureReceiveDoc.GetDescription())
  1377. {
  1378. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1379. FROM ICSWareHouseLotInfoLog a
  1380. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1381. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1382. WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1383. ";
  1384. }
  1385. //开立的生产入库单
  1386. else if (TransType == TransTypeEnum.ManufactureReceive.GetDescription())
  1387. {
  1388. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1389. FROM ICSWareHouseLotInfoLog a
  1390. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1391. INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1392. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1393. ";
  1394. }
  1395. //销售出库
  1396. else if (TransType == TransTypeEnum.SalesShipmentDoc.GetDescription())
  1397. {
  1398. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1399. FROM ICSWareHouseLotInfoLog a
  1400. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1401. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1402. ";
  1403. }
  1404. //销售退货
  1405. else if (TransType == TransTypeEnum.SalesShipmentDocNegative.GetDescription())
  1406. {
  1407. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1408. FROM ICSWareHouseLotInfoLog a
  1409. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1410. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1411. ";
  1412. }
  1413. //返工工单
  1414. else if (TransType == TransTypeEnum.ReWorkReceiveMo.GetDescription())
  1415. {
  1416. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1417. FROM ICSWareHouseLotInfoLog a
  1418. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1419. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.WorkPoint=c.WorkPoint
  1420. INNER JOIN ICSMOPick d ON d.MODetailID=c.MODetailID AND d.WorkPoint=c.WorkPoint and b.TransSequence=c.Sequence+'-'+d.Sequence
  1421. WHERE d.PickID='{3}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1422. ";
  1423. }
  1424. //一步调拨
  1425. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  1426. {
  1427. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1428. FROM ICSWareHouseLotInfoLog a
  1429. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1430. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1431. ";
  1432. }
  1433. //调拨
  1434. else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
  1435. {
  1436. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1437. FROM ICSWareHouseLotInfoLog a
  1438. INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1439. WHERE c.TransferID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='1' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1440. ";
  1441. }
  1442. //两步调出
  1443. else if (TransType == TransTypeEnum.TwoStepTransferDocOut.GetDescription())
  1444. {
  1445. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1446. FROM ICSWareHouseLotInfoLog a
  1447. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1448. INNER JOIN ICSTransfer d ON c.TransferDetailID=d.TransferDetailID AND c.WorkPoint=d.WorkPoint
  1449. WHERE c.OutID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1450. ";
  1451. }
  1452. //两步调入
  1453. else if (TransType == TransTypeEnum.TwoStepTransferDocIn.GetDescription())
  1454. {
  1455. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1456. FROM ICSWareHouseLotInfoLog a
  1457. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  1458. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  1459. WHERE b.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1460. ";
  1461. }
  1462. //销售退货-原条码
  1463. else if (TransType == TransTypeEnum.SalesReturnBack.GetDescription())
  1464. {
  1465. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1466. FROM ICSWareHouseLotInfoLog a
  1467. INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1468. WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1469. ";
  1470. }
  1471. //其他出库
  1472. else if (TransType == TransTypeEnum.OtherOutDoc.GetDescription())
  1473. {
  1474. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1475. FROM ICSWareHouseLotInfoLog a
  1476. INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1477. WHERE c.OutID='{0}' AND a.Identification='{1}' AND a.ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1478. ";
  1479. }
  1480. //其他入库
  1481. else if (TransType == TransTypeEnum.OtherInDoc.GetDescription())
  1482. {
  1483. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1484. FROM ICSWareHouseLotInfoLog a
  1485. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1486. INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  1487. WHERE c.InID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1488. ";
  1489. }
  1490. //拆卸单
  1491. else if (TransType == TransTypeEnum.DisassemblyDoc.GetDescription())
  1492. {
  1493. ERPupdate = @"UPDATE d set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1494. FROM ICSWareHouseLotInfoLog a
  1495. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1496. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  1497. INNER JOIN ICSWareHouseLotInfoLog d ON b.TransCode=d.TransCode AND d.TransSequence='1' AND b.WorkPoint=d.WorkPoint
  1498. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND d.ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1499. UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1500. FROM ICSWareHouseLotInfoLog a
  1501. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1502. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  1503. WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.DABDOCType='2' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1504. ";
  1505. }
  1506. //领料申请单
  1507. else if (TransType == TransTypeEnum.MOApply.GetDescription())
  1508. {
  1509. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1510. FROM ICSWareHouseLotInfoLog a
  1511. INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1512. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1513. ";
  1514. }
  1515. //委外领料申请单
  1516. else if (TransType == TransTypeEnum.OOApply.GetDescription())
  1517. {
  1518. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1519. FROM ICSWareHouseLotInfoLog a
  1520. INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1521. WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1522. ";
  1523. }
  1524. //开立材料出库
  1525. else if (TransType == TransTypeEnum.MOIssue.GetDescription())
  1526. {
  1527. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1528. FROM ICSWareHouseLotInfoLog a
  1529. INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1530. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1531. ";
  1532. }
  1533. //开立委外材料出库
  1534. else if (TransType == TransTypeEnum.OOIssue.GetDescription())
  1535. {
  1536. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1537. FROM ICSWareHouseLotInfoLog a
  1538. INNER JOIN ICSOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1539. WHERE c.IssueID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1540. ";
  1541. }
  1542. //开立红字入库单
  1543. else if (TransType == TransTypeEnum.PurchaseReceive.GetDescription())
  1544. {
  1545. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1546. FROM ICSWareHouseLotInfoLog a
  1547. INNER JOIN ICSPurchaseReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1548. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1549. ";
  1550. }
  1551. //开立委外红字入库单
  1552. else if (TransType == TransTypeEnum.OutsourcingReceiveDocNegative.GetDescription())
  1553. {
  1554. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1555. FROM ICSWareHouseLotInfoLog a
  1556. INNER JOIN ICSOutsourcingReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1557. WHERE c.RCVID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND c.Type='2' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1558. ";
  1559. }
  1560. //借用
  1561. else if (TransType == TransTypeEnum.BrrowDoc.GetDescription())
  1562. {
  1563. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1564. FROM ICSWareHouseLotInfoLog a
  1565. INNER JOIN ICSBrrow c ON a.TransCode=c.BrrowCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
  1566. WHERE c.BrrowDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1567. ";
  1568. }
  1569. //归还
  1570. else if (TransType == TransTypeEnum.ReturnDoc.GetDescription())
  1571. {
  1572. ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
  1573. FROM ICSWareHouseLotInfoLog a
  1574. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  1575. INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  1576. WHERE c.ReturnDetailID='{0}' AND a.Identification='{1}' AND ERPUpload='0' AND (a.BusinessCode <> '31' and a.BusinessCode <> '32')
  1577. ";
  1578. }
  1579. ERPupdate = string.Format(ERPupdate, SourceDetailID, Identification, ID, DetailID, Code, Sequence);
  1580. if (!DBHelper.ExecuteNonQuery(ERPupdate, cmd))
  1581. {
  1582. throw new Exception(TransType + language.GetNameByCode("WMSAPIInfo175"));//"回写日志失败!");
  1583. }
  1584. }
  1585. catch (Exception ex)
  1586. {
  1587. log.Debug(ex.ToString());
  1588. log.Debug(TransType + Environment.NewLine + ERPupdate);
  1589. }
  1590. }
  1591. }
  1592. }