From 3553afdbe35ed5ff5d2ce2a85e90962a01de9a4a Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期六, 21 三月 2026 16:26:43 +0800
Subject: [PATCH] #

---
 zy-acs-flow/src/map/http.js                                                            |   74 ++++++++++++++++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/CodeController.java |   51 ++++++++++++
 zy-acs-fake/pom.xml                                                                    |    3 
 zy-acs-flow/src/map/insight/code/CodeMain.jsx                                          |   33 +++----
 zy-acs-manager/pom.xml                                                                 |    2 
 pom.xml                                                                                |    1 
 zy-acs-flow/src/map/insight/code/index.jsx                                             |   23 ++++-
 7 files changed, 159 insertions(+), 28 deletions(-)

diff --git a/pom.xml b/pom.xml
index a843c56..b1f20dc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,7 @@
         <spring-boot.version>2.5.3</spring-boot.version>
         <jedis.version>2.9.0</jedis.version>
         <snakeyaml.version>1.33</snakeyaml.version>
+        <druid.version>1.2.27</druid.version>
     </properties>
 
     <dependencies>
diff --git a/zy-acs-fake/pom.xml b/zy-acs-fake/pom.xml
index 6826c81..39da1dd 100644
--- a/zy-acs-fake/pom.xml
+++ b/zy-acs-fake/pom.xml
@@ -82,7 +82,7 @@
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid-spring-boot-starter</artifactId>
-            <version>1.2.6</version>
+            <version>${druid.version}</version>
         </dependency>
 
         <dependency>
@@ -103,4 +103,3 @@
     </build>
 
 </project>
-
diff --git a/zy-acs-flow/src/map/http.js b/zy-acs-flow/src/map/http.js
index bf59dcc..b0c48b1 100644
--- a/zy-acs-flow/src/map/http.js
+++ b/zy-acs-flow/src/map/http.js
@@ -204,6 +204,78 @@
     })
 }
 
+export const getCodeInfo = async (codeData, callback, errCallBack) => {
+    await request.post('/code/info', {
+        codeData,
+    }, {
+        headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
+    }).then((res) => {
+        const { code, msg, data } = res.data;
+        if (code === 200) {
+            callback(data);
+        } else {
+            notify?.error(msg);
+            if (errCallBack) {
+                errCallBack();
+            }
+        }
+    }).catch((error) => {
+        notify?.error(error.message);
+        console.error(error.message);
+        if (errCallBack) {
+            errCallBack();
+        }
+    })
+}
+
+export const getCodeRouteList = async (codeData, callback, errCallBack) => {
+    await request.post('/code/route/list', {
+        codeData,
+    }, {
+        headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
+    }).then((res) => {
+        const { code, msg, data } = res.data;
+        if (code === 200) {
+            callback(Array.isArray(data) ? data : []);
+        } else {
+            notify?.error(msg);
+            if (errCallBack) {
+                errCallBack();
+            }
+        }
+    }).catch((error) => {
+        notify?.error(error.message);
+        console.error(error.message);
+        if (errCallBack) {
+            errCallBack();
+        }
+    })
+}
+
+export const getCodeFuncStaList = async (codeData, callback, errCallBack) => {
+    await request.post('/code/funcSta/list', {
+        codeData,
+    }, {
+        headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
+    }).then((res) => {
+        const { code, msg, data } = res.data;
+        if (code === 200) {
+            callback(Array.isArray(data) ? data : []);
+        } else {
+            notify?.error(msg);
+            if (errCallBack) {
+                errCallBack();
+            }
+        }
+    }).catch((error) => {
+        notify?.error(error.message);
+        console.error(error.message);
+        if (errCallBack) {
+            errCallBack();
+        }
+    })
+}
+
 export const getRouteList = async (zoneId, callback, errCallBack) => {
     await request.post('/map/route/list', {
         zoneId: zoneId,
@@ -511,4 +583,4 @@
         console.error(error.message);
     }
     return null;
-}
\ No newline at end of file
+}
diff --git a/zy-acs-flow/src/map/insight/code/CodeMain.jsx b/zy-acs-flow/src/map/insight/code/CodeMain.jsx
index 6719584..f89fb26 100644
--- a/zy-acs-flow/src/map/insight/code/CodeMain.jsx
+++ b/zy-acs-flow/src/map/insight/code/CodeMain.jsx
@@ -55,10 +55,10 @@
         () => extractRelationItems(info, ['routeList', 'routes', 'routeRefs']),
         [info]
     );
