From 4b81cc671814355c769e9c4c67ccb6e2ebf6321d Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期一, 21 四月 2025 10:02:13 +0800
Subject: [PATCH] #
---
zy-acs-flow/src/map/http.js | 44 ++++++++++++++
zy-acs-flow/src/i18n/en.js | 2
zy-acs-flow/src/map/header/MoreOperate.jsx | 60 +++++++++++++++----
zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java | 26 ++++++++
zy-acs-flow/src/i18n/zh.js | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/core/constant/MapDataConstant.java | 2
6 files changed, 119 insertions(+), 17 deletions(-)
diff --git a/zy-acs-flow/src/i18n/en.js b/zy-acs-flow/src/i18n/en.js
index 0c1ce05..13ebef0 100644
--- a/zy-acs-flow/src/i18n/en.js
+++ b/zy-acs-flow/src/i18n/en.js
@@ -657,6 +657,8 @@
stopPatrol: 'STOP PATROL',
moreOperation: 'More Operation',
oneClickLocate: 'One-click Locate',
+ oneClickPatrol: 'One-click Patrol',
+ cancelPatrol: 'Cancel Patrol',
},
mode: {
observer: 'OBSERVER',
diff --git a/zy-acs-flow/src/i18n/zh.js b/zy-acs-flow/src/i18n/zh.js
index 4900ef1..09310d7 100644
--- a/zy-acs-flow/src/i18n/zh.js
+++ b/zy-acs-flow/src/i18n/zh.js
@@ -657,6 +657,8 @@
stopPatrol: '鍋滄 宸¢��',
moreOperation: '鏇村鎿嶄綔',
oneClickLocate: '涓�閿畾浣�',
+ oneClickPatrol: '涓�閿贰閫�',
+ cancelPatrol: '鍙栨秷宸¢��',
},
mode: {
observer: '瑙傚療妯″紡',
diff --git a/zy-acs-flow/src/map/header/MoreOperate.jsx b/zy-acs-flow/src/map/header/MoreOperate.jsx
index 49c7d9c..c210132 100644
--- a/zy-acs-flow/src/map/header/MoreOperate.jsx
+++ b/zy-acs-flow/src/map/header/MoreOperate.jsx
@@ -10,9 +10,11 @@
ListItemText,
CircularProgress,
} from '@mui/material';
-import { handleLocateAllAgv } from "../http";
+import { locateAllAgv, startPatrolBatch, cancelPatrolBatch } from "../http";
import GpsFixedIcon from '@mui/icons-material/GpsFixed';
import { VERIFY_PASSWORD } from '@/config/setting';
+import TimelineIcon from '@mui/icons-material/Timeline';
+import CloseIcon from '@mui/icons-material/Close';
const MoreOperate = ({ }) => {
const translate = useTranslate();
@@ -37,13 +39,25 @@
}
}
- const handleLocateAll = async () => {
- setLoading(true)
+ const debounced = async (fn) => {
+ setLoading(true);
try {
- await handleLocateAllAgv();
+ await fn();
} finally {
setLoading(false);
}
+ }
+
+ const handleLocateAll = () => {
+ debounced(locateAllAgv);
+ }
+
+ const handleStartPatrolBatch = () => {
+ debounced(startPatrolBatch);
+ }
+
+ const handleCancelPatrolBatch = () => {
+ debounced(cancelPatrolBatch);
}
return (
@@ -51,7 +65,6 @@
<Select
value={translate('page.map.action.moreOperation')}
onChange={(event) => {
- console.log(event.target.value);
}}
renderValue={() => (
<Box sx={{ display: 'flex', alignItems: 'center' }}>
@@ -86,17 +99,36 @@
</ListItemIcon>
<ListItemText>{translate('page.map.action.oneClickLocate')}</ListItemText>
</MenuItem>
+ <MenuItem
+ onClick={() => {
+ verifyPassword(handleStartPatrolBatch);
+ }}
+ disabled={loading}
+ >
+ <ListItemIcon>
+ {loading
+ ? <CircularProgress size={20} />
+ : <TimelineIcon fontSize="small" />
+ }
+ </ListItemIcon>
+ <ListItemText>{translate('page.map.action.oneClickPatrol')}</ListItemText>
+ </MenuItem>
+ <MenuItem
+ onClick={() => {
+ verifyPassword(handleCancelPatrolBatch);
+ }}
+ disabled={loading}
+ >
+ <ListItemIcon>
+ {loading
+ ? <CircularProgress size={20} />
+ : <CloseIcon fontSize="small" />
+ }
+ </ListItemIcon>
+ <ListItemText>{translate('page.map.action.cancelPatrol')}</ListItemText>
+ </MenuItem>
</Select>
- {/* <Button
- variant="contained"
- color="primary"
- onClick={handleToggle}
- sx={{ mr: 2 }}
- >
- 閲嶆柊瀹氫綅
- </Button> */}
</>
-
);
}
diff --git a/zy-acs-flow/src/map/http.js b/zy-acs-flow/src/map/http.js
index 640a9a5..b126eed 100644
--- a/zy-acs-flow/src/map/http.js
+++ b/zy-acs-flow/src/map/http.js
@@ -311,7 +311,7 @@
return false;
}
-export const handleLocateAllAgv = async (param) => {
+export const locateAllAgv = async (param) => {
try {
const res = await request.post('/handler/locateAllAgv', param, {
headers: {
@@ -330,4 +330,46 @@
console.error(error.message);
}
return false;
+}
+
+export const startPatrolBatch = async (param) => {
+ try {
+ const res = await request.post('/handler/patrol/batch/startup', param, {
+ headers: {
+ 'appKey': HANDLE_APP_KEY
+ }
+ });
+ const { code, msg, data } = res.data;
+ if (code === 200) {
+ notify.success(msg);
+ return true;
+ } else {
+ notify.error(msg);
+ }
+ } catch (error) {
+ notify.error(error.message);
+ console.error(error.message);
+ }
+ return false;
+}
+
+export const cancelPatrolBatch = async (param) => {
+ try {
+ const res = await request.post('/handler/patrol/batch/shutdown', param, {
+ headers: {
+ 'appKey': HANDLE_APP_KEY
+ }
+ });
+ const { code, msg, data } = res.data;
+ if (code === 200) {
+ notify.success(msg);
+ return true;
+ } else {
+ notify.error(msg);
+ }
+ } catch (error) {
+ notify.error(error.message);
+ console.error(error.message);
+ }
+ return false;
}
\ No newline at end of file
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java
index 9b744ed..8f6a78e 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java
@@ -28,6 +28,7 @@
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
/**
* Created by vincent on 8/1/2024
@@ -75,13 +76,36 @@
@PreAuthorize("hasAuthority('manager:agv:update')")
@OperationLog("Locate All Agv")
@PostMapping("/locateAllAgv")
- public synchronized R locateAllAgv() throws InterruptedException {
+ public synchronized R locateAllAgv() {
final Integer MAP_DEFAULT_LEV = 1;
redis.deleteValue(RedisConstant.AGV_MAP_ASTAR_DYNAMIC_FLAG, String.valueOf(MAP_DEFAULT_LEV));
avoidWaveCalculator.calcDynamicNodeWhenBoot();
return R.ok();
}
+ @PreAuthorize("hasAuthority('manager:agv:update')")
+ @PostMapping("/patrol/batch/startup")
+ public synchronized R patrolBatchStartup() {
+ List<Agv> list = agvService.list(new LambdaQueryWrapper<Agv>().eq(Agv::getStatus, StatusType.ENABLE.val));
+ int result = 0;
+ for (Agv agv : list) {
+ patrolService.startupPatrol(agv.getUuid());
+ result++;
+ }
+ return R.ok().add(result);
+ }
+
+ @PreAuthorize("hasAuthority('manager:agv:update')")
+ @PostMapping("/patrol/batch/shutdown")
+ public synchronized R patrolBatchShutdown() {
+ List<Agv> list = agvService.list(new LambdaQueryWrapper<Agv>());
+ for (String agvNo : list.stream().map(Agv::getUuid).collect(Collectors.toList())) {
+ if (patrolService.isPatrolling(agvNo)) {
+ patrolService.shutdownPatrol(agvNo);
+ }
+ }
+ return R.ok();
+ }
@RequestMapping(value = "/control/agv", method = {RequestMethod.GET, RequestMethod.POST})
@Transactional
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/constant/MapDataConstant.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/constant/MapDataConstant.java
index 5b29c2c..5c4ad50 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/constant/MapDataConstant.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/constant/MapDataConstant.java
@@ -11,7 +11,7 @@
public static final Integer MIN_SLICE_PATH_LENGTH = 3;
- public static final Integer MAX_JAM_TIMEOUT = 2 * 1000;
+ public static final Integer MAX_JAM_TIMEOUT = 3 * 1000;
public static final String EMPTY_OF_ERROR = "EMPTY";
--
Gitblit v1.9.1