#
Junjie
9 小时以前 d62f97dabd206364220b74dfa0bb065d4e64dc7b
#
6个文件已修改
75 ■■■■ 已修改文件
src/main/java/com/zy/asrs/domain/vo/StationCycleCapacityVo.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/vo/StationCycleLoopVo.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/StationCycleCapacityServiceImpl.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/components/MapCanvas.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/vo/StationCycleCapacityVo.java
@@ -21,7 +21,13 @@
    // 循环圈中有任务站点总数
    private Integer taskStationCount = 0;
    // 当前承载量(0-1):当前任务数 / 循环圈总站点数
    // 循环圈中手动站点总数(不与任务站点重复计数)
    private Integer manualStationCount = 0;
    // 循环圈中占用站点总数 = 任务站点 + 手动站点
    private Integer occupiedStationCount = 0;
    // 当前承载量(0-1):当前占用站点数 / 循环圈总站点数
    private Double currentLoad = 0.0;
    // 最新刷新时间
src/main/java/com/zy/asrs/domain/vo/StationCycleLoopVo.java
@@ -23,6 +23,12 @@
    // 循环圈内有任务站点数
    private Integer taskCount = 0;
    // 当前承载量(0-1):当前任务数 / 当前循环圈总站点数
    // 循环圈内手动站点数(不与任务站点重复计数)
    private Integer manualStationCount = 0;
    // 循环圈内占用站点数 = 任务站点 + 手动站点
    private Integer occupiedStationCount = 0;
    // 当前承载量(0-1):当前占用站点数 / 当前循环圈总站点数
    private Double currentLoad = 0.0;
}
src/main/java/com/zy/asrs/service/impl/StationCycleCapacityServiceImpl.java
@@ -74,7 +74,9 @@
    private StationCycleCapacityVo buildSnapshot() {
        GraphContext context = buildStationGraph();
        Map<Integer, Integer> workNoMap = buildStationWorkNoMap();
        StationOccupancyContext occupancyContext = buildStationOccupancyContext();
        Map<Integer, Integer> workNoMap = occupancyContext.workNoMap;
        Set<Integer> manualStationSet = occupancyContext.manualStationSet;
        Set<Integer> availableStationSet = new HashSet<>(context.graph.keySet());
        availableStationSet.removeAll(context.excludeStationSet);
@@ -97,6 +99,8 @@
        int loopNo = 1;
        int totalStationCount = 0;
        int taskStationCount = 0;
        int manualStationCount = 0;
        int occupiedStationCount = 0;
        Set<Integer> actualWorkNoSet = new HashSet<>();
        for (Set<Integer> scc : sccList) {
@@ -112,12 +116,17 @@
                List<Integer> workNoList = new ArrayList<>();
                int currentLoopTaskCount = 0;
                int currentLoopManualStationCount = 0;
                for (Integer stationId : stationIdList) {
                    Integer workNo = workNoMap.get(stationId);
                    if (workNo != null && workNo > 0) {
                        workNoList.add(workNo);
                        currentLoopTaskCount++;
                        actualWorkNoSet.add(workNo);
                        continue;
                    }
                    if (manualStationSet.contains(stationId)) {
                        currentLoopManualStationCount++;
                    }
                }
@@ -127,23 +136,30 @@
                loopVo.setWorkNoList(workNoList);
                loopVo.setStationCount(stationIdList.size());
                loopVo.setTaskCount(currentLoopTaskCount);
                loopVo.setCurrentLoad(calcCurrentLoad(currentLoopTaskCount, stationIdList.size()));
                loopVo.setManualStationCount(currentLoopManualStationCount);
                loopVo.setOccupiedStationCount(currentLoopTaskCount + currentLoopManualStationCount);
                loopVo.setCurrentLoad(calcCurrentLoad(toNonNegative(loopVo.getOccupiedStationCount()), stationIdList.size()));
                loopList.add(loopVo);
                totalStationCount += stationIdList.size();
                taskStationCount += currentLoopTaskCount;
                manualStationCount += currentLoopManualStationCount;
                occupiedStationCount += toNonNegative(loopVo.getOccupiedStationCount());
            }
        }
        int reserveTaskCount = mergeReserveTaskCount(loopList, actualWorkNoSet);
        taskStationCount += reserveTaskCount;
        occupiedStationCount += reserveTaskCount;
        StationCycleCapacityVo vo = new StationCycleCapacityVo();
        vo.setLoopList(loopList);
        vo.setLoopCount(loopList.size());
        vo.setTotalStationCount(totalStationCount);
        vo.setTaskStationCount(taskStationCount);
        vo.setCurrentLoad(calcCurrentLoad(taskStationCount, totalStationCount));
        vo.setManualStationCount(manualStationCount);
        vo.setOccupiedStationCount(occupiedStationCount);
        vo.setCurrentLoad(calcCurrentLoad(occupiedStationCount, totalStationCount));
        vo.setRefreshTime(new Date());
        return vo;
    }
