From 8a1f312d9f7842bb02c97b200e017926f0af63a5 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 17 九月 2025 14:48:08 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/domain/enums/MapExcelNodeType.java |   43 +++
 src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java        |   18 
 src/main/java/com/zy/common/model/MapNode.java               |    2 
 src/main/java/com/zy/asrs/controller/LocMastController.java  |  202 +++++++++----
 src/main/java/com/zy/asrs/utils/MapExcelUtils.java           |  311 ++++++++++++++++++++++
 src/main/java/com/zy/asrs/utils/Utils.java                   |   14 +
 src/main/webapp/views/admin/basMap/basMap.html               |    6 
 src/main/java/com/zy/asrs/controller/BasMapController.java   |   50 +++
 src/main/webapp/static/js/basMap/basMap.js                   |  135 +++++----
 pom.xml                                                      |   11 
 src/main/java/com/zy/core/ServerBootstrap.java               |    3 
 11 files changed, 659 insertions(+), 136 deletions(-)

diff --git a/pom.xml b/pom.xml
index aca0a6a..cfdaad0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -111,6 +111,17 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-aop</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.13</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.13</version>
+        </dependency>
+
     </dependencies>
 
     <build>
diff --git a/src/main/java/com/zy/asrs/controller/BasMapController.java b/src/main/java/com/zy/asrs/controller/BasMapController.java
index 2d248c1..16ca989 100644
--- a/src/main/java/com/zy/asrs/controller/BasMapController.java
+++ b/src/main/java/com/zy/asrs/controller/BasMapController.java
@@ -1,20 +1,31 @@
 package com.zy.asrs.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.core.common.DateUtils;
 import com.zy.asrs.entity.BasMap;
+import com.zy.asrs.entity.BasShuttleCharge;
 import com.zy.asrs.service.BasMapService;
 import com.core.annotations.ManagerAuth;
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.common.R;
+import com.zy.asrs.service.BasShuttleChargeService;
+import com.zy.asrs.utils.MapExcelUtils;
+import com.zy.common.model.MapNode;
+import com.zy.common.utils.RedisUtil;
 import com.zy.common.web.BaseController;
+import com.zy.core.enums.RedisKeyType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
+import java.io.IOException;
 import java.util.*;
 
 @RestController
@@ -22,6 +33,10 @@
 
     @Autowired
     private BasMapService basMapService;
+    @Autowired
+    private BasShuttleChargeService basShuttleChargeService;
+    @Autowired
+    private RedisUtil redisUtil;
 
     @RequestMapping(value = "/basMap/{id}/auth")
     @ManagerAuth
@@ -122,4 +137,39 @@
         return R.ok();
     }
 
