From 39b113ba999014bf5e1a021ff70baef32990b538 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期五, 26 十二月 2025 17:03:22 +0800
Subject: [PATCH] 新工厂环境和数据导入接口

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/utils/MapDataListener.java |  138 +++++++++++++++++++++++++++
 zy-acs-manager/src/main/resources/application.yml                                             |    4 
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/utils/UtilsController.java |  100 ++++++++++++++++++++
 zy-acs-gateway/src/main/resources/application.yml                                             |    4 
 zy-acs-manager/pom.xml                                                                        |    8 +
 5 files changed, 249 insertions(+), 5 deletions(-)

diff --git a/zy-acs-gateway/src/main/resources/application.yml b/zy-acs-gateway/src/main/resources/application.yml
index 5f0fe10..f72f3a0 100644
--- a/zy-acs-gateway/src/main/resources/application.yml
+++ b/zy-acs-gateway/src/main/resources/application.yml
@@ -6,7 +6,7 @@
     name: @pom.artifactId@
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://localhost:3306/rcs_ctu_stable?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://localhost:3306/rcs_ctu_stable_xgc?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
     username: root
     password: xltys1995
 
@@ -24,7 +24,7 @@
   max: 30
   min: 10
   timeout: 5000
-  index: 8
+  index: 9
 
 logging:
   file:
