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

1330 lines
71 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
  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 ICSOutsourcingService
  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 OutsourcingIssueDoc(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
  32. {
  33. try
  34. {
  35. string sql = @"DECLARE @Status VARCHAR(10)
  36. SELECT @Status=b.Status FROM ICSOOPick a
  37. INNER JOIN ICSOutsourcingOrder b ON a.OODetailID=b.OODetailID AND a.WorkPoint=b.WorkPoint
  38. WHERE b.OOCode='{0}' AND b.Sequence+'-'+a.Sequence='{3}' AND a.WorkPoint='{1}'
  39. IF (@Status IS NULL)
  40. BEGIN
  41. RAISERROR('{0} ',16,1);
  42. RETURN
  43. END
  44. ELSE IF (@Status!='2')
  45. BEGIN
  46. RAISERROR('{0} ',16,1);
  47. RETURN
  48. END
  49. UPDATE a SET IssueQuantity=ISNULL(IssueQuantity,0)+'{2}'
  50. FROM ICSOOPick a
  51. INNER JOIN ICSOutsourcingOrder b ON a.OODetailID=b.OODetailID AND a.WorkPoint=b.WorkPoint
  52. WHERE b.OOCode='{0}' AND b.Sequence+'-'+a.Sequence='{3}' AND a.WorkPoint='{1}'
  53. IF EXISTS(SELECT a.ID FROM ICSOOPick a
  54. INNER JOIN ICSOutsourcingOrder b ON a.OODetailID=b.OODetailID AND a.WorkPoint=b.WorkPoint
  55. WHERE b.OOCode='{0}' AND b.Sequence+'-'+a.Sequence='{3}' and b.WorkPoint='{1}' AND a.Quantity<a.IssueQuantity)
  56. BEGIN
  57. RAISERROR('{0}{3} ',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("委外领料单更新失败!");
  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 OutsourcingIssueDocERP(string TransType, string Identification, SqlCommand cmd)
  78. {
  79. try
  80. {
  81. #region ERP
  82. string sql = @"SELECT y.DepCode,a.FromWarehouseCode AS WarehouseCode,y.OOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY y.DepCode,a.FromWarehouseCode,y.OOCode,x.PickID,a.InvCode) AS Sequence,
  83. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,x.PickID,Enable AS UpdateTodoQuantity
  84. FROM ICSWareHouseLotInfoLog a
  85. INNER JOIN ICSOutsourcingOrder y ON a.TransCode=y.OOCode AND a.WorkPoint=y.WorkPoint
  86. INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND a.TransSequence=y.Sequence+'-'+x.Sequence AND x.WorkPoint=y.WorkPoint
  87. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  88. WHERE a.Identification='{0}' AND ERPUpload='0'
  89. GROUP BY y.DepCode,a.FromWarehouseCode,y.OOCode,a.MUSER,a.InvCode,x.PickID,Enable";
  90. sql = string.Format(sql, Identification);
  91. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  92. var parent = table.DefaultView.ToTable(true, "DepCode", "WarehouseCode", "OOCode", "MUSER", "UpdateTodoQuantity");
  93. List<IssueDoc> docPickmodel = new List<IssueDoc>();
  94. foreach (DataRow dts in parent.Rows)
  95. {
  96. IssueDoc doc = new IssueDoc();
  97. doc.DepCode = dts["DepCode"].ToString();
  98. doc.WHCode = dts["WarehouseCode"].ToString();
  99. doc.SourceType = TransType;
  100. doc.SourceCode = dts["OOCode"].ToString();
  101. doc.User = dts["MUSER"].ToString();
  102. doc.UpdateTodoQuantity = dts["UpdateTodoQuantity"].ToString();
  103. doc.MTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  104. doc.details = new List<IssueDocList>();
  105. DataRow[] drs = table.Select("DepCode+WarehouseCode+OOCode='" + doc.DepCode + doc.WHCode + doc.SourceCode + "'");
  106. foreach (DataRow dr in drs)
  107. {
  108. IssueDocList docc = new IssueDocList();
  109. docc.Sequence = dr["Sequence"].ToString();
  110. docc.InvCode = dr["InvCode"].ToString();
  111. docc.Quantity = dr["Quantity"].ToString();
  112. docc.Amount = dr["Amount"].ToString();
  113. docc.SourceDetailID = dr["PickID"].ToString();
  114. doc.details.Add(docc);
  115. }
  116. docPickmodel.Add(doc);
  117. }
  118. string Inputstr = JsonConvert.SerializeObject(docPickmodel);
  119. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OutsourcingIssueDocURL, Inputstr);
  120. Result result = new Result();
  121. result = JsonConvert.DeserializeObject<Result>(resultStr);
  122. if (result.Success)
  123. {
  124. try
  125. {
  126. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  127. foreach (var item in res)
  128. {
  129. JObject jo = (JObject)item;
  130. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  131. foreach (var detail in resdetail)
  132. {
  133. JObject det = (JObject)detail;
  134. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["IssueCode"].ToString(), det["Sequence"].ToString(), cmd);
  135. }
  136. }
  137. }
  138. catch (Exception ex)
  139. {
  140. log.Debug(ex.ToString());
  141. log.Debug(resultStr);
  142. }
  143. }
  144. else
  145. {
  146. throw new Exception("ERP接口调用失败:"+result.Message);
  147. }
  148. #endregion
  149. }
  150. catch (Exception)
  151. {
  152. throw;
  153. }
  154. }
  155. #endregion
  156. #region 委外领料申请单生产发料
  157. /// <summary>
  158. /// 委外领料申请单生产发料
  159. /// </summary>
  160. /// <param name="TransCode"></param>
  161. /// <param name="TransSequence"></param>
  162. /// <param name="Quantity"></param>
  163. /// <param name="WorkPoint"></param>
  164. /// <param name="cmd"></param>
  165. public static void OOApply(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
  166. {
  167. try
  168. {
  169. string sql = @"DECLARE @Status VARCHAR(10)
  170. SELECT @Status=a.Status FROM ICSOApply a
  171. WHERE a.ApplyCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  172. IF (@Status IS NULL)
  173. BEGIN
  174. RAISERROR('{0} ',16,1);
  175. RETURN
  176. END
  177. ELSE IF (@Status!='2')
  178. BEGIN
  179. RAISERROR('{0} ',16,1);
  180. RETURN
  181. END
  182. UPDATE a SET IssueQuantity=ISNULL(IssueQuantity,0)+'{2}'
  183. FROM ICSOApply a
  184. WHERE a.ApplyCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  185. IF EXISTS(SELECT a.ID FROM ICSOApply a
  186. WHERE a.ApplyCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.IssueQuantity)
  187. BEGIN
  188. RAISERROR('{0}{3} ',16,1);
  189. RETURN
  190. END";
  191. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  192. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  193. {
  194. throw new Exception("委外领料申请单更新失败!");
  195. }
  196. }
  197. catch (Exception)
  198. {
  199. throw;
  200. }
  201. }
  202. /// <summary>
  203. /// 委外领料申请单生产发料接口
  204. /// </summary>
  205. /// <param name="TransType"></param>
  206. /// <param name="Identification"></param>
  207. /// <param name="cmd"></param>
  208. public static void OOApplyERP(string TransType, string Identification, SqlCommand cmd)
  209. {
  210. try
  211. {
  212. #region ERP
  213. 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,
  214. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,b.ApplyDetailID,Enable AS UpdateTodoQuantity
  215. INTO #TempERP
  216. FROM ICSWareHouseLotInfoLog a
  217. INNER JOIN ICSOApply b ON a.TransCode=b.ApplyCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  218. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  219. WHERE a.Identification='{0}' AND ERPUpload='0'
  220. GROUP BY a.FromWarehouseCode,b.ApplyCode,a.MUSER,a.InvCode,b.ApplyDetailID,Enable
  221. SELECT DISTINCT Costre,'' AS DepCode,WarehouseCode AS WHCode,'' AS SourceType,ApplyCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  222. SELECT Costre,Sequence,InvCode,Quantity,Amount,ApplyDetailID AS SourceDetailID FROM #TempERP
  223. DROP TABLE #TempERP";
  224. sql = string.Format(sql, Identification);
  225. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  226. string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  227. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OOApplyURL, Inputstr);
  228. Result result = new Result();
  229. result = JsonConvert.DeserializeObject<Result>(resultStr);
  230. if (result.Success)
  231. {
  232. try
  233. {
  234. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  235. foreach (var item in res)
  236. {
  237. JObject jo = (JObject)item;
  238. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  239. foreach (var detail in resdetail)
  240. {
  241. JObject det = (JObject)detail;
  242. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["IssueCode"].ToString(), det["Sequence"].ToString(), cmd);
  243. }
  244. }
  245. }
  246. catch (Exception ex)
  247. {
  248. log.Debug(ex.ToString());
  249. log.Debug(resultStr);
  250. }
  251. }
  252. else
  253. {
  254. throw new Exception("ERP接口调用失败:" + result.Message);
  255. }
  256. #endregion
  257. }
  258. catch (Exception)
  259. {
  260. throw;
  261. }
  262. }
  263. #endregion
  264. #region 委外材料出库单生产发料
  265. /// <summary>
  266. /// 委外材料出库单生产发料
  267. /// </summary>
  268. /// <param name="TransCode"></param>
  269. /// <param name="TransSequence"></param>
  270. /// <param name="Quantity"></param>
  271. /// <param name="WorkPoint"></param>
  272. /// <param name="cmd"></param>
  273. public static void OOIssue(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
  274. {
  275. try
  276. {
  277. string sql = @"DECLARE @Status VARCHAR(10)
  278. SELECT @Status=a.Status FROM ICSOIssue a
  279. WHERE a.IssueCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  280. IF (@Status IS NULL)
  281. BEGIN
  282. RAISERROR('{0} ',16,1);
  283. RETURN
  284. END
  285. ELSE IF (@Status!='1')
  286. BEGIN
  287. RAISERROR('{0} ',16,1);
  288. RETURN
  289. END
  290. UPDATE a SET IssueQuantity=ISNULL(IssueQuantity,0)+'{2}'
  291. FROM ICSOIssue a
  292. WHERE a.IssueCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  293. IF EXISTS(SELECT a.ID FROM ICSOIssue a
  294. WHERE a.IssueCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.IssueQuantity)
  295. BEGIN
  296. RAISERROR('{0}{3} ',16,1);
  297. RETURN
  298. END";
  299. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  300. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  301. {
  302. throw new Exception("委外材料出库单更新失败!");
  303. }
  304. }
  305. catch (Exception)
  306. {
  307. throw;
  308. }
  309. }
  310. /// <summary>
  311. /// 委外材料出库单生产发料接口
  312. /// </summary>
  313. /// <param name="TransType"></param>
  314. /// <param name="Identification"></param>
  315. /// <param name="cmd"></param>
  316. public static void OOIssueERP(string TransType, string Identification, SqlCommand cmd)
  317. {
  318. try
  319. {
  320. #region ERP
  321. string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
  322. INNER JOIN ICSOIssue b ON a.TransCode=b.IssueCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  323. WHERE a.Identification='{0}' AND b.Quantity!=b.IssueQuantity)
  324. BEGIN
  325. RAISERROR('',16,1);
  326. RETURN
  327. END
  328. SELECT b.IssueID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,Enable AS UpdateTodoQuantity
  329. FROM ICSWareHouseLotInfoLog a
  330. INNER JOIN ICSOIssue b ON a.TransCode=b.IssueCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  331. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  332. WHERE a.Identification='{0}' AND ERPUpload='0'
  333. GROUP BY b.IssueID,a.MUSER,Enable";
  334. sql = string.Format(sql, Identification);
  335. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  336. string Inputstr = JsonConvert.SerializeObject(dt);
  337. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OOIssueURL, Inputstr);
  338. Result result = new Result();
  339. result = JsonConvert.DeserializeObject<Result>(resultStr);
  340. if (result.Success)
  341. {
  342. try
  343. {
  344. foreach (DataRow dr in dt.Rows)
  345. {
  346. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd);
  347. }
  348. }
  349. catch (Exception ex)
  350. {
  351. log.Debug(ex.ToString());
  352. log.Debug(resultStr);
  353. }
  354. }
  355. else
  356. {
  357. throw new Exception("ERP接口调用失败:" + result.Message);
  358. }
  359. #endregion
  360. }
  361. catch (Exception)
  362. {
  363. throw;
  364. }
  365. }
  366. #endregion
  367. #region 委外退料
  368. /// <summary>
  369. /// 委外退料
  370. /// </summary>
  371. /// <param name="TransCode"></param>
  372. /// <param name="TransSequence"></param>
  373. /// <param name="Quantity"></param>
  374. /// <param name="WorkPoint"></param>
  375. /// <param name="cmd"></param>
  376. public static void OutsourcingIssueDoNegative(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
  377. {
  378. try
  379. {
  380. string sql = @"UPDATE c SET IssueNegQuantity=ISNULL(IssueNegQuantity,0)+'{2}'
  381. FROM ICSInventoryLot a
  382. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  383. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  384. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  385. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  386. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  387. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  388. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Quantity<c.IssueNegQuantity)
  389. BEGIN
  390. RAISERROR('{0}退退',16,1);
  391. END";
  392. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  393. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  394. {
  395. throw new Exception("委外退料单更新失败!");
  396. }
  397. }
  398. catch (Exception)
  399. {
  400. throw;
  401. }
  402. }
  403. /// <summary>
  404. /// 委外退料接口
  405. /// </summary>
  406. /// <param name="TransType"></param>
  407. /// <param name="Identification"></param>
  408. /// <param name="cmd"></param>
  409. public static void OutsourcingIssueDoNegativeERP(string TransType, string Identification, SqlCommand cmd)
  410. {
  411. try
  412. {
  413. #region ERP
  414. string sql = string.Empty;
  415. if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegative.GetDescription())
  416. {
  417. sql = @"SELECT y.DepCode+a.ToWarehouseCode+y.OOCode+a.MUSER AS Costre,y.DepCode,a.ToWarehouseCode AS WarehouseCode,y.OOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY y.DepCode,a.ToWarehouseCode,y.OOCode,c.SourceDetailID,a.InvCode) AS Sequence,
  418. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.SourceDetailID,Enable AS UpdateTodoQuantity
  419. INTO #TempERP
  420. FROM ICSWareHouseLotInfoLog a
  421. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  422. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  423. INNER JOIN ICSOOPick x ON c.SourceDetailID=x.PickID AND c.WorkPoint=x.WorkPoint
  424. INNER JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  425. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  426. WHERE a.Identification='{0}' AND ERPUpload='0'
  427. GROUP BY y.DepCode,a.ToWarehouseCode,y.OOCode,a.MUSER,a.InvCode,c.SourceDetailID,Enable
  428. SELECT DISTINCT Costre,DepCode,WarehouseCode AS WHCode,'' AS SourceType,OOCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  429. SELECT Costre,Sequence,InvCode,Quantity,Amount,SourceDetailID FROM #TempERP
  430. DROP TABLE #TempERP";
  431. }
  432. else if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeApply.GetDescription())
  433. {
  434. 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,
  435. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.SourceDetailID,Enable AS UpdateTodoQuantity
  436. INTO #TempERP
  437. FROM ICSWareHouseLotInfoLog a
  438. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  439. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  440. INNER JOIN ICSOApply z ON c.SourceDetailID=z.ApplyDetailID AND c.WorkPoint=z.WorkPoint
  441. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  442. WHERE a.Identification='{0}' AND ERPUpload='0'
  443. GROUP BY a.ToWarehouseCode,z.ApplyCode,a.MUSER,a.InvCode,c.SourceDetailID,Enable
  444. SELECT DISTINCT Costre,DepCode,WarehouseCode AS WHCode,'' AS SourceType,ApplyCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  445. SELECT Costre,Sequence,InvCode,Quantity,Amount,SourceDetailID FROM #TempERP
  446. DROP TABLE #TempERP";
  447. }
  448. else if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeIssue.GetDescription())
  449. {
  450. sql = @"SELECT ISNULL(y.DepCode, '')+a.ToWarehouseCode+ISNULL(y.OOCode, 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.OOCode, z.ApplyCode) AS OOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY ISNULL(y.DepCode, ''),a.ToWarehouseCode,ISNULL(y.OOCode, z.ApplyCode),a.InvCode) AS Sequence,
  451. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,ISNULL(x.PickID, z.ApplyDetailID) AS SourceDetailID,Enable AS UpdateTodoQuantity
  452. INTO #TempERP
  453. FROM ICSWareHouseLotInfoLog a
  454. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  455. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  456. INNER JOIN ICSOIssue m ON c.SourceDetailID=m.ApplyDetailID AND c.WorkPoint=m.WorkPoint
  457. INNER JOIN ICSOOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
  458. INNER JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  459. INNER JOIN ICSOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
  460. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  461. WHERE a.Identification='{0}' AND ERPUpload='0'
  462. GROUP BY ISNULL(y.DepCode, ''),a.ToWarehouseCode,ISNULL(y.OOCode, z.ApplyCode),a.MUSER,a.InvCode,m.PickID,m.ApplyDetailID,ISNULL(x.PickID, z.ApplyDetailID),Enable
  463. IF EXISTS(SELECT Costre FROM #TempERP WHERE SourceType='{0}')
  464. BEGIN
  465. RAISERROR('',16,1);
  466. END
  467. SELECT DISTINCT Costre,DepCode,SourceDetailID,WarehouseCode AS WHCode,SourceType,OOCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  468. SELECT Costre,Sequence,InvCode,Quantity,Amount,SourceDetailID FROM #TempERP
  469. DROP TABLE #TempERP";
  470. }
  471. else
  472. {
  473. throw new Exception("类型不符!");
  474. }
  475. sql = string.Format(sql, Identification);
  476. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  477. string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  478. //DataTable table = DBHelper.SQlReturnData(sql, cmd);
  479. //var parent = table.DefaultView.ToTable(true, "DepCode", "WarehouseCode", "OOCode", "MUSER", "UpdateTodoQuantity");
  480. //List<IssueDoc> docPickmodel = new List<IssueDoc>();
  481. //foreach (DataRow dts in parent.Rows)
  482. //{
  483. // IssueDoc doc = new IssueDoc();
  484. // doc.DepCode = dts["DepCode"].ToString();
  485. // doc.WHCode = dts["WarehouseCode"].ToString();
  486. // doc.SourceType = TransType;
  487. // doc.SourceCode = dts["OOCode"].ToString();
  488. // doc.User = dts["MUSER"].ToString();
  489. // doc.UpdateTodoQuantity = dts["UpdateTodoQuantity"].ToString();
  490. // doc.MTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  491. // doc.details = new List<IssueDocList>();
  492. // DataRow[] drs = table.Select("DepCode+WarehouseCode+OOCode='" + doc.DepCode + doc.WHCode + doc.SourceCode + "'");
  493. // foreach (DataRow dr in drs)
  494. // {
  495. // IssueDocList docc = new IssueDocList();
  496. // docc.Sequence = dr["Sequence"].ToString();
  497. // docc.InvCode = dr["InvCode"].ToString();
  498. // docc.Quantity = dr["Quantity"].ToString();
  499. // docc.Amount = dr["Amount"].ToString();
  500. // docc.SourceDetailID = dr["SourceDetailID"].ToString();
  501. // doc.details.Add(docc);
  502. // }
  503. // docPickmodel.Add(doc);
  504. //}
  505. //string Inputstr = JsonConvert.SerializeObject(docPickmodel);
  506. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OutsourcingIssueDoNegativeURL, Inputstr);
  507. Result result = new Result();
  508. result = JsonConvert.DeserializeObject<Result>(resultStr);
  509. if (result.Success)
  510. {
  511. try
  512. {
  513. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  514. foreach (var item in res)
  515. {
  516. JObject jo = (JObject)item;
  517. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  518. foreach (var detail in resdetail)
  519. {
  520. JObject det = (JObject)detail;
  521. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["IssueNEGCode"].ToString(), det["Sequence"].ToString(), cmd);
  522. }
  523. }
  524. //List<ICSERPReturnIssueNEG> negList = JsonConvert.DeserializeObject<List<ICSERPReturnIssueNEG>>(result.Data.ToString());
  525. //foreach (var neg in negList)
  526. //{
  527. // foreach (var detail in neg.details)
  528. // {
  529. // ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, detail.SourceDetailID, Identification, neg.ID, detail.DetailID, neg.IssueNEGCode, detail.Sequence, cmd);
  530. // }
  531. //}
  532. }
  533. catch (Exception ex)
  534. {
  535. log.Debug(ex.ToString());
  536. log.Debug(resultStr);
  537. }
  538. }
  539. else
  540. {
  541. throw new Exception("ERP接口调用失败:"+result.Message);
  542. }
  543. #endregion
  544. }
  545. catch (Exception)
  546. {
  547. throw;
  548. }
  549. }
  550. #endregion
  551. #region 委外到货
  552. /// <summary>
  553. /// 委外到货接口
  554. /// </summary>
  555. /// <param name="TransType"></param>
  556. /// <param name="Identification"></param>
  557. /// <param name="cmd"></param>
  558. public static void OutsourcingDeliveryNoticeERP(string ODNCode, string WorkPoint, SqlCommand cmd)
  559. {
  560. try
  561. {
  562. #region ERP
  563. string sql = @"SELECT a.VenCode,a.DepCode,y.OOCode,a.MUSER,a.MTIME,
  564. a.Sequence,a.InvCode,a.Quantity,a.Amount,ISNULL(a.UnitPrice,0) AS UnitPrice,a.Currency,a.OODetailID, cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10
  565. FROM ICSODeliveryNotice a
  566. INNER JOIN ICSOutsourcingOrder y ON a.OODetailID=y.OODetailID AND a.WorkPoint=y.WorkPoint
  567. LEFT JOIN ICSExtension b ON a.ExtensionID=B.ID AND a.WorkPoint=b.WorkPoint
  568. WHERE a.ODNCode='{0}' AND a.WorkPoint='{1}'";
  569. sql = string.Format(sql, ODNCode, WorkPoint);
  570. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  571. var parent = table.DefaultView.ToTable(true, "VenCode", "DepCode", "OOCode", "MUSER");
  572. List<ERPDeliveryNotice> docmodel = new List<ERPDeliveryNotice>();
  573. foreach (DataRow dtIn in parent.Rows)
  574. {
  575. ERPDeliveryNotice doc = new ERPDeliveryNotice();
  576. doc.VenCode = dtIn["VenCode"].ToString();
  577. doc.DepCode = dtIn["DepCode"].ToString();
  578. doc.OOCode = dtIn["OOCode"].ToString();
  579. doc.User = dtIn["MUSER"].ToString();
  580. doc.MTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  581. doc.details = new List<ERPDeliveryNoticeList>();
  582. DataRow[] drs = table.Select("VenCode+DepCode+OOCode='" + doc.VenCode + doc.DepCode + doc.OOCode + "'");
  583. foreach (DataRow dr in drs)
  584. {
  585. ERPDeliveryNoticeList docc = new ERPDeliveryNoticeList();
  586. docc.Sequence = dr["Sequence"].ToString();
  587. docc.InvCode = dr["InvCode"].ToString();
  588. docc.Quantity = dr["Quantity"].ToString();
  589. docc.Amount = dr["Amount"].ToString();
  590. docc.Currency = dr["Currency"].ToString();
  591. docc.UnitPrice = dr["UnitPrice"].ToString();
  592. docc.OODetailID = dr["OODetailID"].ToString();
  593. docc.cFree1 = dr["cFree1"].ToString();
  594. docc.cFree2 = dr["cFree2"].ToString();
  595. docc.cFree3 = dr["cFree3"].ToString();
  596. docc.cFree4 = dr["cFree4"].ToString();
  597. docc.cFree5 = dr["cFree5"].ToString();
  598. docc.cFree6 = dr["cFree6"].ToString();
  599. docc.cFree7 = dr["cFree7"].ToString();
  600. docc.cFree8 = dr["cFree8"].ToString();
  601. docc.cFree9 = dr["cFree9"].ToString();
  602. docc.cFree10 = dr["cFree10"].ToString();
  603. doc.details.Add(docc);
  604. }
  605. docmodel.Add(doc);
  606. }
  607. string Inputstr = JsonConvert.SerializeObject(docmodel);
  608. string resultStr = HTTPHelper.HttpPost("委外到货", ERPUrl.ODeliveryNoticeURL, Inputstr);
  609. Result result = new Result();
  610. result = JsonConvert.DeserializeObject<Result>(resultStr);
  611. if (result.Success)
  612. {
  613. try
  614. {
  615. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  616. foreach (var item in res)
  617. {
  618. JObject jo = (JObject)item;
  619. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  620. foreach (var detail in resdetail)
  621. {
  622. JObject det = (JObject)detail;
  623. string ERPupdate = @"update ICSODeliveryNotice set ODNCode='{0}',Sequence='{1}',ODNID='{2}',ODNDetailID='{3}'
  624. where OODetailID='{4}' AND ODNType='1' AND ODNCode='{5}' ";
  625. ERPupdate = string.Format(ERPupdate, jo["ODNCode"], det["Sequence"], jo["ID"], det["DetailID"], det["OODetailID"],ODNCode);
  626. if (!DBHelper.ExecuteNonQuery(ERPupdate, cmd))
  627. {
  628. throw new Exception("到货单更新失败!");
  629. }
  630. }
  631. }
  632. }
  633. catch (Exception ex)
  634. {
  635. log.Debug(ex.ToString());
  636. log.Debug(resultStr);
  637. }
  638. }
  639. else
  640. {
  641. throw new Exception("ERP接口调用失败:"+result.Message);
  642. }
  643. #endregion
  644. }
  645. catch (Exception)
  646. {
  647. throw;
  648. }
  649. }
  650. #endregion
  651. #region 委外入库
  652. /// <summary>
  653. /// 委外入库
  654. /// </summary>
  655. /// <param name="TransCode"></param>
  656. /// <param name="TransSequence"></param>
  657. /// <param name="Quantity"></param>
  658. /// <param name="WorkPoint"></param>
  659. /// <param name="cmd"></param>
  660. public static void OutsourcingReceiveDoc(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
  661. {
  662. try
  663. {
  664. string sql = @"DECLARE @Status VARCHAR(10)
  665. SELECT @Status=c.Status FROM ICSInventoryLot a
  666. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  667. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  668. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  669. IF (@Status IS NULL)
  670. BEGIN
  671. RAISERROR('{0} ',16,1);
  672. RETURN
  673. END
  674. ELSE IF (@Status='3')
  675. BEGIN
  676. RAISERROR('{0} ',16,1);
  677. RETURN
  678. END
  679. UPDATE c SET InQuantity=ISNULL(InQuantity,0)+'{2}'
  680. FROM ICSInventoryLot a
  681. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  682. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  683. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  684. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  685. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  686. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  687. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Quantity<c.InQuantity)
  688. BEGIN
  689. RAISERROR('{0} ',16,1);
  690. END";
  691. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  692. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  693. {
  694. throw new Exception("委外退料单更新失败!");
  695. }
  696. }
  697. catch (Exception)
  698. {
  699. throw;
  700. }
  701. }
  702. /// <summary>
  703. /// 委外入库接口
  704. /// </summary>
  705. /// <param name="TransType"></param>
  706. /// <param name="Identification"></param>
  707. /// <param name="cmd"></param>
  708. public static void OutsourcingReceiveDocERP(string TransType, string Identification, SqlCommand cmd)
  709. {
  710. try
  711. {
  712. #region ERP
  713. string sql = @"SELECT y.VenCode,a.ToWarehouseCode AS WarehouseCode,y.OOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY y.VenCode,a.ToWarehouseCode,y.OOCode,y.OODetailID,a.InvCode) AS Sequence,
  714. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,isnull((y.UnitPrice),0) as UnitPrice,y.Currency,y.OODetailID,Enable AS UpdateTodoQuantity
  715. FROM ICSWareHouseLotInfoLog a
  716. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  717. INNER JOIN ICSOutsourcingOrder y ON b.TransCode=y.OOCode AND b.TransSequence=y.Sequence AND b.WorkPoint=y.WorkPoint
  718. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  719. WHERE a.Identification='{0}' AND ERPUpload='0'
  720. GROUP BY y.VenCode,a.ToWarehouseCode,y.OOCode,a.MUSER,a.InvCode,y.OODetailID,isnull((y.UnitPrice),0),y.Currency,Enable";
  721. sql = string.Format(sql, Identification);
  722. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  723. var parent = table.DefaultView.ToTable(true, "VenCode", "WarehouseCode", "OOCode", "MUSER", "UpdateTodoQuantity");
  724. List<ERPPurchaseOrder> docmodel = new List<ERPPurchaseOrder>();
  725. foreach (DataRow dts in parent.Rows)
  726. {
  727. ERPPurchaseOrder doc = new ERPPurchaseOrder();
  728. doc.VenCode = dts["VenCode"].ToString();
  729. doc.WHCode = dts["WarehouseCode"].ToString();
  730. doc.OOCode = dts["OOCode"].ToString();
  731. doc.User = dts["MUSER"].ToString();
  732. doc.UpdateTodoQuantity = dts["UpdateTodoQuantity"].ToString();
  733. doc.MTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  734. doc.details = new List<ERPPurchaseOrderList>();
  735. DataRow[] drs = table.Select("VenCode+WarehouseCode+OOCode='" + doc.VenCode + doc.WHCode + doc.OOCode + "'");
  736. foreach (DataRow dr in drs)
  737. {
  738. ERPPurchaseOrderList docc = new ERPPurchaseOrderList();
  739. docc.Sequence = dr["Sequence"].ToString();
  740. docc.InvCode = dr["InvCode"].ToString();
  741. docc.Quantity = dr["Quantity"].ToString();
  742. docc.Amount = dr["Amount"].ToString();
  743. docc.Currency = dr["Currency"].ToString();
  744. docc.UnitPrice = dr["UnitPrice"].ToString();
  745. docc.OODetailID = dr["OODetailID"].ToString();
  746. doc.details.Add(docc);
  747. }
  748. docmodel.Add(doc);
  749. }
  750. string Inputstr = JsonConvert.SerializeObject(docmodel);
  751. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OutsourcingReceiveDocURL, Inputstr);
  752. Result result = new Result();
  753. result = JsonConvert.DeserializeObject<Result>(resultStr);
  754. if (result.Success)
  755. {
  756. try
  757. {
  758. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  759. foreach (var item in res)
  760. {
  761. JObject jo = (JObject)item;
  762. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  763. foreach (var detail in resdetail)
  764. {
  765. JObject det = (JObject)detail;
  766. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["OODetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["ORCVTCode"].ToString(), det["Sequence"].ToString(), cmd);
  767. }
  768. }
  769. }
  770. catch (Exception ex)
  771. {
  772. log.Debug(ex.ToString());
  773. log.Debug(resultStr);
  774. }
  775. }
  776. else
  777. {
  778. throw new Exception("ERP接口调用失败:"+result.Message);
  779. }
  780. #endregion
  781. }
  782. catch (Exception)
  783. {
  784. throw;
  785. }
  786. }
  787. #endregion
  788. #region 审核的委外到货单
  789. /// <summary>
  790. /// 审核的委外到货单
  791. /// </summary>
  792. /// <param name="TransCode"></param>
  793. /// <param name="TransSequence"></param>
  794. /// <param name="Quantity"></param>
  795. /// <param name="WorkPoint"></param>
  796. /// <param name="cmd"></param>
  797. public static void ODeliveryNoticeIn(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
  798. {
  799. try
  800. {
  801. string sql = @"DECLARE @Status VARCHAR(10)
  802. SELECT @Status=c.Status FROM ICSInventoryLot a
  803. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  804. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  805. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='1'
  806. IF (@Status IS NULL)
  807. BEGIN
  808. RAISERROR('{0} ',16,1);
  809. RETURN
  810. END
  811. ELSE IF (@Status='3')
  812. BEGIN
  813. RAISERROR('{0} ',16,1);
  814. RETURN
  815. END
  816. UPDATE c SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
  817. FROM ICSInventoryLot a
  818. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  819. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  820. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='1'
  821. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  822. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  823. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  824. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='1' AND c.Quantity<c.RCVQuantity)
  825. BEGIN
  826. RAISERROR('{0} ',16,1);
  827. END";
  828. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  829. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  830. {
  831. throw new Exception("委外到货单更新失败!");
  832. }
  833. }
  834. catch (Exception)
  835. {
  836. throw;
  837. }
  838. }
  839. /// <summary>
  840. /// 审核的委外到货单接口
  841. /// </summary>
  842. /// <param name="TransType"></param>
  843. /// <param name="Identification"></param>
  844. /// <param name="cmd"></param>
  845. public static void ODeliveryNoticeInERP(string TransType, string Identification, SqlCommand cmd)
  846. {
  847. try
  848. {
  849. #region ERP
  850. string sql = @"SELECT c.VenCode+a.ToWarehouseCode+c.ODNCode+a.MUSER AS Costre,c.VenCode,a.ToWarehouseCode AS WarehouseCode,c.ODNCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY c.VenCode,a.ToWarehouseCode,c.ODNCode,c.ODNDetailID,a.InvCode) AS Sequence,
  851. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,isnull((c.UnitPrice),0) as UnitPrice,c.Currency,c.ODNDetailID,Enable AS UpdateTodoQuantity
  852. INTO #TempERP
  853. FROM ICSWareHouseLotInfoLog a
  854. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  855. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  856. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  857. WHERE a.Identification='{0}' AND ERPUpload='0'
  858. GROUP BY c.VenCode,a.ToWarehouseCode,c.ODNCode,a.MUSER,a.InvCode,c.ODNDetailID,isnull((c.UnitPrice),0),c.Currency,Enable
  859. SELECT DISTINCT Costre,VenCode,WarehouseCode AS WHCode,ODNCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  860. SELECT Costre,Sequence,InvCode,Quantity,Amount,ODNDetailID,Currency,UnitPrice
  861. FROM #TempERP
  862. DROP TABLE #TempERP";
  863. sql = string.Format(sql, Identification);
  864. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  865. string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  866. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.ODeliveryNoticeInURL, Inputstr);
  867. Result result = new Result();
  868. result = JsonConvert.DeserializeObject<Result>(resultStr);
  869. if (result.Success)
  870. {
  871. try
  872. {
  873. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  874. foreach (var item in res)
  875. {
  876. JObject jo = (JObject)item;
  877. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  878. foreach (var detail in resdetail)
  879. {
  880. JObject det = (JObject)detail;
  881. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["ODNDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["ORCVTCode"].ToString(), det["Sequence"].ToString(), cmd);
  882. }
  883. }
  884. }
  885. catch (Exception ex)
  886. {
  887. log.Debug(ex.ToString());
  888. log.Debug(resultStr);
  889. }
  890. }
  891. else
  892. {
  893. throw new Exception("ERP接口调用失败:" + result.Message);
  894. }
  895. #endregion
  896. }
  897. catch (Exception)
  898. {
  899. throw;
  900. }
  901. }
  902. #endregion
  903. #region 委外拒收
  904. /// <summary>
  905. /// 委外拒收
  906. /// </summary>
  907. /// <param name="TransCode"></param>
  908. /// <param name="TransSequence"></param>
  909. /// <param name="Quantity"></param>
  910. /// <param name="WorkPoint"></param>
  911. /// <param name="cmd"></param>
  912. public static void OutsourcingRejectDocIn(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
  913. {
  914. try
  915. {
  916. string sql = @"DECLARE @Status VARCHAR(10)
  917. SELECT @Status=c.Status FROM ICSInventoryLot a
  918. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  919. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  920. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='3'
  921. IF (@Status IS NULL)
  922. BEGIN
  923. RAISERROR('{0} ',16,1);
  924. RETURN
  925. END
  926. ELSE IF (@Status='3')
  927. BEGIN
  928. RAISERROR('{0} ',16,1);
  929. RETURN
  930. END
  931. UPDATE c SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
  932. FROM ICSInventoryLot a
  933. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  934. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  935. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='3'
  936. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  937. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  938. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  939. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='3' AND c.Quantity<c.RCVQuantity)
  940. BEGIN
  941. RAISERROR('{0} ',16,1);
  942. END";
  943. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  944. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  945. {
  946. throw new Exception("委外拒收单更新失败!");
  947. }
  948. }
  949. catch (Exception)
  950. {
  951. throw;
  952. }
  953. }
  954. /// <summary>
  955. /// 委外拒收接口
  956. /// </summary>
  957. /// <param name="TransType"></param>
  958. /// <param name="Identification"></param>
  959. /// <param name="cmd"></param>
  960. public static void OutsourcingRejectDocInERP(string TransType, string Identification, SqlCommand cmd)
  961. {
  962. //try
  963. //{
  964. // #region ERP
  965. // string sql = @"SELECT c.VenCode+a.ToWarehouseCode+c.ODNCode+a.MUSER AS Costre,c.VenCode,a.ToWarehouseCode AS WarehouseCode,c.ODNCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY c.VenCode,a.ToWarehouseCode,c.ODNCode,c.ODNDetailID,a.InvCode) AS Sequence,
  966. // a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,isnull((c.UnitPrice),0) as UnitPrice,c.Currency,c.ODNDetailID,Enable AS UpdateTodoQuantity
  967. // INTO #TempERP
  968. // FROM ICSWareHouseLotInfoLog a
  969. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  970. // INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  971. // INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  972. // WHERE a.Identification='{0}' AND ERPUpload='0'
  973. // GROUP BY c.VenCode,a.ToWarehouseCode,c.ODNCode,a.MUSER,a.InvCode,c.ODNDetailID,isnull((c.UnitPrice),0),c.Currency,Enable
  974. // SELECT DISTINCT Costre,VenCode,WarehouseCode AS WHCode,ODNCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  975. // SELECT Costre,Sequence,InvCode,Quantity,Amount,ODNDetailID,Currency,UnitPrice
  976. // FROM #TempERP
  977. // DROP TABLE #TempERP";
  978. // sql = string.Format(sql, Identification);
  979. // DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  980. // string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  981. // string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.ODeliveryNoticeInURL, Inputstr);
  982. // Result result = new Result();
  983. // result = JsonConvert.DeserializeObject<Result>(resultStr);
  984. // if (result.Success)
  985. // {
  986. // try
  987. // {
  988. // JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  989. // foreach (var item in res)
  990. // {
  991. // JObject jo = (JObject)item;
  992. // JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  993. // foreach (var detail in resdetail)
  994. // {
  995. // JObject det = (JObject)detail;
  996. // ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["ODNDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["ORCVTCode"].ToString(), det["Sequence"].ToString(), cmd);
  997. // }
  998. // }
  999. // }
  1000. // catch (Exception ex)
  1001. // {
  1002. // log.Debug(ex.ToString());
  1003. // log.Debug(resultStr);
  1004. // }
  1005. // }
  1006. // else
  1007. // {
  1008. // throw new Exception("ERP接口调用失败:" + result.Message);
  1009. // }
  1010. // #endregion
  1011. //}
  1012. //catch (Exception)
  1013. //{
  1014. // throw;
  1015. //}
  1016. }
  1017. #endregion
  1018. #region 委外退货
  1019. /// <summary>
  1020. /// 委外退货
  1021. /// </summary>
  1022. /// <param name="TransCode"></param>
  1023. /// <param name="TransSequence"></param>
  1024. /// <param name="Quantity"></param>
  1025. /// <param name="WorkPoint"></param>
  1026. /// <param name="cmd"></param>
  1027. public static void OutsourcingReturnBack(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
  1028. {
  1029. try
  1030. {
  1031. string sql = @"DECLARE @Status VARCHAR(10)
  1032. SELECT @Status=Status FROM ICSODeliveryNotice WHERE ODNCode='{0}' AND ODNType='2' and WorkPoint='{1}'
  1033. IF (@Status IS NULL)
  1034. BEGIN
  1035. RAISERROR('退{0} ',16,1);
  1036. RETURN
  1037. END
  1038. ELSE IF (@Status!='2')
  1039. BEGIN
  1040. RAISERROR('退{0} ',16,1);
  1041. RETURN
  1042. END
  1043. UPDATE a SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
  1044. FROM ICSODeliveryNotice a
  1045. WHERE a.ODNCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}' AND ODNType='2'
  1046. IF EXISTS(SELECT a.ID FROM ICSODeliveryNotice a
  1047. WHERE a.ODNCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.RCVQuantity AND ODNType='2')
  1048. BEGIN
  1049. RAISERROR('{0}{3} 退退',16,1);
  1050. RETURN
  1051. END";
  1052. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  1053. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1054. {
  1055. throw new Exception("委外退货单更新失败!");
  1056. }
  1057. }
  1058. catch (Exception)
  1059. {
  1060. throw;
  1061. }
  1062. }
  1063. /// <summary>
  1064. /// 委外退货接口
  1065. /// </summary>
  1066. /// <param name="TransType"></param>
  1067. /// <param name="Identification"></param>
  1068. /// <param name="cmd"></param>
  1069. public static void OutsourcingReturnBackERP(string TransType, string Identification, SqlCommand cmd)
  1070. {
  1071. try
  1072. {
  1073. #region ERP
  1074. string sql = @"SELECT y.VenCode,a.FromWarehouseCode AS WarehouseCode,y.ODNCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY y.VenCode,a.FromWarehouseCode,y.ODNCode,y.ODNDetailID,a.InvCode) AS Sequence,
  1075. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,y.ODNDetailID,y.Currency,ISNULL(y.UnitPrice, 0) AS UnitPrice,Enable AS UpdateTodoQuantity
  1076. FROM ICSWareHouseLotInfoLog a
  1077. INNER JOIN ICSODeliveryNotice y ON a.TransCode=y.ODNCode AND a.TransSequence=y.Sequence AND a.WorkPoint=y.WorkPoint
  1078. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  1079. WHERE a.Identification='{0}' AND ERPUpload='0'
  1080. GROUP BY y.VenCode,a.FromWarehouseCode,y.ODNCode,a.MUSER,a.InvCode,y.ODNDetailID,y.Currency,ISNULL(y.UnitPrice, 0),Enable";
  1081. sql = string.Format(sql, Identification);
  1082. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1083. var parent = table.DefaultView.ToTable(true, "VenCode", "WarehouseCode", "ODNCode", "MUSER", "UpdateTodoQuantity");
  1084. List<ERPODNRT> docmodel = new List<ERPODNRT>();
  1085. foreach (DataRow dts in parent.Rows)
  1086. {
  1087. ERPODNRT doc = new ERPODNRT();
  1088. doc.VenCode = dts["VenCode"].ToString();
  1089. doc.WHCode = dts["WarehouseCode"].ToString();
  1090. doc.ODNRTCode = dts["ODNCode"].ToString();
  1091. doc.User = dts["MUSER"].ToString();
  1092. doc.User = dts["UpdateTodoQuantity"].ToString();
  1093. doc.MTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1094. doc.details = new List<ERPODNRTList>();
  1095. DataRow[] drs = table.Select("VenCode+WarehouseCode+ODNCode='" + doc.VenCode + doc.WHCode + doc.ODNRTCode + "'");
  1096. foreach (DataRow dr in drs)
  1097. {
  1098. ERPODNRTList docc = new ERPODNRTList();
  1099. docc.Sequence = dr["Sequence"].ToString();
  1100. docc.InvCode = dr["InvCode"].ToString();
  1101. docc.Quantity = dr["Quantity"].ToString();
  1102. docc.Amount = dr["Amount"].ToString();
  1103. docc.Currency = dr["Currency"].ToString();
  1104. docc.UnitPrice = dr["UnitPrice"].ToString();
  1105. docc.ODNRTDetailID = dr["ODNDetailID"].ToString();
  1106. doc.details.Add(docc);
  1107. }
  1108. docmodel.Add(doc);
  1109. }
  1110. string Inputstr = JsonConvert.SerializeObject(docmodel);
  1111. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OutsourcingReturnBackURL, Inputstr);
  1112. Result result = new Result();
  1113. result = JsonConvert.DeserializeObject<Result>(resultStr);
  1114. if (result.Success)
  1115. {
  1116. try
  1117. {
  1118. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  1119. foreach (var item in res)
  1120. {
  1121. JObject jo = (JObject)item;
  1122. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  1123. foreach (var detail in resdetail)
  1124. {
  1125. JObject det = (JObject)detail;
  1126. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["ODNRTDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["ORCVNEGCode"].ToString(), det["Sequence"].ToString(), cmd);
  1127. }
  1128. }
  1129. }
  1130. catch (Exception ex)
  1131. {
  1132. log.Debug(ex.ToString());
  1133. log.Debug(resultStr);
  1134. }
  1135. }
  1136. else
  1137. {
  1138. throw new Exception("ERP接口调用失败:"+result.Message);
  1139. }
  1140. #endregion
  1141. }
  1142. catch (Exception)
  1143. {
  1144. throw;
  1145. }
  1146. }
  1147. #endregion
  1148. #region 开立委外红字入库
  1149. /// <summary>
  1150. /// 开立委外红字入库
  1151. /// </summary>
  1152. /// <param name="TransCode"></param>
  1153. /// <param name="TransSequence"></param>
  1154. /// <param name="Quantity"></param>
  1155. /// <param name="WorkPoint"></param>
  1156. /// <param name="cmd"></param>
  1157. public static void OutsourcingReceiveDocNegative(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
  1158. {
  1159. try
  1160. {
  1161. string sql = @"DECLARE @Status VARCHAR(10)
  1162. SELECT @Status=a.Status FROM ICSOutsourcingReceive a
  1163. WHERE a.RCVCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}' AND a.Type='2'
  1164. IF (@Status IS NULL)
  1165. BEGIN
  1166. RAISERROR('{0} ',16,1);
  1167. RETURN
  1168. END
  1169. ELSE IF (@Status!='1')
  1170. BEGIN
  1171. RAISERROR('{0} ',16,1);
  1172. RETURN
  1173. END
  1174. UPDATE a SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
  1175. FROM ICSOutsourcingReceive a
  1176. WHERE a.RCVCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}' AND a.Type='2'
  1177. IF EXISTS(SELECT a.ID FROM ICSOutsourcingReceive a
  1178. WHERE a.RCVCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Type='2' AND a.Quantity<a.RCVQuantity)
  1179. BEGIN
  1180. RAISERROR('{0}{3} ',16,1);
  1181. RETURN
  1182. END";
  1183. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  1184. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1185. {
  1186. throw new Exception("委外红字入库单更新失败!");
  1187. }
  1188. }
  1189. catch (Exception)
  1190. {
  1191. throw;
  1192. }
  1193. }
  1194. /// <summary>
  1195. /// 开立委外红字入库接口
  1196. /// </summary>
  1197. /// <param name="TransType"></param>
  1198. /// <param name="Identification"></param>
  1199. /// <param name="cmd"></param>
  1200. public static void OutsourcingReceiveDocNegativeERP(string TransType, string Identification, SqlCommand cmd)
  1201. {
  1202. try
  1203. {
  1204. #region ERP
  1205. string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
  1206. INNER JOIN ICSOutsourcingReceive b ON a.TransCode=b.RCVCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  1207. WHERE a.Identification='{0}' AND b.Quantity!=b.RCVQuantity)
  1208. BEGIN
  1209. RAISERROR('',16,1);
  1210. RETURN
  1211. END
  1212. SELECT b.RCVID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,Enable AS UpdateTodoQuantity
  1213. FROM ICSWareHouseLotInfoLog a
  1214. INNER JOIN ICSOutsourcingReceive b ON a.TransCode=b.RCVCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  1215. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  1216. WHERE a.Identification='{0}' AND ERPUpload='0'
  1217. GROUP BY b.RCVID,a.MUSER,Enable";
  1218. sql = string.Format(sql, Identification);
  1219. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  1220. string Inputstr = JsonConvert.SerializeObject(dt);
  1221. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OutsourcingReceiveDocNegativeURL, Inputstr);
  1222. Result result = new Result();
  1223. result = JsonConvert.DeserializeObject<Result>(resultStr);
  1224. if (result.Success)
  1225. {
  1226. try
  1227. {
  1228. foreach (DataRow dr in dt.Rows)
  1229. {
  1230. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd);
  1231. }
  1232. }
  1233. catch (Exception ex)
  1234. {
  1235. log.Debug(ex.ToString());
  1236. log.Debug(resultStr);
  1237. }
  1238. }
  1239. else
  1240. {
  1241. throw new Exception("ERP接口调用失败:" + result.Message);
  1242. }
  1243. #endregion
  1244. }
  1245. catch (Exception)
  1246. {
  1247. throw;
  1248. }
  1249. }
  1250. #endregion
  1251. }
  1252. }