-    const funcStaBool = detectBoolean(
-        info?.funcStaBool ?? info?.isFuncSta ?? info?.funcStation ?? info?.funcStaFlag
+    const funcStaRelations = useMemo(
+        () => extractRelationItems(info, ['funcStaList', 'funcStas']),
+        [info]
     );
-    const funcStaText = info?.funcSta$ || info?.funcStaName || info?.funcStaType || info?.funcStaCode || info?.funcStaUuid || info?.funcSta;
 
     const ruleList = useMemo(() => normalizeDirRule(info?.dirRule), [info?.dirRule]);
 
@@ -103,10 +103,6 @@
         }
     };
 
-    const funcStaLabel = funcStaBool == null
-        ? translate('common.enums.na')
-        : translate(funcStaBool ? 'common.enums.true' : 'common.enums.false');
-
     return (
         <Box sx={{ pr: 1, pb: 3 }}>
             <Grid container spacing={3} alignItems="flex-start">
@@ -147,7 +143,7 @@
                                     disabled={!info?.id}
                                     sx={{ alignSelf: 'flex-start', textTransform: 'none', px: 3 }}
                                 >
-                                    {translate('page.map.insight.code.actions.openDetail', { _: '杩涘叆 Code 椤甸潰' })}
+                                    {translate('page.map.insight.code.actions.openDetail', { _: '缂栬緫' })}
                                 </Button>
                             </Stack>
                         </Paper>
@@ -180,17 +176,10 @@
                                 />
                             </InfoPanel>
                             <InfoPanel title={translate('menu.funcSta', { _: '鍔熻兘绔�' })}>
-                                <Stack spacing={1}>
-                                    <BooleanDisplay
-                                        value={funcStaBool}
-                                        label={funcStaLabel}
-                                    />
-                                    {funcStaText && funcStaText !== funcStaLabel && (
-                                        <Typography variant="body2" color="text.secondary">
-                                            {funcStaText}
-                                        </Typography>
-                                    )}
-                                </Stack>
+                                <RelationsChips
+                                    items={funcStaRelations}
+                                    emptyLabel={translate('page.map.insight.code.relations.empty', { _: '鏆傛棤鍏宠仈淇℃伅' })}
+                                />
                             </InfoPanel>
                         </Stack>
                     </Paper>
@@ -592,6 +581,12 @@
         return item;
     }
     if (typeof item === 'object') {
+        if (item.startCode$ && item.endCode$) {
+            return `${item.startCode$} -> ${item.endCode$}`;
+        }
+        if (item.name || item.type || item.state) {
+            return [item.name, item.type, item.state].filter(Boolean).join(' / ');
+        }
         return item.name || item.code || item.data || item.no || item.uuid || item.locNo || item.staNo || JSON.stringify(item);
     }
     return String(item);
diff --git a/zy-acs-flow/src/map/insight/code/index.jsx b/zy-acs-flow/src/map/insight/code/index.jsx
index 63c651c..07ec19a 100644
--- a/zy-acs-flow/src/map/insight/code/index.jsx
+++ b/zy-acs-flow/src/map/insight/code/index.jsx
@@ -2,7 +2,7 @@
 import { useTranslate } from 'react-admin';
 import { Box, Tabs, Tab, Divider } from '@mui/material';
 import JsonShow from '../../JsonShow';
