From 2804585b14a62cc1fdec876b65267a4db8bc8995 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 14 一月 2025 10:55:47 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1237 ++++++++++++++++++++++++++++------------------------------
 1 files changed, 600 insertions(+), 637 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index bbf300e..1514ae1 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -43,9 +43,9 @@
     @Autowired
     private WrkMastService wrkMastService;
     @Autowired
-    private LocMastService locMastService;
+    private WrkMastLogMapper wrkMastLogMapper;
     @Autowired
-    private StaDescService staDescService;
+    private LocMastService locMastService;
     @Autowired
     private BasDevpService basDevpService;
     @Autowired
@@ -54,6 +54,8 @@
     private BasLiftErrLogService basLiftErrLogService;
     @Autowired
     private BasShuttleErrService basShuttleErrService;
+    @Autowired
+    private BasLiftErrService basLiftErrService;
     @Autowired
     private CommonService commonService;
     @Autowired
@@ -64,8 +66,6 @@
     private ShuttleDispatchUtils shuttleDispatchUtils;
     @Autowired
     private RedisUtil redisUtil;
-    @Autowired
-    private WrkMastLogMapper wrkMastLogMapper;
     @Autowired
     private BasLiftOptService basLiftOptService;
     @Autowired
@@ -523,7 +523,7 @@
      */
     public synchronized void initRealtimeBasMap() {
         try {
-            for (int i = 1; i <= 10; i++) {//鎬诲叡鍥涘眰妤�
+            for (int i = 1; i <= 4; i++) {//鎬诲叡鍥涘眰妤�
                 Object data = redisUtil.get(RedisKeyType.MAP.key + i);
                 if (data == null) {//redis鍦板浘鏁版嵁涓虹┖锛屼粠鏁版嵁搴撲腑鑾峰彇
                     BasMap basMap = basMapService.selectLatestMap(i);
@@ -819,116 +819,93 @@
 //        return true;
 //    }
 
-//    /**
-//     * 鍥涘悜绌挎杞︿换鍔″畬鎴�
-//     */
-//    public synchronized void shuttleFinished() {
-//        try {
-//            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-//                //鑾峰彇鍥涘悜绌挎杞︿俊鎭�
-//                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
-//                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-//                if (shuttleProtocol == null) {
-//                    continue;
-//                }
-//
-//                //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭銆佸皬杞﹀浜庣┖闂茬姸鎬�
-//                if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id  //浠诲姟瀹屾垚绛夊緟纭
-//                        && shuttleProtocol.getTaskNo() != 0
-//                        && shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id
-//                ) {
-//                    //灏嗕换鍔℃。鏍囪涓哄畬鎴�
-//                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo());
-//                    if (wrkMast != null) {
+    /**
+     * 鍥涘悜绌挎杞︿换鍔″畬鎴�
+     */
+    public synchronized void shuttleFinished() {
+        try {
+            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+                //鑾峰彇鍥涘悜绌挎杞︿俊鎭�
+                ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+                ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+                if (shuttleProtocol == null) {
+                    continue;
+                }
+
+                //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭銆佸皬杞﹀浜庣┖闂茬姸鎬�
+                if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id  //浠诲姟瀹屾垚绛夊緟纭
+                        && shuttleProtocol.getTaskNo() != 0
+                ) {
+                    //灏嗕换鍔℃。鏍囪涓哄畬鎴�
+                    WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo());
+                    if (wrkMast != null) {
+                        if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE.sts) {
+                            //302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE.sts) {
+                            //310.灏忚溅绉诲姩涓� ==> 311.灏忚溅绉诲姩瀹屾垚
+                            wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) {
+                            //204.灏忚溅鍏呯數涓� ==> 205.灏忚溅鍏呯數瀹屾垚
+                            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        }
 //                        switch (wrkMast.getWrkSts().intValue()) {
-//                            case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
-//                                wrkMast.setWrkSts(9L);
-//                                shuttleProtocol.setTaskNo(0);
-//                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-//                                    //閲婃斁灏忚溅浠ょ墝
-//                                    shuttleProtocol.setToken(0);
-//                                }
+////                            case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
+////                                wrkMast.setWrkSts(9L);
+////                                shuttleProtocol.setTaskNo(0);
+////                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
+////                                    //閲婃斁灏忚溅浠ょ墝
+////                                    shuttleProtocol.setToken(0);
+////                                }
+////                                break;
+////                            case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚
+////                                wrkMast.setWrkSts(23L);
+////                                shuttleProtocol.setTaskNo(0);
+////                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
+////                                    //閲婃斁灏忚溅浠ょ墝
+////                                    shuttleProtocol.setToken(0);
+////                                }
+////                                break;
+//                            case 302:
+//                                wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);
 //                                break;
-//                            case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚
-//                                wrkMast.setWrkSts(23L);
-//                                shuttleProtocol.setTaskNo(0);
-//                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-//                                    //閲婃斁灏忚溅浠ょ墝
-//                                    shuttleProtocol.setToken(0);
-//                                }
-//                                break;
-//                            case 102://102.灏忚溅绉诲姩鑷崇珯鐐� ==> 103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
-//                                wrkMast.setWrkSts(103L);
-//                                break;
-//                            case 104://104.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴�
-//                                wrkMast.setWrkSts(105L);
-//                                shuttleProtocol.setTaskNo(0);//娓呯悊宸ヤ綔鍙�
-//                                break;
-//                            case 108://108.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
-//                                wrkMast.setWrkSts(109L);
-//                                break;
-//                            case 110://110.灏忚溅绉诲姩涓� ==> 111.灏忚溅绉诲姩瀹屾垚
-//                                wrkMast.setWrkSts(111L);
-//                                shuttleProtocol.setTaskNo(0);
-//                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-//                                    //閲婃斁灏忚溅浠ょ墝
-//                                    shuttleProtocol.setToken(0);
-//                                }
+//                            case WrkStsType.MOVE_SHUTTLE.sts:
+//                                wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
+//                                shuttleThread.setSyncTaskNo(0);
 //                                break;
 //                            default:
 //                        }
-//
-//                        if (wrkMastMapper.updateById(wrkMast) > 0) {
-//                            if (wrkMast.getWrkSts() == 111) {
-//                                // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-//                                if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) {
-//                                    log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo());
-//                                }
-//                                // 鍒犻櫎宸ヤ綔涓绘。
-//                                if (!wrkMastService.deleteById(wrkMast)) {
-//                                    log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo());
-//                                }
-//                            }
-//
-//                            //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
-//                            shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
-//                            //婧愬簱浣嶆竻闆�
-//                            shuttleProtocol.setSourceLocNo(null);
-//                            //鐩爣搴撲綅娓呴浂
-//                            shuttleProtocol.setLocNo(null);
-//                            //浠诲姟鎸囦护娓呴浂
-//                            shuttleProtocol.setAssignCommand(null);
-//                            News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
-//                        } else {
-//                            News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
-//                        }
-//                    } else {
-//                        ShuttleAssignCommand assignCommand = shuttleProtocol.getAssignCommand();
-//                        if (!assignCommand.getAuto()) {
-//                            //鎵嬪姩妯″紡
-//                            //宸ヤ綔鍙锋竻闆�
-//                            shuttleProtocol.setTaskNo(0);
-//                            //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
-//                            shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
-//                            //婧愬簱浣嶆竻闆�
-//                            shuttleProtocol.setSourceLocNo(null);
-//                            //鐩爣搴撲綅娓呴浂
-//                            shuttleProtocol.setLocNo(null);
-//                            //浠诲姟鎸囦护娓呴浂
-//                            shuttleProtocol.setAssignCommand(null);
-//                            //娓呴浂浠ょ墝
-//                            shuttleProtocol.setToken(0);
-//                            News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
-//                        }
-//                    }
-//
-//                }
-//
-//            }
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
+
+                        if (wrkMastService.updateById(wrkMast)) {
+                            //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
+                            shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+                            News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
+                        } else {
+                            News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
+                        }
+                    } else {
+                        Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo());
+                        if(object != null){
+                            ShuttleAssignCommand assignCommand = JSON.parseObject(object.toString(), ShuttleAssignCommand.class);
+                            if (!assignCommand.getAuto()) {
+                                //鎵嬪姩妯″紡
+                                //宸ヤ綔鍙锋竻闆�
+                                shuttleThread.setTaskNo(0);
+                                //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
+                                shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+                                News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
+                            }
+                        }
+                    }
+                }
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
 //    /**
 //     * 鎻愬崌鏈轰换鍔�
@@ -1253,37 +1230,27 @@
 //        return true;
 //    }
 //
-//    /**
-//     * 鎻愬崌鏈轰换鍔″畬鎴�
-//     */
-//    public synchronized void liftFinished() {
-//        try {
-//            for (LiftSlave liftSlave : slaveProperties.getLift()) {
-//                //鑾峰彇鎻愬崌鏈轰俊鎭�
-//                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
-//                LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-//                if (liftProtocol == null) {
-//                    continue;
-//                }
-//
-//                //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂�
-//                if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id
-//                        && liftProtocol.getTaskNo() != 0
-//                        && !liftProtocol.getBusy()
-//                ) {
-//                    int taskNo = liftProtocol.getTaskNo().intValue();
-//                    if (taskNo >= 20000 && taskNo <= 30000) {
-//                        //鎻愬崌鏈鸿澶囧伐浣滃彿锛岄渶瑕佹煡璇㈠搴斾换鍔″彿
-//                        BasLiftOpt basLiftOpt = basLiftOptService.selectByDeviceWrk(liftProtocol.getTaskNo().toString(), liftSlave.getId());
-//                        if (basLiftOpt != null) {
-//                            taskNo = basLiftOpt.getWrkNo();
-//                        }
-//                    }
-//
-//                    //灏嗕换鍔℃。鏍囪涓哄畬鎴�
-//                    WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(taskNo);
-//                    if (wrkMast != null) {
-//                        switch (wrkMast.getWrkSts().intValue()) {
+    /**
+     * 璐у弶鎻愬崌鏈轰换鍔″畬鎴�
+     */
+    public synchronized void forkLiftFinished() {
+        try {
+            for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
+                //鑾峰彇鎻愬崌鏈轰俊鎭�
+                ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId());
+                ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
+                if (forkLiftProtocol == null) {
+                    continue;
+                }
+
+                //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂�
+                if (forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.WAITING.id
+                        && forkLiftProtocol.getWrkNo() != 0
+                ) {
+                    //灏嗕换鍔℃。鏍囪涓哄畬鎴�
+                    WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo());
+                    if (wrkMast != null) {
+                        switch (wrkMast.getWrkSts().intValue()) {
 //                            case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴�
 //                                wrkMast.setWrkSts(4L);
 //                                wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
@@ -1305,263 +1272,186 @@
 //                                        wrkMast.setModiTime(new Date());
 //                                    }
 //                                }
-//
-//                                if (liftProtocol.getToken().equals(wrkMast.getWrkNo())) {
-//                                    //閲婃斁鎻愬崌鏈轰护鐗�
-//                                    liftProtocol.setToken(0);
-//                                }
-//
 //                                break;
-//                            case 106://106.鎻愬崌鏈烘惉杩愪腑 ==> 107.鎻愬崌鏈烘惉杩愬畬鎴�
-//                                wrkMast.setWrkSts(107L);
-//                                break;
-//                            default:
-//                        }
-//
-//                        if (wrkMastMapper.updateById(wrkMast) > 0) {
-//                            //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵��
-//                            liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
-//                            //浠诲姟鎸囦护娓呴浂
-//                            liftProtocol.setAssignCommand(null);
-//                            News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
-//                        } else {
-//                            News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
-//                        }
-//                    } else {
-//                        LiftAssignCommand assignCommand = liftProtocol.getAssignCommand();
-//                        if (assignCommand != null) {
-//                            if (!assignCommand.getAuto()) {
-//                                //鎵嬪姩鎿嶄綔
-//                                //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵��
-//                                liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
-//                                //浠诲姟鎸囦护娓呴浂
-//                                liftProtocol.setAssignCommand(null);
-//                                News.info("鎻愬崌鏈哄凡纭鎵嬪姩鎿嶄綔銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
-//                            }
-//                        }
-//                    }
-//                }
-//            }
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
+                            case 306://306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴�
+                                wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts);
+                                //璐у弶鎻愬崌鏈洪渶瑕佽烦杩囪縼鍑烘彁鍗囨満娴佺▼
+                                wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);
+                                break;
+                            default:
+                        }
 
-//    /**
-//     * 寮傚父淇℃伅璁板綍
-//     */
-//    public void recErr() {
-//        try {
-//            this.recShuttleErr();
-//            this.recLiftErr();
-//        } catch (Exception e) {
-//            News.error("recErr fail", e);
-//        }
-//    }
+                        wrkMast.setModiTime(new Date());
+                        if (wrkMastService.updateById(wrkMast)) {
+                            forkLiftThread.reset();
+                            News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo());
+                        } else {
+                            News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo());
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
-//    /**
-//     * 鍥涘悜绌挎杞﹀紓甯镐俊鎭褰�
-//     */
-//    private void recShuttleErr() {
-//        Date now = new Date();
-//        for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
-//            // 鑾峰彇鍥涘悜绌挎杞︿俊鎭�
-//            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
-//            if (shuttleThread == null) {
-//                continue;
-//            }
-//            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-//            if (shuttleProtocol == null) {
-//                continue;
-//            }
-//
-//            if (shuttleProtocol.getTaskNo() != 0) {
-//                //鏈変换鍔�
-//                BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo());
-//                // 鏈夊紓甯�
-//                if (latest == null) {
-//                    if (shuttleProtocol.getErrState() != null && shuttleProtocol.getErrState() == 1) {
-//                        WrkMast wrkMast = wrkMastMapper.selectById(shuttleProtocol.getTaskNo());
-//                        if (wrkMast == null) {
-//                            continue;
-//                        }
-//                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode());
-//                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
-//                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
-//                                null,    // 缂栧彿
-//                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
-//                                now,    // 鍙戠敓鏃堕棿
-//                                null,    // 缁撴潫鏃堕棿
-//                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
-//                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
-//                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
-//                                null,    // plc
-//                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
-//                                wrkMast.getStaNo(),    // 鐩爣绔�
-//                                wrkMast.getSourceStaNo(),    // 婧愮珯
-//                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
-//                                wrkMast.getBarcode(),    // 鏉$爜
-//                                shuttleProtocol.getErrCode(),    // 寮傚父鐮�
-//                                errName,    // 寮傚父
-//                                1,    // 寮傚父鎯呭喌
-//                                now,    // 娣诲姞鏃堕棿
-//                                null,    // 娣诲姞浜哄憳
-//                                now,    // 淇敼鏃堕棿
-//                                null,    // 淇敼浜哄憳
-//                                "浠诲姟涓紓甯�",    // 澶囨敞
-//                                JSON.toJSONString(shuttleProtocol)    // 绯荤粺鐘舵�佹暟鎹�
-//                        );
-//                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
-//                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
-//                        }
-//                    }
-//                } else {
-//                    // 寮傚父淇
-//                    if (shuttleProtocol.getErrState() == null || shuttleProtocol.getErrState() == 0) {
-//                        latest.setEndTime(now);
-//                        latest.setUpdateTime(now);
-//                        latest.setStatus(2);
-//                        if (!basShuttleErrLogService.updateById(latest)) {
-//                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
-//                        }
-//                    }
-//                }
-//            }else {
-////                //鏃犱换鍔�
-////                BasShuttleErrLog latest = basShuttleErrLogService.findLatest(shuttleSlave.getId());
-////                // 鏈夊紓甯�
-////                if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) {
-////                    // 璁板綍鏂板紓甯�
-////                    if (latest == null || (latest.getErrCode() != shuttleProtocol.getStatusErrorCode().intValue())) {
-////                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue());
-////                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
-////                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
-////                                null,    // 缂栧彿
-////                                null,    // 宸ヤ綔鍙�
-////                                now,    // 鍙戠敓鏃堕棿
-////                                null,    // 缁撴潫鏃堕棿
-////                                null,    // 宸ヤ綔鐘舵��
-////                                null,    // 鍏ュ嚭搴撶被鍨�
-////                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
-////                                null,    // plc
-////                                null,    // 鐩爣搴撲綅
-////                                null,    // 鐩爣绔�
-////                                null,    // 婧愮珯
-////                                null,    // 婧愬簱浣�
-////                                null,    // 鏉$爜
-////                                (int)shuttleProtocol.getStatusErrorCode(),    // 寮傚父鐮�
-////                                errName,    // 寮傚父
-////                                1,    // 寮傚父鎯呭喌
-////                                now,    // 娣诲姞鏃堕棿
-////                                null,    // 娣诲姞浜哄憳
-////                                now,    // 淇敼鏃堕棿
-////                                null,    // 淇敼浜哄憳
-////                                "鏃犱换鍔″紓甯�"    // 澶囨敞
-////                        );
-////                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
-////                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
-////                        }
-////                    }
-////                    // 鏃犲紓甯�
-////                } else {
-////                    // 寮傚父淇
-////                    if (latest != null && latest.getStatus() == 1) {
-////                        latest.setEndTime(now);
-////                        latest.setUpdateTime(now);
-////                        latest.setStatus(2);
-////                        if (!basShuttleErrLogService.updateById(latest)) {
-////                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
-////                        }
-////                    }
-////                }
-//            }
-//        }
-//    }
-//
-//    /**
-//     * 鎻愬崌鏈哄紓甯镐俊鎭褰�
-//     */
-//    private void recLiftErr() {
-//        Date now = new Date();
-//        for (LiftSlave liftSlave : slaveProperties.getLift()) {
-//            // 鑾峰彇鎻愬崌鏈轰俊鎭�
-//            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
-//            if (liftThread == null) {
-//                continue;
-//            }
-//            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-//            if (liftProtocol == null) {
-//                continue;
-//            }
-//
-//            if (liftProtocol.getTaskNo() != 0) {
-//                //鏈変换鍔�
-//                BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(liftSlave.getId(), liftProtocol.getTaskNo().intValue());
-//                // 鏈夊紓甯�
-//                if (latest == null) {
-//                    if (liftProtocol.getDeviceError() != null && liftProtocol.getDeviceError()) {
-//                        WrkMast wrkMast = wrkMastMapper.selectById(liftProtocol.getTaskNo());
-//                        if (wrkMast == null) {
-//                            continue;
-//                        }
-//
-//                        String errName = "";
-//                        if (liftProtocol.getFrontOverrun()) {
-//                            errName = "鍓嶈秴闄�";
-//                        } else if (liftProtocol.getBackOverrun()) {
-//                            errName = "鍚庤秴闄�";
-//                        } else if (liftProtocol.getLeftOverrun()) {
-//                            errName = "宸﹁秴闄�";
-//                        } else if (liftProtocol.getRightOverrun()) {
-//                            errName = "鍙宠秴闄�";
-//                        } else if (liftProtocol.getOverHeight()) {
-//                            errName = "瓒呴珮";
-//                        } else if (liftProtocol.getOverWeight()) {
-//                            errName = "瓒呴噸";
-//                        }
-//
-//                        BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
-//                                null,    // 缂栧彿
-//                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
-//                                now,    // 鍙戠敓鏃堕棿
-//                                null,    // 缁撴潫鏃堕棿
-//                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
-//                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
-//                                liftSlave.getId(),    // 鎻愬崌鏈�
-//                                null,    // plc
-//                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
-//                                wrkMast.getStaNo(),    // 鐩爣绔�
-//                                wrkMast.getSourceStaNo(),    // 婧愮珯
-//                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
-//                                wrkMast.getBarcode(),    // 鏉$爜
-//                                null,    // 寮傚父鐮�
-//                                errName,    // 寮傚父
-//                                1,    // 寮傚父鎯呭喌
-//                                now,    // 娣诲姞鏃堕棿
-//                                null,    // 娣诲姞浜哄憳
-//                                now,    // 淇敼鏃堕棿
-//                                null,    // 淇敼浜哄憳
-//                                "浠诲姟涓紓甯�",    // 澶囨敞
-//                                JSON.toJSONString(liftProtocol)    // 绯荤粺鐘舵�佹暟鎹�
-//                        );
-//                        if (!basLiftErrLogService.insert(basLiftErrLog)) {
-//                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", liftSlave.getId(), errName);
-//                        }
-//                    }
-//                } else {
-//                    // 寮傚父淇
-//                    if (liftProtocol.getDeviceError() == null || !liftProtocol.getDeviceError()) {
-//                        latest.setEndTime(now);
-//                        latest.setUpdateTime(now);
-//                        latest.setStatus(2);
-//                        if (!basLiftErrLogService.updateById(latest)) {
-//                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", liftSlave.getId(), latest.getId());
-//                        }
-//                    }
-//                }
-//            }
-//        }
-//    }
+    /**
+     * 寮傚父淇℃伅璁板綍
+     */
+    public void recErr() {
+        try {
+            this.recShuttleErr();
+            this.recLiftErr();
+        } catch (Exception e) {
+            News.error("recErr fail", e);
+        }
+    }
+
+    /**
+     * 鍥涘悜绌挎杞﹀紓甯镐俊鎭褰�
+     */
+    private void recShuttleErr() {
+        Date now = new Date();
+        for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
+            // 鑾峰彇鍥涘悜绌挎杞︿俊鎭�
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
+            if (shuttleThread == null) {
+                continue;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                continue;
+            }
+
+            if (shuttleProtocol.getTaskNo() != 0) {
+                //鏈変换鍔�
+                BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo());
+                // 鏈夊紓甯�
+                if (latest == null) {
+                    if (shuttleProtocol.getErrorCode() != null && Integer.parseInt(shuttleProtocol.getErrorCode()) != 0) {
+                        WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo());
+                        if (wrkMast == null) {
+                            continue;
+                        }
+                        int errorCode = Integer.parseInt(shuttleProtocol.getErrorCode());
+                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(errorCode);
+                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
+                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
+                                null,    // 缂栧彿
+                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
+                                now,    // 鍙戠敓鏃堕棿
+                                null,    // 缁撴潫鏃堕棿
+                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
+                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
+                                null,    // plc
+                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
+                                wrkMast.getStaNo(),    // 鐩爣绔�
+                                wrkMast.getSourceStaNo(),    // 婧愮珯
+                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
+                                wrkMast.getBarcode(),    // 鏉$爜
+                                errorCode,    // 寮傚父鐮�
+                                errName,    // 寮傚父
+                                1,    // 寮傚父鎯呭喌
+                                now,    // 娣诲姞鏃堕棿
+                                null,    // 娣诲姞浜哄憳
+                                now,    // 淇敼鏃堕棿
+                                null,    // 淇敼浜哄憳
+                                "浠诲姟涓紓甯�",    // 澶囨敞
+                                JSON.toJSONString(shuttleProtocol)    // 绯荤粺鐘舵�佹暟鎹�
+                        );
+                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
+                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
+                        }
+                    }
+                } else {
+                    // 寮傚父淇
+                    if (shuttleProtocol.getErrorCode() == null || Integer.parseInt(shuttleProtocol.getErrorCode()) == 0) {
+                        latest.setEndTime(now);
+                        latest.setUpdateTime(now);
+                        latest.setStatus(2);
+                        if (!basShuttleErrLogService.updateById(latest)) {
+                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 鎻愬崌鏈哄紓甯镐俊鎭褰�
+     */
+    private void recLiftErr() {
+        Date now = new Date();
+        for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
+            // 鑾峰彇鎻愬崌鏈轰俊鎭�
+            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId());
+            if (forkLiftThread == null) {
+                continue;
+            }
+            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
+            if (forkLiftProtocol == null) {
+                continue;
+            }
+
+            if (forkLiftProtocol.getTaskNo() != 0) {
+                //鏈変换鍔�
+                BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(forkLiftSlave.getId(), forkLiftProtocol.getTaskNo());
+                // 鏈夊紓甯�
+                if (latest == null) {
+                    if (forkLiftProtocol.getErrorCode() != null && forkLiftProtocol.getErrorCode() != 0) {
+                        WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo());
+                        if (wrkMast == null) {
+                            continue;
+                        }
+
+                        BasLiftErr basLiftErr = basLiftErrService.queryByCode(forkLiftProtocol.getErrorCode());
+                        String errName = basLiftErr==null? "鏈煡寮傚父":basLiftErr.getErrName();
+
+                        BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
+                                null,    // 缂栧彿
+                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
+                                now,    // 鍙戠敓鏃堕棿
+                                null,    // 缁撴潫鏃堕棿
+                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
+                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+                                forkLiftSlave.getId(),    // 鎻愬崌鏈�
+                                null,    // plc
+                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
+                                wrkMast.getStaNo(),    // 鐩爣绔�
+                                wrkMast.getSourceStaNo(),    // 婧愮珯
+                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
+                                wrkMast.getBarcode(),    // 鏉$爜
+                                null,    // 寮傚父鐮�
+                                errName,    // 寮傚父
+                                1,    // 寮傚父鎯呭喌
+                                now,    // 娣诲姞鏃堕棿
+                                null,    // 娣诲姞浜哄憳
+                                now,    // 淇敼鏃堕棿
+                                null,    // 淇敼浜哄憳
+                                "浠诲姟涓紓甯�",    // 澶囨敞
+                                JSON.toJSONString(forkLiftProtocol)    // 绯荤粺鐘舵�佹暟鎹�
+                        );
+                        if (!basLiftErrLogService.insert(basLiftErrLog)) {
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", forkLiftSlave.getId(), errName);
+                        }
+                    }
+                } else {
+                    // 寮傚父淇
+                    if (forkLiftProtocol.getErrorCode() == null || forkLiftProtocol.getErrorCode() == 0) {
+                        latest.setEndTime(now);
+                        latest.setUpdateTime(now);
+                        latest.setStatus(2);
+                        if (!basLiftErrLogService.updateById(latest)) {
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", forkLiftSlave.getId(), latest.getId());
+                        }
+                    }
+                }
+            }
+        }
+    }
 
     // -------------------------------------------------------------------------------
 
