From 28647ecb12f0dc6558c0c299d99e9a450d97fa22 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期六, 12 十月 2024 13:50:12 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/map/http.js                                                                |   47 ++++++++++++++-
 zy-acs-flow/src/i18n/en.js                                                                 |    5 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/param/MapDataParam.java |   19 ++++++
 zy-acs-flow/src/map/tool.js                                                                |   14 ++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/MapItem.java                |   36 ++++++++++++
 zy-acs-flow/src/i18n/zh.js                                                                 |    5 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MapController.java      |   16 ++++-
 zy-acs-flow/src/map/MapPage.jsx                                                            |   15 ++++
 zy-acs-flow/src/page/components/ConfirmButton.jsx                                          |   10 +++
 9 files changed, 155 insertions(+), 12 deletions(-)

diff --git a/zy-acs-flow/src/i18n/en.js b/zy-acs-flow/src/i18n/en.js
index abbbd94..42823d1 100644
--- a/zy-acs-flow/src/i18n/en.js
+++ b/zy-acs-flow/src/i18n/en.js
@@ -73,7 +73,7 @@
         msg: {
             confirm: {
                 tip: 'Tip',
-                desc: 'Are you sure you wanna do this?',
+                desc: 'Are you sure you want to proceed?',
             },
         },
     },
@@ -629,6 +629,9 @@
                 station: 'STATION',
                 direction: 'DIRECTION',
             },
+            action: {
+                save: 'Save Map',
+            },
             settings: {
                 title: 'Settings',
                 map: {
diff --git a/zy-acs-flow/src/i18n/zh.js b/zy-acs-flow/src/i18n/zh.js
index 7b893b2..b0bbe0f 100644
--- a/zy-acs-flow/src/i18n/zh.js
+++ b/zy-acs-flow/src/i18n/zh.js
@@ -72,7 +72,7 @@
         msg: {
             confirm: {
                 tip: '鎻愮ず',
-                desc: '浣犵‘瀹氳鎿嶄綔姝ら」鍚�?',
+                desc: '鎮ㄧ‘瀹氳鎵ц姝ゆ搷浣滃悧锛�',
             },
         },
     },
@@ -627,6 +627,9 @@
                 station: '杈撻�佺嚎',
                 direction: '鏂瑰悜',
             },
