Crn_Dal.cs 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929
  1. using NX_CommonClassLibrary;
  2. using NX_DbClassLibrary;
  3. using NX_LogClassLibrary;
  4. using NX_ModelClassLibrary.BaseModel;
  5. using NX_ModelClassLibrary.CrnModel;
  6. using NX_ModelClassLibrary.CustomEnum;
  7. using NX_ModelClassLibrary.WmsTask;
  8. using NX_WcsDal.CommonBusiness;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Data;
  12. using System.Linq;
  13. using System.Reflection;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. namespace NX_WcsDal.WcsBusiness
  17. {
  18. public class Crn_Dal
  19. {
  20. #region 单例模式
  21. /// <summary>
  22. /// 单例模式对象
  23. /// </summary>
  24. private static Crn_Dal _instance = null;
  25. private static readonly object lockObj = new object();
  26. /// <summary>
  27. /// 单例模式方法
  28. /// </summary>
  29. public static Crn_Dal Instance
  30. {
  31. get
  32. {
  33. if (_instance == null)
  34. {
  35. lock (lockObj)
  36. {
  37. if (_instance == null)
  38. {
  39. _instance = new Crn_Dal();
  40. }
  41. }
  42. }
  43. return _instance;
  44. }
  45. }
  46. #endregion
  47. /// <summary>
  48. /// 加载堆垛机未完成指令
  49. /// </summary>
  50. /// <param name="basWcsDevMd">堆垛机设备对象</param>
  51. /// <param name="isLoadUnFinish">是否加载未完成指令</param>
  52. /// <returns></returns>
  53. public WcsCrnCmdMd LoadCrnUnFinishedCmd(BasWcsDevMd basWcsDevMd,bool isLoadUnFinish, string crnCmdTypeMd)
  54. {
  55. try
  56. {
  57. string sqlCondition = string.Empty;
  58. if (isLoadUnFinish)
  59. {
  60. sqlCondition = $" AND A.CMD_STATUS > '{(int)CrnCmdStatusEnum.初始创建}' AND A.CMD_STATUS < '{(int)CrnCmdStatusEnum.完成}'";
  61. }
  62. else
  63. {
  64. sqlCondition = $" AND A.CMD_STATUS = '{(int)CrnCmdStatusEnum.初始创建}'";
  65. }
  66. if (Convert.ToInt32(AppConfigHelper.Get("CrnAutoTest")) == 1)
  67. {
  68. sqlCondition = $" AND A.REMARKS1 = 'AutoTest'";
  69. }
  70. if (!string.IsNullOrEmpty(crnCmdTypeMd))
  71. {
  72. if (Enum.TryParse(crnCmdTypeMd, out CrnCmdTypeEnum tmpCrnTypeMd))
  73. {
  74. sqlCondition = $" AND A.CMD_TYPE = '{tmpCrnTypeMd}'";
  75. }
  76. }
  77. string sqlQueryCrnUnFinishedCmd = $@"
  78. SELECT
  79. TOP 1
  80. A.CRN_CMD_ID,
  81. A.NEWID,
  82. A.TASK_NO,
  83. A.CMD_NO,
  84. A.TRAY_CODE,
  85. A.PALLET_CODE,
  86. A.TRAY_STATUS,
  87. A.CRN_DEV_NO,
  88. A.CRN_FORK_DEV_NO,
  89. A.SBIN_NO,
  90. A.SBIN_ROW,
  91. A.SBIN_COL,
  92. A.SBIN_LAYER,
  93. A.S_EXTENSION_GROUP,
  94. A.S_EXTENSION_IDX,
  95. A.EBIN_NO,
  96. A.EBIN_ROW,
  97. A.EBIN_COL,
  98. A.EBIN_LAYER,
  99. A.E_EXTENSION_GROUP,
  100. A.E_EXTENSION_IDX,
  101. A.CMD_TYPE,
  102. A.ACTIVE_TYPE,
  103. A.CMD_PRIORITY,
  104. A.CMD_STATUS,
  105. A.CMD_LOG,
  106. A.ERR_FLAG,
  107. A.ERR_LOG,
  108. A.CREATE_BY,
  109. B.USER_CODE CreateCode,
  110. B.USER_NAME CreateName,
  111. A.CREATE_TIME,
  112. A.EXECUTE_TIME,
  113. A.FINISH_TIME,
  114. A.UPDATE_BY,
  115. C.USER_CODE UpdateCode,
  116. C.USER_NAME UpdateName,
  117. A.UPDATE_TIME,
  118. A.DATA_VERSION,
  119. A.REMARKS1,
  120. A.REMARKS2,
  121. A.REMARKS3,
  122. A.REMARKS4,
  123. A.REMARKS5
  124. FROM
  125. WCS_CRN_CMD A
  126. LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
  127. LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
  128. WHERE
  129. A.CRN_DEV_NO = '{basWcsDevMd.DevCode}'
  130. AND A.REGION_CODE = '{basWcsDevMd.RegionCode}'
  131. {sqlCondition}
  132. ORDER BY A.CMD_PRIORITY,A.CREATE_TIME
  133. ";
  134. DataTable dt = LeadDbHelperSQLServer.Query(sqlQueryCrnUnFinishedCmd).Tables[0];
  135. if (dt != null && dt.Rows.Count > 0)
  136. {
  137. DataRow item = dt.Rows[0];
  138. WcsCrnCmdMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty<WcsCrnCmdMd>(dt.Columns, item);
  139. return retMd;
  140. }
  141. else
  142. {
  143. return null;
  144. }
  145. }
  146. catch (Exception ex)
  147. {
  148. LogHelper.WriteLog($"加载堆垛机未完成指令数据发生异常!【{ex.Message}】", LogTypeEnum.Err);
  149. return null;
  150. }
  151. }
  152. public WmsBalanceMd GetIntroversionBinBalanceMd(string ExtensionGroupCode, int ExtensionIdx ,string RegionCode)
  153. {
  154. try
  155. {
  156. string sql = $@"
  157. SELECT
  158. *
  159. FROM
  160. VW_WMS_STK_BALANCE
  161. WHERE
  162. BIN_CODE = (
  163. SELECT
  164. BIN_CODE
  165. FROM
  166. BAS_BIN
  167. WHERE
  168. EXTENSION_GROUP = '{ExtensionGroupCode}'
  169. AND EXTENSION_IDX = '{ExtensionIdx}'
  170. AND REGION_CODE = '{RegionCode}'
  171. )
  172. AND BALANCE_STATUS < 99
  173. ";
  174. DataTable dt = LeadDbHelperSQLServer.Query(sql).Tables[0];
  175. if (dt != null && dt.Rows.Count > 0)
  176. {
  177. DataRow item = dt.Rows[0];
  178. WmsBalanceMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty<WmsBalanceMd>(dt.Columns, item);
  179. return retMd;
  180. }
  181. else
  182. {
  183. return null;
  184. }
  185. }
  186. catch (Exception ex)
  187. {
  188. LogHelper.WriteLog($"获取内伸库位库存信息发生异常!【{ex.Message}】", LogTypeEnum.Err);
  189. return null;
  190. }
  191. }
  192. public WmsTskTaskMd GetIntroversionBinMoveWmsTaskMd(WmsBalanceMd balanceMd)
  193. {
  194. try
  195. {
  196. string sqlGetUnfinishWmsTask = $@"
  197. SELECT
  198. TOP 1
  199. A.TASK_ID,
  200. A.NEWID,
  201. A.WAREHOUSE_CODE,
  202. A.WAREHOUSE_NAME,
  203. A.TASK_NO,
  204. A.TRAY_CODE,
  205. A.PALLET_CODE,
  206. A.TRAY_LOADED_TYPE,
  207. A.SLOC_CODE,
  208. A.ELOC_CODE,
  209. A.CLOC_CODE,
  210. A.TASK_TYPE,
  211. A.TASK_MSG,
  212. A.ERR_FLAG,
  213. A.TASK_PRIORITY,
  214. A.TASK_STATUS,
  215. A.SBIN_CODE,
  216. A.EBIN_CODE,
  217. A.CMD_NO,
  218. A.ROUTE_CODE,
  219. A.CREATE_BY,
  220. B.USER_CODE CreateCode,
  221. B.USER_NAME CreateName,
  222. A.CREATE_TIME,
  223. A.UPDATE_BY,
  224. C.USER_CODE UpdateCode,
  225. C.USER_NAME UpdateName,
  226. A.UPDATE_TIME,
  227. A.DATA_VERSION,
  228. A.REMARKS1,
  229. A.REMARKS2,
  230. A.REMARKS3,
  231. A.REMARKS4,
  232. A.REMARKS5
  233. FROM
  234. WMS_TSK_TASK A
  235. LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
  236. LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
  237. WHERE
  238. 1=1
  239. AND A.TASK_TYPE = '{(int)WmsTaskTypeEnum.内伸货位移库任务}'
  240. AND A.REGION_CODE = '{balanceMd.RegionCode}'
  241. AND A.TRAY_CODE = '{balanceMd.TrayCode}'
  242. ";
  243. DataTable dtGetUnfinishWmsTask = LeadDbHelperSQLServer.Query(sqlGetUnfinishWmsTask).Tables[0];
  244. if (dtGetUnfinishWmsTask != null && dtGetUnfinishWmsTask.Rows.Count > 0)
  245. {
  246. DataRow item = dtGetUnfinishWmsTask.Rows[0];
  247. WmsTskTaskMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty<WmsTskTaskMd>(dtGetUnfinishWmsTask.Columns, item);
  248. return retMd;
  249. }
  250. else
  251. {
  252. return null;
  253. }
  254. }
  255. catch (Exception ex)
  256. {
  257. LogHelper.WriteLog($"获取内伸库位WMS移库大任务信息发生异常!【{ex.Message}】", LogTypeEnum.Err);
  258. return null;
  259. }
  260. }
  261. public BasRegionMd GetRegionMd(string regionCode)
  262. {
  263. try
  264. {
  265. string sql = $@"select * from BAS_REGION where REGION_CODE = '{regionCode}'";
  266. DataTable dt = LeadDbHelperSQLServer.Query(sql).Tables[0];
  267. if (dt != null && dt.Rows.Count > 0)
  268. {
  269. DataRow item = dt.Rows[0];
  270. BasRegionMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty<BasRegionMd>(dt.Columns, item);
  271. return retMd;
  272. }
  273. else
  274. {
  275. return null;
  276. }
  277. }
  278. catch (Exception ex)
  279. {
  280. LogHelper.WriteLog($"获取库区信息发生异常!{ex.Message}", LogTypeEnum.Err);
  281. return null;
  282. }
  283. }
  284. public void InsertIntroversionBinMoveWmsTask(BasWcsLocMd RegiongLocNo, BasRegionMd regionMd, WmsBalanceMd balanceMd, BasBinMd EbinMd)
  285. {
  286. try
  287. {
  288. string taskNo = BasCommon_Dal.Instance.GetSysSequence("Task_No");
  289. string sqlInsertWmsTask = $@"
  290. INSERT INTO [dbo].[WMS_TSK_TASK] (
  291. [WAREHOUSE_CODE],
  292. [WAREHOUSE_NAME],
  293. [REGION_CODE],
  294. [TASK_NO],
  295. [TRAY_CODE],
  296. [PALLET_CODE],
  297. [TRAY_LOADED_TYPE],
  298. [SLOC_CODE],
  299. [ELOC_CODE],
  300. [CLOC_CODE],
  301. [TASK_TYPE],
  302. [TASK_MSG],
  303. [ERR_FLAG],
  304. [TASK_PRIORITY],
  305. [TASK_STATUS],
  306. [SBIN_CODE],
  307. [EBIN_CODE],
  308. [CMD_NO],
  309. [ROUTE_CODE],
  310. [CREATE_BY],
  311. [CREATE_TIME],
  312. [UPDATE_BY],
  313. [UPDATE_TIME],
  314. [DATA_VERSION],
  315. [REMARKS1],
  316. [REMARKS2],
  317. [REMARKS3],
  318. [REMARKS4],
  319. [REMARKS5]
  320. )
  321. VALUES
  322. (
  323. '{regionMd.WarehouseCode}',
  324. '{regionMd.WarehouseName}',
  325. '{regionMd.RegionCode}',
  326. '{taskNo}',
  327. '{balanceMd.TrayCode}',
  328. '{balanceMd.PalletCode}',
  329. '{(int)TrayStatusEnum.满盘}',
  330. '{RegiongLocNo.LocCode}',
  331. '{RegiongLocNo.LocCode}',
  332. '{RegiongLocNo.LocCode}',
  333. '{(int)WmsTaskTypeEnum.内伸货位移库任务}',
  334. NULL,
  335. '{(int)WcsCmdErrFlagEnum.正常}',
  336. '{1}',
  337. '{(int)WmsTaskStatusEnum.初始创建}',
  338. '{balanceMd.BinCode}',
  339. '{EbinMd.BinCode}',
  340. NULL,
  341. '',
  342. 1,
  343. getdate(),
  344. 1,
  345. getdate(),
  346. 0,
  347. NULL,
  348. NULL,
  349. NULL,
  350. NULL,
  351. NULL
  352. );
  353. ";
  354. string sqlUpdateBalance = $@"update WMS_STK_BALANCE set BALANCE_STATUS = '66',UPDATE_TIME = getdate() where BALANCE_ID = '{balanceMd.BalanceId}'";
  355. string balanceId = BasCommon_Dal.Instance.GetSysSequence("Balance_Id");
  356. string sqlAddWmsStkBalance = $@"
  357. INSERT INTO [WMS_STK_BALANCE] (
  358. [BALANCE_ID],
  359. [AREA_CODE],
  360. [AREA_NAME],
  361. [WAREHOUSE_CODE],
  362. [WAREHOUSE_NAME],
  363. [REGION_CODE],
  364. [REGION_NAME],
  365. [BIN_CODE],
  366. [BIN_NAME],
  367. [TRAY_ID],
  368. [TRAY_CODE],
  369. [PALLET_CODE],
  370. [INWH_TIME],
  371. [BALANCE_STATUS],
  372. [DESCRIBE],
  373. [CREATE_BY],
  374. [CREATE_TIME],
  375. [UPDATE_BY],
  376. [UPDATE_TIME],
  377. [DATA_VERSION],
  378. [REMARKS1],
  379. [REMARKS2],
  380. [REMARKS3],
  381. [REMARKS4],
  382. [REMARKS5]
  383. )
  384. VALUES
  385. (
  386. '{balanceId}',
  387. '{balanceMd.AreaCode}',
  388. '{balanceMd.AreaName}',
  389. '{balanceMd.WarehouseCode}',
  390. '{balanceMd.WarehouseName}',
  391. '{regionMd.RegionCode}',
  392. '{regionMd.RegionName}',
  393. '{EbinMd.BinCode}',
  394. '{EbinMd.BinName}',
  395. '{balanceMd.TrayId}',
  396. '{balanceMd.TrayCode}',
  397. '{balanceMd.PalletCode}',
  398. getdate(),
  399. '11',
  400. '{balanceMd.Describe}',
  401. '{balanceMd.CreateBy}',
  402. getdate(),
  403. '{balanceMd.CreateBy}',
  404. getdate(),
  405. 0,
  406. NULL,
  407. NULL,
  408. NULL,
  409. NULL,
  410. NULL
  411. );
  412. ";
  413. List<string> sqlList = new List<string>();
  414. sqlList.Add(sqlInsertWmsTask);
  415. sqlList.Add(sqlUpdateBalance);
  416. sqlList.Add(sqlAddWmsStkBalance);
  417. LeadDbHelperSQLServer.ExecuteSql(sqlUpdateBalance);
  418. }
  419. catch (Exception ex)
  420. {
  421. LogHelper.WriteLog($"插入内伸货位WMS移库大任务数据发生异常!【{ex.Message}】", LogTypeEnum.Err);
  422. }
  423. }
  424. #region 演示模式
  425. public void InsertTestCrnCmd(string dev_no)
  426. {
  427. try
  428. {
  429. string cmdNo = BasCommon_Dal.Instance.GetSysSequence("Cmd_No");
  430. string taskNo = BasCommon_Dal.Instance.GetSysSequence("Task_No");
  431. string trayCode = BasCommon_Dal.Instance.GetSysSequence("Tray_Code");
  432. string sqlTestBin = $@"
  433. SELECT
  434. A.*, B.USER_CODE CreateCode,
  435. B.USER_NAME CreateName,
  436. C.USER_CODE UpdateCode,
  437. C.USER_NAME UpdateName
  438. FROM
  439. BAS_BIN A
  440. LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
  441. LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
  442. WHERE
  443. A.USED_FLAG = 1
  444. AND A.DEL_FLAG = 0
  445. AND A.BIN_TYPE = 3
  446. AND A.REGION_CODE = 'YCLK_Region'
  447. ";
  448. DataTable dt = LeadDbHelperSQLServer.Query(sqlTestBin).Tables[0];
  449. List<BasBinMd> binLst = new List<BasBinMd>();
  450. if (dt != null && dt.Rows.Count > 0)
  451. {
  452. foreach (DataRow item in dt.Rows)
  453. {
  454. BasBinMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty<BasBinMd>(dt.Columns, item);
  455. binLst.Add(retMd);
  456. }
  457. }
  458. string sqlTestBin1 = $@"
  459. SELECT
  460. Top 1 A.*, B.USER_CODE CreateCode,
  461. B.USER_NAME CreateName,
  462. C.USER_CODE UpdateCode,
  463. C.USER_NAME UpdateName
  464. FROM
  465. BAS_BIN A
  466. LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
  467. LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
  468. WHERE
  469. A.BIN_TYPE = 3
  470. AND A.REGION_CODE = 'YCLK_Region'
  471. AND A.BIN_CODE = '{AppConfigHelper.Get("CrnAutoTestLockedBin")}'
  472. ";
  473. DataTable dt1 = LeadDbHelperSQLServer.Query(sqlTestBin1).Tables[0];
  474. DataRow item1 = dt1.Rows[0];
  475. BasBinMd randomSBin = ColumnToClassPropertyHelper.ColumnToClassProperty<BasBinMd>(dt1.Columns, item1);
  476. BasBinMd randomSBin1 = binLst.FirstOrDefault(x => x.BinCode == AppConfigHelper.Get("CrnAutoTestLockedBin"));
  477. if (randomSBin1 != null)
  478. {
  479. binLst.Remove(randomSBin1);
  480. }
  481. Random r = new Random();
  482. BasBinMd randomEBin = binLst[r.Next(0, binLst.Count)];
  483. string sql = $@"
  484. INSERT INTO [dbo].[WCS_CRN_CMD] (
  485. [TASK_NO],
  486. [CMD_NO],
  487. [TRAY_CODE],
  488. [PALLET_CODE],
  489. [TRAY_STATUS],
  490. [CRN_DEV_NO],
  491. [CRN_FORK_DEV_NO],
  492. [SBIN_NO],
  493. [SBIN_ROW],
  494. [SBIN_COL],
  495. [SBIN_LAYER],
  496. [S_EXTENSION_GROUP],
  497. [S_EXTENSION_IDX],
  498. [EBIN_NO],
  499. [EBIN_ROW],
  500. [EBIN_COL],
  501. [EBIN_LAYER],
  502. [E_EXTENSION_GROUP],
  503. [E_EXTENSION_IDX],
  504. [CMD_TYPE],
  505. [ACTIVE_TYPE],
  506. [CMD_PRIORITY],
  507. [CMD_STATUS],
  508. [CMD_LOG],
  509. [ERR_FLAG],
  510. [ERR_LOG],
  511. [CREATE_BY],
  512. [CREATE_TIME],
  513. [UPDATE_BY],
  514. [UPDATE_TIME],
  515. [DATA_VERSION],
  516. [REMARKS1],
  517. [REMARKS2],
  518. [REMARKS3],
  519. [REMARKS4],
  520. [REMARKS5]
  521. )
  522. VALUES
  523. (
  524. '{taskNo}',
  525. '{cmdNo}',
  526. '{trayCode}',
  527. '123456',
  528. '{1}',
  529. '{dev_no}',
  530. '{dev_no}',
  531. '{randomSBin.BinCode}',
  532. '{randomSBin.BinRow}',
  533. '{randomSBin.BinColumn}',
  534. '{randomSBin.BinLayer}',
  535. '{randomSBin.EXTENSION_GROUP}',
  536. '{randomSBin.EXTENSION_IDX}',
  537. '{randomEBin.BinCode}',
  538. '{randomEBin.BinRow}',
  539. '{randomEBin.BinColumn}',
  540. '{randomEBin.BinLayer}',
  541. '{randomEBin.EXTENSION_GROUP}',
  542. '{randomEBin.EXTENSION_IDX}',
  543. '{CrnCmdTypeEnum.IN}',
  544. '{(int)CrnActiveTypeEnum.取放货}',
  545. 100,
  546. '{(int)CrnCmdStatusEnum.初始创建}',
  547. NULL,
  548. '{(int)WcsCmdErrFlagEnum.正常}',
  549. NULL,
  550. '{1}',
  551. getdate(),
  552. '{1}',
  553. getdate(),
  554. 0,
  555. 'AutoTest',
  556. NULL,
  557. NULL,
  558. NULL,
  559. NULL
  560. );
  561. ";
  562. LeadDbHelperSQLServer.ExecuteSql(sql);
  563. string sqlUpdateBin = $@"update BAS_BIN set USED_FLAG = 1 where BIN_CODE = '{randomSBin.BinCode}'";
  564. LeadDbHelperSQLServer.ExecuteSql(sqlUpdateBin);
  565. }
  566. catch (Exception ex)
  567. {
  568. LogHelper.WriteLog($"插入堆垛机演示指令数据发生异常!【{ex.Message}】", LogTypeEnum.Err);
  569. }
  570. }
  571. public void DeleteTestCrnCmd()
  572. {
  573. try
  574. {
  575. string sqlQueryCrnUnFinishedCmd = $@"
  576. SELECT
  577. TOP 1
  578. A.CRN_CMD_ID,
  579. A.NEWID,
  580. A.TASK_NO,
  581. A.CMD_NO,
  582. A.TRAY_CODE,
  583. A.PALLET_CODE,
  584. A.TRAY_STATUS,
  585. A.CRN_DEV_NO,
  586. A.CRN_FORK_DEV_NO,
  587. A.SBIN_NO,
  588. A.SBIN_ROW,
  589. A.SBIN_COL,
  590. A.SBIN_LAYER,
  591. A.S_EXTENSION_GROUP,
  592. A.S_EXTENSION_IDX,
  593. A.EBIN_NO,
  594. A.EBIN_ROW,
  595. A.EBIN_COL,
  596. A.EBIN_LAYER,
  597. A.E_EXTENSION_GROUP,
  598. A.E_EXTENSION_IDX,
  599. A.CMD_TYPE,
  600. A.ACTIVE_TYPE,
  601. A.CMD_PRIORITY,
  602. A.CMD_STATUS,
  603. A.CMD_LOG,
  604. A.ERR_FLAG,
  605. A.ERR_LOG,
  606. A.CREATE_BY,
  607. B.USER_CODE CreateCode,
  608. B.USER_NAME CreateName,
  609. A.CREATE_TIME,
  610. A.EXECUTE_TIME,
  611. A.FINISH_TIME,
  612. A.UPDATE_BY,
  613. C.USER_CODE UpdateCode,
  614. C.USER_NAME UpdateName,
  615. A.UPDATE_TIME,
  616. A.DATA_VERSION,
  617. A.REMARKS1,
  618. A.REMARKS2,
  619. A.REMARKS3,
  620. A.REMARKS4,
  621. A.REMARKS5
  622. FROM
  623. WCS_CRN_CMD A
  624. LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
  625. LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
  626. WHERE A.CRN_DEV_NO = 'Crn001'
  627. AND A.REMARKS1 = 'AutoTest'
  628. ";
  629. DataTable dt = LeadDbHelperSQLServer.Query(sqlQueryCrnUnFinishedCmd).Tables[0];
  630. if (dt != null && dt.Rows.Count > 0)
  631. {
  632. DataRow item = dt.Rows[0];
  633. WcsCrnCmdMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty<WcsCrnCmdMd>(dt.Columns, item);
  634. if (retMd.CmdStatus == CrnCmdStatusEnum.初始创建)
  635. {
  636. string sqlUpdateBin = $@"update BAS_BIN set USED_FLAG = 1 where BIN_CODE = '{retMd.SbinNo}'";
  637. LeadDbHelperSQLServer.ExecuteSql(sqlUpdateBin);
  638. }
  639. else
  640. {
  641. string sqlUpdateBin = $@"update BAS_BIN set USED_FLAG = 1 where BIN_CODE = '{retMd.EbinNo}'";
  642. LeadDbHelperSQLServer.ExecuteSql(sqlUpdateBin);
  643. }
  644. string sqlDeleteCrnCmd = $@"delete from WCS_CRN_CMD where CRN_CMD_ID = '{retMd.CrnCmdId}' AND REMARKS1 = 'AutoTest'";
  645. LeadDbHelperSQLServer.ExecuteSql(sqlDeleteCrnCmd);
  646. }
  647. }
  648. catch (Exception ex)
  649. {
  650. LogHelper.WriteLog($"插入堆垛机演示指令数据发生异常!【{ex.Message}】", LogTypeEnum.Err);
  651. }
  652. }
  653. #endregion
  654. /// <summary>
  655. /// 更新堆垛机指令状态
  656. /// </summary>
  657. /// <param name="wcsCrnCmdMd">堆垛机指令对象</param>
  658. public void UpdateCrnCmdStatus(WcsCrnCmdMd wcsCrnCmdMd)
  659. {
  660. try
  661. {
  662. string sqlUpdateCrnCmdStatus = string.Empty;
  663. string sqlDeleteCrnCmd = string.Empty;
  664. if (wcsCrnCmdMd.CmdStatus == CrnCmdStatusEnum.已下发PLC)
  665. {
  666. sqlUpdateCrnCmdStatus = $@"
  667. UPDATE WCS_CRN_CMD
  668. SET CMD_STATUS = '{(int)wcsCrnCmdMd.CmdStatus}',
  669. UPDATE_BY = '{wcsCrnCmdMd.UpdateBy}',
  670. UPDATE_TIME = GETDATE(),
  671. EXECUTE_TIME = GETDATE()
  672. WHERE
  673. CRN_CMD_ID = '{wcsCrnCmdMd.CrnCmdId}'
  674. ";
  675. if (AppConfigHelper.Get("CrnAutoTest") == "1")
  676. {
  677. string sqlUpdateBin = $@"update BAS_BIN set USED_FLAG = 0 where BIN_CODE = '{wcsCrnCmdMd.EbinNo}'";
  678. LeadDbHelperSQLServer.ExecuteSql(sqlUpdateBin);
  679. AppConfigHelper.Update("CrnAutoTestLockedBin", wcsCrnCmdMd.EbinNo);
  680. }
  681. }
  682. else if (wcsCrnCmdMd.CmdStatus == CrnCmdStatusEnum.完成)
  683. {
  684. sqlUpdateCrnCmdStatus = $@"
  685. UPDATE WCS_CRN_CMD
  686. SET CMD_STATUS = '{(int)wcsCrnCmdMd.CmdStatus}',
  687. UPDATE_BY = '{wcsCrnCmdMd.UpdateBy}',
  688. UPDATE_TIME = GETDATE(),
  689. FINISH_TIME = GETDATE()
  690. WHERE
  691. CRN_CMD_ID = '{wcsCrnCmdMd.CrnCmdId}'
  692. ";
  693. sqlDeleteCrnCmd = $@"delete from WCS_CRN_CMD where CRN_CMD_ID = '{wcsCrnCmdMd.CrnCmdId}' AND REMARKS1 = 'AutoTest'";
  694. }
  695. else
  696. {
  697. sqlUpdateCrnCmdStatus = $@"
  698. UPDATE WCS_CRN_CMD
  699. SET CMD_STATUS = '{(int)wcsCrnCmdMd.CmdStatus}',
  700. UPDATE_BY = '{wcsCrnCmdMd.UpdateBy}',
  701. UPDATE_TIME = GETDATE()
  702. WHERE
  703. CRN_CMD_ID = '{wcsCrnCmdMd.CrnCmdId}'
  704. ";
  705. }
  706. LeadDbHelperSQLServer.ExecuteSql(sqlUpdateCrnCmdStatus);
  707. if (AppConfigHelper.Get("CrnAutoTest") == "1")
  708. {
  709. LeadDbHelperSQLServer.ExecuteSql(sqlDeleteCrnCmd);
  710. }
  711. }
  712. catch (Exception ex)
  713. {
  714. LogHelper.WriteLog($"更新堆垛机指令状态发生异常!【{ex.Message}】", LogTypeEnum.Err);
  715. }
  716. }
  717. public BasBinMd GetBinMdOfCode(string binCode)
  718. {
  719. try
  720. {
  721. string sqlGetBinMdOfCodeAndType = $@"
  722. SELECT
  723. TOP 1 A.*, B.USER_CODE CreateCode,
  724. B.USER_NAME CreateName,
  725. C.USER_CODE UpdateCode,
  726. C.USER_NAME UpdateName
  727. FROM
  728. BAS_BIN A
  729. LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
  730. LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
  731. WHERE
  732. A.USED_FLAG = 1
  733. AND A.DEL_FLAG = 0
  734. AND A.BIN_CODE = '{binCode}'
  735. ";
  736. DataTable dt = LeadDbHelperSQLServer.Query(sqlGetBinMdOfCodeAndType).Tables[0];
  737. if (dt != null && dt.Rows.Count > 0)
  738. {
  739. DataRow item = dt.Rows[0];
  740. BasBinMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty<BasBinMd>(dt.Columns, item);
  741. return retMd;
  742. }
  743. else
  744. {
  745. return null;
  746. }
  747. }
  748. catch (Exception ex)
  749. {
  750. LogHelper.WriteLog($"获取库位号:【{binCode}】的详细库位信息发生异常!【{ex.Message}】", LogTypeEnum.Err);
  751. return null;
  752. }
  753. }
  754. public List<WcsCrnCmdMd> LoadCurrentWorkingCrnCmd()
  755. {
  756. try
  757. {
  758. string sqlLoadCurrentWorkingCrnCmd = $@"
  759. SELECT
  760. TOP 1
  761. A.CRN_CMD_ID,
  762. A.NEWID,
  763. A.TASK_NO,
  764. A.CMD_NO,
  765. A.TRAY_CODE,
  766. A.PALLET_CODE,
  767. A.TRAY_STATUS,
  768. A.CRN_DEV_NO,
  769. A.CRN_FORK_DEV_NO,
  770. A.SBIN_NO,
  771. A.SBIN_ROW,
  772. A.SBIN_COL,
  773. A.SBIN_LAYER,
  774. A.S_EXTENSION_GROUP,
  775. A.S_EXTENSION_IDX,
  776. A.EBIN_NO,
  777. A.EBIN_ROW,
  778. A.EBIN_COL,
  779. A.EBIN_LAYER,
  780. A.E_EXTENSION_GROUP,
  781. A.E_EXTENSION_IDX,
  782. A.CMD_TYPE,
  783. A.ACTIVE_TYPE,
  784. A.CMD_PRIORITY,
  785. A.CMD_STATUS,
  786. A.CMD_LOG,
  787. A.ERR_FLAG,
  788. A.ERR_LOG,
  789. A.CREATE_BY,
  790. B.USER_CODE CreateCode,
  791. B.USER_NAME CreateName,
  792. A.CREATE_TIME,
  793. A.EXECUTE_TIME,
  794. A.FINISH_TIME,
  795. A.UPDATE_BY,
  796. C.USER_CODE UpdateCode,
  797. C.USER_NAME UpdateName,
  798. A.UPDATE_TIME,
  799. A.DATA_VERSION,
  800. A.REMARKS1,
  801. A.REMARKS2,
  802. A.REMARKS3,
  803. A.REMARKS4,
  804. A.REMARKS5
  805. FROM
  806. WCS_CRN_CMD A
  807. LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
  808. LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
  809. WHERE A.CMD_STATUS > '{(int)CrnCmdStatusEnum.初始创建}' AND A.CMD_STATUS < '{CrnCmdStatusEnum.完成}'
  810. ";
  811. DataTable dt = LeadDbHelperSQLServer.Query(sqlLoadCurrentWorkingCrnCmd).Tables[0];
  812. if (dt != null && dt.Rows.Count > 0)
  813. {
  814. List<WcsCrnCmdMd> retLst = new List<WcsCrnCmdMd>();
  815. foreach (DataRow item in dt.Rows)
  816. {
  817. WcsCrnCmdMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty<WcsCrnCmdMd>(dt.Columns, item);
  818. retLst.Add(retMd);
  819. }
  820. return retLst;
  821. }
  822. else
  823. {
  824. return null;
  825. }
  826. }
  827. catch (Exception ex)
  828. {
  829. LogHelper.WriteLog($"加载堆垛机当前作业指令数据发生异常!【{ex.Message}】", LogTypeEnum.Err);
  830. return null;
  831. }
  832. }
  833. public List<WcsCrnCmdMd> LoadAllCrnCmd(WcsCrnCmdSearchMd searchMd)
  834. {
  835. try
  836. {
  837. string sqlQuery = string.Empty;
  838. if (!string.IsNullOrEmpty(searchMd.TaskNo))
  839. {
  840. sqlQuery += $" AND TASK_NO = '{searchMd.TaskNo}'";
  841. }
  842. if (!string.IsNullOrEmpty(searchMd.CmdNo))
  843. {
  844. sqlQuery += $" AND CMD_NO = '{searchMd.CmdNo}'";
  845. }
  846. if (!string.IsNullOrEmpty(searchMd.PalletCode))
  847. {
  848. sqlQuery += $" AND PALLET_CODE like '%{searchMd.PalletCode}%'";
  849. }
  850. if (!string.IsNullOrEmpty(searchMd.DevMsg))
  851. {
  852. sqlQuery += $" AND CRN_DEV_NO = '{searchMd.DevMsg}'";
  853. }
  854. if (!string.IsNullOrEmpty(searchMd.SbinCode))
  855. {
  856. sqlQuery += $" AND SBIN_NO like '%{searchMd.SbinCode}%'";
  857. }
  858. if (!string.IsNullOrEmpty(searchMd.EbinCode))
  859. {
  860. sqlQuery += $" AND EBIN_NO like '%{searchMd.EbinCode}%'";
  861. }
  862. if (!string.IsNullOrEmpty(searchMd.CmdType))
  863. {
  864. sqlQuery += $" AND CMD_TYPE = '{searchMd.CmdType}'";
  865. }
  866. if (!string.IsNullOrEmpty(searchMd.CmdStatus))
  867. {
  868. sqlQuery += $" AND CMD_STATUS = '{searchMd.CmdStatus}'";
  869. }
  870. if (!string.IsNullOrEmpty(searchMd.TrayLoadedType))
  871. {
  872. sqlQuery += $" AND TRAY_STATUS = '{searchMd.TrayLoadedType}'";
  873. }
  874. if (!string.IsNullOrEmpty(searchMd.StartExcuteTime))
  875. {
  876. sqlQuery += $" AND EXECUTE_TIME >= '{searchMd.StartExcuteTime}'";
  877. }
  878. if (!string.IsNullOrEmpty(searchMd.EndExcuteTime))
  879. {
  880. sqlQuery += $" AND EXECUTE_TIME <= '{searchMd.EndExcuteTime}'";
  881. }
  882. if (!string.IsNullOrEmpty(searchMd.StartFinishTime))
  883. {
  884. sqlQuery += $" AND FINISH_TIME >= '{searchMd.StartFinishTime}'";
  885. }
  886. if (!string.IsNullOrEmpty(searchMd.EndFinishTime))
  887. {
  888. sqlQuery += $" AND FINISH_TIME <= '{searchMd.EndFinishTime}'";
  889. }
  890. int pageStartIndex = (searchMd.PageNum - 1) * searchMd.EveryPageQty;
  891. int pageEndIndex = searchMd.PageNum * searchMd.EveryPageQty;
  892. string sql = $@"select * from VW_ZBK_WCS_CRN_CMD where 1 = 1 {sqlQuery}
  893. ORDER BY A.UPDATE_TIME DESC,A.CREATE_TIME DESC
  894. OFFSET {pageStartIndex} ROWS
  895. FETCH NEXT {searchMd.EveryPageQty} ROWS ONLY";
  896. DataTable dt = LeadDbHelperSQLServer.Query(sql).Tables[0];
  897. if (dt != null && dt.Rows.Count > 0)
  898. {
  899. List<WcsCrnCmdMd> retLst = new List<WcsCrnCmdMd>();
  900. foreach (DataRow item in dt.Rows)
  901. {
  902. WcsCrnCmdMd retMd = ColumnToClassPropertyHelper.ColumnToClassProperty<WcsCrnCmdMd>(dt.Columns, item);
  903. retLst.Add(retMd);
  904. }
  905. return retLst;
  906. }
  907. else
  908. {
  909. return null;
  910. }
  911. }
  912. catch (Exception ex)
  913. {
  914. LogHelper.WriteLog($"加载堆垛机所有作业指令数据发生异常!【{ex.Message}】", LogTypeEnum.Err);
  915. return null;
  916. }
  917. }
  918. }
  919. }