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

814 lines
51 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
  1. using ICSSoft.Common;
  2. using ICSSoft.Entity;
  3. using Newtonsoft.Json;
  4. using Newtonsoft.Json.Linq;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Data;
  8. using System.Data.SqlClient;
  9. using System.Linq;
  10. using System.Net.Http;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace ICSSoft.DataProject
  14. {
  15. /// <summary>
  16. /// 使用中
  17. /// 生产模块
  18. /// </summary>
  19. public class ICSManufactureService
  20. {
  21. private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  22. #region 生产发料
  23. /// <summary>
  24. /// 生产发料
  25. /// </summary>
  26. /// <param name="TransCode"></param>
  27. /// <param name="TransSequence"></param>
  28. /// <param name="Quantity"></param>
  29. /// <param name="WorkPoint"></param>
  30. /// <param name="cmd"></param>
  31. public static void MOIssueDoc(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
  32. {
  33. try
  34. {
  35. string sql = @"DECLARE @Status VARCHAR(10)
  36. SELECT @Status=b.ERPStatus FROM ICSMOPick a
  37. INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
  38. WHERE b.MOCode='{0}' AND b.Sequence+'-'+a.Sequence='{3}' AND a.WorkPoint='{1}'
  39. IF (@Status IS NULL)
  40. BEGIN
  41. RAISERROR('" + language.GetNameByCode("WMSAPIInfo125") + @"',16,1);
  42. RETURN
  43. END
  44. ELSE IF (@Status!='2')
  45. BEGIN
  46. RAISERROR('" + language.GetNameByCode("WMSAPIInfo126") + @"',16,1);
  47. RETURN
  48. END
  49. UPDATE a SET IssueQuantity=ISNULL(IssueQuantity,0)+'{2}'
  50. FROM ICSMOPick a
  51. INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
  52. WHERE b.MOCode='{0}' AND b.Sequence+'-'+a.Sequence='{3}' AND a.WorkPoint='{1}'
  53. IF EXISTS(SELECT a.ID FROM ICSMOPick a
  54. INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
  55. WHERE b.MOCode='{0}' AND b.Sequence+'-'+a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.IssueQuantity)
  56. BEGIN
  57. RAISERROR('" + language.GetNameByCode("WMSAPIInfo091") + @"',16,1);
  58. RETURN
  59. END";
  60. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  61. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  62. {
  63. throw new Exception(language.GetNameByCode("WMSAPIInfo127"));//"生产领料单更新失败!");
  64. }
  65. }
  66. catch (Exception)
  67. {
  68. throw;
  69. }
  70. }
  71. /// <summary>
  72. /// 生产发料接口
  73. /// </summary>
  74. /// <param name="TransType"></param>
  75. /// <param name="Identification"></param>
  76. /// <param name="cmd"></param>
  77. public static void MOIssueDocERP(string TransType, string Identification, SqlCommand cmd, Dictionary<string, string> language)
  78. {
  79. try
  80. {
  81. #region ERP
  82. string sql = @"SELECT y.DepCode+a.FromWarehouseCode+y.MOCode+a.MUSER AS Costre,y.DepCode,a.FromWarehouseCode AS WarehouseCode,y.MOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY y.DepCode,a.FromWarehouseCode,y.MOCode,x.PickID,a.InvCode) AS Sequence,
  83. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,x.PickID,x.MODetailID,con.Enable AS UpdateTodoQuantity
  84. ,a.WorkPoint,ISNULL(ext.ProjectCode, '') AS ProjectCode,CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,ISNULL(ext.Version, '') AS Version,ISNULL(ext.Brand, '') AS Brand,
  85. ISNULL(ext.cFree1, '') AS cFree1,ISNULL(ext.cFree2, '') AS cFree2,ISNULL(ext.cFree3, '') AS cFree3,ISNULL(ext.cFree4, '') AS cFree4,ISNULL(ext.cFree5, '') AS cFree5,ISNULL(ext.cFree6, '') AS cFree6,ISNULL(ext.cFree7, '') AS cFree7,ISNULL(ext.cFree8, '') AS cFree8,ISNULL(ext.cFree9, '') AS cFree9,ISNULL(ext.cFree10, '') AS cFree10
  86. INTO #TempERP
  87. FROM ICSWareHouseLotInfoLog a
  88. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  89. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  90. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  91. INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
  92. INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'-'+x.Sequence AND x.WorkPoint=y.WorkPoint
  93. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  94. WHERE a.Identification='{0}' AND ERPUpload='0'
  95. GROUP BY y.DepCode,a.FromWarehouseCode,y.MOCode,a.MUSER,a.InvCode,x.PickID,x.MODetailID,con.Enable
  96. ,a.WorkPoint,ISNULL(ext.ProjectCode, ''),CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END,ISNULL(ext.Version, ''),ISNULL(ext.Brand, ''),
  97. 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, '')
  98. SELECT DISTINCT Costre,WorkPoint,DepCode,MODetailID,WarehouseCode AS WHCode,'' AS SourceType,MOCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  99. SELECT Costre,Sequence,InvCode,Quantity,Amount,PickID AS SourceDetailID,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 FROM #TempERP
  100. DROP TABLE #TempERP";
  101. sql = string.Format(sql, Identification);
  102. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  103. string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  104. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.MOIssueDocURL, Inputstr);
  105. Result result = new Result();
  106. result = JsonConvert.DeserializeObject<Result>(resultStr);
  107. if (result.Success)
  108. {
  109. try
  110. {
  111. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  112. foreach (var item in res)
  113. {
  114. JObject jo = (JObject)item;
  115. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  116. foreach (var detail in resdetail)
  117. {
  118. JObject det = (JObject)detail;
  119. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(),
  120. det["DetailID"].ToString(), jo["IssueCode"].ToString(), det["Sequence"].ToString(), cmd, language);
  121. }
  122. }
  123. }
  124. catch (Exception ex)
  125. {
  126. log.Debug(ex.ToString());
  127. log.Debug(resultStr);
  128. }
  129. }
  130. else
  131. {
  132. throw new Exception(language.GetNameByCode("WMSAPIInfo080") + result.Message);
  133. }
  134. #endregion
  135. }
  136. catch (Exception)
  137. {
  138. throw;
  139. }
  140. }
  141. #endregion
  142. #region 领料申请单生产发料
  143. /// <summary>
  144. /// 领料申请单生产发料
  145. /// </summary>
  146. /// <param name="TransCode"></param>
  147. /// <param name="TransSequence"></param>
  148. /// <param name="Quantity"></param>
  149. /// <param name="WorkPoint"></param>
  150. /// <param name="cmd"></param>
  151. public static void MOApply(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
  152. {
  153. try
  154. {
  155. string sql = @"DECLARE @Status VARCHAR(10)
  156. SELECT @Status=a.Status FROM ICSMOApply a
  157. WHERE a.ApplyCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  158. IF (@Status IS NULL)
  159. BEGIN
  160. RAISERROR('" + language.GetNameByCode("WMSAPIInfo128") + @"',16,1);
  161. RETURN
  162. END
  163. ELSE IF (@Status!='2')
  164. BEGIN
  165. RAISERROR('" + language.GetNameByCode("WMSAPIInfo129") + @"',16,1);
  166. RETURN
  167. END
  168. UPDATE a SET IssueQuantity=ISNULL(IssueQuantity,0)+'{2}'
  169. FROM ICSMOApply a
  170. WHERE a.ApplyCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  171. IF EXISTS(SELECT a.ID FROM ICSMOApply a
  172. WHERE a.ApplyCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.IssueQuantity)
  173. BEGIN
  174. RAISERROR('" + language.GetNameByCode("WMSAPIInfo091") + @"',16,1);
  175. RETURN
  176. END";
  177. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  178. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  179. {
  180. throw new Exception(language.GetNameByCode("WMSAPIInfo130"));//"领料申请单更新失败!");
  181. }
  182. }
  183. catch (Exception)
  184. {
  185. throw;
  186. }
  187. }
  188. /// <summary>
  189. /// 领料申请单生产发料接口
  190. /// </summary>
  191. /// <param name="TransType"></param>
  192. /// <param name="Identification"></param>
  193. /// <param name="cmd"></param>
  194. public static void MOApplyERP(string TransType, string Identification, SqlCommand cmd, Dictionary<string, string> language)
  195. {
  196. try
  197. {
  198. #region ERP
  199. string sql = @"SELECT a.FromWarehouseCode+b.ApplyCode+a.MUSER AS Costre,a.FromWarehouseCode AS WarehouseCode,b.ApplyCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY a.FromWarehouseCode,b.ApplyCode,b.ApplyDetailID,a.InvCode) AS Sequence,
  200. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,b.ApplyDetailID,Enable AS UpdateTodoQuantity
  201. ,a.WorkPoint,ISNULL(ext.ProjectCode, '') AS ProjectCode,CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,ISNULL(ext.Version, '') AS Version,ISNULL(ext.Brand, '') AS Brand,
  202. ISNULL(ext.cFree1, '') AS cFree1,ISNULL(ext.cFree2, '') AS cFree2,ISNULL(ext.cFree3, '') AS cFree3,ISNULL(ext.cFree4, '') AS cFree4,ISNULL(ext.cFree5, '') AS cFree5,ISNULL(ext.cFree6, '') AS cFree6,ISNULL(ext.cFree7, '') AS cFree7,ISNULL(ext.cFree8, '') AS cFree8,ISNULL(ext.cFree9, '') AS cFree9,ISNULL(ext.cFree10, '') AS cFree10
  203. INTO #TempERP
  204. FROM ICSWareHouseLotInfoLog a
  205. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  206. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  207. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  208. INNER JOIN ICSMOApply b ON a.TransCode=b.ApplyCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  209. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  210. WHERE a.Identification='{0}' AND ERPUpload='0'
  211. GROUP BY a.FromWarehouseCode,b.ApplyCode,a.MUSER,a.InvCode,b.ApplyDetailID,Enable
  212. ,a.WorkPoint,ISNULL(ext.ProjectCode, ''),CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END,ISNULL(ext.Version, ''),ISNULL(ext.Brand, ''),
  213. 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, '')
  214. SELECT DISTINCT Costre,WorkPoint,'' AS DepCode,WarehouseCode AS WHCode,'' AS SourceType,ApplyCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  215. SELECT Costre,Sequence,InvCode,Quantity,Amount,ApplyDetailID AS SourceDetailID,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 FROM #TempERP
  216. DROP TABLE #TempERP";
  217. sql = string.Format(sql, Identification);
  218. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  219. string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  220. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.MOApplyURL, Inputstr);
  221. Result result = new Result();
  222. result = JsonConvert.DeserializeObject<Result>(resultStr);
  223. if (result.Success)
  224. {
  225. try
  226. {
  227. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  228. foreach (var item in res)
  229. {
  230. JObject jo = (JObject)item;
  231. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  232. foreach (var detail in resdetail)
  233. {
  234. JObject det = (JObject)detail;
  235. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(),
  236. det["DetailID"].ToString(), jo["IssueCode"].ToString(), det["Sequence"].ToString(), cmd, language);
  237. }
  238. }
  239. }
  240. catch (Exception ex)
  241. {
  242. log.Debug(ex.ToString());
  243. log.Debug(resultStr);
  244. }
  245. }
  246. else
  247. {
  248. throw new Exception(language.GetNameByCode("WMSAPIInfo080") + result.Message);
  249. }
  250. #endregion
  251. }
  252. catch (Exception)
  253. {
  254. throw;
  255. }
  256. }
  257. #endregion
  258. #region 材料出库单生产发料
  259. /// <summary>
  260. /// 材料出库单生产发料
  261. /// </summary>
  262. /// <param name="TransCode"></param>
  263. /// <param name="TransSequence"></param>
  264. /// <param name="Quantity"></param>
  265. /// <param name="WorkPoint"></param>
  266. /// <param name="cmd"></param>
  267. public static void MOIssue(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
  268. {
  269. try
  270. {
  271. string sql = @"DECLARE @Status VARCHAR(10)
  272. SELECT @Status=a.Status FROM ICSMOIssue a
  273. WHERE a.IssueCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  274. IF (@Status IS NULL)
  275. BEGIN
  276. RAISERROR('" + language.GetNameByCode("WMSAPIInfo131") + @"',16,1);
  277. RETURN
  278. END
  279. ELSE IF (@Status!='1')
  280. BEGIN
  281. RAISERROR('" + language.GetNameByCode("WMSAPIInfo132") + @"',16,1);
  282. RETURN
  283. END
  284. UPDATE a SET IssueQuantity=ISNULL(IssueQuantity,0)+'{2}'
  285. FROM ICSMOIssue a
  286. WHERE a.IssueCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  287. IF EXISTS(SELECT a.ID FROM ICSMOIssue a
  288. WHERE a.IssueCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.IssueQuantity)
  289. BEGIN
  290. RAISERROR('" + language.GetNameByCode("WMSAPIInfo091") + @"',16,1);
  291. RETURN
  292. END";
  293. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  294. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  295. {
  296. throw new Exception(language.GetNameByCode("WMSAPIInfo133"));//"材料出库单更新失败!");
  297. }
  298. }
  299. catch (Exception)
  300. {
  301. throw;
  302. }
  303. }
  304. /// <summary>
  305. /// 材料出库单生产发料接口
  306. /// </summary>
  307. /// <param name="TransType"></param>
  308. /// <param name="Identification"></param>
  309. /// <param name="cmd"></param>
  310. public static void MOIssueERP(string TransType, string Identification, SqlCommand cmd, Dictionary<string, string> language)
  311. {
  312. try
  313. {
  314. #region ERP开立状态单据审核
  315. string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
  316. INNER JOIN ICSMOIssue b ON a.TransCode=b.IssueCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  317. WHERE a.Identification='{0}' AND b.Quantity!=b.IssueQuantity)
  318. BEGIN
  319. RAISERROR('" + language.GetNameByCode("WMSAPIInfo094") + @"',16,1);
  320. RETURN
  321. END
  322. SELECT b.IssueID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,con.Enable AS UpdateTodoQuantity
  323. ,conStock.Enable AS UpdateStock,a.WorkPoint
  324. FROM ICSWareHouseLotInfoLog a
  325. INNER JOIN ICSMOIssue b ON a.TransCode=b.IssueCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  326. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  327. INNER JOIN ICSConfiguration conStock ON conStock.Code='UpdateStock002' AND a.WorkPoint=conStock.WorkPoint
  328. WHERE a.Identification='{0}' AND ERPUpload='0'
  329. GROUP BY b.IssueID,a.MUSER,con.Enable
  330. ,conStock.Enable,a.WorkPoint";
  331. sql = string.Format(sql, Identification);
  332. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  333. string Inputstr = JsonConvert.SerializeObject(dt);
  334. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.MOIssueURL, Inputstr);
  335. Result result = new Result();
  336. result = JsonConvert.DeserializeObject<Result>(resultStr);
  337. if (result.Success)
  338. {
  339. try
  340. {
  341. foreach (DataRow dr in dt.Rows)
  342. {
  343. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd, language);
  344. }
  345. }
  346. catch (Exception ex)
  347. {
  348. log.Debug(ex.ToString());
  349. log.Debug(resultStr);
  350. }
  351. }
  352. else
  353. {
  354. throw new Exception(language.GetNameByCode("WMSAPIInfo080") + result.Message);
  355. }
  356. #endregion
  357. }
  358. catch (Exception)
  359. {
  360. throw;
  361. }
  362. }
  363. #endregion
  364. #region 生产退料
  365. /// <summary>
  366. /// 生产退料
  367. /// </summary>
  368. /// <param name="TransCode"></param>
  369. /// <param name="TransSequence"></param>
  370. /// <param name="Quantity"></param>
  371. /// <param name="WorkPoint"></param>
  372. /// <param name="cmd"></param>
  373. public static void MOIssueDocNegative(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
  374. {
  375. try
  376. {
  377. string sql = @"UPDATE c SET IssueNegQuantity=ISNULL(IssueNegQuantity,0)+'{2}'
  378. FROM ICSInventoryLot a
  379. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  380. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  381. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  382. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  383. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  384. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  385. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Quantity<c.IssueNegQuantity)
  386. BEGIN
  387. RAISERROR('" + language.GetNameByCode("WMSAPIInfo114") + @"',16,1);
  388. END";
  389. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  390. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  391. {
  392. throw new Exception(language.GetNameByCode("WMSAPIInfo134"));//"生产退料单更新失败!");
  393. }
  394. }
  395. catch (Exception)
  396. {
  397. throw;
  398. }
  399. }
  400. /// <summary>
  401. /// 生产退料接口
  402. /// </summary>
  403. /// <param name="TransType"></param>
  404. /// <param name="Identification"></param>
  405. /// <param name="cmd"></param>
  406. public static void MOIssueDocNegativeERP(string TransType, string Identification, SqlCommand cmd, Dictionary<string, string> language)
  407. {
  408. try
  409. {
  410. #region ERP
  411. string sql = string.Empty;
  412. if (TransType == TransTypeEnum.MOIssueDocNegative.GetDescription())
  413. {
  414. sql = @"SELECT y.DepCode+a.ToWarehouseCode+y.MOCode+a.MUSER AS Costre,y.DepCode,a.ToWarehouseCode AS WarehouseCode,y.MOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY y.DepCode,a.ToWarehouseCode,y.MOCode,c.SourceDetailID,a.InvCode) AS Sequence,
  415. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.SourceDetailID,x.MODetailID,Enable AS UpdateTodoQuantity
  416. ,a.WorkPoint,ISNULL(ext.ProjectCode, '') AS ProjectCode,CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,ISNULL(ext.Version, '') AS Version,ISNULL(ext.Brand, '') AS Brand,
  417. ISNULL(ext.cFree1, '') AS cFree1,ISNULL(ext.cFree2, '') AS cFree2,ISNULL(ext.cFree3, '') AS cFree3,ISNULL(ext.cFree4, '') AS cFree4,ISNULL(ext.cFree5, '') AS cFree5,ISNULL(ext.cFree6, '') AS cFree6,ISNULL(ext.cFree7, '') AS cFree7,ISNULL(ext.cFree8, '') AS cFree8,ISNULL(ext.cFree9, '') AS cFree9,ISNULL(ext.cFree10, '') AS cFree10
  418. INTO #TempERP
  419. FROM ICSWareHouseLotInfoLog a
  420. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  421. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  422. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  423. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  424. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  425. INNER JOIN ICSMOPick x ON c.SourceDetailID=x.PickID AND c.WorkPoint=x.WorkPoint
  426. INNER JOIN ICSMO y ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint
  427. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  428. WHERE a.Identification='{0}' AND ERPUpload='0'
  429. GROUP BY y.DepCode,a.ToWarehouseCode,y.MOCode,a.MUSER,a.InvCode,c.SourceDetailID,x.MODetailID,Enable
  430. ,a.WorkPoint,ISNULL(ext.ProjectCode, ''),CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END,ISNULL(ext.Version, ''),ISNULL(ext.Brand, ''),
  431. 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, '')
  432. SELECT DISTINCT Costre,WorkPoint,DepCode,MODetailID,WarehouseCode AS WHCode,'' AS SourceType,MOCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  433. SELECT Costre,Sequence,InvCode,Quantity,Amount,SourceDetailID,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 FROM #TempERP
  434. DROP TABLE #TempERP";
  435. }
  436. else if (TransType == TransTypeEnum.MOIssueDocNegativeApply.GetDescription())
  437. {
  438. sql = @"SELECT a.ToWarehouseCode+z.ApplyCode+a.MUSER AS Costre,'' AS DepCode,a.ToWarehouseCode AS WarehouseCode,z.ApplyCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY a.ToWarehouseCode,z.ApplyCode,c.SourceDetailID,a.InvCode) AS Sequence,
  439. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.SourceDetailID,z.ApplyDetailID,Enable AS UpdateTodoQuantity
  440. ,a.WorkPoint,ISNULL(ext.ProjectCode, '') AS ProjectCode,CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,ISNULL(ext.Version, '') AS Version,ISNULL(ext.Brand, '') AS Brand,
  441. ISNULL(ext.cFree1, '') AS cFree1,ISNULL(ext.cFree2, '') AS cFree2,ISNULL(ext.cFree3, '') AS cFree3,ISNULL(ext.cFree4, '') AS cFree4,ISNULL(ext.cFree5, '') AS cFree5,ISNULL(ext.cFree6, '') AS cFree6,ISNULL(ext.cFree7, '') AS cFree7,ISNULL(ext.cFree8, '') AS cFree8,ISNULL(ext.cFree9, '') AS cFree9,ISNULL(ext.cFree10, '') AS cFree10
  442. INTO #TempERP
  443. FROM ICSWareHouseLotInfoLog a
  444. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  445. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  446. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  447. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  448. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  449. INNER JOIN ICSMOApply z ON c.SourceDetailID=z.ApplyDetailID AND c.WorkPoint=z.WorkPoint
  450. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  451. WHERE a.Identification='{0}' AND ERPUpload='0'
  452. GROUP BY a.ToWarehouseCode,z.ApplyCode,a.MUSER,a.InvCode,c.SourceDetailID,z.ApplyDetailID,Enable
  453. ,a.WorkPoint,ISNULL(ext.ProjectCode, ''),CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END,ISNULL(ext.Version, ''),ISNULL(ext.Brand, ''),
  454. 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, '')
  455. SELECT DISTINCT Costre,WorkPoint,DepCode,ApplyDetailID,WarehouseCode AS WHCode,'' AS SourceType,ApplyCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  456. SELECT Costre,Sequence,InvCode,Quantity,Amount,SourceDetailID,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 FROM #TempERP
  457. DROP TABLE #TempERP";
  458. }
  459. else if (TransType == TransTypeEnum.MOIssueDocNegativeIssue.GetDescription())
  460. {
  461. sql = @"SELECT ISNULL(y.DepCode, '')+a.ToWarehouseCode+ISNULL(y.MOCode, z.ApplyCode)+a.MUSER AS Costre,ISNULL(y.DepCode, '') AS DepCode,a.ToWarehouseCode AS WarehouseCode,CASE WHEN m.PickID IS NOT NULL THEN '生产订单' WHEN m.ApplyDetailID IS NOT NULL THEN '领料申请单' ELSE '' END AS SourceType,ISNULL(y.MOCode, z.ApplyCode) AS MOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY ISNULL(y.DepCode, ''),a.ToWarehouseCode,ISNULL(y.MOCode, z.ApplyCode),c.SourceDetailID,a.InvCode) AS Sequence,
  462. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.SourceDetailID,ISNULL(x.PickID, z.ApplyDetailID) AS MODetailID,Enable AS UpdateTodoQuantity
  463. ,a.WorkPoint,ISNULL(ext.ProjectCode, '') AS ProjectCode,CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,ISNULL(ext.Version, '') AS Version,ISNULL(ext.Brand, '') AS Brand,
  464. ISNULL(ext.cFree1, '') AS cFree1,ISNULL(ext.cFree2, '') AS cFree2,ISNULL(ext.cFree3, '') AS cFree3,ISNULL(ext.cFree4, '') AS cFree4,ISNULL(ext.cFree5, '') AS cFree5,ISNULL(ext.cFree6, '') AS cFree6,ISNULL(ext.cFree7, '') AS cFree7,ISNULL(ext.cFree8, '') AS cFree8,ISNULL(ext.cFree9, '') AS cFree9,ISNULL(ext.cFree10, '') AS cFree10
  465. INTO #TempERP
  466. FROM ICSWareHouseLotInfoLog a
  467. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  468. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  469. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  470. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  471. INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  472. INNER JOIN ICSMOIssue m ON c.SourceDetailID=m.ApplyDetailID AND c.WorkPoint=m.WorkPoint
  473. INNER JOIN ICSMOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  474. INNER JOIN ICSMO y ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint
  475. INNER JOIN ICSMOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  476. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  477. WHERE a.Identification='{0}' AND ERPUpload='0'
  478. GROUP BY ISNULL(y.DepCode, ''),a.ToWarehouseCode,ISNULL(y.MOCode, z.ApplyCode),a.MUSER,a.InvCode,c.SourceDetailID,m.PickID,m.ApplyDetailID,ISNULL(x.PickID, z.ApplyDetailID),Enable
  479. ,a.WorkPoint,ISNULL(ext.ProjectCode, ''),CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END,ISNULL(ext.Version, ''),ISNULL(ext.Brand, ''),
  480. 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, '')
  481. IF EXISTS(SELECT Costre FROM #TempERP WHERE SourceType='{0}')
  482. BEGIN
  483. RAISERROR('" + language.GetNameByCode("WMSAPIInfo135") + @"',16,1);
  484. END
  485. SELECT DISTINCT Costre,WorkPoint,DepCode,MODetailID,WarehouseCode AS WHCode,SourceType,MOCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  486. SELECT Costre,Sequence,InvCode,Quantity,Amount,SourceDetailID,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 FROM #TempERP
  487. DROP TABLE #TempERP";
  488. }
  489. else
  490. {
  491. throw new Exception(language.GetNameByCode("WMSAPIInfo003"));//"类型不符!");
  492. }
  493. sql = string.Format(sql, Identification);
  494. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  495. string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  496. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.MOIssueDocNegativeURL, Inputstr);
  497. Result result = new Result();
  498. result = JsonConvert.DeserializeObject<Result>(resultStr);
  499. if (result.Success)
  500. {
  501. try
  502. {
  503. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  504. foreach (var item in res)
  505. {
  506. JObject jo = (JObject)item;
  507. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  508. foreach (var detail in resdetail)
  509. {
  510. JObject det = (JObject)detail;
  511. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(),
  512. det["DetailID"].ToString(), jo["IssueNEGCode"].ToString(), det["Sequence"].ToString(), cmd, language);
  513. }
  514. }
  515. }
  516. catch (Exception ex)
  517. {
  518. log.Debug(ex.ToString());
  519. log.Debug(resultStr);
  520. }
  521. }
  522. else
  523. {
  524. throw new Exception(language.GetNameByCode("WMSAPIInfo080") + result.Message);
  525. }
  526. #endregion
  527. }
  528. catch (Exception)
  529. {
  530. throw;
  531. }
  532. }
  533. #endregion
  534. #region 生产入库
  535. /// <summary>
  536. /// 生产入库
  537. /// </summary>
  538. /// <param name="TransCode"></param>
  539. /// <param name="TransSequence"></param>
  540. /// <param name="Quantity"></param>
  541. /// <param name="WorkPoint"></param>
  542. /// <param name="cmd"></param>
  543. public static void ManufactureReceiveDoc(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
  544. {
  545. try
  546. {
  547. string sql = @"DECLARE @Status VARCHAR(10)
  548. SELECT @Status=c.ERPStatus FROM ICSInventoryLot a
  549. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  550. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  551. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  552. IF (@Status IS NULL)
  553. BEGIN
  554. RAISERROR('" + language.GetNameByCode("WMSAPIInfo081") + @"',16,1);
  555. RETURN
  556. END
  557. ELSE IF (@Status='3')
  558. BEGIN
  559. RAISERROR('" + language.GetNameByCode("WMSAPIInfo082") + @"',16,1);
  560. RETURN
  561. END
  562. UPDATE c SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
  563. FROM ICSInventoryLot a
  564. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  565. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  566. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  567. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  568. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  569. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  570. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Quantity<c.RCVQuantity)
  571. BEGIN
  572. RAISERROR('" + language.GetNameByCode("WMSAPIInfo083") + @"',16,1);
  573. END";
  574. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  575. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  576. {
  577. throw new Exception(language.GetNameByCode("WMSAPIInfo136"));//"生产订单更新失败!");
  578. }
  579. }
  580. catch (Exception)
  581. {
  582. throw;
  583. }
  584. }
  585. /// <summary>
  586. /// 生产入库接口
  587. /// </summary>
  588. /// <param name="TransType"></param>
  589. /// <param name="Identification"></param>
  590. /// <param name="cmd"></param>
  591. public static void ManufactureReceiveDocERP(string TransType, string Identification, SqlCommand cmd, Dictionary<string, string> language)
  592. {
  593. try
  594. {
  595. #region ERP
  596. string sql = @"SELECT c.DepCode+a.ToWarehouseCode+c.MOCode+a.MUSER AS Costre,c.DepCode,a.ToWarehouseCode AS WarehouseCode,c.MOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY c.DepCode,a.ToWarehouseCode,c.MOCode,c.MODetailID,a.InvCode) AS Sequence,
  597. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.MODetailID,Enable AS UpdateTodoQuantity
  598. ,a.WorkPoint,ISNULL(ext.ProjectCode, '') AS ProjectCode,CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END AS BatchCode,ISNULL(ext.Version, '') AS Version,ISNULL(ext.Brand, '') AS Brand,
  599. ISNULL(ext.cFree1, '') AS cFree1,ISNULL(ext.cFree2, '') AS cFree2,ISNULL(ext.cFree3, '') AS cFree3,ISNULL(ext.cFree4, '') AS cFree4,ISNULL(ext.cFree5, '') AS cFree5,ISNULL(ext.cFree6, '') AS cFree6,ISNULL(ext.cFree7, '') AS cFree7,ISNULL(ext.cFree8, '') AS cFree8,ISNULL(ext.cFree9, '') AS cFree9,ISNULL(ext.cFree10, '') AS cFree10
  600. INTO #TempERP
  601. FROM ICSWareHouseLotInfoLog a
  602. INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
  603. INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
  604. LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
  605. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  606. INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  607. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  608. WHERE a.Identification='{0}' AND ERPUpload='0'
  609. GROUP BY c.DepCode,a.ToWarehouseCode,c.MOCode,a.MUSER,a.InvCode,c.MODetailID,Enable
  610. ,a.WorkPoint,ISNULL(ext.ProjectCode, ''),CASE WHEN ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END,ISNULL(ext.Version, ''),ISNULL(ext.Brand, ''),
  611. 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, '')
  612. SELECT DISTINCT Costre,WorkPoint,DepCode,WarehouseCode AS WHCode,MOCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  613. SELECT Costre,Sequence,InvCode,Quantity,Amount,MODetailID,ProjectCode,BatchCode,Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10
  614. FROM #TempERP
  615. DROP TABLE #TempERP";
  616. sql = string.Format(sql, Identification);
  617. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  618. string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  619. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.ManufactureReceiveDocURL, Inputstr);
  620. Result result = new Result();
  621. result = JsonConvert.DeserializeObject<Result>(resultStr);
  622. if (result.Success)
  623. {
  624. try
  625. {
  626. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  627. foreach (var item in res)
  628. {
  629. JObject jo = (JObject)item;
  630. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  631. foreach (var detail in resdetail)
  632. {
  633. JObject det = (JObject)detail;
  634. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["MODetailID"].ToString(), Identification, jo["ID"].ToString(),
  635. det["DetailID"].ToString(), jo["MRCVCode"].ToString(), det["Sequence"].ToString(), cmd, language);
  636. }
  637. }
  638. }
  639. catch (Exception ex)
  640. {
  641. log.Debug(ex.ToString());
  642. log.Debug(resultStr);
  643. }
  644. }
  645. else
  646. {
  647. throw new Exception(language.GetNameByCode("WMSAPIInfo080") + result.Message);
  648. }
  649. #endregion
  650. }
  651. catch (Exception)
  652. {
  653. throw;
  654. }
  655. }
  656. #endregion
  657. #region 开立的生产入库单
  658. /// <summary>
  659. /// 开立的生产入库单
  660. /// </summary>
  661. /// <param name="TransCode"></param>
  662. /// <param name="TransSequence"></param>
  663. /// <param name="Quantity"></param>
  664. /// <param name="WorkPoint"></param>
  665. /// <param name="cmd"></param>
  666. public static void ManufactureReceive(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
  667. {
  668. try
  669. {
  670. string sql = @"DECLARE @Status VARCHAR(10)
  671. SELECT @Status=c.Status FROM ICSInventoryLot a
  672. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  673. INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  674. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Type='1'
  675. IF (@Status IS NULL)
  676. BEGIN
  677. RAISERROR('" + language.GetNameByCode("WMSAPIInfo081") + @"',16,1);
  678. RETURN
  679. END
  680. ELSE IF (@Status!='1')
  681. BEGIN
  682. RAISERROR('" + language.GetNameByCode("WMSAPIInfo137") + @"',16,1);
  683. RETURN
  684. END
  685. UPDATE c SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
  686. FROM ICSInventoryLot a
  687. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  688. INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  689. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Type='1'
  690. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  691. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  692. INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  693. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Type='1' AND c.Quantity<c.RCVQuantity)
  694. BEGIN
  695. RAISERROR('" + language.GetNameByCode("WMSAPIInfo083") + @"',16,1);
  696. END";
  697. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  698. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  699. {
  700. throw new Exception(language.GetNameByCode("WMSAPIInfo138"));//"生产入库单更新失败!");
  701. }
  702. }
  703. catch (Exception)
  704. {
  705. throw;
  706. }
  707. }
  708. /// <summary>
  709. /// 开立的生产入库单
  710. /// </summary>
  711. /// <param name="TransType"></param>
  712. /// <param name="Identification"></param>
  713. /// <param name="cmd"></param>
  714. public static void ManufactureReceiveERP(string TransType, string Identification, SqlCommand cmd, Dictionary<string, string> language)
  715. {
  716. try
  717. {
  718. #region ERP开立状态单据审核
  719. string sql = @"IF EXISTS(SELECT b.ID FROM ICSManufactureReceive b
  720. WHERE b.RCVCode+b.WorkPoint IN (SELECT a.TransCode+a.WorkPoint FROM ICSWareHouseLotInfoLog a WHERE a.Identification='{0}')
  721. AND b.Quantity!=b.RCVQuantity)
  722. BEGIN
  723. RAISERROR('" + language.GetNameByCode("WMSAPIInfo096") + @"',16,1);
  724. RETURN
  725. END
  726. SELECT b.RCVID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,con.Enable AS UpdateTodoQuantity,conStock.Enable AS UpdateStock,a.WorkPoint
  727. FROM ICSWareHouseLotInfoLog a
  728. INNER JOIN ICSManufactureReceive b ON a.TransCode=b.RCVCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  729. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  730. INNER JOIN ICSConfiguration conStock ON conStock.Code='UpdateStock004' AND a.WorkPoint=conStock.WorkPoint
  731. WHERE a.Identification='{0}' AND ERPUpload='0'
  732. GROUP BY b.RCVID,a.MUSER,con.Enable,conStock.Enable,a.WorkPoint";
  733. sql = string.Format(sql, Identification);
  734. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  735. string Inputstr = JsonConvert.SerializeObject(dt);
  736. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.ICSManufactureReceiveURL, Inputstr);
  737. Result result = new Result();
  738. result = JsonConvert.DeserializeObject<Result>(resultStr);
  739. if (result.Success)
  740. {
  741. try
  742. {
  743. foreach (DataRow dr in dt.Rows)
  744. {
  745. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd, language);
  746. }
  747. }
  748. catch (Exception ex)
  749. {
  750. log.Debug(ex.ToString());
  751. log.Debug(resultStr);
  752. }
  753. }
  754. else
  755. {
  756. throw new Exception(language.GetNameByCode("WMSAPIInfo080") + result.Message);
  757. }
  758. #endregion
  759. }
  760. catch (Exception)
  761. {
  762. throw;
  763. }
  764. }
  765. #endregion
  766. }
  767. }