From efbd157c0d810c39d04cd86752e769a3f3a1a1fc Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 11 九月 2025 16:57:03 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   53 +++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 45 insertions(+), 8 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 6524140..001543c 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.SpringUtils;
 import com.zy.asrs.domain.enums.NotifyMsgType;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
@@ -75,6 +76,8 @@
     private DeviceConfigService deviceConfigService;
     @Autowired
     private LiftDispatchUtils liftDispatchUtils;
+    @Autowired
+    private BasShuttleService basShuttleService;
 
     /**
      * 鍒濆鍖栧疄鏃跺湴鍥�
@@ -1094,8 +1097,26 @@
                 }
 
                 //鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹�
-                if (!shuttleThread.isRequireCharge()) {
-                    continue;
+                if (shuttleThread.isRequireCharge().equals(ShuttleRequireChargeType.NONE)) {
+                    continue;//鏃犻渶鍏呯數
+                }
+
+                boolean forceCharge = true;
+                if (shuttleThread.isRequireCharge().equals(ShuttleRequireChargeType.SUGGEST_CHARGE)) {
+                    BasShuttle basShuttle = basShuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", device.getDeviceNo()));
+                    if (basShuttle != null) {
+                        Integer suggestChargeLine = basShuttle.getSuggestChargeLine();
+                        boolean chargeSuggestResult = Integer.parseInt(shuttleProtocol.getBatteryPower()) < suggestChargeLine;
+                        if (chargeSuggestResult) {
+                            //妫�娴嬬郴缁熸槸鍚︽湁浠诲姟
+                            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("io_type", 1, 101, 201));
+                            if (wrkMasts.isEmpty()) {
+                                forceCharge = false;
+                            }else {
+                                continue;
+                            }
+                        }
+                    }
                 }
 
                 WrkMast wrkMast1 = wrkMastService.selectShuttleWorking(shuttleProtocol.getShuttleNo());
@@ -1171,7 +1192,7 @@
                 wrkMast.setIoPri((double) 999);
                 wrkMast.setLocNo(chargeLocNo);
                 wrkMast.setShuttleNo(device.getDeviceNo());
-                wrkMast.setMemo("charge");
+                wrkMast.setMemo(forceCharge ? "forceCharge" : "suggestCharge");
                 wrkMast.setAppeTime(new Date());
                 if (!wrkMastService.insert(wrkMast)) {
                     News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", device.getDeviceNo());
@@ -1321,7 +1342,7 @@
             List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, true);
             assignCommand.setCommands(commands);//杩愯鍛戒护
 
-            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_WORKING.sts);
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_START_CHARGING.sts);
             wrkMast.setModiTime(new Date());
             if (!wrkMastService.updateById(wrkMast)) {
                 return false;
@@ -1338,7 +1359,7 @@
 
     //灏忚溅鍋滄鍏呯數
     private synchronized boolean executeShuttleChargeStepStopCharge(WrkMast wrkMast) {
-        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_CHARGING.sts) {
             ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
             if (shuttleThread == null) {
                 return false;
@@ -1348,7 +1369,16 @@
                 return false;
             }
 
-            if (!shuttleThread.isChargingCompleted()) {
+            boolean stopCharge = false;
+            if (wrkMast.getMemo().equals("suggestChargeTaskStop")) {
+                stopCharge = true;
+            }else {
+                if (shuttleThread.isChargingCompleted()) {
+                    stopCharge = true;
+                }
+            }
+
+            if (!stopCharge) {
                 return false;
             }
 
@@ -1371,7 +1401,7 @@
 
     //灏忚溅绂诲紑鍏呯數妗�
     private synchronized boolean executeShuttleChargeStepLeaveCharge(WrkMast wrkMast) {
-        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_CHARGING_COMPLETE.sts) {
             ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
             if (shuttleThread == null) {
                 return false;
@@ -1795,7 +1825,14 @@
                 return false;
             }
 
-            String targetLocNo = navigateUtils.calcFirstLocation(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 2);
+            //灏忚溅鍑烘彁鍗囨満杩戠偣璺濈
+            int shuttleOutLiftLocationDistance = 2;
+            Config shuttleOutLiftLocationDistanceConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleOutLiftLocationDistance"));
+            if (shuttleOutLiftLocationDistanceConfig != null) {
+                shuttleOutLiftLocationDistance = Integer.parseInt(shuttleOutLiftLocationDistanceConfig.getValue());
+            }
+
+            String targetLocNo = navigateUtils.calcFirstLocation(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, shuttleOutLiftLocationDistance);
             if (targetLocNo == null) {//鍑烘彁鍗囨満杩戠偣璁$畻澶辫触
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽嚭鎻愬崌鏈鸿繎鐐硅绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;

--
Gitblit v1.9.1