pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/controller/BasMapController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/controller/LocMastController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/domain/enums/MapExcelNodeType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/MapExcelUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/Utils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/model/MapNode.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/ServerBootstrap.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/basMap/basMap.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/admin/basMap/basMap.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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> 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(); } } 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,8 +149,12 @@ @PostMapping("/locMast/init") @ManagerAuth(memo = "初始化库位") @Transactional public R locMastInit(@RequestParam Integer lev) { BasMap basMap = basMapService.selectLatestMap(lev); 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);//获取完整地图(包括入库出库) @@ -171,6 +179,21 @@ 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); @@ -179,13 +202,17 @@ 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 = 1; j <= basMap.getBaseBay(); j++) { for (int j = basMap.getBaseBay(); j <= bayMax; j++) { String locNo = Utils.getLocNo(i, j, lev); LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>() @@ -220,6 +247,49 @@ } baseRowCode += 1; } }else { 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); } 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; } } } return R.ok(); } src/main/java/com/zy/asrs/domain/enums/MapExcelNodeType.java
New file @@ -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; } } src/main/java/com/zy/asrs/utils/MapExcelUtils.java
New file @@ -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 + " 个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); } } 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; 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; } } } src/main/java/com/zy/common/model/MapNode.java
@@ -8,6 +8,8 @@ @Data public class MapNode implements Cloneable { private String id; /** * -1 禁用 * 0 子轨道 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); src/main/webapp/static/js/basMap/basMap.js
@@ -1,13 +1,14 @@ 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({ @@ -34,7 +35,7 @@ ,{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', @@ -57,6 +58,21 @@ } 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}) } } }); @@ -89,6 +105,9 @@ del(checkStatus.map(function (d) { return d.id; })); break; case 'initLocMast': initLocMast() break; case 'exportData': admin.confirm('确定导出Excel吗', {shadeClose: true}, function(){ @@ -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 @@ -157,9 +173,7 @@ $.ajax({ url: baseUrl+"/locMast/init", headers: {'token': localStorage.getItem('token')}, data: { lev: data.lev }, data: {}, method: 'POST', success: function (res) { layer.close(loadIndex); @@ -276,6 +290,7 @@ }, 300); } layDateRender(); }); 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>