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