@@ -1864,220 +1754,304 @@
 //        }
     }
 
-//    /**
-//     * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數
-//     */
-//    public synchronized void loopShuttleCharge() {
-//        try {
-//            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-//                //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-//                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
-//                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-//                if (shuttleProtocol == null) {
-//                    continue;
-//                }
-//
-//                //鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹�
-//                if (!shuttleProtocol.isRequireCharge()) {
-//                    continue;
-//                }
-//
-//                WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttleProtocol.getShuttleNo().intValue());
-//                if (wrkCharge != null) {//宸叉湁鍏呯數浠诲姟
-//                    continue;
-//                }
-//
-//                //灏忚溅鎵�鍦ㄦゼ灞�
-//                int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
-//                ShuttleChargeType shuttleCharge = null;
-//
-//                //鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗�
-//                for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
-//                    if (lev != Utils.getLev(chargeType.locNo)) {
-//                        continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
-//                    }
-//
-//                    //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
-//                    if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) {
-//                        shuttleCharge = chargeType;
-//                        break;
-//                    }
-//                }
-//
-//                if (shuttleCharge == null) {
-//                    //鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗�
-//                    //灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔�
-//                    for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
-//                        if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) {
-//                            //鍒ゆ柇褰撳墠鍏呯數妗╂ゼ灞傛槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
-//                            int chargeLev = Utils.getLev(chargeType.locNo);//鍏呯數妗╂ゼ灞�
-//                            boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞�
-//                            if (checkLevHasShuttle) {
-//                                //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
-//                                continue;
-//                            }
-//
-//                            shuttleCharge = chargeType;
-//                            break;
-//                        }
-//                    }
-//                }
-//
-//                if (shuttleCharge == null) {
-//                    continue;
-//                }
-//
-//                String chargeLocNo = shuttleCharge.locNo;
-//                wrkCharge = new WrkCharge();
-//                wrkCharge.setShuttleNo(shuttle.getId());
-//                wrkCharge.setCharge(shuttleCharge.id);
-//                wrkCharge.setWrkNo(commonService.getChargeWorkNo(4));
-//                wrkCharge.setWrkSts(51L);   // 51.鍑嗗鍏呯數
-//                wrkCharge.setIoPri((double) 10);
-//                wrkCharge.setLocNo(chargeLocNo);
-//                wrkCharge.setMemo("charge");
-//                wrkCharge.setAppeTime(new Date());
-//                if (!wrkChargeService.insert(wrkCharge)) {
-//                    News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", shuttle.getId());
-//                    continue;
-//                }
-//
-//                News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", shuttle.getId());
-//            }
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
-//
-//    /**
-//     * 鎵ц鍥涘悜绌挎杞﹀厖鐢典换鍔�
-//     */
-//    public synchronized void executeShuttleCharge() {
-//        try {
-//            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-//                WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttle.getId());
-//                if (wrkCharge == null) {
-//                    continue;
-//                }
-//
-//                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkCharge.getShuttleNo());
-//                if (shuttleThread == null) {
-//                    continue;
-//                }
-//                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-//                if (shuttleProtocol == null) {
-//                    continue;
-//                }
-//
-//                if (wrkCharge.getWrkSts() == 51) {
-//                    if (!shuttleProtocol.isIdleNoCharge()) {
-//                        continue;
-//                    }
-//
-//                    if (shuttleProtocol.getSuspendState() == 1) {
-//                        continue;//绠″埗涓�
-//                    }
-//
-//                    if (!shuttleProtocol.getCurrentLocNo().equals(wrkCharge.getLocNo())) {
-//                        //灏忚溅涓嶅湪鍏呯數妗╀綅缃�
-//                        shuttleDispatchUtils.dispatchShuttle(wrkCharge.getWrkNo(), wrkCharge.getLocNo(), shuttle.getId());//璋冨害灏忚溅鍘诲厖鐢垫々
-//                        continue;
-//                    }
-//
-//                    //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝厖鐢靛懡浠�
-//                    NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), true);
-//                    ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
-//                    commands.add(chargeCommand);
-//                    //鍒涘缓鍒嗛厤鍛戒护
-//                    ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-//                    assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-//                    assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙�
-//                    assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡
-//                    assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-//                    assignCommand.setCommands(commands);//杩愯鍛戒护
-//
-//                    wrkCharge.setWrkSts(52L);//51.鐢熸垚鍏呯數浠诲姟 => 52.灏忚溅鍘诲厖鐢典腑
-//                    wrkCharge.setModiTime(new Date());
-//                    if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-//                        //涓嬪彂浠诲姟
-//                        MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-//                    }
-//                } else if (wrkCharge.getWrkSts() == 52) {
-//                    //妫�娴嬪皬杞︽槸鍚︽弧鐢�
-//
-//                    //鑾峰彇婊$數闃堝��
-//                    int maxPower = 95;
-//                    EntityWrapper<Config> wrapper = new EntityWrapper<>();
-//                    wrapper.eq("code", "chargeMaxValue");
-//                    Config config = configService.selectOne(wrapper);
-//                    if (config != null) {
-//                        maxPower = Integer.parseInt(config.getValue());
-//                    }
-//
-//                    if (shuttleProtocol.getPowerPercent() < maxPower) {
-//                        continue;
-//                    }
-//
-//                    //***************鍒ゆ柇鏄惁婊″厖鏍″噯***************
-//                    EntityWrapper<Config> wrapper1 = new EntityWrapper<>();
-//                    wrapper.eq("code", "shuttleMaxPowerVerify");
-//                    Config config1 = configService.selectOne(wrapper1);
-//                    if (config1 != null) {
-//                        if (config1.getValue().equals("true")) {
-//                            if (shuttleProtocol.getVoltage() < 5630) {
-//                                continue;//鐢靛帇涓嶅缁х画鍏呯數
-//                            }
-//                        }
-//                    }
-//                    //***************鍒ゆ柇鏄惁婊″厖鏍″噯***************
-//
-//                    //灏忚溅婊$數锛岀粨鏉熷厖鐢典换鍔�
-//                    NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), false);
-//                    ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
-//                    commands.add(chargeCommand);
-//                    //鍒涘缓鍒嗛厤鍛戒护
-//                    ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-//                    assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-//                    assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙�
-//                    assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡
-//                    assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-//                    assignCommand.setCommands(commands);//杩愯鍛戒护
-//
-//                    //涓嬪彂浠诲姟
-//                    MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-//                    try {
-//                        Thread.sleep(3000);
-//                    } catch (Exception e) {
-//                        e.printStackTrace();
-//                    }
-//
-//                    wrkCharge.setWrkSts(53L);//52.灏忚溅鍘诲厖鐢典腑 => 53.灏忚溅鍏呯數瀹屾垚
-//                    wrkCharge.setModiTime(new Date());
-//                    if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-//                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE.id);
-//                        shuttleProtocol.setTaskNo(0);
-//                        shuttleProtocol.setPakMk(false);
-//                    }
-//                } else if (wrkCharge.getWrkSts() == 53) {
-//                    if (shuttleProtocol.getChargState() == 0) {//灏忚溅澶勪簬鏈厖鐢电姸鎬�
-//                        boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkCharge.getLocNo()), shuttleThread.getSlave().getId(), shuttleThread);
-//                        if (!result) {
-//                            continue;
-//                        }
-//
-//                        wrkCharge.setWrkSts(60L);//53.灏忚溅鍏呯數瀹屾垚 => 60.鍏呯數浠诲姟瀹屾垚
-//                        wrkCharge.setModiTime(new Date());
-//                        if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-//
-//                        }
-//                    }
-//                }
-//
-//            }
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
+    /**
+     * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數
+     */
+    public synchronized void loopShuttleCharge() {
+        try {
+            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+                //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+                ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+                ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+                if (shuttleProtocol == null) {
+                    continue;
+                }
+
+                //鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹�
+                if (!shuttleThread.isRequireCharge()) {
+                    continue;
+                }
+
+                WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttleProtocol.getShuttleNo());
+                if (wrkMast != null) {//宸叉湁鍏呯數浠诲姟
+                    continue;
+                }
+
+                //灏忚溅鎵�鍦ㄦゼ灞�
+                int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
+                ShuttleChargeType shuttleCharge = null;
+
+                //鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗�
+                for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
+                    if (lev != Utils.getLev(chargeType.locNo)) {
+                        continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
+                    }
+
+                    //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
+                    if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) {
+                        shuttleCharge = chargeType;
+                        break;
+                    }
+                }
+
+                if (shuttleCharge == null) {
+                    //鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗�
+                    //灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔�
+                    for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
+                        if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) {
+                            //鍒ゆ柇褰撳墠鍏呯數妗╂ゼ灞傛槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
+                            int chargeLev = Utils.getLev(chargeType.locNo);//鍏呯數妗╂ゼ灞�
+                            boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞�
+                            if (checkLevHasShuttle) {
+                                //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
+                                continue;
+                            }
+
+                            shuttleCharge = chargeType;
+                            break;
+                        }
+                    }
+                }
+
+                if (shuttleCharge == null) {
+                    continue;
+                }
+
+                String chargeLocNo = shuttleCharge.locNo;
+                wrkMast = new WrkMast();
+                wrkMast.setMk(String.valueOf(shuttleCharge.id));
+                wrkMast.setWrkNo(commonService.getWorkNo(WrkIoType.SHUTTLE_CHARGE.id));
+                wrkMast.setWrkSts(WrkStsType.NEW_CHARGE.sts);
+                wrkMast.setIoType(WrkIoType.SHUTTLE_CHARGE.id);//300.鍏呯數
+                wrkMast.setIoPri((double) 999);
+                wrkMast.setLocNo(chargeLocNo);
+                wrkMast.setShuttleNo(shuttle.getId());
+                wrkMast.setMemo("charge");
+                wrkMast.setAppeTime(new Date());
+                if (!wrkMastService.insert(wrkMast)) {
+                    News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", shuttle.getId());
+                    continue;
+                }
+
+                News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", shuttle.getId());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鎵ц鍥涘悜绌挎杞﹀厖鐢典换鍔�
+     */
+    public synchronized void executeShuttleCharge() {
+        try {
+            //鏌ヨ灏忚溅鍏呯數浠诲姟
+            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+                WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttle.getId());
+                if(wrkMast == null) {
+                    continue;
+                }
+
+                boolean result1 = this.executeShuttleChargeStepGoToChargeSta(wrkMast);//灏忚溅绛夊緟鍏呯數妗�
+                if (!result1) {
+                    continue;
+                }
+
+                boolean result2 = this.executeShuttleChargeStepArrivalChargeSta(wrkMast);//灏忚溅鍒拌揪鍏呯數妗�
+                if (!result2) {
+                    continue;
+                }
+
+                boolean result3 = this.executeShuttleChargeStepStartCharge(wrkMast);//灏忚溅寮�濮嬪厖鐢�
+                if (!result3) {
+                    continue;
+                }
+
+                boolean result4 = this.executeShuttleChargeStepStopCharge(wrkMast);//灏忚溅鍋滄鍏呯數
+                if (!result4) {
+                    continue;
+                }
+
+                boolean result5 = this.executeShuttleChargeStepLeaveCharge(wrkMast);//灏忚溅绂诲紑鍏呯數妗�
+                if (!result5) {
+                    continue;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 灏忚溅鍓嶅線鍏呯數妗�
+     */
+    private synchronized boolean executeShuttleChargeStepGoToChargeSta(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.NEW_CHARGE.sts) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+
+            if (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+                //灏忚溅鍦ㄥ厖鐢垫々浣嶇疆
+                wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts);
+                wrkMast.setModiTime(new Date());
+                wrkMastService.updateById(wrkMast);
+                return false;
+            }
+
+            //璋冨害灏忚溅鍘诲厖鐢垫々
+            boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getLocNo(), wrkMast.getShuttleNo());
+            if (!dispatched) {
+                return false;
+            }
+
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN.sts);//灏忚溅鍓嶅線鍏呯數妗�
+            wrkMast.setModiTime(new Date());
+            wrkMastService.updateById(wrkMast);
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 灏忚溅鍒拌揪鍏呯數妗�
+     */
+    private synchronized boolean executeShuttleChargeStepArrivalChargeSta(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_RUN.sts) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+
+            //鍒ゆ柇鏄惁瀛樺湪鏈畬鎴愮殑绉诲姩浠诲姟
+            WrkMast moveWrk = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+            if(moveWrk != null) {
+                return false;
+            }
+
+            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+                return false;
+            }
+
+            //灏忚溅鍦ㄥ厖鐢垫々浣嶇疆
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts);//灏忚溅鍒拌揪鍏呯數妗�
+            wrkMast.setModiTime(new Date());
+            wrkMastService.updateById(wrkMast);
+
+            return false;
+        }
+        return true;
+    }
+
+    //灏忚溅寮�濮嬪厖鐢�
+    private synchronized boolean executeShuttleChargeStepStartCharge(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+
+            //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝厖鐢靛懡浠�
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id);//鍑哄簱妯″紡
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+
+            List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, true);
+            assignCommand.setCommands(commands);//杩愯鍛戒护
+
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_WORKING.sts);
+            wrkMast.setModiTime(new Date());
+            if (!wrkMastService.updateById(wrkMast)) {
+                return false;
+            }
+
+            //涓嬪彂浠诲姟
+            shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+            return false;
+        }
+        return true;
+    }
+
+    //灏忚溅鍋滄鍏呯數
+    private synchronized boolean executeShuttleChargeStepStopCharge(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+
+            if (!shuttleThread.isChargingCompleted()) {
+                return false;
+            }
+
+            //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝仠姝㈠厖鐢靛懡浠�
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id);//鍑哄簱妯″紡
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+
+            List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, false);
+            assignCommand.setCommands(commands);//杩愯鍛戒护
+
+            //涓嬪彂浠诲姟
+            shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+            return false;
+        }
+        return true;
+    }
+
+    //灏忚溅绂诲紑鍏呯數妗�
+    private synchronized boolean executeShuttleChargeStepLeaveCharge(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+
+            ShuttleChargeType chargeType = ShuttleChargeType.get(Integer.parseInt(wrkMast.getMk()));
+            if(chargeType == null) {
+                return false;
+            }
+
+            //璋冨害灏忚溅鍘诲緟鏈轰綅
+            boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), chargeType.waitLocNo, wrkMast.getShuttleNo());
+            if (!dispatched) {
+                return false;
+            }
+
+            wrkMast.setWrkSts(WrkStsType.COMPLETE_CHARGE.sts);
+            wrkMast.setModiTime(new Date());
+            if (wrkMastService.updateById(wrkMast)) {
+                return false;
+            }
+            return false;
+        }
+        return true;
+    }
 
     /**
      * 鎵ц灏忚溅绉诲簱浠诲姟
@@ -2174,23 +2148,23 @@
 
             assignCommand.setCommands(commands);
 
-            //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
-            List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
-            if (targetNodes == null) {
-                return false;//鏈幏鍙栧埌鑺傜偣
-            }
-            boolean checkPathIsAvailable = navigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo()));
-            if (!checkPathIsAvailable) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛岀洰鏍囩珯鐐硅矾寰勮鍗犵敤锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢�
-            }
-            //灏濊瘯閿佸畾鐩爣绔欒矾寰�
-            boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
-            if (!result2) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;//璺緞閿佸畾澶辫触
-            }
-            //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
+//            //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
+//            List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
+//            if (targetNodes == null) {
+//                return false;//鏈幏鍙栧埌鑺傜偣
+//            }
+//            boolean checkPathIsAvailable = navigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo()));
+//            if (!checkPathIsAvailable) {
+//                News.info("{}浠诲姟锛寋}灏忚溅锛岀洰鏍囩珯鐐硅矾寰勮鍗犵敤锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+//                return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢�
+//            }
+//            //灏濊瘯閿佸畾鐩爣绔欒矾寰�
+//            boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+//            if (!result2) {
+//                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+//                return false;//璺緞閿佸畾澶辫触
+//            }
+//            //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
 
             wrkMast.setWrkSts(WrkStsType.MOVE_SITE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐�
             wrkMast.setModiTime(now);
@@ -2304,17 +2278,6 @@
                 wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
                 wrkMast.setModiTime(now);
                 wrkMastService.updateById(wrkMast);
-
-                if (wrkMast.getWrkSts() == WrkStsType.COMPLETE_MOVE.sts) {
-                    // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-                    if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) {
-                        log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={}]澶辫触", wrkMast.getWrkNo());
-                    }
-                    // 鍒犻櫎宸ヤ綔涓绘。
-                    if (!wrkMastService.deleteById(wrkMast)) {
-                        log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={}]澶辫触", wrkMast.getWrkNo());
-                    }
-                }
                 return false;
             }
 

--
Gitblit v1.9.1