StrategyModelTestTaskNew.java 6.07 KB
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()));
    }
}