+    @Autowired
+    private MapExcelUtils mapExcelUtils;
+
+    @PostMapping("/basMap/upload")
+    public R uploadExcel(@RequestParam("file") MultipartFile file) throws IOException {
+        // 淇濆瓨涓婁紶鐨勬枃浠跺埌涓存椂浣嶇疆
+        String tempFilePath = System.getProperty("java.io.tmpdir") + file.getOriginalFilename();
+        file.transferTo(new File(tempFilePath));
+
+        HashMap<Integer, List<List<HashMap<String, Object>>>> dataMap = mapExcelUtils.readExcel(tempFilePath);
+        HashMap<Integer, List<List<MapNode>>> levMap = mapExcelUtils.processExcelData(dataMap);
+
+        // 鍒犻櫎涓存椂鏂囦欢
+        new File(tempFilePath).delete();
+
+        basMapService.delete(new EntityWrapper<>());
+
+        for (Map.Entry<Integer, List<List<MapNode>>> entry : levMap.entrySet()) {
+            Integer lev = entry.getKey();
+            List<List<MapNode>> map = entry.getValue();
+
+            Date now = new Date();
+            BasMap basMap = new BasMap();
+            basMap.setLev(lev);
+            basMap.setOriginData(JSON.toJSONString(map, SerializerFeature.DisableCircularReferenceDetect));
+            basMap.setCreateTime(now);
+            basMap.setUpdateTime(now);
+            basMapService.insert(basMap);
+
+            redisUtil.del(RedisKeyType.MAP.key + lev);
+        }
+
+        return R.ok();
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/controller/LocMastController.java b/src/main/java/com/zy/asrs/controller/LocMastController.java
index 55346b9..09048b0 100644
--- a/src/main/java/com/zy/asrs/controller/LocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -13,8 +13,10 @@
 import com.core.common.R;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.BasMap;
+import com.zy.asrs.entity.BasShuttleCharge;
 import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.service.BasMapService;
+import com.zy.asrs.service.BasShuttleChargeService;
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.MapNode;
@@ -41,6 +43,8 @@
     private LocMastService locMastService;
     @Autowired
     private BasMapService basMapService;
+    @Autowired
+    private BasShuttleChargeService basShuttleChargeService;
 
     @RequestMapping(value = "/locMast/{id}/auth")
     @ManagerAuth
@@ -145,81 +149,147 @@
     @PostMapping("/locMast/init")
     @ManagerAuth(memo = "鍒濆鍖栧簱浣�")
     @Transactional
-    public R locMastInit(@RequestParam Integer lev) {
-        BasMap basMap = basMapService.selectLatestMap(lev);
-        locMastService.delete(new EntityWrapper<>(new LocMast())
-                .eq("lev1", lev));
-        List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
-        for (int row = 0; row < lists.size(); row++) {
-            List<MapNode> nodeList = lists.get(row);
-            for (int bay = 0; bay < nodeList.size(); bay++) {
-                MapNode mapNode = nodeList.get(bay);
+    public R locMastInit() {
+        List<BasMap> basMaps = basMapService.selectList(new EntityWrapper<BasMap>().orderBy("lev", true));
+        basShuttleChargeService.delete(new EntityWrapper<>());
+        int chargeNo = 1;
+        for (BasMap basMap : basMaps) {
+            Integer lev = basMap.getLev();
+            locMastService.delete(new EntityWrapper<>(new LocMast())
+                    .eq("lev1", lev));
+            List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
+            for (int row = 0; row < lists.size(); row++) {
+                List<MapNode> nodeList = lists.get(row);
+                for (int bay = 0; bay < nodeList.size(); bay++) {
+                    MapNode mapNode = nodeList.get(bay);
 
-                if (mapNode.getValue() == MapNodeType.DISABLE.id) {
-                    continue;
-                }
-
-                String locNo = Utils.getLocNo(row, bay, lev);
-                LocMast locMast = new LocMast();
-                locMast.setLocNo(locNo);
-                locMast.setRow1(row);
-                locMast.setBay1(bay);
-                locMast.setLev1(lev);
-                locMast.setStatus(1);
-
-                if (mapNode.getValue() == MapNodeType.NORMAL_PATH.id) {
-                    locMast.setLocSts(LocStsType.O.toString());
-                } else if (mapNode.getValue() == MapNodeType.MAIN_PATH.id) {
-                    locMast.setLocSts(LocStsType.W.toString());
-                }
-
-                locMastService.insert(locMast);
-            }
-        }
-
-        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("lev1", lev).orderBy("row1", false));
-        Integer rowMax = locMast.getRow1();
-        Integer baseRow = basMap.getBaseRow();
-        Integer baseRowCode = basMap.getBaseRowCode();
-
-        for (int i = baseRow; i <= rowMax; i++) {
-            Integer baseBayCode = basMap.getBaseBayCode();
-            if (basMap.getBaseBay() > 0) {
-                for (int j = 1; j <= basMap.getBaseBay(); j++) {
-                    String locNo = Utils.getLocNo(i, j, lev);
-
-                    LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
-                            .eq("loc_no", locNo));
-                    if (locMast1 != null) {
-                        HashMap<String, Object> point = new HashMap<>();
-                        point.put("y", baseRowCode);
-                        point.put("x", baseBayCode);
-                        point.put("z", lev);
-                        locMast1.setQrCodeValue(JSON.toJSONString(point));
-                        locMastService.updateById(locMast1);
+                    if (mapNode.getValue() == MapNodeType.DISABLE.id) {
+                        continue;
                     }
-                    baseBayCode += 1;
+
+                    String locNo = Utils.getLocNo(row, bay, lev);
+                    LocMast locMast = new LocMast();
+                    locMast.setLocNo(locNo);
+                    locMast.setRow1(row);
+                    locMast.setBay1(bay);
+                    locMast.setLev1(lev);
+                    locMast.setStatus(1);
+
+                    if (mapNode.getValue() == MapNodeType.NORMAL_PATH.id) {
+                        locMast.setLocSts(LocStsType.O.toString());
+                    } else if (mapNode.getValue() == MapNodeType.MAIN_PATH.id) {
+                        locMast.setLocSts(LocStsType.W.toString());
+                    } else if (mapNode.getValue() == MapNodeType.CHARGE.id) {
+                        locMast.setLocSts(LocStsType.C.toString());
+
+                        BasShuttleCharge basShuttleCharge = new BasShuttleCharge();
+                        basShuttleCharge.setChargeId(chargeNo++);
+                        basShuttleCharge.setLocNo(locNo);
+                        basShuttleCharge.setWaitLocNo(locNo);
+                        basShuttleCharge.setStatus(1);
+                        basShuttleCharge.setCreateTime(new Date());
+                        basShuttleCharge.setUpdateTime(new Date());
+                        basShuttleChargeService.insert(basShuttleCharge);
+                    } else if (mapNode.getValue() == MapNodeType.CONVEYOR.id) {
+                        locMast.setLocSts(LocStsType.E.toString());
+                    } else if (mapNode.getValue() == MapNodeType.LIFT.id) {
+                        locMast.setLocSts(LocStsType.E.toString());
+                    }
+
+                    locMastService.insert(locMast);
+                }
+            }
+
+            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("lev1", lev).orderBy("row1", false));
+            Integer rowMax = locMast.getRow1();
+            LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("lev1", lev).orderBy("bay1", false));
+            Integer bayMax = locMast2.getBay1();
+
+            Integer baseRow = basMap.getBaseRow();
+            Integer baseRowCode = basMap.getBaseRowCode();
+
+            if (baseRow > 0) {
+                for (int i = baseRow; i <= rowMax; i++) {
+                    Integer baseBayCode = basMap.getBaseBayCode();
+                    if (basMap.getBaseBay() > 0) {
+                        for (int j = basMap.getBaseBay(); j <= bayMax; j++) {
+                            String locNo = Utils.getLocNo(i, j, lev);
+
+                            LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                    .eq("loc_no", locNo));
+                            if (locMast1 != null) {
+                                HashMap<String, Object> point = new HashMap<>();
+                                point.put("y", baseRowCode);
+                                point.put("x", baseBayCode);
+                                point.put("z", lev);
+                                locMast1.setQrCodeValue(JSON.toJSONString(point));
+                                locMastService.updateById(locMast1);
+                            }
+                            baseBayCode += 1;
+                        }
+                    }else {
+                        int baseBay = basMap.getBaseBay() * -1;
+                        for (int j = baseBay; j > 0; j--) {
+                            String locNo = Utils.getLocNo(i, j, lev);
+
+                            LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                    .eq("loc_no", locNo));
+                            if (locMast1 != null) {
+                                HashMap<String, Object> point = new HashMap<>();
+                                point.put("y", baseRowCode);
+                                point.put("x", baseBayCode);
+                                point.put("z", lev);
+                                locMast1.setQrCodeValue(JSON.toJSONString(point));
+                                locMastService.updateById(locMast1);
+                            }
+                            baseBayCode += 1;
+                        }
+                    }
+                    baseRowCode += 1;
                 }
             }else {
-                int baseBay = basMap.getBaseBay() * -1;
-                for (int j = baseBay; j > 0; j--) {
-                    String locNo = Utils.getLocNo(i, j, lev);
+                baseRow = baseRow * -1;
+                for (int i = baseRow; i > 0; i--) {
+                    Integer baseBayCode = basMap.getBaseBayCode();
+                    if (basMap.getBaseBay() > 0) {
+                        for (int j = basMap.getBaseBay(); j <= bayMax; j++) {
+                            String locNo = Utils.getLocNo(i, j, lev);
 
-                    LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
-                            .eq("loc_no", locNo));
-                    if (locMast1 != null) {
-                        HashMap<String, Object> point = new HashMap<>();
-                        point.put("y", baseRowCode);
-                        point.put("x", baseBayCode);
-                        point.put("z", lev);
-                        locMast1.setQrCodeValue(JSON.toJSONString(point));
-                        locMastService.updateById(locMast1);
+                            LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                    .eq("loc_no", locNo));
+                            if (locMast1 != null) {
+                                HashMap<String, Object> point = new HashMap<>();
+                                point.put("y", baseRowCode);
+                                point.put("x", baseBayCode);
+                                point.put("z", lev);
+                                locMast1.setQrCodeValue(JSON.toJSONString(point));
+                                locMastService.updateById(locMast1);
+                            }
+                            baseBayCode += 1;
+                        }
+                    }else {
+                        int baseBay = basMap.getBaseBay() * -1;
+                        for (int j = baseBay; j > 0; j--) {
+                            String locNo = Utils.getLocNo(i, j, lev);
+
+                            LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                    .eq("loc_no", locNo));
+                            if (locMast1 != null) {
+                                HashMap<String, Object> point = new HashMap<>();
+                                point.put("y", baseRowCode);
+                                point.put("x", baseBayCode);
+                                point.put("z", lev);
+                                locMast1.setQrCodeValue(JSON.toJSONString(point));
+                                locMastService.updateById(locMast1);
+                            }
+                            baseBayCode += 1;
+                        }
                     }
-                    baseBayCode += 1;
+                    baseRowCode += 1;
                 }
             }
-            baseRowCode += 1;
         }
