From c9c80ecde06d151f4f2f3ccf46d3f4c0e65cd8a1 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期二, 23 九月 2025 13:13:46 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/utils/MapExcelUtils.java |  107 ++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 69 insertions(+), 38 deletions(-)

diff --git a/src/main/java/com/zy/asrs/utils/MapExcelUtils.java b/src/main/java/com/zy/asrs/utils/MapExcelUtils.java
index e3ffb96..ad41208 100644
--- a/src/main/java/com/zy/asrs/utils/MapExcelUtils.java
+++ b/src/main/java/com/zy/asrs/utils/MapExcelUtils.java
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.core.common.Cools;
+import com.core.exception.CoolException;
 import com.zy.asrs.domain.enums.MapExcelNodeType;
 import com.zy.common.model.MapNode;
 import com.zy.core.enums.MapNodeType;
@@ -15,10 +16,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Component
 public class MapExcelUtils {
@@ -72,6 +70,8 @@
                 for (int bay = 1; bay <= finalBay; bay++) {
                     MapNode node = new MapNode();
                     node.setId(row + "-" + bay);
+                    node.setRow(row);
+                    node.setBay(bay);
 
                     HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
                     String nodeType = nodeData.get("bgColor").toString();
@@ -102,6 +102,7 @@
                 mapList.add(rows);
             }
 
+            MapNode baseMapNode = null;
             //鐢熸垚灏忚溅鍦板浘鍧愭爣闂磋窛鏁版嵁
             for (int row = 1; row <= finalRow; row++) {
                 for (int bay = 1; bay <= finalBay; bay++) {
@@ -114,6 +115,29 @@
                     Integer left = bayData.getInteger("left");
                     Integer right = bayData.getInteger("right");
 
+                    HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
+                    String nodeValue = nodeData.get("value").toString();
+                    if (Utils.isJSON(nodeValue)) {
+                        JSONObject jsonData = JSON.parseObject(nodeValue);
+                        if (jsonData.containsKey("top")) {
+                            top = jsonData.getInteger("top");
+                        }
+                        if (jsonData.containsKey("bottom")) {
+                            bottom = jsonData.getInteger("bottom");
+                        }
+                        if (jsonData.containsKey("left")) {
+                            left = jsonData.getInteger("left");
+                        }
+                        if (jsonData.containsKey("right")) {
+                            right = jsonData.getInteger("right");
+                        }
+
+                        if (jsonData.containsKey("xBase")) {
+                            //鍩虹偣
+                            baseMapNode = mapNode;
+                        }
+                    }
+
                     mapNode.setTop(top);
                     mapNode.setBottom(bottom);
                     mapNode.setLeft(left);
@@ -121,51 +145,58 @@
                 }
             }
 
-            //鐢熸垚鐗涚溂Y鍧愭爣鍩哄噯鏁版嵁
+            if (baseMapNode == null) {
+                throw new CoolException("鏈缃熀鍑嗙偣");
+            }
+
+            List<Integer> rowList = new ArrayList<>();
+            List<Integer> bayList = new ArrayList<>();
+            for (int row = 1; row <= finalRow; row++) {
+                rowList.add(row);
+            }
             for (int bay = 1; bay <= finalBay; bay++) {
+                bayList.add(bay);
+            }
+
+            if (baseMapNode.getRow() != 1) {
+                Collections.reverse(rowList);
+            }
+
+            if (baseMapNode.getBay() != 1) {
+                Collections.reverse(bayList);
+            }
+
+            //鐢熸垚鐗涚溂Y鍧愭爣鍩哄噯鏁版嵁
+            for (int i = 0; i < bayList.size(); i++) {
+                Integer bay = bayList.get(i);
                 int yBase = 10000;
-                for (int row = 1; row <= finalRow; row++) {
+                for (int j = 0; j < rowList.size(); j++) {
+                    Integer row = rowList.get(j);
                     MapNode mapNode = mapList.get(row - 1).get(bay - 1);
-                    HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
-
-                    JSONObject rowData = rowMap.get(row);
-                    Integer bottom = rowData.getInteger("bottom");
-                    String nodeValue = nodeData.get("value").toString();
-                    if (Utils.isJSON(nodeValue)) {
-                        JSONObject jsonData = JSON.parseObject(nodeValue);
-                        if (jsonData.containsKey("bottom")) {
-                            bottom = jsonData.getInteger("bottom");
-                        }
-                    }
-
-                    if (row != 1) {
-                        yBase += bottom;
-                    }
                     mapNode.setYBase(yBase);
+
+                    if (baseMapNode.getRow() == 1) {
+                        yBase += mapNode.getBottom();
+                    }else {
+                        yBase += mapNode.getTop();
+                    }
                 }
             }
 
             //鐢熸垚鐗涚溂X鍧愭爣鍩哄噯鏁版嵁
-            for (int row = 1; row <= finalRow; row++) {
+            for (int i = 0; i < rowList.size(); i++) {
+                Integer row = rowList.get(i);
                 int xBase = 10000;
-                for (int bay = 1; bay <= finalBay; bay++) {
+                for (int j = 0; j < bayList.size(); j++) {
+                    Integer bay = bayList.get(j);
                     MapNode mapNode = mapList.get(row - 1).get(bay - 1);
-                    HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
-
-                    JSONObject bayData = bayMap.get(bay);
-                    Integer right = bayData.getInteger("right");
-                    String nodeValue = nodeData.get("value").toString();
-                    if (Utils.isJSON(nodeValue)) {
-                        JSONObject jsonData = JSON.parseObject(nodeValue);
-                        if (jsonData.containsKey("right")) {
-                            right = jsonData.getInteger("right");
-                        }
-                    }
-
-                    if (bay != 1) {
-                        xBase += right;
-                    }
                     mapNode.setXBase(xBase);
+
+                    if (baseMapNode.getBay() == 1) {
+                        xBase += mapNode.getRight();
+                    }else {
+                        xBase += mapNode.getLeft();
+                    }
                 }
             }
 

--
Gitblit v1.9.1