From 00b0ec55e1b0eef82b3a31166e8273ecea776568 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期六, 19 十月 2024 14:34:51 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/map/http.js                                                                |   22 ++++++++++-
 zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/ConfigService.java          |    2 +
 zy-acs-flow/src/map/insight/index.jsx                                                      |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/impl/ConfigServiceImpl.java |   45 ++++++++++++++++++++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java      |   11 +++++
 zy-acs-flow/src/map/MapPage.jsx                                                            |   13 +++++-
 6 files changed, 88 insertions(+), 7 deletions(-)

diff --git a/zy-acs-flow/src/map/MapPage.jsx b/zy-acs-flow/src/map/MapPage.jsx
index 205aadd..1564c27 100644
--- a/zy-acs-flow/src/map/MapPage.jsx
+++ b/zy-acs-flow/src/map/MapPage.jsx
@@ -21,6 +21,7 @@
 import ConfirmButton from "../page/components/ConfirmButton";
 import { FitScreen } from '@mui/icons-material';
 import MapSearch from "./header/MapSearch";
+import { startupOrShutdown } from "./http";
 
 let player;
 let websocket;
@@ -48,6 +49,7 @@
     const prevCurSpriteRef = useRef();
     const [batchSprites, setBatchSprites] = useState([]);
 