+
         return R.ok();
     }
 
diff --git a/src/main/java/com/zy/asrs/domain/enums/MapExcelNodeType.java b/src/main/java/com/zy/asrs/domain/enums/MapExcelNodeType.java
new file mode 100644
index 0000000..255dd96
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/enums/MapExcelNodeType.java
@@ -0,0 +1,43 @@
+package com.zy.asrs.domain.enums;
+
+public enum MapExcelNodeType {
+
+    LIFT("RGB(255,192,0)", "鎻愬崌鏈�"),
+    CHARGE("RGB(255,0,0)", "鍏呯數妗�"),
+    STATION("RGB(0,112,192)", "绔欑偣"),
+    MAIN_PATH("RGB(255,255,0)", "涓昏建閬�"),
+    NORMAL_PATH("RGB(0,176,80)", "瀛愯建閬�"),
+    ;
+
+    public String flag;
+    public String desc;
+
+    MapExcelNodeType(String flag, String desc) {
+        this.flag = flag;
+        this.desc = desc;
+    }
+
+    public static MapExcelNodeType get(String flag) {
+        if (null == flag) {
+            return null;
+        }
+        for (MapExcelNodeType type : MapExcelNodeType.values()) {
+            if (type.flag.equals(flag)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static MapExcelNodeType get(MapExcelNodeType type) {
+        if (null == type) {
+            return null;
+        }
+        for (MapExcelNodeType type2 : MapExcelNodeType.values()) {
+            if (type2 == type) {
+                return type2;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/utils/MapExcelUtils.java b/src/main/java/com/zy/asrs/utils/MapExcelUtils.java
new file mode 100644
index 0000000..e3ffb96
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/MapExcelUtils.java
@@ -0,0 +1,311 @@
+package com.zy.asrs.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.core.common.Cools;
+import com.zy.asrs.domain.enums.MapExcelNodeType;
+import com.zy.common.model.MapNode;
+import com.zy.core.enums.MapNodeType;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFColor;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.stereotype.Component;
+
+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;
+
+@Component
+public class MapExcelUtils {
+
+    public HashMap<Integer, List<List<MapNode>>> processExcelData(HashMap<Integer, List<List<HashMap<String, Object>>>> dataMap) {
+        HashMap<Integer, List<List<MapNode>>> levMap = new HashMap<>();
+        for (Map.Entry<Integer, List<List<HashMap<String, Object>>>> entry : dataMap.entrySet()) {
+            Integer lev = entry.getKey();
+            List<List<HashMap<String, Object>>> excelData = entry.getValue();
+
+            HashMap<Integer, JSONObject> rowMap = new HashMap<>();
+            HashMap<Integer, JSONObject> bayMap = new HashMap<>();
+
+            int finalRow = -1;
+            int finalBay = -1;
+
+            //鑾峰彇鍒楁暟鎹�
+            List<HashMap<String, Object>> tmpList0 = excelData.get(0);
+            List<HashMap<String, Object>> tmpList1 = excelData.get(1);
+            for (int i = 2; i < tmpList1.size(); i++) {
+                HashMap<String, Object> tmpBayMap = tmpList1.get(i);
+                if (Cools.isEmpty(tmpBayMap.get("value"))) {
+                    continue;
+                }
+                HashMap<String, Object> tmpDistanceMap = tmpList0.get(i);
+                int bay = (int) Double.parseDouble(tmpBayMap.get("value").toString());
+                JSONObject distanceData = JSON.parseObject(tmpDistanceMap.get("value").toString());
+
+                bayMap.put(bay, distanceData);
+                finalBay = bay;
+            }
+
+            //鑾峰彇鎺掓暟鎹�
+            for (int i = 2; i < excelData.size(); i++) {
+                List<HashMap<String, Object>> rowData = excelData.get(i);
+                HashMap<String, Object> tmpRowMap = rowData.get(1);
+                if (Cools.isEmpty(tmpRowMap.get("value"))) {
+                    continue;
+                }
+                HashMap<String, Object> tmpDistanceMap = rowData.get(0);
+                int row = (int) Double.parseDouble(tmpRowMap.get("value").toString());
+                JSONObject distanceData = JSON.parseObject(tmpDistanceMap.get("value").toString());
+                rowMap.put(row, distanceData);
+                finalRow = row;
+            }
+
+            List<List<MapNode>> mapList = new ArrayList<>();
+            //鐢熸垚浜岀淮鍧愭爣
+            for (int row = 1; row <= finalRow; row++) {
+                List<MapNode> rows = new ArrayList<>();
+                for (int bay = 1; bay <= finalBay; bay++) {
+                    MapNode node = new MapNode();
+                    node.setId(row + "-" + bay);
+
+                    HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
+                    String nodeType = nodeData.get("bgColor").toString();
+                    String data = "";
+                    if (nodeType.equals(MapExcelNodeType.MAIN_PATH.flag)) {
+                        node.setValue(MapNodeType.MAIN_PATH.id);
+                    } else if (nodeType.equals(MapExcelNodeType.NORMAL_PATH.flag)) {
+                        node.setValue(MapNodeType.NORMAL_PATH.id);
+                    } else if (nodeType.equals(MapExcelNodeType.LIFT.flag)) {
+                        node.setValue(MapNodeType.LIFT.id);
+                        JSONObject jsonData = JSON.parseObject(nodeData.get("value").toString());
+                        data = jsonData.getString("value");
+                    } else if (nodeType.equals(MapExcelNodeType.CHARGE.flag)) {
+                        node.setValue(MapNodeType.CHARGE.id);
+                        JSONObject jsonData = JSON.parseObject(nodeData.get("value").toString());
+                        data = jsonData.getString("value");
+                    } else if (nodeType.equals(MapExcelNodeType.STATION.flag)) {
+                        node.setValue(MapNodeType.CONVEYOR.id);
+                        JSONObject jsonData = JSON.parseObject(nodeData.get("value").toString());
+                        data = jsonData.getString("value");
+                    }else {
+                        node.setValue(MapNodeType.DISABLE.id);
+                    }
+
+                    node.setData(data);
+                    rows.add(node);
+                }
+                mapList.add(rows);
+            }
+
+            //鐢熸垚灏忚溅鍦板浘鍧愭爣闂磋窛鏁版嵁
+            for (int row = 1; row <= finalRow; row++) {
+                for (int bay = 1; bay <= finalBay; bay++) {
+                    MapNode mapNode = mapList.get(row - 1).get(bay - 1);
+                    JSONObject rowData = rowMap.get(row);
+                    JSONObject bayData = bayMap.get(bay);
+
+                    Integer top = rowData.getInteger("top");
+                    Integer bottom = rowData.getInteger("bottom");
+                    Integer left = bayData.getInteger("left");
+                    Integer right = bayData.getInteger("right");
+
+                    mapNode.setTop(top);
+                    mapNode.setBottom(bottom);
+                    mapNode.setLeft(left);
+                    mapNode.setRight(right);
+                }
+            }
+
+            //鐢熸垚鐗涚溂Y鍧愭爣鍩哄噯鏁版嵁
+            for (int bay = 1; bay <= finalBay; bay++) {
+                int yBase = 10000;
+                for (int row = 1; row <= finalRow; row++) {
+                    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);
+                }
+            }
+
+            //鐢熸垚鐗涚溂X鍧愭爣鍩哄噯鏁版嵁
+            for (int row = 1; row <= finalRow; row++) {
+                int xBase = 10000;
+                for (int bay = 1; bay <= finalBay; bay++) {
+                    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);
+                }
+            }
+
+            //鐢熸垚鍥涘悜杞﹀湴鍥炬墍闇�鏍煎紡
+            MapNode disableNode = new MapNode();
+            disableNode.setId("0-0");
+            disableNode.setValue(MapNodeType.DISABLE.id);
+            disableNode.setLeft(0);
+            disableNode.setRight(0);
+            disableNode.setTop(0);
+            disableNode.setBottom(0);
+
+            List<MapNode> disableRow = new ArrayList<>();
+            for (int bay = 1; bay <= finalBay; bay++) {
+                disableRow.add(disableNode);
+            }
+            disableRow.add(0, disableNode);
+            disableRow.add(disableNode);
+            for (List<MapNode> mapNodes : mapList) {
+                mapNodes.add(0, disableNode);
+                mapNodes.add(disableNode);
+            }
+            mapList.add(0, disableRow);
+            mapList.add(disableRow);
+
+            System.out.println(JSON.toJSONString(mapList, SerializerFeature.DisableCircularReferenceDetect));
+            levMap.put(lev, mapList);
+        }
+
+        return levMap;
+    }
+
+    public HashMap<Integer, List<List<HashMap<String, Object>>>> readExcel(String filePath) throws IOException {
+        HashMap<Integer, List<List<HashMap<String, Object>>>> dataMap = new HashMap<>();
+
+        FileInputStream inputStream = new FileInputStream(new File(filePath));
+        Workbook workbook;
+
+        if (filePath.endsWith(".xlsx")) {
+            workbook = new XSSFWorkbook(inputStream);
+        } else if (filePath.endsWith(".xls")) {
+            throw new IllegalArgumentException("鏂囦欢鏍煎紡涓嶆敮鎸�");
+        } else {
+            throw new IllegalArgumentException("鏂囦欢鏍煎紡涓嶆敮鎸�");
+        }
+
+        int numberOfSheets = workbook.getNumberOfSheets();
+        System.out.println("鎬诲叡鏈� " + numberOfSheets + " 涓猄heet");
+
+        // 閬嶅巻鎵�鏈塖heet
+        for (int i = 0; i < numberOfSheets; i++) {
+            Sheet sheet = workbook.getSheetAt(i);
+            String sheetName = sheet.getSheetName();
+
+            List<List<HashMap<String, Object>>> data = new ArrayList<>();
+            if (sheetName.contains("F")) {
+                String[] split = sheetName.split("F");
+                String levStr = split[0];
+                Integer lev = Integer.parseInt(levStr);
+
+                for (Row row : sheet) {
+                    List<HashMap<String, Object>> rowData = new ArrayList<>();
+                    for (Cell cell : row) {
+                        rowData.add(getCellValue(cell));
+                    }
+                    data.add(rowData);
+                }
+
+                dataMap.put(lev, data);
+            }
+        }
+
+        workbook.close();
+        inputStream.close();
+        return dataMap;
+    }
+
+    private HashMap<String, Object> getCellValue(Cell cell) {
+        if (cell == null) {
+            return null;
+        }
+
+        HashMap<String, Object> map = new HashMap<>();
+
+        String bgColor = getCellBackgroundColor(cell);
+        map.put("bgColor", bgColor);
+
+        String value = "";
+        switch (cell.getCellType()) {
+            case Cell.CELL_TYPE_STRING:
+                value = cell.getStringCellValue();
+                break;
+            case Cell.CELL_TYPE_NUMERIC:
+                value = String.valueOf(cell.getNumericCellValue());
+                break;
+            case Cell.CELL_TYPE_BOOLEAN:
+                value = String.valueOf(cell.getBooleanCellValue());
+                break;
+            case Cell.CELL_TYPE_FORMULA:
+                value = cell.getCellFormula();
+                break;
+            case Cell.CELL_TYPE_BLANK:
+                value = "";
+                break;
+            default:
+                value = "";
+        }
+
+        map.put("value", value);
+        return map;
+    }
+
+
+    public String getCellBackgroundColor(Cell cell) {
+        if (cell == null) {
+            return "鏃犲崟鍏冩牸";
+        }
+
+        CellStyle style = cell.getCellStyle();
+        short bgColorIndex = style.getFillForegroundColor(); // 鑾峰彇鍓嶆櫙鑹�(瀹為檯鏄簳鑹�)
+
+        return getXSSFBackgroundColor(style);
+    }
+
+    // 澶勭悊XSSF (.xlsx) 棰滆壊
+    private String getXSSFBackgroundColor(CellStyle style) {
+        XSSFColor color = (XSSFColor) style.getFillForegroundColorColor();
+        if (color == null) {
+            return "default";
+        }
+
+        byte[] rgb = color.getRGB();
+        if (rgb == null) {
+            return "default";
+        }
+
+        return String.format("RGB(%d,%d,%d)",
+                rgb[0] & 0xFF,
+                rgb[1] & 0xFF,
+                rgb[2] & 0xFF);
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java b/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
index 695d85a..2bd93fd 100644
--- a/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
+++ b/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
@@ -65,45 +65,45 @@
                         if (wrkMast.getWrkSts() == WrkStsType.INBOUND_SHUTTLE_RUN.sts) {
                             //5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
                             wrkMast.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts);
-                            shuttleThread.setSyncTaskNo(0);
+                            shuttleThread.setTaskNo(0);
                         } else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN.sts) {
                             //102.灏忚溅鎼繍涓� ==> 103.灏忚溅鎼繍瀹屾垚
                             wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts);
-                            shuttleThread.setSyncTaskNo(0);
+                            shuttleThread.setTaskNo(0);
                         } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_NEARBY.sts) {
                             //302.灏忚溅绉诲姩鑷宠繎鐐逛腑 ==> 303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴�
                             wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY_COMPLETE.sts);
-                            shuttleThread.setSyncTaskNo(0);
+                            shuttleThread.setTaskNo(0);
                         } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT.sts) {
                             //304.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴�
                             wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_COMPLETE.sts);
-                            shuttleThread.setSyncTaskNo(0);
+                            shuttleThread.setTaskNo(0);
                         } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT.sts) {
                             //308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
                             if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
                                 continue;//灏忚溅鏈埌杈剧洰鏍囧眰
                             }
                             wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);
