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

958 lines
47 KiB

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 ICSWareHouseService
  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 OneStepTransferDocIn(string TransCode,string TransSequence, string WorkPoint,string Quantity, SqlCommand cmd)
  32. {
  33. try
  34. {
  35. string sql = @"UPDATE ICSTransfer SET TransferQuantity=ISNULL(TransferQuantity,0)+'{2}'
  36. WHERE TransferNO='{0}' AND Sequence='{3}' AND WorkPoint='{1}' AND Type='1'
  37. IF EXISTS(SELECT a.ID FROM ICSTransfer a
  38. WHERE a.TransferNO='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Type='1' AND a.TransferQuantity<a.TransferQuantity)
  39. BEGIN
  40. RAISERROR('{0}{3} ',16,1);
  41. RETURN
  42. END";
  43. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  44. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  45. {
  46. throw new Exception("调拨单信息更新失败!");
  47. }
  48. }
  49. catch (Exception)
  50. {
  51. throw;
  52. }
  53. }
  54. /// <summary>
  55. /// 一步调拨接口
  56. /// </summary>
  57. /// <param name="TransType"></param>
  58. /// <param name="Identification"></param>
  59. /// <param name="cmd"></param>
  60. public static void OneStepTransferDocInERP(string TransType, string Identification, SqlCommand cmd)
  61. {
  62. try
  63. {
  64. #region ERP
  65. //检验调拨单是否一次性发完
  66. string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
  67. INNER JOIN ICSTransfer b ON a.TransCode=b.TransferNO AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  68. WHERE a.Identification='{0}' AND b.Type = '1' AND b.Quantity!=b.TransferQuantity)
  69. BEGIN
  70. RAISERROR('',16,1);
  71. RETURN
  72. END
  73. SELECT b.TransferID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,Enable AS UpdateTodoQuantity
  74. FROM ICSWareHouseLotInfoLog a
  75. INNER JOIN ICSTransfer b ON a.TransCode=b.TransferNO AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  76. INNER JOIN ICSConfiguration con ON con.Code='Stock003' AND a.WorkPoint=con.WorkPoint
  77. WHERE a.Identification='{0}' AND ERPUpload='0' AND b.Type='1'
  78. GROUP BY b.TransferID,a.MUSER,Enable";
  79. sql = string.Format(sql, Identification);
  80. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  81. string Inputstr =JsonConvert.SerializeObject(dt);
  82. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OneStepTransferDocInURL, Inputstr);
  83. Result result = new Result();
  84. result = JsonConvert.DeserializeObject<Result>(resultStr);
  85. if (result.Success)
  86. {
  87. try
  88. {
  89. foreach (DataRow dr in dt.Rows)
  90. {
  91. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd);
  92. }
  93. }
  94. catch (Exception ex)
  95. {
  96. log.Debug(ex.ToString());
  97. log.Debug(resultStr);
  98. }
  99. }
  100. else
  101. {
  102. throw new Exception("ERP接口调用失败:"+result.Message);
  103. }
  104. #endregion
  105. }
  106. catch (Exception)
  107. {
  108. throw;
  109. }
  110. }
  111. #endregion
  112. #region 两步调出
  113. /// <summary>
  114. /// 两步调出
  115. /// </summary>
  116. /// <param name="TransCode"></param>
  117. /// <param name="TransSequence"></param>
  118. /// <param name="Quantity"></param>
  119. /// <param name="WorkPoint"></param>
  120. /// <param name="cmd"></param>
  121. public static void TwoStepTransferDocOut(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
  122. {
  123. try
  124. {
  125. string sql = @"DECLARE @Status VARCHAR(10)
  126. SELECT @Status=a.Status FROM ICSOtherOut a
  127. INNER JOIN ICSTransfer b ON a.TransferDetailID=b.TransferDetailID AND a.WorkPoint=b.WorkPoint
  128. WHERE a.OutCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  129. IF (@Status IS NULL)
  130. BEGIN
  131. RAISERROR('{0} ',16,1);
  132. RETURN
  133. END
  134. ELSE IF (@Status!='1')
  135. BEGIN
  136. RAISERROR('{0} ',16,1);
  137. RETURN
  138. END
  139. UPDATE a SET OutQuantity=ISNULL(OutQuantity,0)+'{2}'
  140. FROM ICSOtherOut a
  141. INNER JOIN ICSTransfer b ON a.TransferDetailID=b.TransferDetailID AND a.WorkPoint=b.WorkPoint
  142. WHERE a.OutCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  143. IF EXISTS(SELECT a.ID FROM ICSOtherOut a
  144. INNER JOIN ICSTransfer b ON a.TransferDetailID=b.TransferDetailID AND a.WorkPoint=b.WorkPoint
  145. WHERE a.OutCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.OutQuantity)
  146. BEGIN
  147. RAISERROR('{0}{3} ',16,1);
  148. RETURN
  149. END";
  150. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  151. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  152. {
  153. throw new Exception("两步调出单更新失败!");
  154. }
  155. }
  156. catch (Exception)
  157. {
  158. throw;
  159. }
  160. }
  161. /// <summary>
  162. /// 两步调出接口
  163. /// </summary>
  164. /// <param name="TransType"></param>
  165. /// <param name="Identification"></param>
  166. /// <param name="cmd"></param>
  167. public static void TwoStepTransferDocOutERP(string TransType, string Identification, SqlCommand cmd)
  168. {
  169. try
  170. {
  171. #region ERP
  172. string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
  173. INNER JOIN ICSOtherOut b ON a.TransCode=b.OutCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  174. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  175. WHERE a.Identification='{0}' AND b.Quantity!=b.OutQuantity)
  176. BEGIN
  177. RAISERROR('',16,1);
  178. RETURN
  179. END
  180. SELECT b.OutID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,Enable AS UpdateTodoQuantity
  181. FROM ICSWareHouseLotInfoLog a
  182. INNER JOIN ICSOtherOut b ON a.TransCode=b.OutCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  183. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  184. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  185. WHERE a.Identification='{0}' AND ERPUpload='0'
  186. GROUP BY b.OutID,a.MUSER,Enable";
  187. sql = string.Format(sql, Identification);
  188. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  189. string Inputstr = JsonConvert.SerializeObject(dt);
  190. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.TwoStepTransferDocOutURL, Inputstr);
  191. Result result = new Result();
  192. result = JsonConvert.DeserializeObject<Result>(resultStr);
  193. if (result.Success)
  194. {
  195. try
  196. {
  197. foreach (DataRow dr in dt.Rows)
  198. {
  199. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd);
  200. }
  201. }
  202. catch (Exception ex)
  203. {
  204. log.Debug(ex.ToString());
  205. log.Debug(resultStr);
  206. }
  207. }
  208. else
  209. {
  210. throw new Exception("ERP接口调用失败:"+result.Message);
  211. }
  212. #endregion
  213. }
  214. catch (Exception)
  215. {
  216. throw;
  217. }
  218. }
  219. #endregion
  220. #region 两步调入
  221. /// <summary>
  222. /// 两步调入
  223. /// </summary>
  224. /// <param name="TransCode"></param>
  225. /// <param name="TransSequence"></param>
  226. /// <param name="Quantity"></param>
  227. /// <param name="WorkPoint"></param>
  228. /// <param name="cmd"></param>
  229. public static void TwoStepTransferDocIn(string TransCode, string TransSequence, string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
  230. {
  231. //需要关联其他入库单
  232. try
  233. {
  234. string sql = @"DECLARE @Status VARCHAR(10)
  235. SELECT @Status=Otin.Status FROM ICSOtherIn Otin
  236. INNER JOIN ICSTransfer tra ON Otin.TransferDetailID=tra.TransferDetailID AND Otin.WorkPoint=tra.WorkPoint
  237. INNER JOIN ICSOtherOut out ON out.TransferDetailID=tra.TransferDetailID AND out.WorkPoint=tra.WorkPoint
  238. INNER JOIN ICSWareHouseLotInfoLog log ON out.OutCode=log.TransCode AND out.Sequence=log.TransSequence AND out.WorkPoint=log.WorkPoint
  239. INNER JOIN ICSWareHouseLotInfo a ON a.LotNo=log.LotNo AND a.WorkPoint=log.WorkPoint
  240. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Otin.InCode='{2}' AND Otin.Sequence='{3}'
  241. IF (@Status IS NULL)
  242. BEGIN
  243. RAISERROR('{0} ',16,1);
  244. RETURN
  245. END
  246. ELSE IF (@Status!='1')
  247. BEGIN
  248. RAISERROR('{0} ',16,1);
  249. RETURN
  250. END
  251. UPDATE Otin SET InQuantity=ISNULL(InQuantity,0)+'{2}'
  252. FROM ICSOtherIn Otin
  253. INNER JOIN ICSTransfer tra ON Otin.TransferDetailID=tra.TransferDetailID AND Otin.WorkPoint=tra.WorkPoint
  254. INNER JOIN ICSOtherOut out ON out.TransferDetailID=tra.TransferDetailID AND out.WorkPoint=tra.WorkPoint
  255. INNER JOIN ICSWareHouseLotInfoLog log ON out.OutCode=log.TransCode AND out.Sequence=log.TransSequence AND out.WorkPoint=log.WorkPoint
  256. INNER JOIN ICSWareHouseLotInfo a ON a.LotNo=log.LotNo AND a.WorkPoint=log.WorkPoint
  257. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Otin.InCode='{2}' AND Otin.Sequence='{3}'
  258. IF EXISTS(SELECT a.LotNo FROM ICSOtherIn Otin
  259. INNER JOIN ICSTransfer tra ON Otin.TransferDetailID=tra.TransferDetailID AND Otin.WorkPoint=tra.WorkPoint
  260. INNER JOIN ICSOtherOut out ON out.TransferDetailID=tra.TransferDetailID AND out.WorkPoint=tra.WorkPoint
  261. INNER JOIN ICSWareHouseLotInfoLog log ON out.OutCode=log.TransCode AND out.Sequence=log.TransSequence AND out.WorkPoint=log.WorkPoint
  262. INNER JOIN ICSWareHouseLotInfo a ON a.LotNo=log.LotNo AND a.WorkPoint=log.WorkPoint
  263. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Otin.InCode='{2}' AND Otin.Sequence='{3}' AND Otin.Quantity<Otin.InQuantity)
  264. BEGIN
  265. RAISERROR('{0}',16,1);
  266. END";
  267. sql = string.Format(sql, LotNo, WorkPoint, Quantity,TransCode,TransSequence);
  268. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  269. {
  270. throw new Exception("两步调入单更新失败!");
  271. }
  272. }
  273. catch (Exception)
  274. {
  275. throw;
  276. }
  277. }
  278. /// <summary>
  279. /// 两步调入接口
  280. /// </summary>
  281. /// <param name="TransType"></param>
  282. /// <param name="Identification"></param>
  283. /// <param name="cmd"></param>
  284. public static void TwoStepTransferDocInERP(string TransType, string Identification, SqlCommand cmd)
  285. {
  286. try
  287. {
  288. #region ERP
  289. string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
  290. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  291. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  292. WHERE a.Identification='{0}' AND b.Quantity!=b.InQuantity)
  293. BEGIN
  294. RAISERROR('',16,1);
  295. RETURN
  296. END
  297. SELECT b.InID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,Enable AS UpdateTodoQuantity
  298. FROM ICSWareHouseLotInfoLog a
  299. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  300. INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
  301. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  302. WHERE a.Identification='{0}' AND ERPUpload='0'
  303. GROUP BY b.InID,a.MUSER,Enable";
  304. sql = string.Format(sql, Identification);
  305. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  306. string Inputstr = JsonConvert.SerializeObject(dt);
  307. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.TwoStepTransferDocInURL, Inputstr);
  308. Result result = new Result();
  309. result = JsonConvert.DeserializeObject<Result>(resultStr);
  310. if (result.Success)
  311. {
  312. try
  313. {
  314. foreach (DataRow dr in dt.Rows)
  315. {
  316. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd);
  317. }
  318. }
  319. catch (Exception ex)
  320. {
  321. log.Debug(ex.ToString());
  322. log.Debug(resultStr);
  323. }
  324. }
  325. else
  326. {
  327. throw new Exception("ERP接口调用失败:"+result.Message);
  328. }
  329. #endregion
  330. }
  331. catch (Exception)
  332. {
  333. throw;
  334. }
  335. }
  336. #endregion
  337. #region 其他出库
  338. /// <summary>
  339. /// 其他出库
  340. /// </summary>
  341. /// <param name="TransCode"></param>
  342. /// <param name="TransSequence"></param>
  343. /// <param name="Quantity"></param>
  344. /// <param name="WorkPoint"></param>
  345. /// <param name="cmd"></param>
  346. public static void OtherOutDoc(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
  347. {
  348. try
  349. {
  350. string sql = @"DECLARE @Status VARCHAR(10)
  351. SELECT @Status=a.Status FROM ICSOtherOut a
  352. WHERE a.OutCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  353. IF (@Status IS NULL)
  354. BEGIN
  355. RAISERROR('{0} ',16,1);
  356. RETURN
  357. END
  358. ELSE IF (@Status!='1')
  359. BEGIN
  360. RAISERROR('{0} ',16,1);
  361. RETURN
  362. END
  363. UPDATE a SET OutQuantity=ISNULL(OutQuantity,0)+'{2}'
  364. FROM ICSOtherOut a
  365. WHERE a.OutCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  366. IF EXISTS(SELECT a.ID FROM ICSOtherOut a
  367. WHERE a.OutCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.OutQuantity)
  368. BEGIN
  369. RAISERROR('{0}{3} ',16,1);
  370. RETURN
  371. END";
  372. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  373. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  374. {
  375. throw new Exception("其他出库单更新失败!");
  376. }
  377. }
  378. catch (Exception)
  379. {
  380. throw;
  381. }
  382. }
  383. /// <summary>
  384. /// 其他出库接口
  385. /// </summary>
  386. /// <param name="TransType"></param>
  387. /// <param name="Identification"></param>
  388. /// <param name="cmd"></param>
  389. public static void OtherOutDocERP(string TransType, string Identification, SqlCommand cmd)
  390. {
  391. try
  392. {
  393. #region ERP
  394. string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
  395. INNER JOIN ICSOtherOut b ON a.TransCode=b.OutCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  396. WHERE a.Identification='{0}' AND b.Quantity!=b.OutQuantity)
  397. BEGIN
  398. RAISERROR('',16,1);
  399. RETURN
  400. END
  401. SELECT b.OutID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,Enable AS UpdateTodoQuantity
  402. FROM ICSWareHouseLotInfoLog a
  403. INNER JOIN ICSOtherOut b ON a.TransCode=b.OutCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  404. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  405. WHERE a.Identification='{0}' AND ERPUpload='0'
  406. GROUP BY b.OutID,a.MUSER,Enable";
  407. sql = string.Format(sql, Identification);
  408. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  409. string Inputstr = JsonConvert.SerializeObject(dt);
  410. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OtherOutDocURL, Inputstr);
  411. Result result = new Result();
  412. result = JsonConvert.DeserializeObject<Result>(resultStr);
  413. if (result.Success)
  414. {
  415. try
  416. {
  417. foreach (DataRow dr in dt.Rows)
  418. {
  419. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd);
  420. }
  421. }
  422. catch (Exception ex)
  423. {
  424. log.Debug(ex.ToString());
  425. log.Debug(resultStr);
  426. }
  427. }
  428. else
  429. {
  430. throw new Exception("ERP接口调用失败:"+result.Message);
  431. }
  432. #endregion
  433. }
  434. catch (Exception)
  435. {
  436. throw;
  437. }
  438. }
  439. #endregion
  440. #region 其他入库
  441. /// <summary>
  442. /// 其他入库
  443. /// </summary>
  444. /// <param name="TransCode"></param>
  445. /// <param name="TransSequence"></param>
  446. /// <param name="Quantity"></param>
  447. /// <param name="WorkPoint"></param>
  448. /// <param name="cmd"></param>
  449. public static void OtherInDoc(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
  450. {
  451. try
  452. {
  453. string sql = @"DECLARE @Status VARCHAR(10)
  454. SELECT @Status=c.Status FROM ICSInventoryLot a
  455. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  456. INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  457. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  458. IF (@Status IS NULL)
  459. BEGIN
  460. RAISERROR('{0} ',16,1);
  461. RETURN
  462. END
  463. ELSE IF (@Status!='1')
  464. BEGIN
  465. RAISERROR('{0} ',16,1);
  466. RETURN
  467. END
  468. UPDATE c SET InQuantity=ISNULL(InQuantity,0)+'{2}'
  469. FROM ICSInventoryLot a
  470. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  471. INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  472. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  473. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  474. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  475. INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  476. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Quantity<c.InQuantity)
  477. BEGIN
  478. RAISERROR('{0}',16,1);
  479. END";
  480. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  481. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  482. {
  483. throw new Exception("其他入库单更新失败!");
  484. }
  485. }
  486. catch (Exception)
  487. {
  488. throw;
  489. }
  490. }
  491. /// <summary>
  492. /// 其他入库接口
  493. /// </summary>
  494. /// <param name="TransType"></param>
  495. /// <param name="Identification"></param>
  496. /// <param name="cmd"></param>
  497. public static void OtherInDocERP(string TransType, string Identification, SqlCommand cmd)
  498. {
  499. try
  500. {
  501. #region ERP
  502. string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
  503. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  504. WHERE a.Identification='{0}' AND b.Quantity!=b.InQuantity)
  505. BEGIN
  506. RAISERROR('',16,1);
  507. RETURN
  508. END
  509. SELECT b.InID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,Enable AS UpdateTodoQuantity
  510. FROM ICSWareHouseLotInfoLog a
  511. INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  512. INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
  513. WHERE a.Identification='{0}' AND ERPUpload='0'
  514. GROUP BY b.InID,a.MUSER,Enable";
  515. sql = string.Format(sql, Identification);
  516. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  517. string Inputstr = JsonConvert.SerializeObject(dt);
  518. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.OtherInDocURL, Inputstr);
  519. Result result = new Result();
  520. result = JsonConvert.DeserializeObject<Result>(resultStr);
  521. if (result.Success)
  522. {
  523. try
  524. {
  525. foreach (DataRow dr in dt.Rows)
  526. {
  527. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd);
  528. }
  529. }
  530. catch (Exception ex)
  531. {
  532. log.Debug(ex.ToString());
  533. log.Debug(resultStr);
  534. }
  535. }
  536. else
  537. {
  538. throw new Exception("ERP接口调用失败:"+result.Message);
  539. }
  540. #endregion
  541. }
  542. catch (Exception)
  543. {
  544. throw;
  545. }
  546. }
  547. #endregion
  548. #region 拆卸单
  549. /// <summary>
  550. /// 拆卸单
  551. /// </summary>
  552. /// <param name="TransCode"></param>
  553. /// <param name="TransSequence"></param>
  554. /// <param name="Quantity"></param>
  555. /// <param name="WorkPoint"></param>
  556. /// <param name="cmd"></param>
  557. public static void DisassemblyDoc(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
  558. {
  559. try
  560. {
  561. string sql = @"DECLARE @Status VARCHAR(10)
  562. SELECT @Status=c.Status FROM ICSInventoryLot a
  563. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  564. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  565. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.DABDOCType='2'
  566. IF (@Status IS NULL)
  567. BEGIN
  568. RAISERROR('{0} ',16,1);
  569. RETURN
  570. END
  571. ELSE IF (@Status!='1')
  572. BEGIN
  573. RAISERROR('{0} ',16,1);
  574. RETURN
  575. END
  576. UPDATE c SET DABDOCQuantity=ISNULL(DABDOCQuantity,0)+'{2}'
  577. FROM ICSInventoryLot a
  578. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  579. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  580. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  581. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  582. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  583. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  584. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Quantity<c.DABDOCQuantity)
  585. BEGIN
  586. RAISERROR('{0}',16,1);
  587. END";
  588. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  589. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  590. {
  591. throw new Exception("拆卸单更新失败!");
  592. }
  593. }
  594. catch (Exception)
  595. {
  596. throw;
  597. }
  598. }
  599. /// <summary>
  600. /// 拆卸单更新套件锁定数量
  601. /// </summary>
  602. /// <param name="Identification"></param>
  603. /// <param name="cmd"></param>
  604. public static void DisassemblyDoc(string Identification, SqlCommand cmd)
  605. {
  606. try
  607. {
  608. string sql = @"UPDATE e SET e.Quantity=e.Quantity-e.LockQuantity,e.LockQuantity=0
  609. FROM ICSWareHouseLotInfoLog a
  610. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  611. INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  612. INNER JOIN ICSWareHouseLotInfoLog d ON b.TransCode=d.TransCode AND d.TransSequence='1' AND b.WorkPoint=d.WorkPoint
  613. INNER JOIN ICSWareHouseLotInfo e ON d.LotNo=e.LotNo AND d.WorkPoint=e.WorkPoint
  614. WHERE a.Identification='{0}' AND d.ERPUpload='0' AND d.Lock='1'";
  615. sql = string.Format(sql, Identification);
  616. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  617. {
  618. throw new Exception("拆卸单套件更新失败!");
  619. }
  620. }
  621. catch (Exception)
  622. {
  623. throw;
  624. }
  625. }
  626. /// <summary>
  627. /// 拆卸单接口
  628. /// </summary>
  629. /// <param name="TransType"></param>
  630. /// <param name="Identification"></param>
  631. /// <param name="cmd"></param>
  632. public static void DisassemblyDocERP(string TransType, string Identification, SqlCommand cmd)
  633. {
  634. try
  635. {
  636. #region ERP
  637. string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
  638. INNER JOIN ICSDisassemblyDoc b ON a.TransCode=b.DABDOCCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  639. WHERE a.Identification='{0}' AND b.Quantity!=b.DABDOCQuantity)
  640. BEGIN
  641. RAISERROR('',16,1);
  642. RETURN
  643. END
  644. SELECT b.DABDOCID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,Enable AS UpdateTodoQuantity
  645. FROM ICSWareHouseLotInfoLog a
  646. INNER JOIN ICSDisassemblyDoc b ON a.TransCode=b.DABDOCCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  647. INNER JOIN ICSConfiguration con ON con.Code='Stock003' AND a.WorkPoint=con.WorkPoint
  648. WHERE a.Identification='{0}' AND ERPUpload='0'
  649. GROUP BY b.DABDOCID,a.MUSER,Enable";
  650. sql = string.Format(sql, Identification);
  651. DataTable dt = DBHelper.SQlReturnData(sql, cmd);
  652. string Inputstr = JsonConvert.SerializeObject(dt);
  653. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.DisassemblyDocURL, Inputstr);
  654. Result result = new Result();
  655. result = JsonConvert.DeserializeObject<Result>(resultStr);
  656. if (result.Success)
  657. {
  658. try
  659. {
  660. foreach (DataRow dr in dt.Rows)
  661. {
  662. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd);
  663. }
  664. }
  665. catch (Exception ex)
  666. {
  667. log.Debug(ex.ToString());
  668. log.Debug(resultStr);
  669. }
  670. }
  671. else
  672. {
  673. throw new Exception("ERP接口调用失败:"+result.Message);
  674. }
  675. #endregion
  676. }
  677. catch (Exception)
  678. {
  679. throw;
  680. }
  681. }
  682. #endregion
  683. #region 借用
  684. /// <summary>
  685. /// 借用
  686. /// </summary>
  687. /// <param name="TransCode"></param>
  688. /// <param name="TransSequence"></param>
  689. /// <param name="Quantity"></param>
  690. /// <param name="WorkPoint"></param>
  691. /// <param name="cmd"></param>
  692. public static void BrrowDoc(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
  693. {
  694. try
  695. {
  696. string sql = @"DECLARE @Status VARCHAR(10)
  697. SELECT @Status=a.Status FROM ICSBrrow a
  698. WHERE a.BrrowCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  699. IF (@Status IS NULL)
  700. BEGIN
  701. RAISERROR('{0} ',16,1);
  702. RETURN
  703. END
  704. ELSE IF (@Status!='2')
  705. BEGIN
  706. RAISERROR('{0} ',16,1);
  707. RETURN
  708. END
  709. UPDATE a SET BrrowQuantity=ISNULL(BrrowQuantity,0)+'{2}'
  710. FROM ICSBrrow a
  711. WHERE a.BrrowCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
  712. IF EXISTS(SELECT a.ID FROM ICSBrrow a
  713. WHERE a.BrrowCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.BrrowQuantity)
  714. BEGIN
  715. RAISERROR('{0}{3} ',16,1);
  716. RETURN
  717. END";
  718. sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
  719. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  720. {
  721. throw new Exception("借用单更新失败!");
  722. }
  723. }
  724. catch (Exception)
  725. {
  726. throw;
  727. }
  728. }
  729. /// <summary>
  730. /// 借用接口
  731. /// </summary>
  732. /// <param name="TransType"></param>
  733. /// <param name="Identification"></param>
  734. /// <param name="cmd"></param>
  735. public static void BrrowDocERP(string TransType, string Identification, SqlCommand cmd)
  736. {
  737. try
  738. {
  739. #region ERP
  740. string sql = @"SELECT a.FromWarehouseCode+b.BrrowCode+a.MUSER AS Costre,a.FromWarehouseCode AS WarehouseCode,b.BrrowCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY a.FromWarehouseCode,b.BrrowCode,b.BrrowDetailID,a.InvCode) AS Sequence,
  741. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,b.BrrowDetailID,Enable AS UpdateTodoQuantity
  742. INTO #TempERP
  743. FROM ICSWareHouseLotInfoLog a
  744. INNER JOIN ICSBrrow b ON a.TransCode=b.BrrowCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  745. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  746. WHERE a.Identification='{0}' AND ERPUpload='0'
  747. GROUP BY a.FromWarehouseCode,b.BrrowCode,a.MUSER,a.InvCode,b.BrrowDetailID,Enable
  748. SELECT DISTINCT Costre,'' AS DepCode,WarehouseCode AS WHCode,'' AS SourceType,BrrowCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  749. SELECT Costre,Sequence,InvCode,Quantity,Amount,BrrowDetailID AS SourceDetailID FROM #TempERP
  750. DROP TABLE #TempERP";
  751. sql = string.Format(sql, Identification);
  752. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  753. string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  754. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.BrrowDocURL, Inputstr);
  755. Result result = new Result();
  756. result = JsonConvert.DeserializeObject<Result>(resultStr);
  757. if (result.Success)
  758. {
  759. try
  760. {
  761. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  762. foreach (var item in res)
  763. {
  764. JObject jo = (JObject)item;
  765. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  766. foreach (var detail in resdetail)
  767. {
  768. JObject det = (JObject)detail;
  769. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["OtherOutCode"].ToString(), det["Sequence"].ToString(), cmd);
  770. }
  771. }
  772. }
  773. catch (Exception ex)
  774. {
  775. log.Debug(ex.ToString());
  776. log.Debug(resultStr);
  777. }
  778. }
  779. else
  780. {
  781. throw new Exception("ERP接口调用失败:" + result.Message);
  782. }
  783. #endregion
  784. }
  785. catch (Exception)
  786. {
  787. throw;
  788. }
  789. }
  790. #endregion
  791. #region 归还
  792. /// <summary>
  793. /// 归还
  794. /// </summary>
  795. /// <param name="TransCode"></param>
  796. /// <param name="TransSequence"></param>
  797. /// <param name="Quantity"></param>
  798. /// <param name="WorkPoint"></param>
  799. /// <param name="cmd"></param>
  800. public static void ReturnDoc(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
  801. {
  802. try
  803. {
  804. string sql = @"DECLARE @Status VARCHAR(10)
  805. SELECT @Status=c.Status FROM ICSInventoryLot a
  806. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  807. INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  808. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  809. IF (@Status IS NULL)
  810. BEGIN
  811. RAISERROR('{0} ',16,1);
  812. RETURN
  813. END
  814. ELSE IF (@Status!='2')
  815. BEGIN
  816. RAISERROR('{0} ',16,1);
  817. RETURN
  818. END
  819. UPDATE c SET ReturnQuantity=ISNULL(ReturnQuantity,0)+'{2}'
  820. FROM ICSInventoryLot a
  821. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  822. INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  823. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
  824. IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
  825. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  826. INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
  827. WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Quantity<c.ReturnQuantity)
  828. BEGIN
  829. RAISERROR('{0}',16,1);
  830. END";
  831. sql = string.Format(sql, LotNo, WorkPoint, Quantity);
  832. if (!DBHelper.ExecuteNonQuery(sql, cmd))
  833. {
  834. throw new Exception("归还单更新失败!");
  835. }
  836. }
  837. catch (Exception)
  838. {
  839. throw;
  840. }
  841. }
  842. /// <summary>
  843. /// 归还接口
  844. /// </summary>
  845. /// <param name="TransType"></param>
  846. /// <param name="Identification"></param>
  847. /// <param name="cmd"></param>
  848. public static void ReturnDocERP(string TransType, string Identification, SqlCommand cmd)
  849. {
  850. try
  851. {
  852. #region ERP
  853. string sql = @"SELECT a.ToWarehouseCode+b.ReturnCode+a.MUSER AS Costre,a.ToWarehouseCode AS WarehouseCode,b.ReturnCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY a.ToWarehouseCode,b.ReturnCode,b.ReturnDetailID,a.InvCode) AS Sequence,
  854. a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,b.ReturnDetailID,Enable AS UpdateTodoQuantity
  855. INTO #TempERP
  856. FROM ICSWareHouseLotInfoLog a
  857. INNER JOIN ICSReturn b ON a.TransCode=b.ReturnCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
  858. INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
  859. WHERE a.Identification='{0}' AND ERPUpload='0'
  860. GROUP BY a.ToWarehouseCode,b.ReturnCode,a.MUSER,a.InvCode,b.ReturnDetailID,Enable
  861. SELECT DISTINCT Costre,'' AS DepCode,WarehouseCode AS WHCode,'' AS SourceType,ReturnCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
  862. SELECT Costre,Sequence,InvCode,Quantity,Amount,ReturnDetailID AS SourceDetailID FROM #TempERP
  863. DROP TABLE #TempERP";
  864. sql = string.Format(sql, Identification);
  865. DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
  866. string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
  867. string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.ReturnDocURL, Inputstr);
  868. Result result = new Result();
  869. result = JsonConvert.DeserializeObject<Result>(resultStr);
  870. if (result.Success)
  871. {
  872. try
  873. {
  874. JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
  875. foreach (var item in res)
  876. {
  877. JObject jo = (JObject)item;
  878. JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
  879. foreach (var detail in resdetail)
  880. {
  881. JObject det = (JObject)detail;
  882. ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["OtherInCode"].ToString(), det["Sequence"].ToString(), cmd);
  883. }
  884. }
  885. }
  886. catch (Exception ex)
  887. {
  888. log.Debug(ex.ToString());
  889. log.Debug(resultStr);
  890. }
  891. }
  892. else
  893. {
  894. throw new Exception("ERP接口调用失败:" + result.Message);
  895. }
  896. #endregion
  897. }
  898. catch (Exception)
  899. {
  900. throw;
  901. }
  902. }
  903. #endregion
  904. }
  905. }