PDAModuleLogicEntrucking.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888
  1. /*******************************************************************************
  2. * Copyright(c) 2019 DongkeSoft All rights reserved. / Confidential
  3. * 类的信息:
  4. * 1.程序名称:PDAModuleLogicWorkShop3.cs
  5. * 2.功能描述:PDA相关处理(三车间专用)。
  6. * 编辑履历:
  7. * 作者 日期 版本 修改内容
  8. * 徐伟 2019/11/05 1.00 新建
  9. *******************************************************************************/
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Data;
  13. using System.Drawing;
  14. using System.Drawing.Imaging;
  15. using System.IO;
  16. using System.Text;
  17. using Dongke.IBOSS.PRD.Basics.BaseResources;
  18. using Dongke.IBOSS.PRD.Basics.DataAccess;
  19. using Dongke.IBOSS.PRD.Basics.Library;
  20. using Dongke.IBOSS.PRD.Service.DataModels;
  21. using Dongke.IBOSS.PRD.WCF.DataModels;
  22. using Dongke.IBOSS.PRD.WCF.DataModels.HRModule;
  23. using Dongke.IBOSS.PRD.WCF.DataModels.PCModule;
  24. using Dongke.IBOSS.PRD.WCF.DataModels.PMModule;
  25. using Oracle.ManagedDataAccess.Client;
  26. using Newtonsoft.Json.Linq;
  27. using Dongke.IBOSS.PRD.Service.CMNModuleService;
  28. using System.Collections;
  29. namespace Dongke.IBOSS.PRD.Service.PDAModuleLogic
  30. {
  31. /// <summary>
  32. /// 三车间专用接口
  33. /// </summary>
  34. public partial class PDAModuleLogic
  35. {
  36. #region feiyue add 2022-07-20 装板接口
  37. /// <summary>
  38. /// 生产工号装具操作权限
  39. /// </summary>
  40. /// <param name="groutingLineNo"></param>
  41. /// <param name="sUser"></param>
  42. /// <returns></returns>
  43. public static ServiceResultEntity CheckEntruckUser(string functionCode, string currentUserCode, SUserInfo sUser)
  44. {
  45. ServiceResultEntity sre = new ServiceResultEntity();
  46. sre.Data = new DataSet();
  47. sre.Status = Constant.ServiceResultStatus.Success;
  48. IDBTransaction conn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  49. string sqlStr = "";
  50. try
  51. {
  52. conn.Connect();
  53. if (sre.Status == Constant.ServiceResultStatus.Success)
  54. {
  55. sqlStr = $@"
  56. SELECT
  57. TMUR.FunctionCode
  58. FROM
  59. TP_MST_UserRight TMUR
  60. INNER JOIN TP_MST_USER U ON U.USERID = TMUR.USERID
  61. WHERE
  62. TMUR.FunctionCode = '{functionCode}'
  63. AND u.USERCODE = '{currentUserCode}'
  64. AND u.accountID = {sUser.AccountID}
  65. ";
  66. DataTable dt = conn.GetSqlResultToDt(sqlStr);
  67. if (dt.Rows.Count == 0)
  68. {
  69. sre.Status = Constant.ServiceResultStatus.NoFunRight;
  70. sre.Message = "工号" + currentUserCode + "无该操作权限!";
  71. }
  72. else
  73. {
  74. sre.Status = Constant.ServiceResultStatus.Success;
  75. sre.Message = "操作成功!";
  76. }
  77. }
  78. }
  79. catch (Exception ex)
  80. {
  81. throw ex;
  82. }
  83. finally
  84. {
  85. conn.Disconnect();
  86. }
  87. //返回数据
  88. return sre;
  89. }
  90. /// <summary>
  91. /// 获取装具的使用状态
  92. /// </summary>
  93. /// <param name="entruckingCode"></param>
  94. /// <param name="sUser"></param>
  95. /// <returns></returns>
  96. public static ServiceResultEntity GetTruckStatus(string entruckingCode, SUserInfo sUser)
  97. {
  98. ServiceResultEntity sre = new ServiceResultEntity();
  99. sre.Data = new DataSet();
  100. sre.Status = Constant.ServiceResultStatus.Success;
  101. IDBTransaction conn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  102. string sqlStr = "";
  103. try
  104. {
  105. conn.Connect();
  106. if (sre.Status == Constant.ServiceResultStatus.Success)
  107. {
  108. sqlStr = $@"
  109. SELECT
  110. TPE.STATUS
  111. FROM TP_PM_ENTRUCKING TPE
  112. WHERE TPE.VALUEFLAG = '1'
  113. AND TPE.ENTRUCKINGCODE = '{entruckingCode}'
  114. ";
  115. DataTable dt = conn.GetSqlResultToDt(sqlStr);
  116. sre.Data.Tables.Add(dt);
  117. if (dt.Rows.Count == 0)
  118. {
  119. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  120. sre.Message = "无效装具条码!";
  121. }
  122. else
  123. {
  124. sre.Status = Constant.ServiceResultStatus.Success;
  125. sre.Message = "操作成功!";
  126. }
  127. }
  128. }
  129. catch (Exception ex)
  130. {
  131. throw ex;
  132. }
  133. finally
  134. {
  135. conn.Disconnect();
  136. }
  137. //返回数据
  138. return sre;
  139. }
  140. /// <summary>
  141. /// 验证产品条码有效性,及产品与装具的绑定状态
  142. /// </summary>
  143. /// <param name="barCode"></param>
  144. /// <param name="sUser"></param>
  145. /// <returns></returns>
  146. public static ServiceResultEntity CheckTruckBarCode(string barCode, SUserInfo sUser)
  147. {
  148. ServiceResultEntity sre = new ServiceResultEntity();
  149. sre.Data = new DataSet();
  150. sre.Status = Constant.ServiceResultStatus.Success;
  151. IDBTransaction conn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  152. string sqlStr = "";
  153. try
  154. {
  155. conn.Connect();
  156. if (sre.Status == Constant.ServiceResultStatus.Success)
  157. {
  158. sqlStr = $@"select 1 from TP_PM_GroutingDailyDetail where barcode='{barCode}' and valueflag=1";
  159. DataTable dt = conn.GetSqlResultToDt(sqlStr);
  160. if (dt.Rows.Count == 0)
  161. {
  162. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  163. sre.Message = "无效条码!";
  164. }
  165. else
  166. {
  167. //产品与装具的绑定状态
  168. sqlStr = $@"
  169. SELECT
  170. TPE.EntruckingCode,TPED.DOFUNCTION
  171. FROM
  172. TP_PM_ENTRUCKING TPE
  173. INNER JOIN TP_PM_EntruckingDetail TPED ON TPE.EntruckingCode = TPED.EntruckingCode
  174. AND TPE.Batch = TPED.Batch
  175. WHERE
  176. TPE.Status = 1 AND
  177. TPED.BARCODE = '{barCode}'
  178. ORDER BY TPED.CREATETIME DESC";
  179. dt = conn.GetSqlResultToDt(sqlStr);
  180. if (dt.Rows.Count > 0 && (dt.Rows[0]["DOFUNCTION"].Equals("1") || dt.Rows[0]["DOFUNCTION"].Equals("3")))
  181. {
  182. sre.Status = Constant.ServiceResultStatus.Other;
  183. sre.Message = "产品" + barCode + "已在装具" + dt.Rows[0]["EntruckingCode"] + "上"; ;
  184. }
  185. else
  186. {
  187. sqlStr = $@"
  188. SELECT
  189. GDD.BARCODE,
  190. G.GOODSCODE,
  191. DECODE(P.PROCEDURENAME,NULL,'成型',P.PROCEDURENAME) PROCEDURENAME,
  192. DECODE(U.USERCODE,NULL,GDD.USERCODE,U.USERCODE) USERCODE
  193. FROM
  194. TP_PM_GROUTINGDAILYDETAIL GDD
  195. LEFT JOIN TP_PM_INPRODUCTION IP ON IP.BARCODE = GDD.BARCODE
  196. LEFT JOIN TP_PC_PROCEDURE P ON P.PROCEDUREID = IP.PROCEDUREID
  197. LEFT JOIN TP_MST_USER U ON U.USERID = IP.USERID
  198. LEFT JOIN TP_MST_GOODS G ON G.GOODSID = GDD.GOODSID
  199. WHERE
  200. GDD.BARCODE = '{barCode}'";
  201. dt = conn.GetSqlResultToDt(sqlStr);
  202. dt.TableName = "goodsinfo";
  203. sre.Data.Tables.Add(dt);
  204. sre.Status = Constant.ServiceResultStatus.Success;
  205. sre.Message = "操作成功!";
  206. }
  207. }
  208. }
  209. }
  210. catch (Exception ex)
  211. {
  212. throw ex;
  213. }
  214. finally
  215. {
  216. conn.Disconnect();
  217. }
  218. //返回数据
  219. return sre;
  220. }
  221. /// <summary>
  222. /// 绑定装具
  223. /// </summary>
  224. /// <param name="barcodes"></param>
  225. /// <param name="entruckingCode"></param>
  226. /// <param name="currentUserCode"></param>
  227. /// <param name="sUser"></param>
  228. /// <returns></returns>
  229. public static ServiceResultEntity AddTruckBarCodes(string barCodes, string entruckingCode, string currentUserCode, SUserInfo sUser)
  230. {
  231. ServiceResultEntity sre = new ServiceResultEntity();
  232. sre.Data = new DataSet();
  233. sre.Status = Constant.ServiceResultStatus.Success;
  234. IDBTransaction conn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  235. string sqlStr = "";
  236. int execute = 0;
  237. try
  238. {
  239. conn.Connect();
  240. if (sre.Status == Constant.ServiceResultStatus.Success)
  241. {
  242. //获取最大批次
  243. sqlStr = $@"SELECT
  244. TPE.BATCH,TPE.STATUS
  245. FROM TP_PM_ENTRUCKING TPE
  246. WHERE TPE.VALUEFLAG = '1'
  247. AND TPE.ENTRUCKINGCODE = '{entruckingCode}'";
  248. DataTable dt = conn.GetSqlResultToDt(sqlStr);
  249. if (dt.Rows.Count == 0)
  250. {
  251. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  252. sre.Message = "无效装具条码!";
  253. }
  254. else if (dt.Rows[0]["STATUS"].ToString().Equals("0"))
  255. {
  256. int batch = Convert.ToInt32(dt.Rows[0]["BATCH"]) + 1;
  257. string[] barcodeStr = barCodes.Split(',');
  258. for (int i = 0; i < barcodeStr.Length; i++)
  259. {
  260. //获取产品条码当前工序
  261. sqlStr = $@"
  262. select PROCEDUREID from TP_PM_INPRODUCTION where barcode = '{barcodeStr[i]}'
  263. ";
  264. string procedureid = conn.GetSqlResultToStr(sqlStr);
  265. //插入装具明细
  266. sqlStr = $@"
  267. INSERT INTO TP_PM_EntruckingDetail (
  268. ENTRUCKINGCODE,
  269. BARCODE,
  270. BATCH,
  271. DOFUNCTION,
  272. PROCEDUREID,
  273. REMARKS,
  274. ACCOUNTID,
  275. USERID,
  276. USERCODE,
  277. VALUEFLAG,
  278. CREATEUSERID,
  279. UPDATEUSERID )
  280. SELECT
  281. '{entruckingCode}',
  282. '{barcodeStr[i]}',
  283. '{batch}',
  284. 1,
  285. '{procedureid}',
  286. '',
  287. '{sUser.AccountID}',
  288. USERID,
  289. '{currentUserCode}',
  290. 1,
  291. '{sUser.UserID}',
  292. '{sUser.UserID}'
  293. FROM TP_MST_USER WHERE USERCODE = '{currentUserCode}'
  294. ";
  295. execute = conn.ExecuteNonQuery(sqlStr);
  296. }
  297. //修改装具状态
  298. if (execute > 0)
  299. {
  300. sqlStr = $@"UPDATE TP_PM_ENTRUCKING SET STATUS = 1,BATCH = '{batch}' WHERE ENTRUCKINGCODE = '{entruckingCode}' ";
  301. execute = conn.ExecuteNonQuery(sqlStr);
  302. if (execute > 0)
  303. {
  304. conn.Commit();
  305. sre.Status = Constant.ServiceResultStatus.Success;
  306. sre.Message = "操作完成!";
  307. }
  308. else
  309. {
  310. sre.Status = Constant.ServiceResultStatus.NoModifyData;
  311. sre.Message = "操作失败,没有更新任何数据!";
  312. }
  313. }
  314. else
  315. {
  316. sre.Status = Constant.ServiceResultStatus.NoModifyData;
  317. sre.Message = "操作失败,没有更新任何数据!";
  318. }
  319. }
  320. else
  321. {
  322. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  323. sre.Message = "装具不可用!";
  324. }
  325. }
  326. }
  327. catch (Exception ex)
  328. {
  329. conn.Rollback();
  330. throw ex;
  331. }
  332. finally
  333. {
  334. conn.Disconnect();
  335. }
  336. //返回数据
  337. return sre;
  338. }
  339. /// <summary>
  340. /// 获取装具上的产品信息
  341. /// </summary>
  342. /// <param name="entruckingCode"></param>
  343. /// <param name="sUser"></param>
  344. /// <returns></returns>
  345. public static ServiceResultEntity GetTruckBarCodes(string entruckingCode, SUserInfo sUser)
  346. {
  347. ServiceResultEntity sre = new ServiceResultEntity();
  348. sre.Data = new DataSet();
  349. sre.Status = Constant.ServiceResultStatus.Success;
  350. IDBTransaction conn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  351. string sqlStr = "";
  352. try
  353. {
  354. conn.Connect();
  355. if (sre.Status == Constant.ServiceResultStatus.Success)
  356. {
  357. sqlStr = $@"
  358. SELECT
  359. TPE.STATUS
  360. FROM TP_PM_ENTRUCKING TPE
  361. WHERE TPE.VALUEFLAG = '1'
  362. AND TPE.ENTRUCKINGCODE = '{entruckingCode}'
  363. ";
  364. DataTable dt = conn.GetSqlResultToDt(sqlStr);
  365. sre.Data.Tables.Add(dt);
  366. if (dt.Rows.Count == 0)
  367. {
  368. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  369. sre.Message = "无效装具条码!";
  370. }
  371. else if (dt.Rows[0]["STATUS"].Equals("1"))
  372. {
  373. sqlStr = $@"
  374. SELECT
  375. TT.ENTRUCKINGCODE,
  376. TT.BARCODE,
  377. TT.GOODSCODE,
  378. TT.USERCODE,
  379. TT.PROCEDURENAME
  380. FROM
  381. (
  382. SELECT
  383. ROW_NUMBER ( ) OVER ( PARTITION BY TD.BARCODE ORDER BY TD.CREATETIME DESC ) RN,
  384. TD.ENTRUCKINGCODE,
  385. TD.BARCODE,
  386. G.GOODSCODE,
  387. DECODE(U.USERCODE,NULL,GDD.USERCODE,U.USERCODE) USERCODE,
  388. DECODE(P.PROCEDURENAME,NULL,'成型',P.PROCEDURENAME) PROCEDURENAME,
  389. TD.DOFUNCTION
  390. FROM
  391. TP_PM_ENTRUCKINGDETAIL TD
  392. INNER JOIN TP_PM_ENTRUCKING T ON T.ENTRUCKINGCODE = TD.ENTRUCKINGCODE
  393. AND T.BATCH = TD.BATCH
  394. INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.BARCODE = TD.BARCODE
  395. LEFT JOIN TP_PM_INPRODUCTION IP ON IP.BARCODE = TD.BARCODE
  396. LEFT JOIN TP_PC_PROCEDURE P ON P.PROCEDUREID = IP.PROCEDUREID
  397. LEFT JOIN TP_MST_USER U ON U.USERID = IP.USERID
  398. INNER JOIN TP_MST_GOODS G ON G.GOODSID = GDD.GOODSID
  399. WHERE
  400. TD.ENTRUCKINGCODE = '{entruckingCode}'
  401. AND T.STATUS = '1'
  402. ) TT
  403. WHERE
  404. TT.RN = 1
  405. AND ( TT.DOFUNCTION = '1' OR TT.DOFUNCTION = '3' )
  406. ";
  407. dt = conn.GetSqlResultToDt(sqlStr);
  408. sre.Data.Tables.Add(dt);
  409. if (dt.Rows.Count == 0)
  410. {
  411. sre.Status = Constant.ServiceResultStatus.Other;
  412. sre.Message = "装具上无产品!";
  413. }
  414. else
  415. {
  416. sre.Status = Constant.ServiceResultStatus.Success;
  417. sre.Message = "操作成功!";
  418. }
  419. }
  420. else
  421. {
  422. sre.Status = Constant.ServiceResultStatus.Other;
  423. sre.Message = "装具未使用";
  424. }
  425. }
  426. }
  427. catch (Exception ex)
  428. {
  429. throw ex;
  430. }
  431. finally
  432. {
  433. conn.Disconnect();
  434. }
  435. //返回数据
  436. return sre;
  437. }
  438. /// <summary>
  439. /// 解绑
  440. /// </summary>
  441. /// <param name="entruckingCode"></param>
  442. /// <param name="sUser"></param>
  443. /// <returns></returns>
  444. public static ServiceResultEntity UnbindTruckBarCodes(string entruckingCode, string currentUserCode, SUserInfo sUser)
  445. {
  446. ServiceResultEntity sre = new ServiceResultEntity();
  447. sre.Data = new DataSet();
  448. sre.Status = Constant.ServiceResultStatus.Success;
  449. IDBTransaction conn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  450. string sqlStr = "";
  451. try
  452. {
  453. conn.Connect();
  454. if (sre.Status == Constant.ServiceResultStatus.Success)
  455. {
  456. sqlStr = $@"
  457. SELECT
  458. TPE.STATUS
  459. FROM TP_PM_ENTRUCKING TPE
  460. WHERE TPE.VALUEFLAG = '1'
  461. AND TPE.ENTRUCKINGCODE = '{entruckingCode}'
  462. ";
  463. DataTable dt = conn.GetSqlResultToDt(sqlStr);
  464. sre.Data.Tables.Add(dt);
  465. if (dt.Rows.Count == 0)
  466. {
  467. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  468. sre.Message = "无效装具条码!";
  469. }
  470. else if (dt.Rows[0]["STATUS"].Equals("1"))
  471. {
  472. //插入装具明细
  473. sqlStr = $@"
  474. INSERT INTO TP_PM_EntruckingDetail (
  475. ENTRUCKINGCODE,
  476. BARCODE,
  477. BATCH,
  478. DOFUNCTION,
  479. PROCEDUREID,
  480. REMARKS,
  481. ACCOUNTID,
  482. USERID,
  483. USERCODE,
  484. VALUEFLAG,
  485. CREATEUSERID,
  486. UPDATEUSERID )
  487. SELECT
  488. '{entruckingCode}',
  489. TD.BARCODE,
  490. TD.BATCH,
  491. 2,
  492. IP.PROCEDUREID,
  493. '',
  494. {sUser.AccountID},
  495. CU.USERID,
  496. '{currentUserCode}',
  497. '1',
  498. {sUser.UserID},
  499. {sUser.UserID}
  500. FROM
  501. TP_PM_ENTRUCKINGDETAIL TD
  502. INNER JOIN TP_PM_ENTRUCKING T ON T.ENTRUCKINGCODE = TD.ENTRUCKINGCODE AND T.BATCH = TD.BATCH
  503. INNER JOIN TP_PM_INPRODUCTION IP ON IP.BARCODE = TD.BARCODE
  504. INNER JOIN TP_MST_USER CU ON CU.USERCODE = '{currentUserCode}' AND CU.VALUEFLAG = '1'
  505. WHERE
  506. TD.ENTRUCKINGCODE = '{entruckingCode}'
  507. AND T.STATUS = '1'
  508. AND (TD.DOFUNCTION = '1' OR TD.DOFUNCTION = '3')
  509. ";
  510. int execute = conn.ExecuteNonQuery(sqlStr);
  511. //修改装具状态
  512. sqlStr = $@"UPDATE TP_PM_ENTRUCKING SET STATUS = '0' WHERE ENTRUCKINGCODE = '{entruckingCode}' ";
  513. execute = conn.ExecuteNonQuery(sqlStr);
  514. if (execute > 0)
  515. {
  516. conn.Commit();
  517. sre.Status = Constant.ServiceResultStatus.Success;
  518. sre.Message = "操作完成!";
  519. }
  520. else
  521. {
  522. sre.Status = Constant.ServiceResultStatus.NoModifyData;
  523. sre.Message = "操作失败,没有更新任何数据!";
  524. }
  525. }
  526. else
  527. {
  528. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  529. sre.Message = "装具未使用";
  530. }
  531. }
  532. }
  533. catch (Exception ex)
  534. {
  535. throw ex;
  536. }
  537. finally
  538. {
  539. conn.Disconnect();
  540. }
  541. //返回数据
  542. return sre;
  543. }
  544. /// <summary>
  545. /// 增补
  546. /// </summary>
  547. /// <param name="barcode"></param>
  548. /// <param name="entruckingCode"></param>
  549. /// <param name="currentUserCode"></param>
  550. /// <param name="sUser"></param>
  551. /// <returns></returns>
  552. public static ServiceResultEntity AddTruckBarCode(string barCode, string entruckingCode, string currentUserCode, SUserInfo sUser)
  553. {
  554. ServiceResultEntity sre = new ServiceResultEntity();
  555. sre.Data = new DataSet();
  556. sre.Status = Constant.ServiceResultStatus.Success;
  557. IDBTransaction conn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  558. string sqlStr = "";
  559. int execute = 0;
  560. try
  561. {
  562. conn.Connect();
  563. if (sre.Status == Constant.ServiceResultStatus.Success)
  564. {
  565. //获取最大批次
  566. sqlStr = $@"SELECT
  567. TPE.BATCH,TPE.STATUS
  568. FROM TP_PM_ENTRUCKING TPE
  569. WHERE TPE.VALUEFLAG = '1'
  570. AND TPE.ENTRUCKINGCODE = '{entruckingCode}'";
  571. DataTable dt = conn.GetSqlResultToDt(sqlStr);
  572. if (dt.Rows.Count == 0)
  573. {
  574. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  575. sre.Message = "无效装具条码!";
  576. }
  577. else if (dt.Rows[0]["STATUS"].ToString().Equals("1"))
  578. {
  579. int batch = Convert.ToInt32(dt.Rows[0]["BATCH"]);
  580. //获取产品条码当前工序
  581. sqlStr = $@"
  582. select PROCEDUREID from TP_PM_INPRODUCTION where barcode = '{barCode}'
  583. ";
  584. string procedureid = conn.GetSqlResultToStr(sqlStr);
  585. //插入装具明细
  586. sqlStr = $@"
  587. INSERT INTO TP_PM_EntruckingDetail (
  588. ENTRUCKINGCODE,
  589. BARCODE,
  590. BATCH,
  591. DOFUNCTION,
  592. PROCEDUREID,
  593. REMARKS,
  594. ACCOUNTID,
  595. USERID,
  596. USERCODE,
  597. VALUEFLAG,
  598. CREATEUSERID,
  599. UPDATEUSERID )
  600. SELECT
  601. '{entruckingCode}',
  602. '{barCode}',
  603. '{batch}',
  604. 3,
  605. '{procedureid}',
  606. '',
  607. '{sUser.AccountID}',
  608. USERID,
  609. '{currentUserCode}',
  610. 1,
  611. '{sUser.UserID}',
  612. '{sUser.UserID}'
  613. FROM TP_MST_USER WHERE USERCODE = '{currentUserCode}'
  614. ";
  615. execute = conn.ExecuteNonQuery(sqlStr);
  616. if (execute > 0)
  617. {
  618. sre.Status = Constant.ServiceResultStatus.Success;
  619. sre.Message = "操作完成!";
  620. }
  621. else
  622. {
  623. sre.Status = Constant.ServiceResultStatus.NoModifyData;
  624. sre.Message = "操作失败,没有更新任何数据!";
  625. }
  626. }
  627. else
  628. {
  629. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  630. sre.Message = "装具未使用不可增补!";
  631. }
  632. conn.Commit();
  633. }
  634. }
  635. catch (Exception ex)
  636. {
  637. conn.Rollback();
  638. throw ex;
  639. }
  640. finally
  641. {
  642. conn.Disconnect();
  643. }
  644. //返回数据
  645. return sre;
  646. }
  647. /// <summary>
  648. /// 拆减产品
  649. /// </summary>
  650. /// <param name="entruckingCode"></param>
  651. /// <param name="sUser"></param>
  652. /// <returns></returns>
  653. public static ServiceResultEntity UnbindTruckBarCode(string barCode, string entruckingCode, string currentUserCode, SUserInfo sUser)
  654. {
  655. ServiceResultEntity sre = new ServiceResultEntity();
  656. sre.Data = new DataSet();
  657. sre.Status = Constant.ServiceResultStatus.Success;
  658. IDBTransaction conn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  659. string sqlStr = "";
  660. try
  661. {
  662. conn.Connect();
  663. if (sre.Status == Constant.ServiceResultStatus.Success)
  664. {
  665. sqlStr = $@"
  666. SELECT
  667. TPE.STATUS
  668. FROM TP_PM_ENTRUCKING TPE
  669. WHERE TPE.VALUEFLAG = '1'
  670. AND TPE.ENTRUCKINGCODE = '{entruckingCode}'
  671. ";
  672. DataTable dt = conn.GetSqlResultToDt(sqlStr);
  673. if (dt.Rows.Count == 0)
  674. {
  675. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  676. sre.Message = "无效装具条码!";
  677. }
  678. else if (dt.Rows[0]["STATUS"].Equals("1"))
  679. {
  680. //插入装具明细
  681. sqlStr = $@"
  682. INSERT INTO TP_PM_EntruckingDetail (
  683. ENTRUCKINGCODE,
  684. BARCODE,
  685. BATCH,
  686. DOFUNCTION,
  687. PROCEDUREID,
  688. REMARKS,
  689. ACCOUNTID,
  690. USERID,
  691. USERCODE,
  692. VALUEFLAG,
  693. CREATEUSERID,
  694. UPDATEUSERID )
  695. SELECT
  696. '{entruckingCode}',
  697. TD.BARCODE,
  698. TD.BATCH,
  699. 4,
  700. IP.PROCEDUREID,
  701. '',
  702. {sUser.AccountID},
  703. CU.USERID,
  704. '{currentUserCode}',
  705. '1',
  706. {sUser.UserID},
  707. {sUser.UserID}
  708. FROM
  709. TP_PM_ENTRUCKINGDETAIL TD
  710. INNER JOIN TP_PM_ENTRUCKING T ON T.ENTRUCKINGCODE = TD.ENTRUCKINGCODE AND T.BATCH = TD.BATCH
  711. LEFT JOIN TP_PM_INPRODUCTION IP ON IP.BARCODE = TD.BARCODE
  712. INNER JOIN TP_MST_USER CU ON CU.USERCODE = '{currentUserCode}' AND CU.VALUEFLAG = '1'
  713. WHERE
  714. TD.ENTRUCKINGCODE = '{entruckingCode}'
  715. AND TD.BARCODE = '{barCode}'
  716. AND T.STATUS = '1'
  717. ";
  718. int execute = conn.ExecuteNonQuery(sqlStr);
  719. //查看装具是否有产品,若已无产品,装具自动解绑
  720. sqlStr = $@"
  721. SELECT
  722. TT.ENTRUCKINGCODE,
  723. TT.BARCODE,
  724. TT.GOODSCODE,
  725. TT.USERCODE,
  726. TT.PROCEDURENAME
  727. FROM
  728. (
  729. SELECT
  730. ROW_NUMBER ( ) OVER ( PARTITION BY TD.BARCODE ORDER BY TD.CREATETIME DESC ) RN,
  731. TD.ENTRUCKINGCODE,
  732. TD.BARCODE,
  733. G.GOODSCODE,
  734. DECODE(U.USERCODE,NULL,GDD.USERCODE,U.USERCODE) USERCODE,
  735. DECODE(P.PROCEDURENAME,NULL,'成型',P.PROCEDURENAME) PROCEDURENAME,
  736. TD.DOFUNCTION
  737. FROM
  738. TP_PM_ENTRUCKINGDETAIL TD
  739. INNER JOIN TP_PM_ENTRUCKING T ON T.ENTRUCKINGCODE = TD.ENTRUCKINGCODE
  740. AND T.BATCH = TD.BATCH
  741. INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.BARCODE = TD.BARCODE
  742. LEFT JOIN TP_PM_INPRODUCTION IP ON IP.BARCODE = TD.BARCODE
  743. LEFT JOIN TP_PC_PROCEDURE P ON P.PROCEDUREID = IP.PROCEDUREID
  744. LEFT JOIN TP_MST_USER U ON U.USERID = IP.USERID
  745. INNER JOIN TP_MST_GOODS G ON G.GOODSID = GDD.GOODSID
  746. WHERE
  747. TD.ENTRUCKINGCODE = '{entruckingCode}'
  748. AND T.STATUS = '1'
  749. ) TT
  750. WHERE
  751. TT.RN = 1
  752. AND ( TT.DOFUNCTION = '1' OR TT.DOFUNCTION = '3' )
  753. ";
  754. dt = conn.GetSqlResultToDt(sqlStr);
  755. if (dt.Rows.Count == 0)
  756. {
  757. //装具自动解绑
  758. sqlStr = $@"UPDATE TP_PM_ENTRUCKING SET STATUS = '0' WHERE ENTRUCKINGCODE = '{entruckingCode}' ";
  759. execute = conn.ExecuteNonQuery(sqlStr);
  760. }
  761. if (execute > 0)
  762. {
  763. conn.Commit();
  764. sre.Status = Constant.ServiceResultStatus.Success;
  765. sre.Message = "操作成功!";
  766. }
  767. else
  768. {
  769. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  770. sre.Message = "操作失败,没有更新任何数据!";
  771. }
  772. }
  773. else
  774. {
  775. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  776. sre.Message = "装具未使用,不可进行拆减";
  777. }
  778. }
  779. }
  780. catch (Exception ex)
  781. {
  782. throw ex;
  783. }
  784. finally
  785. {
  786. conn.Disconnect();
  787. }
  788. //返回数据
  789. return sre;
  790. }
  791. /// <summary>
  792. /// 验证产品条码是否在装具上
  793. /// </summary>
  794. /// <param name="barCode"></param>
  795. /// <param name="sUser"></param>
  796. /// <returns></returns>
  797. public static ServiceResultEntity CheckTruckBarCodeForUnbind(string barCode, string entruckingCode,SUserInfo sUser)
  798. {
  799. ServiceResultEntity sre = new ServiceResultEntity();
  800. sre.Data = new DataSet();
  801. sre.Status = Constant.ServiceResultStatus.Success;
  802. IDBTransaction conn = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
  803. string sqlStr = "";
  804. try
  805. {
  806. conn.Connect();
  807. if (sre.Status == Constant.ServiceResultStatus.Success)
  808. {
  809. sqlStr = $@"select 1 from TP_PM_GroutingDailyDetail where barcode = '{barCode}' and valueflag=1";
  810. DataTable dt = conn.GetSqlResultToDt(sqlStr);
  811. if (dt.Rows.Count == 0)
  812. {
  813. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  814. sre.Message = "无效条码!";
  815. }
  816. else
  817. {
  818. //产品与装具的绑定状态
  819. sqlStr = $@"
  820. SELECT
  821. TPE.EntruckingCode,TPED.DOFUNCTION
  822. FROM TP_PM_ENTRUCKING TPE
  823. INNER JOIN TP_PM_EntruckingDetail TPED
  824. ON TPE.EntruckingCode = TPED.EntruckingCode
  825. AND TPE.Batch = TPED.Batch
  826. WHERE TPE.Status = 1
  827. AND TPED.BARCODE = '{barCode}'
  828. AND TPED.ENTRUCKINGCODE = '{entruckingCode}'
  829. ORDER BY TPED.CREATETIME DESC";
  830. dt = conn.GetSqlResultToDt(sqlStr);
  831. if (dt.Rows.Count > 0 && (dt.Rows[0]["DOFUNCTION"].Equals("1") || dt.Rows[0]["DOFUNCTION"].Equals("3")))
  832. {
  833. sqlStr = $@"
  834. SELECT
  835. GDD.BARCODE,
  836. G.GOODSCODE,
  837. DECODE(U.USERCODE,NULL,GDD.USERCODE,U.USERCODE) USERCODE,
  838. DECODE(P.PROCEDURENAME,NULL,'成型',P.PROCEDURENAME) PROCEDURENAME
  839. FROM
  840. TP_PM_GROUTINGDAILYDETAIL GDD
  841. LEFT JOIN TP_PM_INPRODUCTION IP ON IP.BARCODE = GDD.BARCODE
  842. LEFT JOIN TP_PC_PROCEDURE P ON P.PROCEDUREID = IP.PROCEDUREID
  843. LEFT JOIN TP_MST_USER U ON U.USERID = IP.USERID
  844. INNER JOIN TP_MST_GOODS G ON G.GOODSID = GDD.GOODSID
  845. WHERE
  846. GDD.BARCODE = '{barCode}'";
  847. dt = conn.GetSqlResultToDt(sqlStr);
  848. dt.TableName = "goodsinfo";
  849. sre.Data.Tables.Add(dt);
  850. sre.Status = Constant.ServiceResultStatus.Success;
  851. sre.Message = "操作成功!";
  852. }
  853. else
  854. {
  855. sre.Status = Constant.ServiceResultStatus.Other;
  856. sre.Message = "产品" + barCode + "不在装具" + entruckingCode + "上";
  857. }
  858. }
  859. }
  860. }
  861. catch (Exception ex)
  862. {
  863. throw ex;
  864. }
  865. finally
  866. {
  867. conn.Disconnect();
  868. }
  869. //返回数据
  870. return sre;
  871. }
  872. #endregion
  873. }
  874. }