+            action: {
+                save: '淇濆瓨鍦板浘',
+            },
             settings: {
                 title: '璁剧疆',
                 map: {
diff --git a/zy-acs-flow/src/map/MapPage.jsx b/zy-acs-flow/src/map/MapPage.jsx
index 2e50171..cf185ce 100644
--- a/zy-acs-flow/src/map/MapPage.jsx
+++ b/zy-acs-flow/src/map/MapPage.jsx
@@ -27,6 +27,7 @@
 import Settings from "./settings";
 import * as Http from './http';
 import WebSocketClient from './websocket'
+import ConfirmButton from "../page/components/ConfirmButton";
 
 let player;
 let websocket;
@@ -48,7 +49,12 @@
     const [settingsVisible, setSettingsVisible] = useState(false);
 
     const [spriteSettings, setSpriteSettings] = useState(null);
-    const prevSpriteSettingsRef = React.useRef();
+    const prevSpriteSettingsRef = useRef();
+
+    const [curZone, setCurZone] = useState(() => {
+        const storedValue = localStorage.getItem('curZone');
+        return storedValue !== null ? JSON.parse(storedValue) : null;
+    });
 
     useEffect(() => {
         Tool.patchRaLayout('0px');
@@ -250,6 +256,13 @@
 
                 {mode === MapMode.SETTINGS_MODE && (
                     <>
+                        <ConfirmButton
+                            label="page.map.action.save"
+                            variant="contained"
+                            onConfirm={() => {
+                                Http.saveMapData(curZone, mapContainer);
+                            }}
+                        />
                     </>
                 )}
 
diff --git a/zy-acs-flow/src/map/http.js b/zy-acs-flow/src/map/http.js
index 7cdea35..aea7868 100644
--- a/zy-acs-flow/src/map/http.js
+++ b/zy-acs-flow/src/map/http.js
@@ -1,5 +1,6 @@
 import request from '@/utils/request';
 import * as Tool from './tool';
+import { DEVICE_TYPE } from './constants';
 
 let notify;
 
@@ -9,7 +10,7 @@
 
 export const fetchMapData = async (zoneId) => {
     Tool.clearMapData();
-    await request.post('/map/data', {
+    await request.post('/map/data/fetch', {
         zoneId: zoneId
     }, {
         headers: {
@@ -19,8 +20,6 @@
         const { code, msg, data } = res.data;
         if (code === 200) {
             const mapItemList = eval(data);
-        } else {
-            notify(msg, "error")
         }
 
         // mapItemList.forEach(item => {
@@ -52,10 +51,50 @@
         // })
 
     }).catch((error) => {
-        notify(error.message, "error")
+        notify.error(error.message);
         console.error(error.message);
     })
 }
 
+export const saveMapData = async (zone, mapContainer) => {
+    if (!mapContainer) {
+        return;
+    }
 
+    const sprites = [];
+    mapContainer.children.forEach(child => {
+        if (child.data?.uuid) {
+            const { type, uuid, no, ...property } = child.data;
+            if (type !== DEVICE_TYPE.AGV) {
+                sprites.push({
+                    // graph
+                    positionX: child.position.x,
+                    positionY: child.position.y,
+                    scaleX: child.scale.x,
+                    scaleY: child.scale.y,
+                    rotation: Tool.rotationToNum(child.rotation),
+                    // data
+                    type: type,
+                    uuid: uuid,
+                    no: no,
+                    property: property,
+                })
+            }
+        }
+    })
 
+    await request.post('/map/data/save', {
+        zoneId: zone,
+        itemList: sprites
+    }).then(res => {
+        const { code, msg, data } = res.data;
+        if (code === 200) {
+            notify.success(msg);
+        } else {
+            notify.error(msg);
+        }
+    }).catch((error) => {
+        notify.error(error.message);
+        console.error(error.message);
+    })
+}
diff --git a/zy-acs-flow/src/map/tool.js b/zy-acs-flow/src/map/tool.js
index 7bcd534..04a40b6 100644
--- a/zy-acs-flow/src/map/tool.js
+++ b/zy-acs-flow/src/map/tool.js
@@ -324,6 +324,20 @@
     effectHalfCircle.position.set(sprite.x, sprite.y);
 }
 
+export const rotationToNum = (rotation) => {
+    let res = rotation * 180 / Math.PI;
+    if (res < 0) {
+        res += 360;
+    } else if (res > 360) {
+        res -= 360;
+    }
+    return res;
+}
+
+export const rotationParseNum = (num) => {
+    return num * Math.PI / 180;
+}
+
 export const incrementSpriteNo = (str, incrementValue) => {
     const match = str.match(/(\D*)(\d+)/);
     if (match) {
diff --git a/zy-acs-flow/src/page/components/ConfirmButton.jsx b/zy-acs-flow/src/page/components/ConfirmButton.jsx
index 595c6fd..e39fe98 100644
--- a/zy-acs-flow/src/page/components/ConfirmButton.jsx
+++ b/zy-acs-flow/src/page/components/ConfirmButton.jsx
@@ -7,6 +7,7 @@
 const ConfirmButton = (props) => {
     const { label, onConfirm, data, ...rest } = props;
     const translate = useTranslate();
+    const buttonRef = useRef(null);
     const [open, setOpen] = useState(false);
 
     const handleClickOpen = (event) => {
@@ -27,12 +28,19 @@
     return (
         <>
             <Button
+                ref={buttonRef}
                 onClick={handleClickOpen}
+                aria-label={translate(label)}
                 {...rest}
             >
                 {translate(label)}
             </Button>
-            <Dialog open={open} onClose={handleClose}>
+            <Dialog
+                aria-labelledby="dialog-title"
+                aria-describedby="dialog-description"
+                open={open}
+                onClose={handleClose}
+            >
                 <DialogTitle>{translate('common.msg.confirm.tip')}</DialogTitle>
                 <DialogContent>
                     <DialogContentText>
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 a31ff55..2861c4d 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
@@ -2,6 +2,8 @@
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.acs.framework.common.Cools;
+import com.zy.acs.framework.common.R;
 import com.zy.acs.manager.common.domain.MapAgvDto;
 import com.zy.acs.manager.common.domain.MapCodeDto;
 import com.zy.acs.manager.common.domain.MapDto;
@@ -9,13 +11,12 @@
 import com.zy.acs.manager.common.exception.BusinessException;
 import com.zy.acs.manager.core.service.MapService;
 import com.zy.acs.manager.core.service.floyd.FloydNavigateService;
+import com.zy.acs.manager.manager.controller.param.MapDataParam;
 import com.zy.acs.manager.manager.controller.param.MapParam;
 import com.zy.acs.manager.manager.entity.*;
 import com.zy.acs.manager.manager.enums.AgvStsType;
 import com.zy.acs.manager.manager.service.*;
 import com.zy.acs.manager.system.controller.BaseController;
-import com.zy.acs.framework.common.Cools;
-import com.zy.acs.framework.common.R;
 import com.zy.acs.manager.system.service.ConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -56,12 +57,19 @@
 
 
     @PreAuthorize("hasAuthority('manager:loc:list')")
-    @PostMapping("/data")
-    public R mapData(@RequestParam(required = false) Long zoneId) {
+    @PostMapping("/data/fetch")
+    public R fetch(@RequestParam(required = false) Long zoneId) {
         String mapData = configService.getVal("mapData", String.class);
         return R.ok().add(mapData);
     }
 
+    @PreAuthorize("hasAuthority('manager:loc:update')")
+    @PostMapping("/data/save")
+    public R save(@RequestBody MapDataParam param) {
+        return R.ok("Save Success");
+    }
+
+
 
 
 
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/param/MapDataParam.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/param/MapDataParam.java
new file mode 100644
index 0000000..1b1b1b0
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/param/MapDataParam.java
@@ -0,0 +1,19 @@
+package com.zy.acs.manager.manager.controller.param;
+
+import com.zy.acs.manager.manager.entity.MapItem;
+import lombok.Data;
+
+import java.util.List;
+
+
+/**
+ * Created by vincent on 3/15/2024
+ */
+@Data
+public class MapDataParam {
+
+    private Long zoneId;
+
+    private List<MapItem> itemList;
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/MapItem.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/MapItem.java
new file mode 100644
index 0000000..76deb26
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/MapItem.java
@@ -0,0 +1,36 @@
+package com.zy.acs.manager.manager.entity;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * Created by vincent on 3/15/2024
+ */
+@Data
+public class MapItem {
+
+    // data ------------------------------------------
+
+    private String type;
+
+    private String uuid;
+
+    private String no;
+
+    // dynamical data
+    private Map<String, Object> property;
+
+    // graph -----------------------------------------
+
+    private Double positionX;
+
+    private Double positionY;
+
+    private Double scaleX;
+
+    private Double scaleY;
+
+    private Double rotation;
+
+}

--
Gitblit v1.9.1