| src/main/java/com/zy/asrs/service/impl/WrkAnalysisServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/webapp/static/js/wrkAnalysis/wrkAnalysis.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/webapp/views/wrkAnalysis/wrkAnalysis.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/service/impl/WrkAnalysisServiceImpl.java
@@ -448,7 +448,22 @@ private Map<String, Object> buildAnalysisResult(List<WrkAnalysis> list, String timeField) { Map<String, Object> result = new LinkedHashMap<>(); Map<String, Object> summary = new LinkedHashMap<>(); Date taskStartTime = list.stream() .map(WrkAnalysis::getAppeTime) .filter(Objects::nonNull) .min(Date::compareTo) .orElse(null); Date taskEndTime = list.stream() .map(WrkAnalysis::getFinishTime) .filter(Objects::nonNull) .max(Date::compareTo) .orElse(null); summary.put("taskCount", list.size()); summary.put("taskStartTime", taskStartTime); summary.put("taskStartTime$", formatDate(taskStartTime)); summary.put("taskEndTime", taskEndTime); summary.put("taskEndTime$", formatDate(taskEndTime)); summary.put("taskDurationMs", taskStartTime == null || taskEndTime == null ? null : durationMs(taskStartTime, taskEndTime)); summary.put("avgTotalDurationMs", average(list, item -> item.getTotalDurationMs() != null, WrkAnalysis::getTotalDurationMs)); summary.put("avgStationDurationMs", average(list, item -> !METRIC_PARTIAL.equals(item.getMetricCompleteness()) && item.getStationDurationMs() != null, WrkAnalysis::getStationDurationMs)); summary.put("avgCraneDurationMs", average(list, item -> !METRIC_PARTIAL.equals(item.getMetricCompleteness()) && item.getCraneDurationMs() != null, WrkAnalysis::getCraneDurationMs)); src/main/webapp/static/js/wrkAnalysis/wrkAnalysis.js
@@ -29,6 +29,11 @@ return { summary: { taskCount: 0, taskStartTime: null, taskStartTime$: "", taskEndTime: null, taskEndTime$: "", taskDurationMs: null, avgTotalDurationMs: null, avgStationDurationMs: null, avgCraneDurationMs: null, @@ -743,11 +748,7 @@ if (!isFinite(num)) { return "0s"; } var text = String(num); if (text.indexOf(".") >= 0) { text = text.replace(/0+$/, "").replace(/\.$/, ""); } return text + "s"; return this.formatDurationBySeconds(num); }, formatDuration: function (value) { if (value === null || value === undefined || value === "") { @@ -760,17 +761,40 @@ if (ms < 1000) { return Math.round(ms) + " ms"; } var totalSeconds = Math.floor(ms / 1000); var hours = Math.floor(totalSeconds / 3600); var minutes = Math.floor((totalSeconds % 3600) / 60); var seconds = totalSeconds % 60; return this.formatDurationBySeconds(ms / 1000); }, formatDurationBySeconds: function (seconds) { var totalSeconds = Number(seconds || 0); if (!isFinite(totalSeconds)) { return "0s"; } var safeSeconds = Math.max(0, totalSeconds); if (safeSeconds < 60) { return this.trimTrailingZeros(safeSeconds) + "s"; } var hours = Math.floor(safeSeconds / 3600); var minutes = Math.floor((safeSeconds % 3600) / 60); var remainSeconds = safeSeconds - hours * 3600 - minutes * 60; var secondText = this.trimTrailingZeros(remainSeconds); if (hours > 0) { return hours + "h " + this.pad(minutes) + "m " + this.pad(seconds) + "s"; return hours + "h" + this.pad(minutes) + "m" + this.padSeconds(secondText) + "s"; } if (minutes > 0) { return minutes + "m " + this.pad(seconds) + "s"; return minutes + "m" + this.padSeconds(secondText) + "s"; }, trimTrailingZeros: function (value) { var text = String(Number(Number(value).toFixed(3))); if (text.indexOf(".") >= 0) { text = text.replace(/0+$/, "").replace(/\.$/, ""); } return seconds + "s"; return text; }, padSeconds: function (value) { var text = String(value); if (text.indexOf(".") >= 0) { var parts = text.split("."); return (parts[0].length < 2 ? "0" + parts[0] : parts[0]) + "." + parts[1]; } return text.length < 2 ? "0" + text : text; } } }); src/main/webapp/views/wrkAnalysis/wrkAnalysis.html
@@ -113,6 +113,11 @@ font-weight: 700; color: #22364a; } .summary-value.datetime { font-size: 20px; line-height: 1.25; word-break: break-word; } .summary-sub { margin-top: 8px; font-size: 12px; @@ -389,6 +394,21 @@ <div class="summary-sub">本次分析命中任务总数</div> </div> <div class="summary-card"> <div class="summary-label">总任务开始</div> <div class="summary-value datetime">{{ analysis.summary.taskStartTime$ || '--' }}</div> <div class="summary-sub">命中任务最早创建时间</div> </div> <div class="summary-card"> <div class="summary-label">总任务结束</div> <div class="summary-value datetime">{{ analysis.summary.taskEndTime$ || '--' }}</div> <div class="summary-sub">命中任务最晚完成时间</div> </div> <div class="summary-card"> <div class="summary-label">总任务总耗时</div> <div class="summary-value">{{ formatDuration(analysis.summary.taskDurationMs) }}</div> <div class="summary-sub">最早创建到最晚完成</div> </div> <div class="summary-card"> <div class="summary-label">平均总耗时</div> <div class="summary-value">{{ formatDuration(analysis.summary.avgTotalDurationMs) }}</div> <div class="summary-sub">创建到完成的平均耗时</div>