From d0b25091a0c2dbef45299e152078f858d6d4039e Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期三, 28 一月 2026 15:07:36 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/page/sta/StaCreate.jsx                                                          |   10 +-
 zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/impl/ConfigServiceImpl.java      |   85 ++++++++++++++++++++-------
 zy-acs-flow/src/page/sta/StaEdit.jsx                                                            |    8 +-
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java                   |   12 ++--
 version/doc/AGV-RCS 通信协议 V1.1.xlsx                                                              |    0 
 zy-acs-common/src/main/java/com/zy/acs/common/domain/HeightDepthDto.java                        |    4 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaReserveService.java          |    3 
 zy-acs-flow/src/page/sta/StaList.jsx                                                            |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/StaReserve.java                  |    4 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java        |   12 +++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java |    7 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/StaReserveMapper.java            |    1 
 zy-acs-manager/src/main/resources/mapper/manager/StaReserveMapper.xml                           |    2 
 13 files changed, 106 insertions(+), 44 deletions(-)

diff --git "a/version/doc/AGV-RCS \351\200\232\344\277\241\345\215\217\350\256\256 V1.1.xlsx" "b/version/doc/AGV-RCS \351\200\232\344\277\241\345\215\217\350\256\256 V1.1.xlsx"
index c884034..0ffcd1f 100644
--- "a/version/doc/AGV-RCS \351\200\232\344\277\241\345\215\217\350\256\256 V1.1.xlsx"
+++ "b/version/doc/AGV-RCS \351\200\232\344\277\241\345\215\217\350\256\256 V1.1.xlsx"
Binary files differ
diff --git a/zy-acs-common/src/main/java/com/zy/acs/common/domain/HeightDepthDto.java b/zy-acs-common/src/main/java/com/zy/acs/common/domain/HeightDepthDto.java
index add3672..5a2bff8 100644
--- a/zy-acs-common/src/main/java/com/zy/acs/common/domain/HeightDepthDto.java
+++ b/zy-acs-common/src/main/java/com/zy/acs/common/domain/HeightDepthDto.java
@@ -19,6 +19,10 @@
     public HeightDepthDto() {
     }
 
+    public HeightDepthDto(Number height) {
+        this.height = toShort(height);
+    }
+
     public HeightDepthDto(Number height, Number depth) {
         this.height = toShort(height);
         this.depth  = toShort(depth);
diff --git a/zy-acs-flow/src/page/sta/StaCreate.jsx b/zy-acs-flow/src/page/sta/StaCreate.jsx
index 7df05c8..848b816 100644
--- a/zy-acs-flow/src/page/sta/StaCreate.jsx
+++ b/zy-acs-flow/src/page/sta/StaCreate.jsx
@@ -152,7 +152,7 @@
                                         />
                                     </ReferenceInput>
                                 </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
+                                <Grid item xs={4} display="flex" gap={1}>
                                     <NumberInput
                                         label="table.field.sta.capacity"
                                         source="capacity"
@@ -166,22 +166,22 @@
                                         validate={required()}
                                     />
                                 </Grid> */}
-                                <Grid item xs={6} display="flex" gap={1}>
+                                <Grid item xs={4} display="flex" gap={1}>
                                     <NumberInput
                                         label="table.field.sta.height"
                                         source="height"
                                         validate={[required(), greaterThanZero]}
                                     />
                                 </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
+                                {/* <Grid item xs={6} display="flex" gap={1}>
                                     <NumberInput
                                         label="table.field.sta.depth"
                                         source="depth"
                                         helperText={translate('page.sta.depthHint')}
                                         validate={[required(), greaterThanZero]}
                                     />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
+                                </Grid> */}
+                                <Grid item xs={4} display="flex" gap={1}>
                                     <NumberInput
                                         label="table.field.sta.angle"
                                         source="angle"