-import { getPointInfo } from '../../http';
+import { getCodeInfo, getCodeRouteList, getCodeFuncStaList } from '../../http';
 import CodeMain from './CodeMain';
 
 const CodeInsight = ({ sprite, setTitle }) => {
@@ -13,7 +13,7 @@
     const [loading, setLoading] = useState(false);
 
     const codeLabel = translate('page.map.devices.code', {
-        _: translate('page.map.devices.point', { _: 'Code' })
+        _: '鍦伴潰鐮�'
     });
 
     const fetchCodeInfo = useCallback(async (code, options = {}) => {
@@ -26,9 +26,22 @@
         setTitle(`${codeLabel} - ${code}`);
         setCurrentCode(code);
         try {
-            await getPointInfo(code, (response) => {
-                setCodeInfo(response || null);
-            });
+            const [info, routeList, funcStaList] = await Promise.all([
+                new Promise((resolve) => {
+                    getCodeInfo(code, resolve, () => resolve(null));
+                }),
+                new Promise((resolve) => {
+                    getCodeRouteList(code, resolve, () => resolve([]));
+                }),
+                new Promise((resolve) => {
+                    getCodeFuncStaList(code, resolve, () => resolve([]));
+                }),
+            ]);
+            setCodeInfo(info ? {
+                ...info,
+                routeList,
+                funcStaList,
+            } : null);
         } finally {
             if (!options?.silent) {
                 setLoading(false);
diff --git a/zy-acs-manager/pom.xml b/zy-acs-manager/pom.xml
index 5ee362c..b7c433d 100644
--- a/zy-acs-manager/pom.xml
+++ b/zy-acs-manager/pom.xml
@@ -137,7 +137,7 @@
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid-spring-boot-starter</artifactId>
-            <version>1.2.6</version>
+            <version>${druid.version}</version>
         </dependency>
 
         <dependency>
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/CodeController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/CodeController.java
index b5c4826..b541781 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/CodeController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/CodeController.java
@@ -16,10 +16,12 @@
 import com.zy.acs.manager.common.utils.ExcelUtil;
 import com.zy.acs.manager.manager.entity.Code;
 import com.zy.acs.manager.manager.entity.CodeGap;
+import com.zy.acs.manager.manager.entity.FuncSta;
 import com.zy.acs.manager.manager.entity.Route;
 import com.zy.acs.manager.manager.enums.StatusType;
 import com.zy.acs.manager.manager.service.CodeGapService;
 import com.zy.acs.manager.manager.service.CodeService;
+import com.zy.acs.manager.manager.service.FuncStaService;
 import com.zy.acs.manager.manager.service.RouteService;
 import com.zy.acs.manager.manager.service.impl.CodeServiceImpl;
 import com.zy.acs.manager.system.controller.BaseController;
@@ -43,6 +45,8 @@
     private CodeGapService codeGapService;
     @Autowired
     private RouteService routeService;
+    @Autowired
+    private FuncStaService funcStaService;
 
     @PreAuthorize("hasAuthority('manager:code:list')")
     @PostMapping("/code/page")
@@ -70,6 +74,53 @@
         return R.ok().add(codeService.getCacheById(id));
     }
 
+    @PreAuthorize("hasAuthority('manager:code:list')")
+    @PostMapping("/code/info")
+    public R info(@RequestParam(required = false) String codeData) {
+        if (Cools.isEmpty(codeData)) {
+            return R.error();
+        }
+        Code code = codeService.getCacheByData(codeData);
+        if (code == null) {
+            return R.error("Code Not Found");
+        }
+        return R.ok().add(code);
+    }
+
+    @PreAuthorize("hasAuthority('manager:code:list')")
+    @PostMapping("/code/route/list")
+    public R routeList(@RequestParam(required = false) String codeData) {
+        if (Cools.isEmpty(codeData)) {
+            return R.error();
+        }
+        Code code = codeService.getCacheByData(codeData);
+        if (code == null) {
+            return R.ok().add(Collections.emptyList());
+        }
+        List<Route> routeList = routeService.list(new LambdaQueryWrapper<Route>()
+                .eq(Route::getStatus, StatusType.ENABLE.val)
+                .and(wrapper -> wrapper.eq(Route::getStartCode, code.getId()).or().eq(Route::getEndCode, code.getId()))
+                .orderByAsc(Route::getId));
+        return R.ok().add(routeList);
+    }
+
+    @PreAuthorize("hasAuthority('manager:code:list')")
+    @PostMapping("/code/funcSta/list")
+    public R funcStaList(@RequestParam(required = false) String codeData) {
+        if (Cools.isEmpty(codeData)) {
+            return R.error();
+        }
+        Code code = codeService.getCacheByData(codeData);
+        if (code == null) {
+            return R.ok().add(Collections.emptyList());
+        }
+        List<FuncSta> funcStaList = funcStaService.list(new LambdaQueryWrapper<FuncSta>()
+                .eq(FuncSta::getCode, code.getId())
+                .eq(FuncSta::getStatus, StatusType.ENABLE.val)
+                .orderByAsc(FuncSta::getId));
+        return R.ok().add(funcStaList);
+    }
+
     @PreAuthorize("hasAuthority('manager:code:save')")
     @OperationLog("Create Code")
     @PostMapping("/code/save")

--
Gitblit v1.9.1