|  |  | 
 |  |  |             <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> | 
 
 |  |  | 
 |  |  | 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 | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private BasMapService basMapService; | 
 |  |  |     @Autowired | 
 |  |  |     private BasShuttleChargeService basShuttleChargeService; | 
 |  |  |     @Autowired | 
 |  |  |     private RedisUtil redisUtil; | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/basMap/{id}/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  | 
 |  |  |         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(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  | 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; | 
 |  |  | 
 |  |  |     private LocMastService locMastService; | 
 |  |  |     @Autowired | 
 |  |  |     private BasMapService basMapService; | 
 |  |  |     @Autowired | 
 |  |  |     private BasShuttleChargeService basShuttleChargeService; | 
 |  |  |  | 
 |  |  |     @RequestMapping(value = "/locMast/{id}/auth") | 
 |  |  |     @ManagerAuth | 
 |  |  | 
 |  |  |     @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(); | 
 |  |  |     } | 
 |  |  |  | 
 
| New file | 
 |  |  | 
 |  |  | 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; | 
 |  |  |     } | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | 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 + " 个Sheet"); | 
 |  |  |  | 
 |  |  |         // 遍历所有Sheet | 
 |  |  |         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); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  |                         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; | 
 
 |  |  | 
 |  |  | 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; | 
 |  |  | 
 |  |  |  | 
 |  |  |         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; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } | 
 
 |  |  | 
 |  |  | @Data | 
 |  |  | public class MapNode implements Cloneable { | 
 |  |  |  | 
 |  |  |     private String id; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * -1 禁用 | 
 |  |  |      * 0 子轨道 | 
 
 |  |  | 
 |  |  |             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); | 
 
 |  |  | 
 |  |  | 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], | 
 |  |  | 
 |  |  |         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', | 
 |  |  | 
 |  |  |         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; | 
 |  |  | 
 |  |  |     // 监听头工具栏事件 | 
 |  |  |     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); | 
 |  |  | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                     var exportData = {}; | 
 |  |  |                     $.each($('#search-box [name]').serializeArray(), function() { | 
 |  |  |                     $.each($('#search-box [name]').serializeArray(), function () { | 
 |  |  |                         exportData[this.name] = this.value; | 
 |  |  |                     }); | 
 |  |  |                     var param = { | 
 |  |  | 
 |  |  |                         '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}) | 
 |  |  |                             } | 
 |  |  | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     // 监听行工具事件 | 
 |  |  |     table.on('tool(basMap)', function(obj){ | 
 |  |  |     table.on('tool(basMap)', function (obj) { | 
 |  |  |         var data = obj.data; | 
 |  |  |         switch (obj.event) { | 
 |  |  |             case 'edit': | 
 |  |  | 
 |  |  |             case "del": | 
 |  |  |                 del([data.id]); | 
 |  |  |                 break; | 
 |  |  |             case "initLocMast": | 
 |  |  |                 initLocMast(data); | 
 |  |  |                 break; | 
 |  |  |         } | 
 |  |  |     }); | 
 |  |  |  | 
 |  |  |     function initLocMast(data) { | 
 |  |  |     function initLocMast() { | 
 |  |  |         layer.confirm('确定初始化库位数据吗?', { | 
 |  |  |             skin: 'layui-layer-admin', | 
 |  |  |             shade: .1 | 
 |  |  | 
 |  |  |             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}); | 
 |  |  |                     } | 
 |  |  | 
 |  |  |                 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}); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  | 
 |  |  |             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}); | 
 |  |  |                     } | 
 |  |  | 
 |  |  |         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(); | 
 |  |  |  | 
 |  |  | }); | 
 
 |  |  | 
 |  |  |     <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> |