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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package com.ruoyi.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.domain.*;
import com.ruoyi.domain.vo.TestCaseVO;
import com.ruoyi.domain.vo.TestUsecaseVO;
import com.ruoyi.mapper.ModelTestTaskMapper;
import com.ruoyi.mapper.TaskMapper;
import com.ruoyi.mapper.TestUseCaseMapper;
import com.ruoyi.service.StrategyModelTestTask;
import com.ruoyi.web.response.ModelTestResponse;
import com.ruoyi.web.response.ModelTestTaskViewResponse;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* 车型试验开始状态
* @author gxk
*/
@Service
@Transactional
public class StrategyModelTestTaskNew implements StrategyModelTestTask, InitializingBean {
@Autowired
private ApplicationContext applicationContext;
@Autowired
private StrategyModelTestTaskContext strategyModelTestTaskContext;
@Autowired
private TestUseCaseMapper testUseCaseMapper;
@Autowired
private ModelTestTaskMapper modelTestTaskMapper;
@Autowired
private TaskMapper taskMapper;
/**
* 状态为NEW时的查看车型试验任务
* @param modelTestTask
* @return
*/
@Override
public ModelTestResponse doView(ModelTestTask modelTestTask) {
ModelTestResponse response = getTestScheme(modelTestTask);
return response;
}
/**
* 获取试验方案
* @param taskId
* @return
*/
public ModelTestResponse getTestScheme(ModelTestTask modelTestTask) {
// 查询出本子任务所包含的测试场景集合
List<TestUsecaseVO> testCaseList = testUseCaseMapper.selectListByTaskId(modelTestTask.getId());
// 创建一个空List, 用于返回数据
List<ModelTestTaskViewResponse> list = new ArrayList<>();
// 创建一个HashMap, 用于存放数据。用例条款ID作为key
HashMap<Long, List<TestCaseVO>> map = new HashMap<>();
for (TestUsecaseVO testUsecaseVO : testCaseList) {
if (ObjectUtil.isNotEmpty(testUsecaseVO.getReviewStandardId())) {
// map不存在此key,添加; 则,存数据
if (!map.containsKey(testUsecaseVO.getReviewStandardId())) {
TestCaseVO caseVO = new TestCaseVO();
BeanUtils.copyProperties(testUsecaseVO, caseVO);
List<TestCaseVO> caseList = new ArrayList<>();
caseList.add(caseVO);
map.put(testUsecaseVO.getReviewStandardId(), caseList);
} else {
TestCaseVO caseVO = new TestCaseVO();
BeanUtils.copyProperties(testUsecaseVO, caseVO);
map.get(testUsecaseVO.getReviewStandardId()).add(caseVO);
}
}
}
// 循环map, 给list赋值
for (Map.Entry<Long, List<TestCaseVO>> entry : map.entrySet()) {
List<TestUsecaseVO> collect = testCaseList.stream().filter(testCaseVO -> entry.getKey().equals(testCaseVO.getReviewStandardId())).collect(Collectors.toList());
if (collect.size() > 0){
TestUsecaseVO testUsecaseVO = collect.get(0);
ModelTestTaskViewResponse modelTestTaskViewResponse = ModelTestTaskViewResponse.builder()
.chapter(testUsecaseVO.getChapter())
.text(testUsecaseVO.getText())
.testMethod(testUsecaseVO.getTestMethod())
.testCaseList(entry.getValue())
.build();
list.add(modelTestTaskViewResponse);
}
}
// 最后按章节号升序
list.sort(Comparator.comparing(ModelTestTaskViewResponse::getChapter));
// 构造
Task task = taskMapper.selectOne(new QueryWrapper<Task>().lambda().eq(Task::getModelTestTaskId, modelTestTask.getId()));
ModelTestResponse response = ModelTestResponse.builder()
.taskNo(task.getTaskNo())
.taskName(task.getTaskName())
.entrustedUnit(task.getEntrustedUnit())
.taskStatus(modelTestTask.getTaskStatus())
.modelTestTaskViewResponseList(list)
.build();
return response;
}
/**
* 状态为NEW时的开始车型试验任务
* @param modelTestTask
*/
@Override
public void doStartTest(ModelTestTask modelTestTask) {
modelTestTaskMapper.update(new ModelTestTask(),
new LambdaUpdateWrapper<ModelTestTask>()
.set(ModelTestTask::getTaskBeginTime, new Date())
.set(ModelTestTask::getTaskStatus, ModelTestTask.TASK_STATUS_PENDING)
.eq(ModelTestTask::getId, modelTestTask.getId()));
}
/**
* 状态为NEW时的确认车型试验任务
* @param modelTestTask
*/
@Override
public void doConfirmTest(ModelTestTask modelTestTask) {
throw new ServiceException("不能确认一个尚未开始的任务", HttpStatus.ERROR);
}
/**
* 状态为NEW时的提交车型试验任务
* @param modelTestTask
* @param imagesUrl
*/
@Override
public void doSubmitTest(ModelTestTask modelTestTask, List<String> imagesUrl) {
throw new ServiceException("不能提交一个尚未开始的任务", HttpStatus.ERROR);
}
/**
* 根据任务状态获取对应的策略
* @throws Exception
*/
@Override
public void afterPropertiesSet() throws Exception {
strategyModelTestTaskContext.putResource(ModelTestTask.TASK_STATUS_NEW, applicationContext.getBean(this.getClass()));
}
}