#
Junjie
1 天以前 aa710969e00e9d7e56a276066a239f74d5c49310
src/main/java/com/zy/asrs/service/impl/WrkAnalysisServiceImpl.java
@@ -30,7 +30,8 @@
            WrkStsType.SETTLE_INBOUND.sts,
            WrkStsType.COMPLETE_OUTBOUND.sts,
            WrkStsType.SETTLE_OUTBOUND.sts,
            WrkStsType.COMPLETE_LOC_MOVE.sts
            WrkStsType.COMPLETE_LOC_MOVE.sts,
            WrkStsType.COMPLETE_CRN_MOVE.sts
    );
    private static final String MODE_TASK = "TASK";
    private static final String MODE_TIME = "TIME";
@@ -45,6 +46,7 @@
    private final BasCrnpErrLogService basCrnpErrLogService;
    private final BasDualCrnpErrLogService basDualCrnpErrLogService;
    private final BasRgvErrLogService basRgvErrLogService;
    private final BasStationErrLogService basStationErrLogService;
    private final BasStationService basStationService;
    private final BasWrkStatusService basWrkStatusService;
    private final WrkMastService wrkMastService;
@@ -53,6 +55,7 @@
                                  BasCrnpErrLogService basCrnpErrLogService,
                                  BasDualCrnpErrLogService basDualCrnpErrLogService,
                                  BasRgvErrLogService basRgvErrLogService,
                                  BasStationErrLogService basStationErrLogService,
                                  BasStationService basStationService,
                                  BasWrkStatusService basWrkStatusService,
                                  WrkMastService wrkMastService) {
@@ -60,6 +63,7 @@
        this.basCrnpErrLogService = basCrnpErrLogService;
        this.basDualCrnpErrLogService = basDualCrnpErrLogService;
        this.basRgvErrLogService = basRgvErrLogService;
        this.basStationErrLogService = basStationErrLogService;
        this.basStationService = basStationService;
        this.basWrkStatusService = basWrkStatusService;
        this.wrkMastService = wrkMastService;
@@ -88,6 +92,8 @@
        entity.setDualCrnFaultDurationMs(defaultLong(entity.getDualCrnFaultDurationMs()));
        entity.setRgvFaultCount(defaultInt(entity.getRgvFaultCount()));
        entity.setRgvFaultDurationMs(defaultLong(entity.getRgvFaultDurationMs()));
        entity.setStationFaultCount(defaultInt(entity.getStationFaultCount()));
        entity.setStationFaultDurationMs(defaultLong(entity.getStationFaultDurationMs()));
        entity.setMetricCompleteness(METRIC_PARTIAL);
        entity.setUpdateTime(now);
        this.saveOrUpdate(entity);
@@ -186,7 +192,9 @@
        entity.setRgvNo(wrkMast.getRgvNo());
        entity.setFinalWrkSts(wrkMast.getWrkSts());
        entity.setUpdateTime(time);
        if (Objects.equals(wrkMast.getIoType(), WrkIoType.LOC_MOVE.id) && entity.getStationDurationMs() == null) {
        if ((Objects.equals(wrkMast.getIoType(), WrkIoType.LOC_MOVE.id)
                || Objects.equals(wrkMast.getIoType(), WrkIoType.CRN_MOVE.id))
                && entity.getStationDurationMs() == null) {
            entity.setStationDurationMs(0L);
        }
        this.updateById(entity);
@@ -225,7 +233,9 @@
        if (entity.getAppeTime() != null) {
            entity.setTotalDurationMs(durationMs(entity.getAppeTime(), time));
        }
        if (Objects.equals(wrkMast.getIoType(), WrkIoType.LOC_MOVE.id) && entity.getStationDurationMs() == null) {
        if ((Objects.equals(wrkMast.getIoType(), WrkIoType.LOC_MOVE.id)
                || Objects.equals(wrkMast.getIoType(), WrkIoType.CRN_MOVE.id))
                && entity.getStationDurationMs() == null) {
            entity.setStationDurationMs(0L);
        }
        FaultSummary faultSummary = buildFaultSummary(wrkMast.getWrkNo(), time);
@@ -238,6 +248,8 @@
        entity.setDualCrnFaultDurationMs(faultSummary.dualDurationMs);
        entity.setRgvFaultCount(faultSummary.rgvCount);
        entity.setRgvFaultDurationMs(faultSummary.rgvDurationMs);
        entity.setStationFaultCount(faultSummary.stationCount);
        entity.setStationFaultDurationMs(faultSummary.stationDurationMs);
        entity.setMetricCompleteness(resolveMetricCompleteness(wrkMast, entity));
        entity.setUpdateTime(time);
        this.saveOrUpdate(entity);
@@ -265,6 +277,7 @@
        ioTypes.add(option("1", "IN", "入库", WrkIoType.IN.id));
        ioTypes.add(option("2", "OUT", "出库", WrkIoType.OUT.id));
        ioTypes.add(option("3", "LOC_MOVE", "移库", WrkIoType.LOC_MOVE.id));
        ioTypes.add(option("4", "CRN_MOVE", "堆垛机移动", WrkIoType.CRN_MOVE.id));
        List<Map<String, Object>> timeFields = new ArrayList<>();
        timeFields.add(option(TIME_FIELD_FINISH, TIME_FIELD_FINISH, "完成时间", TIME_FIELD_FINISH));
        timeFields.add(option(TIME_FIELD_APPE, TIME_FIELD_APPE, "创建时间", TIME_FIELD_APPE));
@@ -604,6 +617,7 @@
            addDeviceFaultDuration(durationMap, "单堆垛机", item.getCrnNo(), item.getCrnFaultDurationMs());
            addDeviceFaultDuration(durationMap, "双工位堆垛机", item.getDualCrnNo(), item.getDualCrnFaultDurationMs());
            addDeviceFaultDuration(durationMap, "RGV", item.getRgvNo(), item.getRgvFaultDurationMs());
            addDeviceFaultDuration(durationMap, "输送站点", null, item.getStationFaultDurationMs());
        }
        List<Map<String, Object>> result = new ArrayList<>();
        durationMap.forEach((name, durationMs) -> result.add(slice(name, durationMs)));
@@ -674,6 +688,7 @@
        target.put("crnFaultDurationMs", analysis == null ? 0L : defaultLong(analysis.getCrnFaultDurationMs()));
        target.put("dualCrnFaultDurationMs", analysis == null ? 0L : defaultLong(analysis.getDualCrnFaultDurationMs()));
        target.put("rgvFaultDurationMs", analysis == null ? 0L : defaultLong(analysis.getRgvFaultDurationMs()));
        target.put("stationFaultDurationMs", analysis == null ? 0L : defaultLong(analysis.getStationFaultDurationMs()));
        target.put("metricCompleteness", analysis == null ? METRIC_PARTIAL : analysis.getMetricCompleteness());
    }
@@ -685,14 +700,17 @@
        List<BasCrnpErrLog> crnList = basCrnpErrLogService.list(new QueryWrapper<BasCrnpErrLog>().eq("wrk_no", wrkNo));
        List<BasDualCrnpErrLog> dualList = basDualCrnpErrLogService.list(new QueryWrapper<BasDualCrnpErrLog>().eq("wrk_no", wrkNo));
        List<BasRgvErrLog> rgvList = basRgvErrLogService.list(new QueryWrapper<BasRgvErrLog>().eq("task_no", wrkNo));
        List<BasStationErrLog> stationList = basStationErrLogService.list(new QueryWrapper<BasStationErrLog>().eq("wrk_no", wrkNo));
        summary.crnCount = crnList.size();
        summary.crnDurationMs = durationMs(crnList, finishTime);
        summary.dualCount = dualList.size();
        summary.dualDurationMs = durationMs(dualList, finishTime);
        summary.rgvCount = rgvList.size();
        summary.rgvDurationMs = durationMs(rgvList, finishTime);
        summary.totalCount = summary.crnCount + summary.dualCount + summary.rgvCount;
        summary.totalDurationMs = summary.crnDurationMs + summary.dualDurationMs + summary.rgvDurationMs;
        summary.stationCount = stationList.size();
        summary.stationDurationMs = durationMs(stationList, finishTime);
        summary.totalCount = summary.crnCount + summary.dualCount + summary.rgvCount + summary.stationCount;
        summary.totalDurationMs = summary.crnDurationMs + summary.dualDurationMs + summary.rgvDurationMs + summary.stationDurationMs;
        summary.hasFault = summary.totalCount > 0 ? 1 : 0;
        return summary;
    }
@@ -711,6 +729,9 @@
            } else if (item instanceof BasRgvErrLog) {
                startTime = ((BasRgvErrLog) item).getStartTime();
                endTime = ((BasRgvErrLog) item).getEndTime();
            } else if (item instanceof BasStationErrLog) {
                startTime = ((BasStationErrLog) item).getStartTime();
                endTime = ((BasStationErrLog) item).getEndTime();
            }
            if (startTime == null) {
                continue;
@@ -818,6 +839,9 @@
        }
        if (Objects.equals(ioType, WrkIoType.LOC_MOVE.id)) {
            return "移库";
        }
        if (Objects.equals(ioType, WrkIoType.CRN_MOVE.id)) {
            return "堆垛机移动";
        }
        return String.valueOf(ioType);
    }
@@ -968,6 +992,8 @@
        private long dualDurationMs;
        private int rgvCount;
        private long rgvDurationMs;
        private int stationCount;
        private long stationDurationMs;
    }
    private static class BucketAccumulator {