| src/main/java/com/zy/asrs/controller/ConsoleController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/controller/LocMastController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/mapper/LocMastMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/LocMastService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/enums/RedisKeyType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/network/real/ZyCrnRealConnect.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/LocMastMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/webapp/views/locMap/locMap.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -1,5 +1,7 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.annotations.ManagerAuth; import com.core.common.Cools; @@ -10,20 +12,16 @@ import com.zy.asrs.domain.vo.CrnDetailVo; import com.zy.asrs.domain.vo.CrnLatestDataVo; import com.zy.asrs.domain.vo.StationLatestDataVo; import com.zy.asrs.entity.BasCrnpErr; import com.zy.asrs.entity.BasMap; import com.zy.asrs.entity.DeviceConfig; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.BasCrnpErrService; import com.zy.asrs.service.BasMapService; import com.zy.asrs.service.DeviceConfigService; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; import com.zy.common.CodeRes; import com.zy.common.model.MapNode; import com.zy.common.model.enums.NavigationMapType; import com.zy.common.utils.RedisUtil; import com.zy.core.News; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.CrnModeType; import com.zy.core.enums.MapNodeType; import com.zy.core.enums.RedisKeyType; import com.zy.core.enums.SlaveType; import com.zy.core.model.protocol.CrnProtocol; @@ -56,6 +54,8 @@ private BasMapService basMapService; @Autowired private RedisUtil redisUtil; @Autowired private LocMastService locMastService; @PostMapping("/system/running/status") @ManagerAuth(memo = "系统运行状态") @@ -264,11 +264,7 @@ @GetMapping("/map/lev/list") @ManagerAuth public R getMapLevList() { List<BasMap> basMaps = basMapService.selectList(new EntityWrapper<BasMap>().orderBy("lev", true)); ArrayList<Integer> levList = new ArrayList<>(); for (BasMap basMap : basMaps) { levList.add(basMap.getLev()); } List<Integer> levList = locMastService.getLevList(); return R.ok().add(levList); } @@ -276,14 +272,20 @@ * 获取地图数据 */ @GetMapping("/map/{lev}/auth") @ManagerAuth public R getMapFromRedis(@PathVariable Integer lev) { Object data = redisUtil.get(RedisKeyType.MAP.key + lev); if (data == null) { return R.error(); public R getLocMap(@PathVariable Integer lev) { Object object = redisUtil.get(RedisKeyType.LOC_MAP_BASE.key); if (object == null) { return R.error("地图未初始化"); } return R.ok(); List<List<HashMap<String, Object>>> mapNodeList = (List<List<HashMap<String, Object>>>) object; List<LocMast> locMastList = locMastService.selectLocByLev(lev); for (LocMast locMast : locMastList) { String[] locType = locMast.getLocType().split("-"); HashMap<String, Object> mapNode = mapNodeList.get(Integer.parseInt(locType[0])).get(Integer.parseInt(locType[1])); mapNode.put("locSts", locMast.getLocSts()); mapNode.put("locNo", locMast.getLocNo()); } return R.ok().add(mapNodeList); } } src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -188,10 +188,13 @@ LocMast locMast = new LocMast(); int row = (int) map.get("row"); int bay = (int) map.get("bay"); int mapX = (int) map.get("mapX"); int mapY = (int) map.get("mapY"); locMast.setLocNo(Utils.getLocNo(row, bay, finalLev)); locMast.setRow1(row); locMast.setBay1(bay); locMast.setLev1(finalLev); locMast.setLocType(Utils.getLocNo(mapX, mapY, finalLev)); locMast.setStatus(1); locMast.setAppeTime(new Date()); locMastService.insert(locMast); src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -21,4 +21,7 @@ List<LocMast> selectEmptyLocNos(@Param("locNos") List<String> locNos); List<LocMast> selectNotEmptyLocNos(@Param("locNos") List<String> locNos); //查询所有楼层 List<Integer> getLevList(); } src/main/java/com/zy/asrs/service/LocMastService.java
@@ -17,4 +17,7 @@ List<LocMast> selectEmptyLocNos(List<String> locNos); List<LocMast> selectNotEmptyLocNos(List<String> locNos); //查询所有楼层 List<Integer> getLevList(); } src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -1,7 +1,6 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.common.Cools; import com.zy.asrs.entity.LocMast; import com.zy.asrs.mapper.LocMastMapper; import com.zy.asrs.service.LocMastService; @@ -41,4 +40,9 @@ } return this.baseMapper.selectNotEmptyLocNos(locNos); } @Override public List<Integer> getLevList() { return this.baseMapper.getLevList(); } } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1,13 +1,22 @@ package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.BasMap; import com.zy.asrs.entity.LocMast; import com.zy.asrs.service.BasMapService; import com.zy.asrs.utils.Utils; import com.zy.common.utils.RedisUtil; import com.zy.core.enums.MapNodeType; import com.zy.core.enums.RedisKeyType; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** @@ -19,14 +28,47 @@ @Autowired private BasMapService basMapService; @Autowired private RedisUtil redisUtil; // 初始化库位地图 //初始化库位地图数据结构 public void initLocMap() { List<BasMap> basMaps = basMapService.selectList(new EntityWrapper<BasMap>().orderBy("lev", true)); ArrayList<Integer> levList = new ArrayList<>(); for (BasMap basMap : basMaps) { levList.add(basMap.getLev()); Object object = redisUtil.get(RedisKeyType.LOC_MAP_BASE.key); if (object != null) { return; } BasMap basMap = basMapService.selectOne(new EntityWrapper<BasMap>().eq("lev", 1)); if (Cools.isEmpty(basMap)){ //缺少初始化库位地图 return; } List<List<JSONObject>> dataList = JSON.parseObject(basMap.getData(), List.class); List<List<HashMap<String, Object>>> mapNodeList = new ArrayList<>(); for (int i = 0; i < dataList.size(); i++) { List<JSONObject> row = dataList.get(i); List<HashMap<String, Object>> mapNodeRow = new ArrayList<>(); for (int j = 0; j < row.size(); j++) { JSONObject map = row.get(j); HashMap<String, Object> mapNode = new HashMap<>(); mapNode.put("id", i + "-" + j); String nodeType = map.getString("type"); if("shelf".equals(nodeType)) { mapNode.put("value", MapNodeType.NORMAL_PATH.id); }else { mapNode.put("value", MapNodeType.DISABLE.id); } mapNodeRow.add(mapNode); } mapNodeList.add(mapNodeRow); } redisUtil.set(RedisKeyType.LOC_MAP_BASE.key, mapNodeList); } } src/main/java/com/zy/core/MainProcess.java
@@ -41,7 +41,7 @@ continue; } // 初始化库位地图 // 初始化库位地图数据结构 mainService.initLocMap(); // 间隔 src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -17,7 +17,7 @@ LOG_LIMIT("log_limit_"), SYSTEM_CONFIG_MAP("system_config_map"), MAP("map_"), LOC_MAP_BASE("loc_map_base"), ; public String key; src/main/java/com/zy/core/network/real/ZyCrnRealConnect.java
@@ -167,7 +167,7 @@ } } idx++; Thread.sleep(500L); Thread.sleep(500); } while (idx < 5); if (command.getAckFinish() == 0) { @@ -184,7 +184,7 @@ } } i++; Thread.sleep(500L); Thread.sleep(500); } while (i < 5); } src/main/resources/mapper/LocMastMapper.xml
@@ -56,4 +56,8 @@ and loc_sts not in ('O') order by row1 </select> <select id="getLevList" resultType="java.lang.Integer"> select distinct lev1 from asr_loc_mast </select> </mapper> src/main/webapp/views/locMap/locMap.html
@@ -238,101 +238,22 @@ } }); }, getShuttleStateInfo() { this.sendWs(JSON.stringify({ "url": "/shuttle/table/shuttle/state", "data": {} })) }, setShuttleStateInfo(res) { // 四向穿梭车信息表获取 let that = this if (res.code == 200) { let currentLevShuttle = []//当前楼层小车集合 res.data.forEach((item,idx) => { if (item != null && item.point != undefined && item.point != null) { if (item.point.z == that.currentLev) { currentLevShuttle.push(item); } } }) that.shuttleList = res.data if (that.shuttleColorList.length == 0) { let colorList = []//随机小车颜色 res.data.forEach((item,idx) => { colorList[item.shuttleNo] = that.colorRGB() }) that.shuttleColorList = colorList } const result = this.findShuttleDiffList(this.currentLevShuttleList, currentLevShuttle); if (!result) { //小车存在变动,重新渲染全部小车 pixiShuttleMap.forEach((shuttle,index) => { pixiApp.stage.removeChild(shuttle) pixiShuttleMap.delete(index) }) currentLevShuttle.forEach((item,index) => { pixiApp.loader.load((loader, resources) => { // 纹理创建小车 const shuttle = new PIXI.Sprite(resources.shuttle.texture); shuttle.width = width shuttle.height = height shuttle.x = (item.wcsPoint.y - 0) * width;//更新坐标x shuttle.y = (item.wcsPoint.x - 1) * height;//更新坐标y shuttle.updateMoveStatus = true;//动画执行完成 shuttle.interactive = true; // 必须要设置才能接收事件 shuttle.buttonMode = true; // 让光标在hover时变为手型指针 shuttle.on('pointerdown', (e) => { this.drawerShuttle = true; this.drawerShuttleData = item; }) pixiApp.stage.addChild(shuttle); pixiShuttleMap.set(item.shuttleNo, shuttle); }) if (item.moveAdvancePath != null && item.moveAdvancePath.length > 0) {//存在预计路径,进行渲染 this.addMoveAdvancePath(item.moveAdvancePath, item.shuttleNo);//添加预计路径 } }) }else { //小车不存在变动,渲染小车位置 currentLevShuttle.forEach((item,index) => { this.updateShuttleXY(item) }) const resultPath = this.findShuttlePathDiffList(JSON.parse(JSON.stringify(this.currentLevShuttleList)), JSON.parse(JSON.stringify(currentLevShuttle))); if (!resultPath) { //预计路径存在变动,渲染路径 currentLevShuttle.forEach((item,index) => { //删除预计路径 this.removeMoveAdvancePath(item.shuttleNo); if (item.moveAdvancePath != null && item.moveAdvancePath.length > 0) {//存在预计路径,进行渲染 this.addMoveAdvancePath(item.moveAdvancePath, item.shuttleNo);//添加预计路径 } }) } } that.currentLevShuttleList = currentLevShuttle; } }, //获取地图数据 getMap(lev) { this.sendWs(JSON.stringify({ "url": "/console/locMap/auth", "data": lev })) let that = this; $.ajax({ url: baseUrl + "/console/map/" + lev + "/auth", headers: { 'token': localStorage.getItem('token') }, setMap(res) { data: {}, method: 'get', success: function(res) { //获取地图数据 let data = res.data let tmp = [] for (let i = 1; i < data.length - 1; i++) { tmp.push(data[i]) that.createMapData(data) } this.createMapData(tmp) }) }, changeFloor(lev) { this.currentLev = lev @@ -478,7 +399,6 @@ this.reloadMap = false pixiStageList = [map.length]//初始化列表 pixiStaMap = new Map();//重置 objectsContainer.removeChildren() map.forEach((item,index) => { pixiStageList[index] = [item.length]