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

1268 lines
66 KiB

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 = @"SELECT 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,
  415. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.SourceDetailID,Enable AS UpdateTodoQuantity
  416. FROM ICSWareHouseLotInfoLog a
  417. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  418. INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  419. INNER JOIN ICSOOPick x ON c.SourceDetailID=x.PickID AND c.WorkPoint=x.WorkPoint
  420. INNER JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
  421. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  422. WHERE a.Identification='{0}' AND ERPUpload='0'
  423. GROUP BY y.DepCode,a.ToWarehouseCode,y.OOCode,a.MUSER,a.InvCode,c.SourceDetailID,Enable";
  424. sql = string.Format(sql, Identification);
  425. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  426. var parent = table.DefaultView.ToTable(true, "DepCode", "WarehouseCode", "OOCode", "MUSER", "UpdateTodoQuantity");
  427. List<IssueDoc> docPickmodel = new List<IssueDoc>();
  428. foreach (DataRow dts in parent.Rows)
  429. {
  430. IssueDoc doc = new IssueDoc();
  431. doc.DepCode = dts["DepCode"].ToString();
  432. doc.WHCode = dts["WarehouseCode"].ToString();
  433. doc.SourceType = TransType;
  434. doc.SourceCode = dts["OOCode"].ToString();
  435. doc.User = dts["MUSER"].ToString();
  436. doc.UpdateTodoQuantity = dts["UpdateTodoQuantity"].ToString();
  437. doc.MTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  438. doc.details = new List<IssueDocList>();
  439. DataRow[] drs = table.Select("DepCode+WarehouseCode+OOCode='" + doc.DepCode + doc.WHCode + doc.SourceCode + "'");
  440. foreach (DataRow dr in drs)
  441. {
  442. IssueDocList docc = new IssueDocList();
  443. docc.Sequence = dr["Sequence"].ToString();
  444. docc.InvCode = dr["InvCode"].ToString();
  445. docc.Quantity = dr["Quantity"].ToString();
  446. docc.Amount = dr["Amount"].ToString();
  447. docc.SourceDetailID = dr["SourceDetailID"].ToString();
  448. doc.details.Add(docc);
  449. }
  450. docPickmodel.Add(doc);
  451. }
  452. string Inputstr = JsonConvert.SerializeObject(docPickmodel);
  453. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OutsourcingIssueDoNegativeURL, Inputstr);
  454. Result result = new Result();
  455. result = JsonConvert.DeserializeObject<Result>(resultStr);
  456. if (result.Success)
  457. {
  458. try
  459. {
  460. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  461. foreach (var item in res)
  462. {
  463. JObject jo = (JObject)item;
  464. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  465. foreach (var detail in resdetail)
  466. {
  467. JObject det = (JObject)detail;
  468. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["IssueNEGCode"].ToString(), det["Sequence"].ToString(), cmd);
  469. }
  470. }
  471. //List<ICSERPReturnIssueNEG> negList = JsonConvert.DeserializeObject<List<ICSERPReturnIssueNEG>>(result.Data.ToString());
  472. //foreach (var neg in negList)
  473. //{
  474. // foreach (var detail in neg.details)
  475. // {
  476. // ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, detail.SourceDetailID, Identification, neg.ID, detail.DetailID, neg.IssueNEGCode, detail.Sequence, cmd);
  477. // }
  478. //}
  479. }
  480. catch (Exception ex)
  481. {
  482. log.Debug(ex.ToString());
  483. log.Debug(resultStr);
  484. }
  485. }
  486. else
  487. {
  488. throw new Exception("ERP接口调用失败:"+result.Message);
  489. }
  490. #endregion
  491. }
  492. catch (Exception)
  493. {
  494. throw;
  495. }
  496. }
  497. #endregion
  498. #region 委外到货
  499. /// <summary>
  500. /// 委外到货接口
  501. /// </summary>
  502. /// <param name="TransType"></param>
  503. /// <param name="Identification"></param>
  504. /// <param name="cmd"></param>
  505. public static void OutsourcingDeliveryNoticeERP(string ODNCode, string WorkPoint, SqlCommand cmd)
  506. {
  507. try
  508. {
  509. #region ERP
  510. string sql = @"SELECT a.VenCode,a.DepCode,y.OOCode,a.MUSER,a.MTIME,
  511. 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
  512. FROM ICSODeliveryNotice a
  513. INNER JOIN ICSOutsourcingOrder y ON a.OODetailID=y.OODetailID AND a.WorkPoint=y.WorkPoint
  514. LEFT JOIN ICSExtension b ON a.ExtensionID=B.ID AND a.WorkPoint=b.WorkPoint
  515. WHERE a.ODNCode='{0}' AND a.WorkPoint='{1}'";
  516. sql = string.Format(sql, ODNCode, WorkPoint);
  517. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  518. var parent = table.DefaultView.ToTable(true, "VenCode", "DepCode", "OOCode", "MUSER");
  519. List<ERPDeliveryNotice> docmodel = new List<ERPDeliveryNotice>();
  520. foreach (DataRow dtIn in parent.Rows)
  521. {
  522. ERPDeliveryNotice doc = new ERPDeliveryNotice();
  523. doc.VenCode = dtIn["VenCode"].ToString();
  524. doc.DepCode = dtIn["DepCode"].ToString();
  525. doc.OOCode = dtIn["OOCode"].ToString();
  526. doc.User = dtIn["MUSER"].ToString();
  527. doc.MTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  528. doc.details = new List<ERPDeliveryNoticeList>();
  529. DataRow[] drs = table.Select("VenCode+DepCode+OOCode='" + doc.VenCode + doc.DepCode + doc.OOCode + "'");
  530. foreach (DataRow dr in drs)
  531. {
  532. ERPDeliveryNoticeList docc = new ERPDeliveryNoticeList();
  533. docc.Sequence = dr["Sequence"].ToString();
  534. docc.InvCode = dr["InvCode"].ToString();
  535. docc.Quantity = dr["Quantity"].ToString();
  536. docc.Amount = dr["Amount"].ToString();
  537. docc.Currency = dr["Currency"].ToString();
  538. docc.UnitPrice = dr["UnitPrice"].ToString();
  539. docc.OODetailID = dr["OODetailID"].ToString();
  540. docc.cFree1 = dr["cFree1"].ToString();
  541. docc.cFree2 = dr["cFree2"].ToString();
  542. docc.cFree3 = dr["cFree3"].ToString();
  543. docc.cFree4 = dr["cFree4"].ToString();
  544. docc.cFree5 = dr["cFree5"].ToString();
  545. docc.cFree6 = dr["cFree6"].ToString();
  546. docc.cFree7 = dr["cFree7"].ToString();
  547. docc.cFree8 = dr["cFree8"].ToString();
  548. docc.cFree9 = dr["cFree9"].ToString();
  549. docc.cFree10 = dr["cFree10"].ToString();
  550. doc.details.Add(docc);
  551. }
  552. docmodel.Add(doc);
  553. }
  554. string Inputstr = JsonConvert.SerializeObject(docmodel);
  555. string resultStr = HTTPHelper.HttpPost("委外到货", ERPUrl.ODeliveryNoticeURL, Inputstr);
  556. Result result = new Result();
  557. result = JsonConvert.DeserializeObject<Result>(resultStr);
  558. if (result.Success)
  559. {
  560. try
  561. {
  562. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  563. foreach (var item in res)
  564. {
  565. JObject jo = (JObject)item;
  566. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  567. foreach (var detail in resdetail)
  568. {
  569. JObject det = (JObject)detail;
  570. string ERPupdate = @"update ICSODeliveryNotice set ODNCode='{0}',Sequence='{1}',ODNID='{2}',ODNDetailID='{3}'
  571. where OODetailID='{4}' AND ODNType='1' AND ODNCode='{5}' ";
  572. ERPupdate = string.Format(ERPupdate, jo["ODNCode"], det["Sequence"], jo["ID"], det["DetailID"], det["OODetailID"],ODNCode);
  573. if (!DBHelper.ExecuteNonQuery(ERPupdate, cmd))
  574. {
  575. throw new Exception("到货单更新失败!");
  576. }
  577. }
  578. }
  579. }
  580. catch (Exception ex)
  581. {
  582. log.Debug(ex.ToString());
  583. log.Debug(resultStr);
  584. }
  585. }
  586. else
  587. {
  588. throw new Exception("ERP接口调用失败:"+result.Message);
  589. }
  590. #endregion
  591. }
  592. catch (Exception)
  593. {
  594. throw;
  595. }
  596. }
  597. #endregion
  598. #region 委外入库
  599. /// <summary>
  600. /// 委外入库
  601. /// </summary>
  602. /// <param name="TransCode"></param>
  603. /// <param name="TransSequence"></param>
  604. /// <param name="Quantity"></param>
  605. /// <param name="WorkPoint"></param>
  606. /// <param name="cmd"></param>
  607. public static void OutsourcingReceiveDoc(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
  608. {
  609. try
  610. {
  611. string sql = @"DECLARE @Status VARCHAR(10)
  612. SELECT @Status=c.Status FROM ICSInventoryLot a
  613. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  614. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  615. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  616. IF (@Status IS NULL)
  617. BEGIN
  618. RAISERROR('{0} ',16,1);
  619. RETURN
  620. END
  621. ELSE IF (@Status='3')
  622. BEGIN
  623. RAISERROR('{0} ',16,1);
  624. RETURN
  625. END
  626. UPDATE c SET InQuantity=ISNULL(InQuantity,0)+'{2}'
  627. FROM ICSInventoryLot a
  628. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  629. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  630. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  631. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  632. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  633. INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  634. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Quantity<c.InQuantity)
  635. BEGIN
  636. RAISERROR('{0} ',16,1);
  637. END";
  638. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  639. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  640. {
  641. throw new Exception("委外退料单更新失败!");
  642. }
  643. }
  644. catch (Exception)
  645. {
  646. throw;
  647. }
  648. }
  649. /// <summary>
  650. /// 委外入库接口
  651. /// </summary>
  652. /// <param name="TransType"></param>
  653. /// <param name="Identification"></param>
  654. /// <param name="cmd"></param>
  655. public static void OutsourcingReceiveDocERP(string TransType, string Identification, SqlCommand cmd)
  656. {
  657. try
  658. {
  659. #region ERP
  660. 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,
  661. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,isnull((y.UnitPrice),0) as UnitPrice,y.Currency,y.OODetailID,Enable AS UpdateTodoQuantity
  662. FROM ICSWareHouseLotInfoLog a
  663. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  664. INNER JOIN ICSOutsourcingOrder y ON b.TransCode=y.OOCode AND b.TransSequence=y.Sequence AND b.WorkPoint=y.WorkPoint
  665. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  666. WHERE a.Identification='{0}' AND ERPUpload='0'
  667. GROUP BY y.VenCode,a.ToWarehouseCode,y.OOCode,a.MUSER,a.InvCode,y.OODetailID,isnull((y.UnitPrice),0),y.Currency,Enable";
  668. sql = string.Format(sql, Identification);
  669. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  670. var parent = table.DefaultView.ToTable(true, "VenCode", "WarehouseCode", "OOCode", "MUSER", "UpdateTodoQuantity");
  671. List<ERPPurchaseOrder> docmodel = new List<ERPPurchaseOrder>();
  672. foreach (DataRow dts in parent.Rows)
  673. {
  674. ERPPurchaseOrder doc = new ERPPurchaseOrder();
  675. doc.VenCode = dts["VenCode"].ToString();
  676. doc.WHCode = dts["WarehouseCode"].ToString();
  677. doc.OOCode = dts["OOCode"].ToString();
  678. doc.User = dts["MUSER"].ToString();
  679. doc.UpdateTodoQuantity = dts["UpdateTodoQuantity"].ToString();
  680. doc.MTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  681. doc.details = new List<ERPPurchaseOrderList>();
  682. DataRow[] drs = table.Select("VenCode+WarehouseCode+OOCode='" + doc.VenCode + doc.WHCode + doc.OOCode + "'");
  683. foreach (DataRow dr in drs)
  684. {
  685. ERPPurchaseOrderList docc = new ERPPurchaseOrderList();
  686. docc.Sequence = dr["Sequence"].ToString();
  687. docc.InvCode = dr["InvCode"].ToString();
  688. docc.Quantity = dr["Quantity"].ToString();
  689. docc.Amount = dr["Amount"].ToString();
  690. docc.Currency = dr["Currency"].ToString();
  691. docc.UnitPrice = dr["UnitPrice"].ToString();
  692. docc.OODetailID = dr["OODetailID"].ToString();
  693. doc.details.Add(docc);
  694. }
  695. docmodel.Add(doc);
  696. }
  697. string Inputstr = JsonConvert.SerializeObject(docmodel);
  698. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OutsourcingReceiveDocURL, Inputstr);
  699. Result result = new Result();
  700. result = JsonConvert.DeserializeObject<Result>(resultStr);
  701. if (result.Success)
  702. {
  703. try
  704. {
  705. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  706. foreach (var item in res)
  707. {
  708. JObject jo = (JObject)item;
  709. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  710. foreach (var detail in resdetail)
  711. {
  712. JObject det = (JObject)detail;
  713. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["OODetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["ORCVTCode"].ToString(), det["Sequence"].ToString(), cmd);
  714. }
  715. }
  716. }
  717. catch (Exception ex)
  718. {
  719. log.Debug(ex.ToString());
  720. log.Debug(resultStr);
  721. }
  722. }
  723. else
  724. {
  725. throw new Exception("ERP接口调用失败:"+result.Message);
  726. }
  727. #endregion
  728. }
  729. catch (Exception)
  730. {
  731. throw;
  732. }
  733. }
  734. #endregion
  735. #region 审核的委外到货单
  736. /// <summary>
  737. /// 审核的委外到货单
  738. /// </summary>
  739. /// <param name="TransCode"></param>
  740. /// <param name="TransSequence"></param>
  741. /// <param name="Quantity"></param>
  742. /// <param name="WorkPoint"></param>
  743. /// <param name="cmd"></param>
  744. public static void ODeliveryNoticeIn(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
  745. {
  746. try
  747. {
  748. string sql = @"DECLARE @Status VARCHAR(10)
  749. SELECT @Status=c.Status FROM ICSInventoryLot a
  750. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  751. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  752. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='1'
  753. IF (@Status IS NULL)
  754. BEGIN
  755. RAISERROR('{0} ',16,1);
  756. RETURN
  757. END
  758. ELSE IF (@Status='3')
  759. BEGIN
  760. RAISERROR('{0} ',16,1);
  761. RETURN
  762. END
  763. UPDATE c SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
  764. FROM ICSInventoryLot a
  765. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  766. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  767. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='1'
  768. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  769. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  770. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  771. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='1' AND c.Quantity<c.RCVQuantity)
  772. BEGIN
  773. RAISERROR('{0} ',16,1);
  774. END";
  775. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  776. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  777. {
  778. throw new Exception("委外到货单更新失败!");
  779. }
  780. }
  781. catch (Exception)
  782. {
  783. throw;
  784. }
  785. }
  786. /// <summary>
  787. /// 审核的委外到货单接口
  788. /// </summary>
  789. /// <param name="TransType"></param>
  790. /// <param name="Identification"></param>
  791. /// <param name="cmd"></param>
  792. public static void ODeliveryNoticeInERP(string TransType, string Identification, SqlCommand cmd)
  793. {
  794. try
  795. {
  796. #region ERP
  797. 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,
  798. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,isnull((c.UnitPrice),0) as UnitPrice,c.Currency,c.ODNDetailID,Enable AS UpdateTodoQuantity
  799. INTO #TempERP
  800. FROM ICSWareHouseLotInfoLog a
  801. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  802. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  803. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  804. WHERE a.Identification='{0}' AND ERPUpload='0'
  805. GROUP BY c.VenCode,a.ToWarehouseCode,c.ODNCode,a.MUSER,a.InvCode,c.ODNDetailID,isnull((c.UnitPrice),0),c.Currency,Enable
  806. SELECT DISTINCT Costre,VenCode,WarehouseCode AS WHCode,ODNCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  807. SELECT Costre,Sequence,InvCode,Quantity,Amount,ODNDetailID,Currency,UnitPrice
  808. FROM #TempERP
  809. DROP TABLE #TempERP";
  810. sql = string.Format(sql, Identification);
  811. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  812. string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  813. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.ODeliveryNoticeInURL, Inputstr);
  814. Result result = new Result();
  815. result = JsonConvert.DeserializeObject<Result>(resultStr);
  816. if (result.Success)
  817. {
  818. try
  819. {
  820. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  821. foreach (var item in res)
  822. {
  823. JObject jo = (JObject)item;
  824. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  825. foreach (var detail in resdetail)
  826. {
  827. JObject det = (JObject)detail;
  828. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["ODNDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["ORCVTCode"].ToString(), det["Sequence"].ToString(), cmd);
  829. }
  830. }
  831. }
  832. catch (Exception ex)
  833. {
  834. log.Debug(ex.ToString());
  835. log.Debug(resultStr);
  836. }
  837. }
  838. else
  839. {
  840. throw new Exception("ERP接口调用失败:" + result.Message);
  841. }
  842. #endregion
  843. }
  844. catch (Exception)
  845. {
  846. throw;
  847. }
  848. }
  849. #endregion
  850. #region 委外拒收
  851. /// <summary>
  852. /// 委外拒收
  853. /// </summary>
  854. /// <param name="TransCode"></param>
  855. /// <param name="TransSequence"></param>
  856. /// <param name="Quantity"></param>
  857. /// <param name="WorkPoint"></param>
  858. /// <param name="cmd"></param>
  859. public static void OutsourcingRejectDocIn(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
  860. {
  861. try
  862. {
  863. string sql = @"DECLARE @Status VARCHAR(10)
  864. SELECT @Status=c.Status FROM ICSInventoryLot a
  865. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  866. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  867. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='3'
  868. IF (@Status IS NULL)
  869. BEGIN
  870. RAISERROR('{0} ',16,1);
  871. RETURN
  872. END
  873. ELSE IF (@Status='3')
  874. BEGIN
  875. RAISERROR('{0} ',16,1);
  876. RETURN
  877. END
  878. UPDATE c SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
  879. FROM ICSInventoryLot a
  880. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  881. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  882. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='3'
  883. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  884. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  885. INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  886. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.ODNType='3' AND c.Quantity<c.RCVQuantity)
  887. BEGIN
  888. RAISERROR('{0} ',16,1);
  889. END";
  890. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  891. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  892. {
  893. throw new Exception("委外拒收单更新失败!");
  894. }
  895. }
  896. catch (Exception)
  897. {
  898. throw;
  899. }
  900. }
  901. /// <summary>
  902. /// 委外拒收接口
  903. /// </summary>
  904. /// <param name="TransType"></param>
  905. /// <param name="Identification"></param>
  906. /// <param name="cmd"></param>
  907. public static void OutsourcingRejectDocInERP(string TransType, string Identification, SqlCommand cmd)
  908. {
  909. //try
  910. //{
  911. // #region ERP
  912. // 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,
  913. // a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,isnull((c.UnitPrice),0) as UnitPrice,c.Currency,c.ODNDetailID,Enable AS UpdateTodoQuantity
  914. // INTO #TempERP
  915. // FROM ICSWareHouseLotInfoLog a
  916. // INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  917. // INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  918. // INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  919. // WHERE a.Identification='{0}' AND ERPUpload='0'
  920. // GROUP BY c.VenCode,a.ToWarehouseCode,c.ODNCode,a.MUSER,a.InvCode,c.ODNDetailID,isnull((c.UnitPrice),0),c.Currency,Enable
  921. // SELECT DISTINCT Costre,VenCode,WarehouseCode AS WHCode,ODNCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  922. // SELECT Costre,Sequence,InvCode,Quantity,Amount,ODNDetailID,Currency,UnitPrice
  923. // FROM #TempERP
  924. // DROP TABLE #TempERP";
  925. // sql = string.Format(sql, Identification);
  926. // DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  927. // string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  928. // string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.ODeliveryNoticeInURL, Inputstr);
  929. // Result result = new Result();
  930. // result = JsonConvert.DeserializeObject<Result>(resultStr);
  931. // if (result.Success)
  932. // {
  933. // try
  934. // {
  935. // JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  936. // foreach (var item in res)
  937. // {
  938. // JObject jo = (JObject)item;
  939. // JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  940. // foreach (var detail in resdetail)
  941. // {
  942. // JObject det = (JObject)detail;
  943. // ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["ODNDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["ORCVTCode"].ToString(), det["Sequence"].ToString(), cmd);
  944. // }
  945. // }
  946. // }
  947. // catch (Exception ex)
  948. // {
  949. // log.Debug(ex.ToString());
  950. // log.Debug(resultStr);
  951. // }
  952. // }
  953. // else
  954. // {
  955. // throw new Exception("ERP接口调用失败:" + result.Message);
  956. // }
  957. // #endregion
  958. //}
  959. //catch (Exception)
  960. //{
  961. // throw;
  962. //}
  963. }
  964. #endregion
  965. #region 委外退货
  966. /// <summary>
  967. /// 委外退货
  968. /// </summary>
  969. /// <param name="TransCode"></param>
  970. /// <param name="TransSequence"></param>
  971. /// <param name="Quantity"></param>
  972. /// <param name="WorkPoint"></param>
  973. /// <param name="cmd"></param>
  974. public static void OutsourcingReturnBack(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
  975. {
  976. try
  977. {
  978. string sql = @"DECLARE @Status VARCHAR(10)
  979. SELECT @Status=Status FROM ICSODeliveryNotice WHERE ODNCode='{0}' AND ODNType='2' and WorkPoint='{1}'
  980. IF (@Status IS NULL)
  981. BEGIN
  982. RAISERROR('退{0} ',16,1);
  983. RETURN
  984. END
  985. ELSE IF (@Status!='2')
  986. BEGIN
  987. RAISERROR('退{0} ',16,1);
  988. RETURN
  989. END
  990. UPDATE a SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
  991. FROM ICSODeliveryNotice a
  992. WHERE a.ODNCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}' AND ODNType='2'
  993. IF EXISTS(SELECT a.ID FROM ICSODeliveryNotice a
  994. WHERE a.ODNCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.RCVQuantity AND ODNType='2')
  995. BEGIN
  996. RAISERROR('{0}{3} 退退',16,1);
  997. RETURN
  998. END";
  999. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  1000. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1001. {
  1002. throw new Exception("委外退货单更新失败!");
  1003. }
  1004. }
  1005. catch (Exception)
  1006. {
  1007. throw;
  1008. }
  1009. }
  1010. /// <summary>
  1011. /// 委外退货接口
  1012. /// </summary>
  1013. /// <param name="TransType"></param>
  1014. /// <param name="Identification"></param>
  1015. /// <param name="cmd"></param>
  1016. public static void OutsourcingReturnBackERP(string TransType, string Identification, SqlCommand cmd)
  1017. {
  1018. try
  1019. {
  1020. #region ERP
  1021. 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,
  1022. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,y.ODNDetailID,y.Currency,ISNULL(y.UnitPrice, 0) AS UnitPrice,Enable AS UpdateTodoQuantity
  1023. FROM ICSWareHouseLotInfoLog a
  1024. INNER JOIN ICSODeliveryNotice y ON a.TransCode=y.ODNCode AND a.TransSequence=y.Sequence AND a.WorkPoint=y.WorkPoint
  1025. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  1026. WHERE a.Identification='{0}' AND ERPUpload='0'
  1027. GROUP BY y.VenCode,a.FromWarehouseCode,y.ODNCode,a.MUSER,a.InvCode,y.ODNDetailID,y.Currency,ISNULL(y.UnitPrice, 0),Enable";
  1028. sql = string.Format(sql, Identification);
  1029. DataTable table = DBHelper.SQlReturnData(sql, cmd);
  1030. var parent = table.DefaultView.ToTable(true, "VenCode", "WarehouseCode", "ODNCode", "MUSER", "UpdateTodoQuantity");
  1031. List<ERPODNRT> docmodel = new List<ERPODNRT>();
  1032. foreach (DataRow dts in parent.Rows)
  1033. {
  1034. ERPODNRT doc = new ERPODNRT();
  1035. doc.VenCode = dts["VenCode"].ToString();
  1036. doc.WHCode = dts["WarehouseCode"].ToString();
  1037. doc.ODNRTCode = dts["ODNCode"].ToString();
  1038. doc.User = dts["MUSER"].ToString();
  1039. doc.User = dts["UpdateTodoQuantity"].ToString();
  1040. doc.MTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1041. doc.details = new List<ERPODNRTList>();
  1042. DataRow[] drs = table.Select("VenCode+WarehouseCode+ODNCode='" + doc.VenCode + doc.WHCode + doc.ODNRTCode + "'");
  1043. foreach (DataRow dr in drs)
  1044. {
  1045. ERPODNRTList docc = new ERPODNRTList();
  1046. docc.Sequence = dr["Sequence"].ToString();
  1047. docc.InvCode = dr["InvCode"].ToString();
  1048. docc.Quantity = dr["Quantity"].ToString();
  1049. docc.Amount = dr["Amount"].ToString();
  1050. docc.Currency = dr["Currency"].ToString();
  1051. docc.UnitPrice = dr["UnitPrice"].ToString();
  1052. docc.ODNRTDetailID = dr["ODNDetailID"].ToString();
  1053. doc.details.Add(docc);
  1054. }
  1055. docmodel.Add(doc);
  1056. }
  1057. string Inputstr = JsonConvert.SerializeObject(docmodel);
  1058. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OutsourcingReturnBackURL, Inputstr);
  1059. Result result = new Result();
  1060. result = JsonConvert.DeserializeObject<Result>(resultStr);
  1061. if (result.Success)
  1062. {
  1063. try
  1064. {
  1065. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  1066. foreach (var item in res)
  1067. {
  1068. JObject jo = (JObject)item;
  1069. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  1070. foreach (var detail in resdetail)
  1071. {
  1072. JObject det = (JObject)detail;
  1073. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["ODNRTDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["ORCVNEGCode"].ToString(), det["Sequence"].ToString(), cmd);
  1074. }
  1075. }
  1076. }
  1077. catch (Exception ex)
  1078. {
  1079. log.Debug(ex.ToString());
  1080. log.Debug(resultStr);
  1081. }
  1082. }
  1083. else
  1084. {
  1085. throw new Exception("ERP接口调用失败:"+result.Message);
  1086. }
  1087. #endregion
  1088. }
  1089. catch (Exception)
  1090. {
  1091. throw;
  1092. }
  1093. }
  1094. #endregion
  1095. #region 开立委外红字入库
  1096. /// <summary>
  1097. /// 开立委外红字入库
  1098. /// </summary>
  1099. /// <param name="TransCode"></param>
  1100. /// <param name="TransSequence"></param>
  1101. /// <param name="Quantity"></param>
  1102. /// <param name="WorkPoint"></param>
  1103. /// <param name="cmd"></param>
  1104. public static void OutsourcingReceiveDocNegative(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
  1105. {
  1106. try
  1107. {
  1108. string sql = @"DECLARE @Status VARCHAR(10)
  1109. SELECT @Status=a.Status FROM ICSOutsourcingReceive a
  1110. WHERE a.RCVCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}' AND a.Type='2'
  1111. IF (@Status IS NULL)
  1112. BEGIN
  1113. RAISERROR('{0} ',16,1);
  1114. RETURN
  1115. END
  1116. ELSE IF (@Status!='1')
  1117. BEGIN
  1118. RAISERROR('{0} ',16,1);
  1119. RETURN
  1120. END
  1121. UPDATE a SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
  1122. FROM ICSOutsourcingReceive a
  1123. WHERE a.RCVCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}' AND a.Type='2'
  1124. IF EXISTS(SELECT a.ID FROM ICSOutsourcingReceive a
  1125. WHERE a.RCVCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Type='2' AND a.Quantity<a.RCVQuantity)
  1126. BEGIN
  1127. RAISERROR('{0}{3} ',16,1);
  1128. RETURN
  1129. END";
  1130. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  1131. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  1132. {
  1133. throw new Exception("委外红字入库单更新失败!");
  1134. }
  1135. }
  1136. catch (Exception)
  1137. {
  1138. throw;
  1139. }
  1140. }
  1141. /// <summary>
  1142. /// 开立委外红字入库接口
  1143. /// </summary>
  1144. /// <param name="TransType"></param>
  1145. /// <param name="Identification"></param>
  1146. /// <param name="cmd"></param>
  1147. public static void OutsourcingReceiveDocNegativeERP(string TransType, string Identification, SqlCommand cmd)
  1148. {
  1149. try
  1150. {
  1151. #region ERP
  1152. string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
  1153. INNER JOIN ICSOutsourcingReceive b ON a.TransCode=b.RCVCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  1154. WHERE a.Identification='{0}' AND b.Quantity!=b.RCVQuantity)
  1155. BEGIN
  1156. RAISERROR('',16,1);
  1157. RETURN
  1158. END
  1159. SELECT b.RCVID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,Enable AS UpdateTodoQuantity
  1160. FROM ICSWareHouseLotInfoLog a
  1161. INNER JOIN ICSOutsourcingReceive b ON a.TransCode=b.RCVCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  1162. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  1163. WHERE a.Identification='{0}' AND ERPUpload='0'
  1164. GROUP BY b.RCVID,a.MUSER,Enable";
  1165. sql = string.Format(sql, Identification);
  1166. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  1167. string Inputstr = JsonConvert.SerializeObject(dt);
  1168. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OutsourcingReceiveDocNegativeURL, Inputstr);
  1169. Result result = new Result();
  1170. result = JsonConvert.DeserializeObject<Result>(resultStr);
  1171. if (result.Success)
  1172. {
  1173. try
  1174. {
  1175. foreach (DataRow dr in dt.Rows)
  1176. {
  1177. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd);
  1178. }
  1179. }
  1180. catch (Exception ex)
  1181. {
  1182. log.Debug(ex.ToString());
  1183. log.Debug(resultStr);
  1184. }
  1185. }
  1186. else
  1187. {
  1188. throw new Exception("ERP接口调用失败:" + result.Message);
  1189. }
  1190. #endregion
  1191. }
  1192. catch (Exception)
  1193. {
  1194. throw;
  1195. }
  1196. }
  1197. #endregion
  1198. }
  1199. }