From 97821c4acc241cd65fd4ae890a44201df065c590 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 08 一月 2025 15:18:52 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/model/NavigateNode.java            |    2 
 src/main/java/com/zy/common/utils/ShuttleOperaUtils.java       |   12 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java    |  452 ++++++++++++++++++++-------------
 src/main/java/com/zy/common/utils/NavigateUtils.java           |   76 +++++
 src/main/resources/mapper/WrkMastMapper.xml                    |    7 
 /dev/null                                                      |   10 
 src/main/java/com/zy/core/enums/ShuttleChargeType.java         |   46 +++
 src/main/java/com/zy/core/enums/WrkStsType.java                |    7 
 src/main/java/com/zy/asrs/service/WrkMastService.java          |    2 
 src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java |    5 
 src/main/java/com/zy/core/enums/WrkIoType.java                 |   48 +++
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java            |    2 
 src/main/java/com/zy/core/MainProcess.java                     |    2 
 src/main/java/com/zy/common/utils/NavigateSolution.java        |  108 +++----
 14 files changed, 521 insertions(+), 258 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index a41becf..9dd9c7e 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -53,4 +53,6 @@
 
     WrkMast selectChargeWorking(Integer shuttleNo);
 
+    WrkMast selectChargeWorkingByChargeSta(Integer chargeSta);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/WrkMastService.java b/src/main/java/com/zy/asrs/service/WrkMastService.java
index 218dec1..f9f57f2 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastService.java
+++ b/src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -22,6 +22,8 @@
 
     WrkMast selectChargeWorking(Integer shuttleNo);
 
+    WrkMast selectChargeWorkingByChargeSta(Integer chargeSta);
+
     Boolean hasBusyByShuttle(Integer shuttleNo);
 
     WrkMast selectShuttleHasMoveWorking(Integer shuttleNo);
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 360ff12..bcd44a1 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1835,58 +1835,59 @@
 
                 //灏忚溅鎵�鍦ㄦゼ灞�
                 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;
-//                }
+                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());
             }
@@ -1895,135 +1896,224 @@
         }
     }
 
