#
Junjie
9 小时以前 2b8a06fad6cc62d8d46307626489b68c4f8f065d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.zy.asrs.service.impl;
 
import com.zy.asrs.entity.WrkAnalysis;
import com.zy.asrs.service.BasCrnpErrLogService;
import com.zy.asrs.service.BasDualCrnpErrLogService;
import com.zy.asrs.service.BasRgvErrLogService;
import com.zy.asrs.service.BasStationService;
import com.zy.asrs.service.BasWrkStatusService;
import com.zy.asrs.service.WrkMastLogService;
import com.zy.asrs.service.WrkMastService;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Map;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
 
class WrkAnalysisServiceImplTest {
 
    @Test
    @SuppressWarnings("unchecked")
    void buildAnalysisResult_calculatesAverageTaskPerHour() {
        BasWrkStatusService basWrkStatusService = mock(BasWrkStatusService.class);
        when(basWrkStatusService.getById(org.mockito.ArgumentMatchers.any())).thenReturn(null);
        WrkAnalysisServiceImpl service = new WrkAnalysisServiceImpl(
                mock(WrkMastLogService.class),
                mock(BasCrnpErrLogService.class),
                mock(BasDualCrnpErrLogService.class),
                mock(BasRgvErrLogService.class),
                mock(BasStationService.class),
                basWrkStatusService,
                mock(WrkMastService.class)
        );
 
        Map<String, Object> result = ReflectionTestUtils.invokeMethod(
                service,
                "buildAnalysisResult",
                Arrays.asList(
                        analysis(1001, date("2026-03-27 13:00:00"), date("2026-03-27 13:10:00"), 600_000L),
                        analysis(1002, date("2026-03-27 13:15:00"), date("2026-03-27 13:30:00"), 900_000L)
                ),
                "finish_time"
        );
 
        Map<String, Object> summary = (Map<String, Object>) result.get("summary");
        assertEquals(4.0d, ((Number) summary.get("avgTaskPerHour")).doubleValue(), 0.0001d);
    }
 
    private WrkAnalysis analysis(int wrkNo, Date appeTime, Date finishTime, long totalDurationMs) {
        WrkAnalysis item = new WrkAnalysis();
        item.setWrkNo(wrkNo);
        item.setAppeTime(appeTime);
        item.setFinishTime(finishTime);
        item.setTotalDurationMs(totalDurationMs);
        item.setFinalWrkSts(80L);
        item.setMetricCompleteness("COMPLETE");
        return item;
    }
 
    private Date date(String value) {
        try {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value);
        } catch (ParseException e) {
            throw new IllegalArgumentException(e);
        }
    }
}