diff --git a/zy-acs-flow/src/page/sta/StaEdit.jsx b/zy-acs-flow/src/page/sta/StaEdit.jsx
index fcf3d15..d74a6ed 100644
--- a/zy-acs-flow/src/page/sta/StaEdit.jsx
+++ b/zy-acs-flow/src/page/sta/StaEdit.jsx
@@ -145,19 +145,19 @@
                                 source="offset"
                                 validate={required()}
                             /> */}
-                        </Stack>
-                        <Stack direction='row' gap={2}>
                             <NumberInput
                                 label="table.field.sta.height"
                                 source="height"
                                 validate={[required(), greaterThanZero]}
                             />
-                            <NumberInput
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            {/* <NumberInput
                                 label="table.field.sta.depth"
                                 source="depth"
                                 helperText={translate('page.sta.depthHint')}
                                 validate={[required(), greaterThanZero]}
-                            />
+                            /> */}
                         </Stack>
                         <Stack direction='row' gap={2}>
                             <NumberInput
diff --git a/zy-acs-flow/src/page/sta/StaList.jsx b/zy-acs-flow/src/page/sta/StaList.jsx
index 658904b..baf38c5 100644
--- a/zy-acs-flow/src/page/sta/StaList.jsx
+++ b/zy-acs-flow/src/page/sta/StaList.jsx
@@ -134,7 +134,7 @@
                     expand={() => <StaPanel />}
                     expandSingle={true}
                     rowSx={rowSx(drawerVal || null)}
