jianghaiyue
2025-11-05 12f30a09bce1c61b2ae90129124cdc467a59b074
algo-zkd/src/main/java/com/algo/service/RemainingPathProcessor.java
@@ -40,11 +40,11 @@
     * 2. 对error=1的故障车,全程占据时空表,确保可以生成绕行路线
     *
     * @param agvStatusList CTU状态列表
     * @param unifiedTimestamp 统一时间戳
     * @return 时空占用表,key为"x,y,timeSlot",value为CTU编号
     */
    public Map<String, String> buildSpaceTimeOccupancyMap(List<AGVStatus> agvStatusList) {
        // 重置统一时间戳为当前时间
        this.unifiedTimestamp = System.currentTimeMillis() / 1000;
    public Map<String, String> buildSpaceTimeOccupancyMap(List<AGVStatus> agvStatusList, long unifiedTimestamp) {
        this.unifiedTimestamp = unifiedTimestamp;
        
        Map<String, String> occupancyMap = new HashMap<>();
@@ -103,36 +103,20 @@
    
    /**
     * 处理静止AGV的位置占用
     *
     * @param agv          CTU状态
     * @param occupancyMap 时空占用表
     */
    private void processStaticAgvOccupancy(AGVStatus agv, Map<String, String> occupancyMap) {
        if (!agv.hasRemainingPath()) {
            System.out.println("  静止AGV " + agv.getAgvId());
            return;
        }
        String position = agv.getPosition();
        if (position == null || position.isEmpty()) {
            return;
        if (position != null && !position.isEmpty()) {
            System.out.println("  静止AGV " + agv.getAgvId() + " 有剩余路径,已在剩余路径处理中占用位置");
        }
        // 获取位置坐标
        int[] coord = JsonUtils.getCoordinate(position, pathMapping);
        if (coord == null) {
            return;
        }
        CTUPhysicalConfig config = agv.getPhysicalConfig();
        // 静止AGV占用当前位置的长时间段(假设300秒)
        long occupancyDuration = 300; // 300秒的占用时间
        for (long timeSlot = unifiedTimestamp; timeSlot < unifiedTimestamp + occupancyDuration; timeSlot++) {
            String spaceTimeKey = coord[0] + "," + coord[1] + "," + timeSlot;
            occupancyMap.put(spaceTimeKey, agv.getAgvId());
            occupyAdjacentSpaces(coord, timeSlot, agv.getAgvId(), occupancyMap, config);
        }
        System.out.println("  静止AGV " + agv.getAgvId() + " 占用位置 " + position +
                         " (坐标: " + coord[0] + "," + coord[1] + ") " );
    }
    /**