PDAModuleLogicEntrucking.cs 33 KB

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