-                    omit={['id', 'uuid', 'name', 'offset', 'zpallet'
+                    omit={['id', 'uuid', 'name', 'offset', 'zpallet', 'depth'
                         , 'updateTime', 'updateBy', 'createTime', 'createBy', 'memo']}
                 >
                     <NumberField source="id" />
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
index d1aa9eb..06c0cf1 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -892,8 +892,8 @@
             long actionPrepareSts = ActionStsType.PREPARE.val();
 //            JSONObject storeDirection = configService.getVal("storeDirection", JSONObject.class);
             int angleOffsetVal = configService.getVal("mapAngleOffsetVal", Integer.class);
-            Double defaultShelfDepth = configService.getVal("defaultShelfDepth", Double.class);
-            defaultShelfDepth = Optional.ofNullable(defaultShelfDepth).orElse((double) 0);
+//            Double defaultShelfDepth = configService.getVal("defaultShelfDepth", Double.class);
+//            defaultShelfDepth = Optional.ofNullable(defaultShelfDepth).orElse((double) 0);
             String agvNo = agvService.getAgvNo(agvId);
 //            if (!agvService.judgeEnable(agvId)) {
 //                throw new CoolException("AGV[" + agvNo + "]褰撳墠涓嶅彲鐢�...");
@@ -1170,7 +1170,7 @@
                                 ActionTypeType.ReadyTakeFromShelvesLoc.desc,    // 鍚嶇О
                                 (double) agvDirectionType.val,    // 灞炴�у��
                                 lastCode.getData(),    // 鍦伴潰鐮�
-                                JSON.toJSONString(new HeightDepthDto(oriLoc.getOffset(), defaultShelfDepth)),   // 鍔ㄤ綔鍙傛暟
+                                JSON.toJSONString(new HeightDepthDto(oriLoc.getOffset())),   // 鍔ㄤ綔鍙傛暟
                                 ActionTypeType.ReadyTakeFromShelvesLoc.val(),    // 鍔ㄤ綔绫诲瀷
                                 actionPrepareSts,    // 鍔ㄤ綔杩涘害
                                 agvId,    // AGV
@@ -1233,7 +1233,7 @@
                                 ActionTypeType.ReadyReleaseToShelvesLoc.desc,    // 鍚嶇О
                                 (double) agvDirectionType.val,    // 灞炴�у��
                                 lastCode.getData(),    // 鍦伴潰鐮�
-                                JSON.toJSONString(new HeightDepthDto(destLoc.getOffset(), defaultShelfDepth)),   // 鍔ㄤ綔鍙傛暟
+                                JSON.toJSONString(new HeightDepthDto(destLoc.getOffset())),   // 鍔ㄤ綔鍙傛暟
                                 ActionTypeType.ReadyReleaseToShelvesLoc.val(),    // 鍔ㄤ綔绫诲瀷
                                 actionPrepareSts,    // 鍔ㄤ綔杩涘害
                                 agvId,    // AGV
@@ -1869,7 +1869,7 @@
                                 // load from sta
                                 sta = staService.getById(currTask.getOriSta());
                                 // reserve to be waiting
-                                if (!staReserveService.waitingStaReserve(sta, currTask, 1, StaReserveType.OUT)) {
+                                if (!staReserveService.waitingStaReserve(sta, currTask, currSeg, 1, StaReserveType.OUT)) {
                                     break;
                                 }
                                 // convey plc valid
@@ -1885,7 +1885,7 @@
                                 // place to sta
                                 sta = staService.getById(currTask.getDestSta());
                                 // reserve to be waiting
-                                if (!staReserveService.waitingStaReserve(sta, currTask, 1, StaReserveType.IN)) {
+                                if (!staReserveService.waitingStaReserve(sta, currTask, currSeg, 1, StaReserveType.IN)) {
                                     break;
                                 }
                                 // convey plc valid
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/StaReserve.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/StaReserve.java
index df79e64..8e43706 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/StaReserve.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/StaReserve.java
@@ -11,6 +11,10 @@
 import java.io.Serializable;
 import java.util.Date;
 
+// create task - reserved
+// agv load/unload request - waiting
+// well done - confirmed
+
 @Data
 @TableName("man_sta_reserve")
 public class StaReserve implements Serializable {
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/StaReserveMapper.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/StaReserveMapper.java
index e84e694..8b21301 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/StaReserveMapper.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/StaReserveMapper.java
@@ -19,6 +19,7 @@
 
     int updateStateToWaiting(
             @Param("taskId") Long taskId
+            , @Param("segmentId") Long segId
             , @Param("staId") Long staId
             , @Param("type") String type
             , @Param("state") String state
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaReserveService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaReserveService.java
index eb6cddd..18cc87a 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaReserveService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaReserveService.java
@@ -1,6 +1,7 @@
 package com.zy.acs.manager.manager.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.acs.manager.manager.entity.Segment;
 import com.zy.acs.manager.manager.entity.Sta;
 import com.zy.acs.manager.manager.entity.StaReserve;
 import com.zy.acs.manager.manager.entity.Task;
@@ -13,7 +14,7 @@
     StaReserve reserveStaOut(Sta sta, Task task, Integer qty);
 
 
-    Boolean waitingStaReserve(Sta sta, Task task, Integer qty, StaReserveType type);
+    Boolean waitingStaReserve(Sta sta, Task task, Segment seg, Integer qty, StaReserveType type);
 
     Boolean rollbackWaitingToReserved(Sta sta, Task task, StaReserveType staReserveType);
 
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java
index 89d873d..7c6c9a9 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java
@@ -5,6 +5,7 @@
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.framework.exception.CoolException;
 import com.zy.acs.manager.common.exception.BusinessException;
+import com.zy.acs.manager.manager.entity.Segment;
 import com.zy.acs.manager.manager.entity.Sta;
 import com.zy.acs.manager.manager.entity.StaReserve;
 import com.zy.acs.manager.manager.entity.Task;
@@ -109,11 +110,13 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean waitingStaReserve(Sta sta, Task task, Integer qty, StaReserveType type) {
+    public Boolean waitingStaReserve(Sta sta, Task task, Segment seg, Integer qty, StaReserveType type) {
         qty = Optional.ofNullable(qty).orElse(DEFAULT_QTY);
 
         // update reserve to be waiting state
-        int changed = this.baseMapper.updateStateToWaiting(task.getId()
+        int changed = this.baseMapper.updateStateToWaiting(
+                task.getId()
+                , seg.getId()
                 , sta.getId()
                 , type.toString()
                 , StaReserveStateType.WAITING.toString()
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java
index 8afdba0..276355d 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java
@@ -113,7 +113,6 @@
                     .orderByDesc(Segment::getId).last("LIMIT 1"));
             if (null == lastSeg) {
                 return false;
-//                continue;
             }
             Travel travel = travelService.getById(lastSeg.getTravelId());
             if (travel.getState().equals(TravelStateType.FINISH.toString())) {
@@ -128,7 +127,16 @@
                         && (segment.getPosType().equals(TaskPosDto.PosType.ORI_STA.toString())
                             || segment.getPosType().equals(TaskPosDto.PosType.DEST_STA.toString()))
                 ) {
-                    return true;
+                    return 0 < staReserveService.count(new LambdaQueryWrapper<StaReserve>()
+                            .eq(StaReserve::getStaId, staId)
+                            .eq(StaReserve::getTaskId, segment.getTaskId())
+                            .eq(StaReserve::getSegmentId, segment.getId())
+                            .eq(StaReserve::getState, StaReserveStateType.WAITING.toString())
+//                            .eq(StaReserve::getType, StaReserveType.IN.toString())
+                            .eq(StaReserve::getStatus, StatusType.ENABLE.val)
+                            .orderByDesc(StaReserve::getUpdateTime)
+//                            .last("limit 1")
+                    );
                 }
             }
         }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/impl/ConfigServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/impl/ConfigServiceImpl.java
index d20cd4c..68de310 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/impl/ConfigServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/impl/ConfigServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zy.acs.common.utils.GsonUtils;
+import com.zy.acs.framework.common.Cools;
 import com.zy.acs.framework.common.DateUtils;
 import com.zy.acs.manager.manager.enums.StatusType;
 import com.zy.acs.manager.system.entity.Config;
@@ -12,7 +13,10 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
-import java.util.*;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
@@ -25,45 +29,71 @@
 
     @PostConstruct
     public void init() {
+        CONFIG_CACHE.clear();
+
         List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getStatus, StatusType.ENABLE.val));
         for (Config config : list) {
-            CONFIG_CACHE.put(config.getFlag(), config);
+            if (null != config && !Cools.isEmpty(config.getFlag())) {
+                CONFIG_CACHE.put(config.getFlag(), config);
+            }
         }
     }
 
     @Override
     @SuppressWarnings("unchecked")
     public <T> T getVal(String key, Class<T> clazz) {
+        if (Cools.isEmpty(key.trim(), clazz)) {
+            return null;
+        }
+
         Config config = CONFIG_CACHE.get(key);
         if (config == null) {
-            List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key));
-            config = list.stream().findFirst().orElse(null);
+            config = getOne(new LambdaQueryWrapper<Config>()
+                    .eq(Config::getFlag, key)
+                    .eq(Config::getStatus, StatusType.ENABLE.val), false);
+
             if (null == config) {
                 return null;
             }
+
+            if (!Cools.isEmpty(config.getFlag())) {
+                CONFIG_CACHE.put(config.getFlag(), config);
+            }
         }
-        String val = config.getVal();
-        switch (ConfigType.query(config.getType())) {
-            case BOOLEAN:
-                if (val.equals("1") || val.trim().equalsIgnoreCase("TRUE")) {
+
+        String raw = config.getVal();
+        String val = Cools.isEmpty(raw) ? "" : raw.trim();
+        ConfigType type = ConfigType.query(config.getType());
+        if (null == type) {
+            return null;
+        }
+        switch (type) {
+            case BOOLEAN: {
+                if ("1".equals(val) || "true".equalsIgnoreCase(val) || "yes".equalsIgnoreCase(val)) {
                     return (T) Boolean.TRUE;
                 }
                 return (T) Boolean.FALSE;
-            case NUMBER:
-                if (clazz == Integer.class) {
+            }
+            case NUMBER: {
+                if (clazz == Integer.class || clazz == int.class) {
                     return (T) Integer.valueOf(val);
-                } else if (clazz == Short.class) {
+                } else if (clazz == Short.class || clazz == short.class) {
                     return (T) Short.valueOf(val);
-                } else if (clazz == Long.class) {
+                } else if (clazz == Long.class || clazz == long.class) {
                     return (T) Long.valueOf(val);
-                } else if (clazz == Double.class) {
+                } else if (clazz == Double.class || clazz == double.class) {
                     return (T) Double.valueOf(val);
+                } else if (clazz == Float.class || clazz == float.class) {
+                    return (T) Float.valueOf(val);
+                } else if (clazz == BigDecimal.class) {
+                    return (T) new BigDecimal(val);
                 }
-                throw new UnsupportedOperationException("Unsupported type: " + clazz.getName());
+                throw new UnsupportedOperationException("Unsupported number type: " + clazz.getName());
+            }
             case STRING:
-                return (T) val;
+                return (T) raw;
             case JSON:
-                return GsonUtils.fromJson(val, clazz);
+                return GsonUtils.fromJson(raw, clazz);
             case DATE:
                 return (T) DateUtils.convert(val);
             default:
@@ -73,11 +103,20 @@
 
     @Override
     public <T> boolean setVal(String key, T val) {
+        if (key == null || key.trim().isEmpty()) {
+            return false;
+        }
+
         Config config = CONFIG_CACHE.get(key);
         if (config == null) {
-            List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key));
-            config = list.stream().findFirst().orElse(null);
-            if (null == config) {
+            config = getOne(new LambdaQueryWrapper<Config>()
+                    .eq(Config::getFlag, key)
+                    .eq(Config::getStatus, StatusType.ENABLE.val), false);
+            if (config == null) {
+                return false;
+            }
+        } else {
+            if (config.getStatus() == null || config.getStatus() != StatusType.ENABLE.val) {
                 return false;
             }
         }
@@ -88,10 +127,11 @@
                 if (!(val instanceof Boolean)) {
                     throw new IllegalArgumentException("Expected Boolean value for key: " + key);
                 }
-                config.setVal((Boolean) val ? "TRUE" : "FALSE");
+                config.setVal(((Boolean) val) ? "TRUE" : "FALSE");
                 break;
             case NUMBER:
-                if (val instanceof Integer || val instanceof Short || val instanceof Long || val instanceof Double) {
+                if (val instanceof Integer || val instanceof Short || val instanceof Long
+                        || val instanceof Double || val instanceof Float || val instanceof BigDecimal) {
                     config.setVal(String.valueOf(val));
                 } else {
                     throw new IllegalArgumentException("Expected a numeric value for key: " + key);
@@ -118,5 +158,4 @@
 
         return this.updateById(config);
     }
-
-}
+}
\ No newline at end of file
diff --git a/zy-acs-manager/src/main/resources/mapper/manager/StaReserveMapper.xml b/zy-acs-manager/src/main/resources/mapper/manager/StaReserveMapper.xml
index 94eaa96..b18a435 100644
--- a/zy-acs-manager/src/main/resources/mapper/manager/StaReserveMapper.xml
+++ b/zy-acs-manager/src/main/resources/mapper/manager/StaReserveMapper.xml
@@ -18,6 +18,7 @@
     <update id="updateStateToWaiting">
         UPDATE man_sta_reserve
         SET state = #{state},
+            segment_id = #{segmentId},
             waiting_at = IFNULL(waiting_at, NOW()),
             expire_time = DATE_ADD(NOW(), INTERVAL #{extendMs} SECOND),
             update_time = NOW()
@@ -31,6 +32,7 @@
     <update id="updateStateBackToWaiting">
         UPDATE man_sta_reserve
         SET state = #{state},
+            segment_id = null,
             expire_time = DATE_ADD(NOW(), INTERVAL #{extendMs} SECOND),
             update_time = NOW()
         WHERE task_id = #{taskId}

--
Gitblit v1.9.1