-                            shuttleThread.setSyncTaskNo(0);
+                            shuttleThread.setTaskNo(0);
                         } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE.sts) {
                             //310.灏忚溅绉诲姩涓� ==> 311.灏忚溅绉诲姩瀹屾垚
                             wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
-                            shuttleThread.setSyncTaskNo(0);
+                            shuttleThread.setTaskNo(0);
                             notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVE_COMPLETE);//瑙﹀彂閫氱煡
                         } else if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_START_CHARGING.sts) {
                             //204.灏忚溅寮�鍚厖鐢典腑 ==> 205.灏忚溅鍏呯數涓�
                             wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_CHARGING.sts);
-                            shuttleThread.setSyncTaskNo(0);
+                            shuttleThread.setTaskNo(0);
                             notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
                         } else if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_CHARGING.sts) {
                             //205.灏忚溅鍏呯數涓� ==> 206.灏忚溅鍏呯數瀹屾垚
                             wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_CHARGING_COMPLETE.sts);
-                            shuttleThread.setSyncTaskNo(0);
+                            shuttleThread.setTaskNo(0);
                             notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
                         } else if (wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts) {
                             //502.灏忚溅鎼繍涓� ==> 509.绉诲簱瀹屾垚
                             wrkMast.setWrkSts(WrkStsType.COMPLETE_LOC_MOVE.sts);
-                            shuttleThread.setSyncTaskNo(0);
+                            shuttleThread.setTaskNo(0);
                             notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_DELIVERY);//瑙﹀彂閫氱煡
                         } else {
                             continue;
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index e874172..26132f4 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -1,5 +1,7 @@
 package com.zy.asrs.utils;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Arith;
 import com.core.common.Cools;
@@ -293,4 +295,16 @@
 
         return recentLocNo;
     }
