#
Junjie
2025-11-17 4c7e3f113b80e37c52163c30b80b9256f0bee5e3
#
11个文件已修改
223 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ConsoleController.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/LocMastController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocMastService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RedisKeyType.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/network/real/ZyCrnRealConnect.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/locMap/locMap.html 100 ●●●● 补丁 | 查看 | 原始文档 | 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]