diff --git a/zy-acs-manager/pom.xml b/zy-acs-manager/pom.xml
index c98e97f..49c195b 100644
--- a/zy-acs-manager/pom.xml
+++ b/zy-acs-manager/pom.xml
@@ -143,7 +143,13 @@
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>easyexcel</artifactId>
-            <version>2.2.6</version>
+            <version>4.0.3</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.16.1</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/utils/MapDataListener.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/utils/MapDataListener.java
new file mode 100644
index 0000000..1e7acbc
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/utils/MapDataListener.java
@@ -0,0 +1,138 @@
+package com.zy.acs.manager.manager.controller.utils;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.read.listener.ReadListener;
+import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
+import com.zy.acs.common.utils.GsonUtils;
+import com.zy.acs.framework.common.Cools;
+import com.zy.acs.manager.manager.entity.Code;
+import com.zy.acs.manager.manager.entity.CodeGap;
+import com.zy.acs.manager.manager.entity.Route;
+import com.zy.acs.manager.manager.service.CodeGapService;
+import com.zy.acs.manager.manager.service.CodeService;
+import com.zy.acs.manager.manager.service.RouteService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.*;
+
+@Slf4j
+public class MapDataListener implements ReadListener<Map<Integer, String>> {
+    /**
+     * 姣忛殧5鏉″瓨鍌ㄦ暟鎹簱锛屽疄闄呬娇鐢ㄤ腑鍙互100鏉★紝鐒跺悗娓呯悊list 锛屾柟渚垮唴瀛樺洖鏀�
+     */
+    private static final int BATCH_COUNT = 10000;
+    private List<Map<Integer, String>> cachedDataList = Lists.newArrayListWithExpectedSize(BATCH_COUNT);
+    /**
+     * 鍋囪杩欎釜鏄竴涓狣AO锛屽綋鐒舵湁涓氬姟閫昏緫杩欎釜涔熷彲浠ユ槸涓�涓猻ervice銆傚綋鐒跺鏋滀笉鐢ㄥ瓨鍌ㄨ繖涓璞℃病鐢ㄣ��
+     */
+    private RouteService routeService;
+
+    private CodeService codeService;
+
+    private CodeGapService codeGapService;
+
+    private List<Code> codes = new ArrayList<>();
+
+    private List<Route> routes = new ArrayList<>();
+
+    private List<CodeGap> codeGaps = new ArrayList<>();
+
+    /**
+     * 濡傛灉浣跨敤浜唖pring,璇蜂娇鐢ㄨ繖涓瀯閫犳柟娉曘�傛瘡娆″垱寤篖istener鐨勬椂鍊欓渶瑕佹妸spring绠$悊鐨勭被浼犺繘鏉�
+     *
+     * @param routeService
+     */
+    public MapDataListener(RouteService routeService, CodeService codeService, CodeGapService codeGapService) {
+        this.routeService = routeService;
+        this.codeService = codeService;
+        this.codeGapService = codeGapService;
+    }
+
+
+    /**
+     * 杩欎釜姣忎竴鏉℃暟鎹В鏋愰兘浼氭潵璋冪敤
+     *
+     * @param data    one row value. It is same as {@link AnalysisContext#readRowHolder()}
+     * @param context
+     */
+    @Override
+    public void invoke(Map<Integer, String> data, AnalysisContext context) {
+        log.info("瑙f瀽鍒颁竴鏉℃暟鎹�:{}", JSON.toJSONString(data));
+        cachedDataList.add(data);
+        // 杈惧埌BATCH_COUNT浜嗭紝闇�瑕佸幓瀛樺偍涓�娆℃暟鎹簱锛岄槻姝㈡暟鎹嚑涓囨潯鏁版嵁鍦ㄥ唴瀛橈紝瀹规槗OOM
+        if (cachedDataList.size() >= BATCH_COUNT) {
+            saveData();
+            // 瀛樺偍瀹屾垚娓呯悊 list
+            cachedDataList = Lists.newArrayListWithExpectedSize(BATCH_COUNT);
+        }
+    }
+
+
+    /**
+     * 鎵�鏈夋暟鎹В鏋愬畬鎴愪簡 閮戒細鏉ヨ皟鐢�
+     *
+     * @param context
+     */
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        // 杩欓噷涔熻淇濆瓨鏁版嵁锛岀‘淇濇渶鍚庨仐鐣欑殑鏁版嵁涔熷瓨鍌ㄥ埌鏁版嵁搴�
+        Map<Integer, String> xData = cachedDataList.get(78);
+        Map<Integer, String> x = new HashMap<>();
+        xData.entrySet().forEach(entry -> {
+            x.put(entry.getKey() , entry.getValue());
+        });
+        Map<Integer, String> y = new HashMap<>();
+        for (int i = 0; i < cachedDataList.size(); i++) {
+            Map<Integer, String> integerStringMap = cachedDataList.get(i);
+            y.put(i, integerStringMap.get(1));
+        }
+        log.info("x杞达細{}", JSON.toJSONString(x));
+        log.info("y杞达細{}", JSON.toJSONString(y));
+        for (int i = 0; i < cachedDataList.size(); i++) {
+            if (i >= 78) {
+                continue;
+            }
+            Map<Integer, String> integerStringMap = cachedDataList.get(i);
+            int finalI = i;
+            integerStringMap.entrySet().forEach(entry -> {
+                if (entry.getValue() != null && entry.getValue().startsWith("00")) {
+                    log.info("鏁版嵁锛歿}", entry.getValue());
+                    Code code = new Code();
+                    code.setData(entry.getValue());
+                    code.setUuid("code".concat(code.getData()));
+                    if (x.get(entry.getKey()) == null) {
+                        log.info("x杞存暟鎹负绌猴細{}", entry.getKey());
+                    }
+                    code.setX(Double.parseDouble(x.get(entry.getKey()))+10000);
+                    if (y.get(finalI) == null) {
+                        log.info("y杞存暟鎹负绌猴細{},{}", finalI, y.get(finalI));
+                    }
+                    code.setY(Double.parseDouble(y.get(finalI))+10000);
+                    code.setScale(GsonUtils.toJson(Cools.add("x", 1).add("y", 1)));
+                    code.setCreateTime(new Date());
+                    code.setUpdateTime(new Date());
+                    codes.add(code);
+
+
+
+                }
+            });
+        }
+        //log.info("鎵�鏈夋暟鎹В鏋愬畬鎴愶紒{}", JSON.toJSONString(codes));
+        log.info("鎵�鏈夋暟鎹В鏋愬畬鎴愶紒{}", codes.size());
+        saveData();
+    }
+
+
+    /**
+     * 鍔犱笂瀛樺偍鏁版嵁搴�
+     */
+    private void saveData() {
+        log.info("{}鏉℃暟鎹紝寮�濮嬪瓨鍌ㄦ暟鎹簱锛�", cachedDataList.size());
+        for (Code code : codes){
+            codeService.save(code);
+        }
+        log.info("瀛樺偍鏁版嵁搴撴垚鍔燂紒");
+    }
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/utils/UtilsController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/utils/UtilsController.java
new file mode 100644
index 0000000..9a7ab84
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/utils/UtilsController.java
@@ -0,0 +1,100 @@
+package com.zy.acs.manager.manager.controller.utils;
+
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.google.common.collect.Lists;
+import com.zy.acs.common.utils.Utils;
+import com.zy.acs.manager.common.annotation.OperationLog;
+import com.zy.acs.manager.manager.entity.Code;
+import com.zy.acs.manager.manager.entity.Loc;
+import com.zy.acs.manager.manager.service.CodeGapService;
+import com.zy.acs.manager.manager.service.CodeService;
+import com.zy.acs.manager.manager.service.LocService;
+import com.zy.acs.manager.manager.service.RouteService;
+import com.zy.acs.manager.system.controller.BaseController;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by vincent on 2023/6/12
+ */
+@Api(tags = "Utils Api")
+@RestController
+@RequestMapping("/api/file")
+public class UtilsController extends BaseController {
+
+    @Autowired
+    private RouteService routeService;
+
+    @Autowired
+    private LocService locService;
+
+    @Autowired
+    private CodeService codeService;
+
+    @Autowired
+    private CodeGapService codeGapService;
+
+    /**
+     * 鏂囦欢涓婁紶
+     * <p>
+     * 1. 鍒涘缓excel瀵瑰簲鐨勫疄浣撳璞� 鍙傜収{@link Map<Integer, String>}
+     * <p>
+     * 2. 鐢变簬榛樿涓�琛岃鐨勮鍙杄xcel锛屾墍浠ラ渶瑕佸垱寤篹xcel涓�琛屼竴琛岀殑鍥炶皟鐩戝惉鍣紝鍙傜収{@link MapDataListener}
+     * <p>
+     * 3. 鐩存帴璇诲嵆鍙�
+     */
+    @RequestMapping("/excel/map/import")
+    @ResponseBody
+    @OperationLog("import map data")
+    public String upload(MultipartFile file) throws IOException {
+        EasyExcel.read(file.getInputStream(), new MapDataListener(routeService, codeService, codeGapService)).sheet().doRead();
+        return "success";
+    }
+
+
+    private List<Integer> starts = Lists.newArrayList(7, 62, 126, 182, 237, 292, 347, 436, 525, 614, 793, 882, 970, 1059, 1148, 1324, 1416, 1505);
+
+    private int d = 10;
+
+    private int d2 = 5;
+
+    private List<Integer> starts2 = Lists.newArrayList(389, 478, 567, 745, 835, 923, 1012, 1101, 1190, 1366, 1458, 1547);
+
+
+    @RequestMapping("/loc")
+    @ResponseBody
+    @OperationLog("import map data")
+    public String loc() {
+        List<Loc> list = locService.list(new LambdaQueryWrapper<Loc>().orderByAsc(Loc::getRow).orderByAsc(Loc::getBay).orderByAsc(Loc::getLev));
+        for (Loc loc : list) {
+//            if (loc.getBay() <= 24) {
+//                Integer i = starts.get((loc.getRow() - 1) / 2);
+//                Code cacheByData = codeService.getCacheByData(Utils.zeroFill((loc.getBay()%8 -1+ i + loc.getBay() / 8 * 10) + "", 8));
+//                loc.setCode(cacheByData.getId());
+//                locService.updateById(loc);
+//            }
+//            if (loc.getBay() > 24 && loc.getBay() <= 32) {
+//                Integer i = starts.get((loc.getRow() - 1)  / 2) + 30;
+//                Code cacheByData = codeService.getCacheByData(Utils.zeroFill(((loc.getBay() - 24)%4-1 + i + (loc.getBay() - 24) / 4 * 6) + "", 8));
+//                loc.setCode(cacheByData.getId());
+//                locService.updateById(loc);
+//            }
+            if (loc.getBay() > 32) {
+                Integer i = starts2.get((loc.getRow() - 13) / 2);
+                Code cacheByData = codeService.getCacheByData(Utils.zeroFill((Utils.zeroFill((((loc.getBay()-1) % 8) + i + (((loc.getBay()-1) / 8) - 4) * 10) + "", 8)) + "", 8));
+                loc.setCode(cacheByData.getId());
+                locService.updateById(loc);
+            }
+        }
+        return "success";
+    }
+}
diff --git a/zy-acs-manager/src/main/resources/application.yml b/zy-acs-manager/src/main/resources/application.yml
index 0236cfa..94fb3d0 100644
--- a/zy-acs-manager/src/main/resources/application.yml
+++ b/zy-acs-manager/src/main/resources/application.yml
@@ -7,7 +7,7 @@
     static-path-pattern: /**
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://localhost:3306/rcs_ctu_stable?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://localhost:3306/rcs_ctu_stable_xgc?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
     username: root
     password: xltys1995
     type: com.alibaba.druid.pool.DruidDataSource
@@ -48,7 +48,7 @@
   max: 30
   min: 10
   timeout: 5000
-  index: 8
+  index: 9
 
 floyd:
   enable: false

--
Gitblit v1.9.1