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