-//    /**
-//     * 鎵ц鍥涘悜绌挎杞﹀厖鐢典换鍔�
-//     */
-//    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 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.shuttleChargeCommand(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.shuttleChargeCommand(assignCommand, shuttleThread, false);
+            assignCommand.setCommands(commands);//杩愯鍛戒护
+
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts);
+            wrkMast.setModiTime(new Date());
+            if (!wrkMastService.updateById(wrkMast)) {
+                return false;
+            }
+
+            //涓嬪彂浠诲姟
+            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(wrkMast.getMk());
+            if(chargeType == null) {
+                return false;
+            }
+
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts);
+            wrkMast.setModiTime(new Date());
+            if (wrkMastService.updateById(wrkMast)) {
+                //璋冨害灏忚溅鍘诲緟鏈轰綅
+                boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), chargeType.waitLocNo, wrkMast.getShuttleNo());
+                if (!dispatched) {
+                    return false;
+                }
+                return false;
+            }
+
+            return false;
+        }
+        return true;
+    }
 
     /**
      * 鎵ц灏忚溅绉诲簱浠诲姟
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
index 17e957c..bed7f63 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -64,6 +64,11 @@
     }
 
     @Override
+    public WrkMast selectChargeWorkingByChargeSta(Integer chargeSta) {
+        return this.baseMapper.selectChargeWorkingByChargeSta(chargeSta);
+    }
+
+    @Override
     public Boolean hasBusyByShuttle(Integer shuttleNo) {
         List<WrkMast> wrkMasts = this.selectList(new EntityWrapper<WrkMast>().in("wrk_sts"
                 , WrkStsType.NEW_INBOUND.sts
diff --git a/src/main/java/com/zy/common/model/NavigateNode.java b/src/main/java/com/zy/common/model/NavigateNode.java
index 5a41b66..dbe37d6 100644
--- a/src/main/java/com/zy/common/model/NavigateNode.java
+++ b/src/main/java/com/zy/common/model/NavigateNode.java
@@ -32,7 +32,7 @@
         this.Father = father;
         if (this.Father != null) {
             //璧拌繃鐨勬鏁扮瓑浜庣埗鑺傜偣璧拌繃鐨勬鏁板姞涓�
-            this.G = father.G + 1;
+            this.G = father.G + this.G;
         } else { //鐖惰妭鐐逛负绌轰唬琛ㄥ畠鏄涓�涓粨鐐�
             this.G = 0;
         }
diff --git a/src/main/java/com/zy/common/model/enums/WrkChargeType.java b/src/main/java/com/zy/common/model/enums/WrkChargeType.java
deleted file mode 100644
index ff5b40b..0000000
--- a/src/main/java/com/zy/common/model/enums/WrkChargeType.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.zy.common.model.enums;
-
-public enum WrkChargeType {
-
-    charge,
-    demo,
-    reset,
-    ;
-
-}
diff --git a/src/main/java/com/zy/common/utils/NavigateSolution.java b/src/main/java/com/zy/common/utils/NavigateSolution.java
index d9887d3..0c632b9 100644
--- a/src/main/java/com/zy/common/utils/NavigateSolution.java
+++ b/src/main/java/com/zy/common/utils/NavigateSolution.java
@@ -13,9 +13,7 @@
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.PriorityQueue;
+import java.util.*;
 
 /**
  * 鍥涘悜搴撴牳蹇�
@@ -45,10 +43,10 @@
     public PriorityQueue<NavigateNode> Open = new PriorityQueue<NavigateNode>();
     //Close琛ㄧ敤鏅�氱殑鏁扮粍
     public ArrayList<NavigateNode> Close = new ArrayList<NavigateNode>();
-    //Exist琛ㄧ敤鏉ュ瓨鏀惧凡缁忓嚭鐜拌繃鐨勭粨鐐广��
-    public ArrayList<NavigateNode> Exist = new ArrayList<NavigateNode>();
+    //鐢ㄦ潵瀛樻斁宸茬粡鍑虹幇杩囩殑缁撶偣銆�
+    Map<String, Integer> bestGMap = new HashMap<>();
 
-    public String astarSearch(NavigateNode start, NavigateNode end, String pythonScriptPath) {
+    public String astarSearchPython(NavigateNode start, NavigateNode end, String pythonScriptPath) {
         String maps = JSON.toJSONString(map);
         String startStr = start.getX() + "-" + start.getY();
         String targetStr = end.getX() + "-" + end.getY();
@@ -104,44 +102,45 @@
         return null;
     }
 
-//    public NavigateNode astarSearch(NavigateNode start, NavigateNode end) {
-//        //鎶婄涓�涓紑濮嬬殑缁撶偣鍔犲叆鍒癘pen琛ㄤ腑
-//        this.Open.add(start);
-//        //鎶婂嚭鐜拌繃鐨勭粨鐐瑰姞鍏ュ埌Exist琛ㄤ腑
-//        this.Exist.add(start);
-//        //涓诲惊鐜�
-//        while (Open.size() > 0) {
-//            //鍙栦紭鍏堥槦鍒楅《閮ㄥ厓绱犲苟涓旀妸杩欎釜鍏冪礌浠嶰pen琛ㄤ腑鍒犻櫎
-//            NavigateNode current_node = Open.poll();
-//            //灏嗚繖涓粨鐐瑰姞鍏ュ埌Close琛ㄤ腑
-//            Close.add(current_node);
-//            //瀵瑰綋鍓嶇粨鐐硅繘琛屾墿灞曪紝寰楀埌涓�涓洓鍛ㄧ粨鐐圭殑鏁扮粍
-//            ArrayList<NavigateNode> neighbour_node = extend_current_node(current_node);
-//            //瀵硅繖涓粨鐐归亶鍘嗭紝鐪嬫槸鍚︽湁鐩爣缁撶偣鍑虹幇
-//            for (NavigateNode node : neighbour_node) {
-//                // G + H + E (瀵瑰惎鍙戝嚱鏁板鍔犲幓鎷愮偣鏂规calcNodeExtraCost)
-//                int gCost = calcNodeCost(current_node, node) * calcNodeExtraCost(current_node, node, end);
-//                if (node.getX() == end.getX() && node.getY() == end.getY()) {//鎵惧埌鐩爣缁撶偣灏辫繑鍥�
-//                    //init_node鎿嶄綔鎶婅繖涓偦灞呯粨鐐圭殑鐖惰妭鐐硅缃负褰撳墠缁撶偣
-//                    //骞朵笖璁$畻鍑篏锛� F锛� H绛夊��
-//                    node.setLastDistance(gCost);
-//                    node.init_node(current_node, end);
-//                    return node;
-//                }
-//
-//                //杩涜璁$畻瀵笹, F, H 绛夊��
-//                node.setLastDistance(gCost);
-//                node.init_node(current_node, end);
-//                node.setH(calcNodeCost(node, end));
-//                node.setF(node.getG() + node.getH());
-//
-//                Open.add(node);
-//                Exist.add(node);
-//            }
-//        }
-//        //濡傛灉閬嶅巻瀹屾墍鏈夊嚭鐜扮殑缁撶偣閮芥病鏈夋壘鍒版渶缁堢殑缁撶偣锛岃繑鍥瀗ull
-//        return null;
-//    }
+    public NavigateNode astarSearchJava(NavigateNode start, NavigateNode end) {
+        //鎶婄涓�涓紑濮嬬殑缁撶偣鍔犲叆鍒癘pen琛ㄤ腑
+        this.Open.add(start);
+        //涓诲惊鐜�
+        while (Open.size() > 0) {
+            //鍙栦紭鍏堥槦鍒楅《閮ㄥ厓绱犲苟涓旀妸杩欎釜鍏冪礌浠嶰pen琛ㄤ腑鍒犻櫎
+            NavigateNode current_node = Open.poll();
+
+            if (current_node.getX() == end.getX() && current_node.getY() == end.getY()) {//鎵惧埌鐩爣缁撶偣灏辫繑鍥�
+                return current_node;
+            }
+
+            //灏嗚繖涓粨鐐瑰姞鍏ュ埌Close琛ㄤ腑
+            Close.add(current_node);
+            //瀵瑰綋鍓嶇粨鐐硅繘琛屾墿灞曪紝寰楀埌涓�涓洓鍛ㄧ粨鐐圭殑鏁扮粍
+            ArrayList<NavigateNode> neighbour_node = extend_current_node(current_node);
+            //瀵硅繖涓粨鐐归亶鍘嗭紝鐪嬫槸鍚︽湁鐩爣缁撶偣鍑虹幇
+            for (NavigateNode node : neighbour_node) {
+                // G + H + E (瀵瑰惎鍙戝嚱鏁板鍔犲幓鎷愮偣鏂规calcNodeExtraCost)
+                int gCost = calcNodeExtraCost(current_node, node, end);
+
+                //杩涜璁$畻瀵笹, F, H 绛夊��
+                node.setG(1 + gCost);
+                node.init_node(current_node, end);
+                node.setH(calcNodeCost(node, end));
+                node.setF(node.getG() + node.getH());
+
+                String key = node.getX() + "_" + node.getY();
+                Integer recordedG = bestGMap.get(key);
+                if (recordedG == null || node.getG() <= recordedG) {
+                    bestGMap.put(key, node.getG());
+
+                    Open.add(node);
+                }
+            }
+        }
+        //濡傛灉閬嶅巻瀹屾墍鏈夊嚭鐜扮殑缁撶偣閮芥病鏈夋壘鍒版渶缁堢殑缁撶偣锛岃繑鍥瀗ull
+        return null;
+    }
 
 
     public ArrayList<NavigateNode> extend_current_node(NavigateNode current_node) {
@@ -264,22 +263,9 @@
         if (map[x][y] == MapNodeType.CAR.id) {//鑺傜偣鏄皬杞�
             return false;
         }
-        NavigateNode navigateNode = new NavigateNode(x, y);
-        if (is_exist(navigateNode)) {
-            return false;
-        }
+
         //浠ヤ笂鎯呭喌閮芥病鏈夊垯鍚堟硶
         return true;
-    }
-
-    public boolean is_exist(NavigateNode node)
-    {
-        for (NavigateNode exist_node : Exist) {
-            if (node.getX() == exist_node.getX() && node.getY() == exist_node.getY()) {
-                return true;
-            }
-        }
-        return false;
     }
 
     //------------------A*鍚彂鍑芥暟------------------//
@@ -294,12 +280,12 @@
         // 绗竴涓偣鎴栫洿绾跨偣
         if (currNode.getFather() == null || nextNode.getX() == currNode.getFather().getX()
                 || nextNode.getY() == currNode.getFather().getY()) {
-            return 1;
+            return 0;
         }
 
         // 鎷愬悜缁堢偣鐨勭偣
         if (nextNode.getX() == endNode.getX() || nextNode.getY() == endNode.getY()) {
-            return 2;
+            return 1;
         }
 
         // 鏅�氭嫄鐐�
@@ -308,7 +294,7 @@
         鎷垮埌鐖惰妭鐐瑰拰涓嬩竴鑺傜偣
         閫氳繃鍒ゆ柇鐖惰妭鐐瑰拰涓嬩竴鑺傜偣鐨剎鏁版嵁鍜寉鏁版嵁閮戒笉鐩稿悓鏃讹紝鍒欒〃鏄庡綋鍓嶅潗鏍囨槸涓�涓嫄鐐�
          */
