| | |
| | | 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"; |
| | |
| | | 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; |
| | |
| | | BasCrnpErrLogService basCrnpErrLogService, |
| | | BasDualCrnpErrLogService basDualCrnpErrLogService, |
| | | BasRgvErrLogService basRgvErrLogService, |
| | | BasStationErrLogService basStationErrLogService, |
| | | BasStationService basStationService, |
| | | BasWrkStatusService basWrkStatusService, |
| | | WrkMastService wrkMastService) { |
| | |
| | | this.basCrnpErrLogService = basCrnpErrLogService; |
| | | this.basDualCrnpErrLogService = basDualCrnpErrLogService; |
| | | this.basRgvErrLogService = basRgvErrLogService; |
| | | this.basStationErrLogService = basStationErrLogService; |
| | | this.basStationService = basStationService; |
| | | this.basWrkStatusService = basWrkStatusService; |
| | | this.wrkMastService = wrkMastService; |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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)); |
| | |
| | | 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))); |
| | |
| | | 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()); |
| | | } |
| | | |
| | |
| | | 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; |
| | | } |
| | |
| | | } 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; |
| | |
| | | } |
| | | if (Objects.equals(ioType, WrkIoType.LOC_MOVE.id)) { |
| | | return "移库"; |
| | | } |
| | | if (Objects.equals(ioType, WrkIoType.CRN_MOVE.id)) { |
| | | return "堆垛机移动"; |
| | | } |
| | | return String.valueOf(ioType); |
| | | } |
| | |
| | | private long dualDurationMs; |
| | | private int rgvCount; |
| | | private long rgvDurationMs; |
| | | private int stationCount; |
| | | private long stationDurationMs; |
| | | } |
| | | |
| | | private static class BucketAccumulator { |