+
+    public static boolean isJSON(String value) {
+        try {
+            JSONObject jsonData = JSON.parseObject(value);
+            if (jsonData == null) {
+                return false;
+            }
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+    }
 }
diff --git a/src/main/java/com/zy/common/model/MapNode.java b/src/main/java/com/zy/common/model/MapNode.java
index a6a8ae6..50899d6 100644
--- a/src/main/java/com/zy/common/model/MapNode.java
+++ b/src/main/java/com/zy/common/model/MapNode.java
@@ -8,6 +8,8 @@
 @Data
 public class MapNode implements Cloneable {
 
+    private String id;
+
     /**
      * -1 绂佺敤
      * 0 瀛愯建閬�
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index a5cfd84..096e4f1 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -150,6 +150,9 @@
             String locNo = Utils.getLocNo(basLift.getPoint$().getRow(), basLift.getPoint$().getBay(), 1);
             LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locNo));
             JSONObject point = JSON.parseObject(locMast.getQrCodeValue());
+            if (point == null) {
+                continue;
+            }
             deviceConfig.setOtherData(point.getInteger("x") + "-" + point.getInteger("y"));
             if (deviceConfig.getFake() == 1) {
                 fakeDevices.add(deviceConfig);
diff --git a/src/main/webapp/static/js/basMap/basMap.js b/src/main/webapp/static/js/basMap/basMap.js
index ff156df..a21e47d 100644
--- a/src/main/webapp/static/js/basMap/basMap.js
+++ b/src/main/webapp/static/js/basMap/basMap.js
@@ -1,19 +1,20 @@
 var pageCurr;
 layui.config({
     base: baseUrl + "/static/layui/lay/modules/"
-}).use(['table','laydate', 'form', 'admin'], function(){
+}).use(['table', 'laydate', 'form', 'admin', 'upload'], function () {
     var table = layui.table;
     var $ = layui.jquery;
     var layer = layui.layer;
     var layDate = layui.laydate;
     var form = layui.form;
     var admin = layui.admin;
+    var upload = layui.upload;
 
     // 鏁版嵁娓叉煋
     tableIns = table.render({
         elem: '#basMap',
         headers: {token: localStorage.getItem('token')},
-        url: baseUrl+'/basMap/list/auth',
+        url: baseUrl + '/basMap/list/auth',
         page: true,
         limit: 15,
         limits: [15, 30, 50, 100, 200, 500],
@@ -23,18 +24,18 @@
         cols: [[
             {type: 'checkbox'}
             // ,{field: 'id', align: 'center',title: '#'}
-            ,{field: 'lev', align: 'center',title: '灞傛暟'}
-            ,{field: 'data', align: 'center',title: '瀹炴椂鏁版嵁'}
-            ,{field: 'createTime$', align: 'center',title: '鍒涘缓鏃堕棿'}
-            ,{field: 'updateTime$', align: 'center',title: '鏇存柊鏃堕棿'}
-            ,{field: 'lastData', align: 'center',title: '鏈�杩戞暟鎹�'}
-            ,{field: 'originData', align: 'center',title: '鍘熷鍦板浘'}
-            ,{field: 'baseRow', align: 'center',title: '鍩哄噯鎺�'}
-            ,{field: 'baseRowCode', align: 'center',title: '鍩哄噯鎺�-code'}
-            ,{field: 'baseBay', align: 'center',title: '鍩哄噯鍒�'}
-            ,{field: 'baseBayCode', align: 'center',title: '鍩哄噯鍒�-code'}
+            , {field: 'lev', align: 'center', title: '灞傛暟'}
+            , {field: 'data', align: 'center', title: '瀹炴椂鏁版嵁'}
+            , {field: 'createTime$', align: 'center', title: '鍒涘缓鏃堕棿'}
+            , {field: 'updateTime$', align: 'center', title: '鏇存柊鏃堕棿'}
+            , {field: 'lastData', align: 'center', title: '鏈�杩戞暟鎹�'}
+            , {field: 'originData', align: 'center', title: '鍘熷鍦板浘'}
+            , {field: 'baseRow', align: 'center', title: '鍩哄噯鎺�'}
+            , {field: 'baseRowCode', align: 'center', title: '鍩哄噯鎺�-code'}
+            , {field: 'baseBay', align: 'center', title: '鍩哄噯鍒�'}
+            , {field: 'baseBayCode', align: 'center', title: '鍩哄噯鍒�-code'}
 
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:240}
+            , {fixed: 'right', title: '鎿嶄綔', align: 'center', toolbar: '#operate', width: 120}
         ]],
         request: {
             pageName: 'curr',
@@ -51,19 +52,34 @@
         response: {
             statusCode: 200
         },
-        done: function(res, curr, count) {
+        done: function (res, curr, count) {
             if (res.code === 403) {
-                top.location.href = baseUrl+"/";
+                top.location.href = baseUrl + "/";
             }
-            pageCurr=curr;
+            pageCurr = curr;
             limit();
+        }
+    });
+
+    // 娓叉煋
+    upload.render({
+        elem: '.demo-class-accept', // 缁戝畾澶氫釜鍏冪礌
+        url: baseUrl + "/basMap/upload", // 姝ゅ閰嶇疆浣犺嚜宸辩殑涓婁紶鎺ュ彛鍗冲彲
+        accept: 'file', // 鏅�氭枃浠�
+        done: function (res) {
+            if (res.code == 200) {
+                layer.msg('瀵煎叆鎴愬姛');
+                tableReload()
+            }else {
+                layer.msg(res.msg, {icon: 2})
+            }
         }
     });
 
     // 鐩戝惉鎺掑簭浜嬩欢
     table.on('sort(basMap)', function (obj) {
         var searchData = {};
-        $.each($('#search-box [name]').serializeArray(), function() {
+        $.each($('#search-box [name]').serializeArray(), function () {
             searchData[this.name] = this.value;
         });
         searchData['orderByField'] = obj.field;
@@ -77,23 +93,26 @@
     // 鐩戝惉澶村伐鍏锋爮浜嬩欢
     table.on('toolbar(basMap)', function (obj) {
         var checkStatus = table.checkStatus(obj.config.id).data;
-        switch(obj.event) {
+        switch (obj.event) {
             case 'addData':
                 showEditModel();
                 break;
             case 'deleteData':
-               if (checkStatus.length === 0) {
-                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
-                   return;
-               }
-               del(checkStatus.map(function (d) {
-                   return d.id;
-               }));
-               break;
+                if (checkStatus.length === 0) {
+                    layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                    return;
+                }
+                del(checkStatus.map(function (d) {
+                    return d.id;
+                }));
+                break;
+            case 'initLocMast':
+                initLocMast()
+                break;
             case 'exportData':
-                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
-                    var titles=[];
-                    var fields=[];
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function () {
+                    var titles = [];
+                    var fields = [];
                     obj.config.cols[0].map(function (col) {
                         if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
                             titles.push(col.title);
@@ -101,7 +120,7 @@
                         }
                     });
                     var exportData = {};
-                    $.each($('#search-box [name]').serializeArray(), function() {
+                    $.each($('#search-box [name]').serializeArray(), function () {
                         exportData[this.name] = this.value;
                     });
                     var param = {
@@ -109,18 +128,18 @@
                         'fields': fields
                     };
                     $.ajax({
-                        url: baseUrl+"/basMap/export/auth",
+                        url: baseUrl + "/basMap/export/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: JSON.stringify(param),
-                        dataType:'json',
-                        contentType:'application/json;charset=UTF-8',
+                        dataType: 'json',
+                        contentType: 'application/json;charset=UTF-8',
                         method: 'POST',
                         success: function (res) {
                             layer.closeAll();
                             if (res.code === 200) {
-                                table.exportFile(titles,res.data,'xls');
+                                table.exportFile(titles, res.data, 'xls');
                             } else if (res.code === 403) {
-                                top.location.href = baseUrl+"/";
+                                top.location.href = baseUrl + "/";
                             } else {
                                 layer.msg(res.msg, {icon: 2})
                             }
@@ -132,7 +151,7 @@
     });
 
     // 鐩戝惉琛屽伐鍏蜂簨浠�
-    table.on('tool(basMap)', function(obj){
+    table.on('tool(basMap)', function (obj) {
         var data = obj.data;
         switch (obj.event) {
             case 'edit':
@@ -141,13 +160,10 @@
             case "del":
                 del([data.id]);
                 break;
-            case "initLocMast":
-                initLocMast(data);
-                break;
         }
     });
 
-    function initLocMast(data) {
+    function initLocMast() {
         layer.confirm('纭畾鍒濆鍖栧簱浣嶆暟鎹悧锛�', {
             skin: 'layui-layer-admin',
             shade: .1
@@ -155,19 +171,17 @@
             layer.close(i);
             var loadIndex = layer.load(2);
             $.ajax({
-                url: baseUrl+"/locMast/init",
+                url: baseUrl + "/locMast/init",
                 headers: {'token': localStorage.getItem('token')},
-                data: {
-                    lev: data.lev
-                },
+                data: {},
                 method: 'POST',
                 success: function (res) {
                     layer.close(loadIndex);
-                    if (res.code === 200){
+                    if (res.code === 200) {
                         layer.msg(res.msg, {icon: 1});
                         tableReload();
-                    } else if (res.code === 403){
-                        top.location.href = baseUrl+"/";
+                    } else if (res.code === 403) {
+                        top.location.href = baseUrl + "/";
                     } else {
                         layer.msg(res.msg, {icon: 2});
                     }
@@ -189,19 +203,19 @@
                 form.on('submit(editSubmit)', function (data) {
                     var loadIndex = layer.load(2);
                     $.ajax({
-                        url: baseUrl+"/basMap/"+(mData?'update':'add')+"/auth",
+                        url: baseUrl + "/basMap/" + (mData ? 'update' : 'add') + "/auth",
                         headers: {'token': localStorage.getItem('token')},
                         data: data.field,
                         method: 'POST',
                         success: function (res) {
                             layer.close(loadIndex);
-                            if (res.code === 200){
+                            if (res.code === 200) {
                                 layer.close(dIndex);
                                 layer.msg(res.msg, {icon: 1});
                                 tableReload();
-                            } else if (res.code === 403){
-                                top.location.href = baseUrl+"/";
-                            }else {
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
+                            } else {
                                 layer.msg(res.msg, {icon: 2});
                             }
                         }
@@ -223,17 +237,17 @@
             layer.close(i);
             var loadIndex = layer.load(2);
             $.ajax({
-                url: baseUrl+"/basMap/delete/auth",
+                url: baseUrl + "/basMap/delete/auth",
                 headers: {'token': localStorage.getItem('token')},
                 data: {ids: ids},
                 method: 'POST',
                 success: function (res) {
                     layer.close(loadIndex);
-                    if (res.code === 200){
+                    if (res.code === 200) {
                         layer.msg(res.msg, {icon: 1});
                         tableReload();
-                    } else if (res.code === 403){
-                        top.location.href = baseUrl+"/";
+                    } else if (res.code === 403) {
+                        top.location.href = baseUrl + "/";
                     } else {
                         layer.msg(res.msg, {icon: 2});
                     }
@@ -260,22 +274,23 @@
         setTimeout(function () {
             layDate.render({
                 elem: '.layui-laydate-range'
-                ,type: 'datetime'
-                ,range: true
+                , type: 'datetime'
+                , range: true
             });
             layDate.render({
                 elem: '#createTime\\$',
                 type: 'datetime',
-                value: data!==undefined?data['createTime\\$']:null
+                value: data !== undefined ? data['createTime\\$'] : null
             });
             layDate.render({
                 elem: '#updateTime\\$',
                 type: 'datetime',
-                value: data!==undefined?data['updateTime\\$']:null
+                value: data !== undefined ? data['updateTime\\$'] : null
             });
 
         }, 300);
     }
+
     layDateRender();
 
 });
diff --git a/src/main/webapp/views/admin/basMap/basMap.html b/src/main/webapp/views/admin/basMap/basMap.html
index 68c4e56..f30e086 100644
--- a/src/main/webapp/views/admin/basMap/basMap.html
+++ b/src/main/webapp/views/admin/basMap/basMap.html
@@ -51,12 +51,16 @@
     <div class="layui-btn-container">
         <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
         <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button type="button" class="layui-btn demo-class-accept" lay-options="{accept: 'file'}">
+            <i class="layui-icon layui-icon-upload"></i>
+            瀵煎叆鍦板浘
+        </button>
+        <button class="layui-btn layui-btn-sm layui-btn-primary" id="btn-initLocMast" lay-event="initLocMast">鍒濆鍖栧簱浣�</button>
         <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
     </div>
 </script>
 
 <script type="text/html" id="operate">
-    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="initLocMast">鍒濆鍖栧簱浣�</a>
     <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
     <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
 </script>

--
Gitblit v1.9.1