-        return 3;
+        return 1;
     }
 
     //------------------A*鍚彂鍑芥暟-end------------------//
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index 4e02d8e..6528cc3 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -30,6 +30,10 @@
     private String pythonCalcSimilarity;
 
     public List<NavigateNode> calc(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
+        return calcJava(startPoint, endPoint, mapType, shuttlePoints, whites);
+    }
+
+    public List<NavigateNode> calcJava(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
         //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
         int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
         int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
@@ -52,7 +56,77 @@
         NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
         //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
 
-        String pathStr = solution.astarSearch(start, end, pythonCalcPath);
+        NavigateNode res_node = solution.astarSearchJava(start, end);
+        if (res_node == null) {
+            News.error("{} dash {} can't find navigate path!", startPoint, endPoint);
+            return null;
+        }
+
+        ArrayList<NavigateNode> list = new ArrayList<>();
+        //娓叉煋
+        NavigateNode fatherNode = null;//褰撳墠寰幆涓婁竴鑺傜偣锛岀敤浜庢嫄鐐硅绠�
+        while (res_node != null) {
+            res_node.setDirection(null);
+            res_node.setIsInflectionPoint(false);
+            res_node.setZ(lev);//璁剧疆灞傞珮
+
+            //瀵绘壘鎷愮偣
+            HashMap<String, Object> result = searchInflectionPoint(res_node, fatherNode, res_node.getFather());//鍒嗗埆浼犲叆褰撳墠鑺傜偣銆佺埗鑺傜偣銆佷笅涓�鑺傜偣
+            //鍒ゆ柇褰撳墠鑺傜偣鏄惁涓烘嫄鐐�
+            if (Boolean.parseBoolean(result.get("result").toString())) {
+                //褰撳墠涓烘嫄鐐�
+                res_node.setIsInflectionPoint(true);
+                //鎷愮偣鏂瑰悜
+                res_node.setDirection(result.get("direction").toString());
+            }
+            list.add(res_node);
+
+            fatherNode = res_node;//鎶婂綋鍓嶈妭鐐逛繚瀛樻垚涓�涓埗鑺傜偣
+            res_node = res_node.getFather();//杩唬鎿嶄綔
+        }
+
+        Collections.reverse(list);
+
+        //灏嗘瘡涓妭鐐归噷闈㈢殑fatherNode鑷充负null(鏂逛究鍚庣画璁$畻鏃剁埗鑺傜偣杩囧瀵艰嚧鏄剧ず鐨勮妭鐐瑰お澶�)
+        for (NavigateNode navigateNode : list) {
+            //鐖惰妭鐐硅缃负null锛屼笉褰卞搷璁$畻缁撴灉锛屼笉褰卞搷鍚庣画鎿嶄綔銆�
+            //姝ゆ搷浣滀粎涓哄悗缁帓鏌ュ鐞嗘彁渚涜瑙夋柟渚裤��
+            navigateNode.setFather(null);
+        }
+
+        //璧峰鑺傜偣璁$畻鏂瑰悜
+        String direction = calcDirection(list.get(0), list.get(1));
+        NavigateNode startNode = list.get(0);
+        startNode.setDirection(direction);
+        //鏇存柊鑺傜偣鍒楄〃
+        list.set(0, startNode);
+        return list;
+    }
+
+    public List<NavigateNode> calcPython(String startPoint, String endPoint, Integer mapType, List<int[]> shuttlePoints, List<int[]> whites) {
+        //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
+        int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
+        int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
+
+        ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+        whiteList.add(startArr);//灏嗗紑濮嬭妭鐐硅缃负鐧藉悕鍗曪紝浠ラ槻琚繃婊�
+        if (whites != null && !whites.isEmpty()) {
+            whiteList.addAll(whites);//鎵归噺娣诲姞鐧藉悕鍗曡妭鐐�
+        }
+
+        //鑾峰彇褰撳墠鑺傜偣璁$畻鐨勫眰楂橈紝骞惰祴鍊煎埌姣忎竴涓妭鐐逛腑
+        int lev = Utils.getLev(startPoint);
+
+        //鍒濆鍖栧紑濮嬭妭鐐�
+        NavigateNode start = new NavigateNode(startArr[0], startArr[1]);
+        //寮�濮嬭妭鐐规棤鐖惰妭鐐�
+        start.setFather(null);
+
+        NavigateNode end = new NavigateNode(endArr[0], endArr[1]);
+        NavigateSolution solution = new NavigateSolution(mapType, lev, whiteList, shuttlePoints);
+        //寮�濮嬭妭鐐癸紝涓嶇撼鍏ョ鐢ㄨ妭鐐瑰唴璁$畻
+
+        String pathStr = solution.astarSearchPython(start, end, pythonCalcPath);
         if (pathStr == null) {
             News.error("{} dash {} can't find navigate path!", startPoint, endPoint);
             return null;
diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index d7a6adc..cba1a01 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -140,6 +140,18 @@
         return commands;
     }
 
+    /**
+     * 鑾峰彇鍏呯數鍛戒护
+     */
+    public synchronized List<ShuttleCommand> shuttleChargeCommand(ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread, Boolean openCharge) {
+        List<ShuttleCommand> commands = new ArrayList<>();
+
+        //鑾峰彇鍏呯數鍛戒护
+        ShuttleCommand command = shuttleThread.getChargeCommand(assignCommand.getDeviceTaskNo(), openCharge);
+        commands.add(command);
+        return commands;
+    }
+
 //    private boolean checkSimilarityPath(Motion motion, ShuttleAssignCommand assignCommand) {
 //        String movePath = motion.getMovePath();
 //        if (Cools.isEmpty(movePath)) {
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 8cc9755..a8c9ce7 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -72,7 +72,7 @@
 //                    mainService.ledReset();
                     // 绌挎杞� ===>> 灏忚溅鐢甸噺妫�娴嬪厖鐢�
                     mainService.loopShuttleCharge();
-//                    mainService.executeShuttleCharge();
+                    mainService.executeShuttleCharge();
 
 //                    //鎵弿璁惧PakMk鏍囪鏄惁瓒呮椂
 //                    mainService.scanDevicePakMk();
diff --git a/src/main/java/com/zy/core/enums/ShuttleChargeType.java b/src/main/java/com/zy/core/enums/ShuttleChargeType.java
new file mode 100644
index 0000000..6d6e7df
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/ShuttleChargeType.java
@@ -0,0 +1,46 @@
+package com.zy.core.enums;
+
+import com.core.common.Cools;
+
+public enum ShuttleChargeType {
+
+    CHARGE_1(1, "1402001", "1402001"),
+    ;
+
+    ShuttleChargeType(int id, String locNo,String waitLocNo) {
+        this.id = id;
+        this.locNo = locNo;
+        this.waitLocNo = waitLocNo;
+    }
+
+    public int id;
+    public String locNo;
+    public String waitLocNo;
+
+    public static ShuttleChargeType get(String locNo) {
+        if (Cools.isEmpty(locNo)) {
+            return null;
+        }
+        ShuttleChargeType[] values = ShuttleChargeType.values();
+        for (ShuttleChargeType value : values) {
+            if (value.locNo.equals(locNo)) {
+                return value;
+            }
+        }
+        return null;
+    }
+
+    public static ShuttleChargeType get(int id) {
+        if (Cools.isEmpty(id)) {
+            return null;
+        }
+        ShuttleChargeType[] values = ShuttleChargeType.values();
+        for (ShuttleChargeType value : values) {
+            if (value.id == id) {
+                return value;
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/enums/WrkIoType.java b/src/main/java/com/zy/core/enums/WrkIoType.java
new file mode 100644
index 0000000..3b3a19f
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/WrkIoType.java
@@ -0,0 +1,48 @@
+package com.zy.core.enums;
+
+import com.core.common.Cools;
+
+public enum WrkIoType {
+
+    IN(1, "鍏ュ簱"),
+    OUT(101, "鍑哄簱"),
+    SHUTTLE_MOVE(200, "灏忚溅绉诲姩"),
+    SHUTTLE_CHARGE(300, "灏忚溅鍏呯數"),
+    ;
+
+    WrkIoType(int id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public int id;
+
+    public String desc;
+
+    public static WrkIoType get(String desc) {
+        if (Cools.isEmpty(desc)) {
+            return null;
+        }
+        WrkIoType[] values = WrkIoType.values();
+        for (WrkIoType value : values) {
+            if (value.desc.equals(desc)) {
+                return value;
+            }
+        }
+        return null;
+    }
+
+    public static WrkIoType get(int id) {
+        if (Cools.isEmpty(id)) {
+            return null;
+        }
+        WrkIoType[] values = WrkIoType.values();
+        for (WrkIoType value : values) {
+            if (value.id == id) {
+                return value;
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/enums/WrkStsType.java b/src/main/java/com/zy/core/enums/WrkStsType.java
index 50a045b..d44ac9d 100644
--- a/src/main/java/com/zy/core/enums/WrkStsType.java
+++ b/src/main/java/com/zy/core/enums/WrkStsType.java
@@ -22,9 +22,10 @@
     SETTLE_OUTBOUND(110, "鍑哄簱搴撳瓨鏇存柊"),
 
     NEW_CHARGE(201, "鐢熸垚鍏呯數浠诲姟"),
-    CHARGE_SHUTTLE_RUN(202, "灏忚溅鍘诲厖鐢典腑"),
-    CHARGE_SHUTTLE_WORKING(203, "鎵ц鍏呯數浠诲姟"),
-    CHARGE_SHUTTLE_COMPLETE(204, "灏忚溅鍏呯數瀹屾垚"),
+    CHARGE_SHUTTLE_RUN(202, "灏忚溅鍓嶅線鍏呯數妗�"),
+    CHARGE_SHUTTLE_RUN_COMPLETE(203, "灏忚溅鍒拌揪鍏呯數妗�"),
+    CHARGE_SHUTTLE_WORKING(204, "灏忚溅鍏呯數涓�"),
+    CHARGE_SHUTTLE_COMPLETE(205, "灏忚溅鍏呯數瀹屾垚"),
     COMPLETE_CHARGE(210, "鍏呯數浠诲姟瀹屾垚"),
 
     NEW_MOVE(301, "鐢熸垚杩佺Щ浠诲姟"),
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 75874ef..1ae5714 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -168,4 +168,11 @@
         order by priority desc,start_time,wrk_no asc
     </select>
 
+    <select id="selectChargeWorkingByChargeSta" resultMap="BaseResultMap">
+        select * from asr_wrk_mast
+        where wrk_sts in (201,202,203)
+        and mk = #{chargeSta}
+        order by priority desc,start_time,wrk_no asc
+    </select>
+
 </mapper>

--
Gitblit v1.9.1