@@ -217,8 +233,10 @@
            Collections.sort(workNoList);
            int mergedTaskCount = toNonNegative(loopVo.getTaskCount()) + 1;
            int mergedOccupiedCount = toNonNegative(loopVo.getOccupiedStationCount()) + 1;
            loopVo.setTaskCount(mergedTaskCount);
            loopVo.setCurrentLoad(calcCurrentLoad(mergedTaskCount, toNonNegative(loopVo.getStationCount())));
            loopVo.setOccupiedStationCount(mergedOccupiedCount);
            loopVo.setCurrentLoad(calcCurrentLoad(mergedOccupiedCount, toNonNegative(loopVo.getStationCount())));
            mergedCount++;
        }
@@ -416,12 +434,12 @@
                || (isBarcodeStation != null && isBarcodeStation == 1);
    }
    private Map<Integer, Integer> buildStationWorkNoMap() {
        Map<Integer, Integer> workNoMap = new HashMap<>();
    private StationOccupancyContext buildStationOccupancyContext() {
        StationOccupancyContext context = new StationOccupancyContext();
        List<DeviceConfig> devpList = deviceConfigService.list(new QueryWrapper<DeviceConfig>()
                .eq("device_type", String.valueOf(SlaveType.Devp)));
        if (devpList == null || devpList.isEmpty()) {
            return workNoMap;
            return context;
        }
        for (DeviceConfig deviceConfig : devpList) {
@@ -440,11 +458,15 @@
                }
                Integer taskNo = protocol.getTaskNo();
                if (taskNo != null && taskNo > 0) {
                    workNoMap.put(protocol.getStationId(), taskNo);
                    context.workNoMap.put(protocol.getStationId(), taskNo);
                    continue;
                }
                if (!protocol.isAutoing()) {
                    context.manualStationSet.add(protocol.getStationId());
                }
            }
        }
        return workNoMap;
        return context;
    }
    private List<Set<Integer>> findStrongConnectedComponents(Map<Integer, Set<Integer>> graph) {
@@ -620,4 +642,9 @@
        private final Map<Integer, Set<Integer>> graph = new HashMap<>();
        private final Set<Integer> excludeStationSet = new HashSet<>();
    }
    private static class StationOccupancyContext {
        private final Map<Integer, Integer> workNoMap = new HashMap<>();
        private final Set<Integer> manualStationSet = new HashSet<>();
    }
}
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -906,7 +906,8 @@
        }
        state.totalStationCount = toNonNegative(capacityVo.getTotalStationCount());
        state.projectedTaskStationCount = toNonNegative(capacityVo.getTaskStationCount());
        Integer occupiedStationCount = capacityVo.getOccupiedStationCount();
        state.projectedTaskStationCount = toNonNegative(occupiedStationCount != null ? occupiedStationCount : capacityVo.getTaskStationCount());
        List<StationCycleLoopVo> loopList = capacityVo.getLoopList();
        if (loopList != null) {
src/main/webapp/components/MapCanvas.js
@@ -12,6 +12,7 @@
            圈{{ item.loopNo }} |
            站点: {{ item.stationCount || 0 }} |
            任务: {{ item.taskCount || 0 }} |
            手动: {{ item.manualStationCount || 0 }} |
            承载: {{ formatLoadPercent(item.currentLoad) }}
          </div>
        </div>
@@ -129,6 +130,8 @@
        loopList: [],
        totalStationCount: 0,
        taskStationCount: 0,
        manualStationCount: 0,
        occupiedStationCount: 0,
        currentLoad: 0
      },
      showMapToolPanel: false,
@@ -984,6 +987,8 @@
        loopList: loopList,
        totalStationCount: payload.totalStationCount || 0,
        taskStationCount: payload.taskStationCount || 0,
        manualStationCount: payload.manualStationCount || 0,
        occupiedStationCount: payload.occupiedStationCount || 0,
        currentLoad: typeof payload.currentLoad === 'number' ? payload.currentLoad : parseFloat(payload.currentLoad || 0)
      };
      if (this.hoverLoopNo != null) {
@@ -2794,7 +2799,6 @@
    }
  }
});
src/main/webapp/static/js/common.js
@@ -361,6 +361,11 @@
    function buildBuiltinRegexEntries() {
        return [
            {
                regex: /^圈(\d+)\s*\|\s*站点:\s*(\d+)\s*\|\s*(?:任务|Task):\s*(\d+)\s*\|\s*(?:手动|Manual):\s*(\d+)\s*\|\s*承载:\s*([\d.]+%)$/,
                key: "legacy.regex.loopStatusWithManual",
                fallback: "Zone {0} | Stations: {1} | Tasks: {2} | Manual: {3} | Load: {4}"
            },
            {
                regex: /^圈(\d+)\s*\|\s*站点:\s*(\d+)\s*\|\s*(?:任务|Task):\s*(\d+)\s*\|\s*承载:\s*([\d.]+%)$/,
                key: "legacy.regex.loopStatus",
                fallback: "Zone {0} | Stations: {1} | Tasks: {2} | Load: {3}"