package com.ruoyi.service.impl; import cn.hutool.core.util.ObjectUtil; 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.TestUseCaseMapper; import com.ruoyi.service.StrategyModelTestTask; 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; /** * 状态为NEW时的查看车型试验任务 * @param modelTestTask * @return */ @Override public List<ModelTestTaskViewResponse> doView(ModelTestTask modelTestTask) { List<ModelTestTaskViewResponse> list = getTestScheme(modelTestTask.getId()); return list; } /** * 获取试验方案 * @param taskId * @return */ public List<ModelTestTaskViewResponse> getTestScheme(Long taskId) { // 查询出本子任务所包含的测试场景集合 List<TestUsecaseVO> testCaseList = testUseCaseMapper.selectListByTaskId(taskId); // 创建一个空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)); return list; } /** * 状态为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())); } }