+    const [rcsStatus, setRcsStatus] = useState(null);
     const [curZone, setCurZone] = useState(() => {
         const storedValue = localStorage.getItem('curZone');
         return storedValue !== null ? JSON.parse(storedValue) : null;
@@ -73,7 +75,7 @@
             Http.setMapContainer(player.mapContainer);
             websocket = new WebSocketClient('/ws/map/websocket');
 
-            await Http.fetchMapData();
+            await Http.fetchMapData(curZone, setRcsStatus);
             websocket.connect();
             websocket.onMessage = (wsMsg) => {
                 Tool.generateDynamicGraphic(curZone, JSON.parse(wsMsg), setCurSprite);
@@ -261,10 +263,15 @@
                     <>
                         <Button
                             variant="contained"
-                            color="primary"
+                            color={rcsStatus ? 'inherit' : 'primary'}
                             sx={{ mr: 2 }}
+                            onClick={() => {
+                                startupOrShutdown(() => {
+                                    setRcsStatus(!rcsStatus);
+                                });
+                            }}
                         >
-                            {translate('page.map.action.startup')}
+                            {rcsStatus ? translate('page.map.action.shutdown') : translate('page.map.action.startup')}
                         </Button>
                         <Button variant="contained" color="primary">
                             {translate('page.map.action.monitor')}
diff --git a/zy-acs-flow/src/map/http.js b/zy-acs-flow/src/map/http.js
index c6d34e1..22fe804 100644
--- a/zy-acs-flow/src/map/http.js
+++ b/zy-acs-flow/src/map/http.js
@@ -14,15 +14,16 @@
     mapContainer = param;
 }
 
-export const fetchMapData = (zoneId) => {
+export const fetchMapData = (zoneId, setRcsStatus) => {
     Tool.clearMapData();
     return request.post('/map/data/fetch', {
         zoneId: zoneId
     }, {
         headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
     }).then((res) => {
-        const { code, msg, data: { common, point } } = res.data;
+        const { code, msg, data: { rcsStatus, common, point } } = res.data;
         if (code === 200) {
+            setRcsStatus(rcsStatus);
             const mapItemList = [...eval(common), ...eval(point)];
             mapItemList.forEach(item => {
                 if (item.type !== DEVICE_TYPE.AGV) {
@@ -108,6 +109,23 @@
     })
 }
 
+export const startupOrShutdown = async (callback) => {
+    try {
+        const res = await request.post('/map/startupOrShutdown');
+        const { code, msg, data } = res.data;
+        if (code === 200) {
+            if (callback) {
+                callback();
+            }
+        } else {
+            notify.error(msg);
+        }
+    } catch (error) {
+        notify.error(error.message);
+        console.error(error.message);
+    }
+}
+
 export const getLocGroup = async (row, bay, callback) => {
     await request.post('/map/shelf/group', {
         row: row,
diff --git a/zy-acs-flow/src/map/insight/index.jsx b/zy-acs-flow/src/map/insight/index.jsx
index 8fcbcc8..be7a97f 100644
--- a/zy-acs-flow/src/map/insight/index.jsx
+++ b/zy-acs-flow/src/map/insight/index.jsx
@@ -39,7 +39,7 @@
                     }}>
                         <Stack direction="row" p={2} pt={3}>
                             <Typography variant="h6" flex="1">
-                                {title || translate('page.map.insight.title')}
+                                {title || ''}
                             </Typography>
                             <IconButton onClick={handleClose} size="small">
                                 <CloseIcon />
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java
index e8b4498..1ca13bb 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java
@@ -26,6 +26,7 @@
 import com.zy.acs.manager.manager.mapper.MapMapper;
 import com.zy.acs.manager.manager.service.*;
 import com.zy.acs.manager.system.controller.BaseController;
+import com.zy.acs.manager.system.service.ConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
@@ -63,6 +64,15 @@
     private SnowflakeIdWorker snowflakeIdWorker;
     @Autowired
     private LocService locService;
+    @Autowired
+    private ConfigService configService;
+
+    @PreAuthorize("hasAuthority('manager:loc:update')")
+    @PostMapping("/startupOrShutdown")
+    public synchronized R startupOrShutdown() {
+        Boolean taskAssignMode = configService.getVal("TaskAssignMode", Boolean.class);
+        return configService.setVal("TaskAssignMode", !taskAssignMode) ? R.ok() : R.error();
+    }
 
     @PreAuthorize("hasAuthority('manager:loc:list')")
     @PostMapping("/data/fetch")
@@ -82,6 +92,7 @@
         // common
         Map activeMap = mapMapper.selectActive(zoneId, floor);
         return R.ok().add(Cools
+                .add("rcsStatus", configService.getVal("TaskAssignMode", Boolean.class))
                 .add("point", GsonUtils.toJson(mapCodeItems))
                 .add("common", activeMap.getData())
         );
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/ConfigService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/ConfigService.java
index f8c45ba..8ede185 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/ConfigService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/service/ConfigService.java
@@ -7,4 +7,6 @@
 
     <T> T getVal(String key, Class<T> clazz);
 
+    <T> boolean setVal(String key, T val);
+
 }
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 29230e8..2f65707 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
@@ -8,7 +8,6 @@
 import com.zy.acs.manager.system.enums.ConfigType;
 import com.zy.acs.manager.system.mapper.ConfigMapper;
 import com.zy.acs.manager.system.service.ConfigService;
-import com.zy.acs.framework.exception.CoolException;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -57,4 +56,48 @@
         }
     }
 
+    @Override
+    public <T> boolean setVal(String key, T val) {
+        List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key));
+        Config config = list.stream().findFirst().orElse(null);
+        if (config == null) {
+            return false;
+        }
+        ConfigType configType = ConfigType.query(config.getType());
+        switch (configType) {
+            case BOOLEAN:
+                if (!(val instanceof Boolean)) {
+                    throw new IllegalArgumentException("Expected Boolean value for key: " + key);
+                }
+                config.setVal((Boolean) val ? "TRUE" : "FALSE");
+                break;
+            case NUMBER:
+                if (val instanceof Integer || val instanceof Short || val instanceof Long || val instanceof Double) {
+                    config.setVal(String.valueOf(val));
+                } else {
+                    throw new IllegalArgumentException("Expected a numeric value for key: " + key);
+                }
+                break;
+            case STRING:
+                if (!(val instanceof String)) {
+                    throw new IllegalArgumentException("Expected a String value for key: " + key);
+                }
+                config.setVal((String) val);
+                break;
+            case JSON:
+                config.setVal(GsonUtils.toJson(val));
+                break;
+            case DATE:
+                if (!(val instanceof Date)) {
+                    throw new IllegalArgumentException("Expected a Date value for key: " + key);
+                }
+                config.setVal(DateUtils.convert((Date) val));
+                break;
+            default:
+                throw new UnsupportedOperationException("Unsupported ConfigType: " + configType);
+        }
+
+        return this.updateById(config);
+    }
+
 }

--
Gitblit v1.9.1