#
Junjie
昨天 5ee674134658e129b4d63cc160490ebc8c3200ef
#
3个文件已修改
85 ■■■■ 已修改文件
src/main/java/com/zy/asrs/service/impl/WrkAnalysisServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/wrkAnalysis/wrkAnalysis.js 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/wrkAnalysis/wrkAnalysis.html 20 ●●●●● 补丁 | 查看 | 原始文档 | 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>