package com.ruoyi.service.impl; import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.domain.*; import com.ruoyi.mapper.SystemReviewTaskMapper; import com.ruoyi.service.*; import com.ruoyi.web.response.SystemReviewTaskViewResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; @Transactional @Service(SystemReviewTask.STATUS_PENDING) public class StrategySystemReviewTaskPending implements StrategySystemReviewTask { @Autowired private ReviewStandardService reviewStandardService; @Autowired private ReviewDetailsResultService reviewDetailsResultService; @Autowired private ReviewSceneChangeTaskService reviewSceneChangeTaskService; @Autowired private SystemReviewTaskMapper systemReviewTaskMapper; @Override public void doStart(SystemReviewTask systemReviewTask) { throw new ServiceException("不能开始一个已经开始的任务", HttpStatus.ERROR); } @Override public void doSubmit(SystemReviewTask systemReviewTask) { // TODO // 1. 获取最新问卷 // 2. 所有细则必须有对应答案 // 3. 答案的 id + text 必须与细则对应的答案一致 // 4. 将最终问卷归档到 standard 字段 // 5. 填充task_end_time // 6. 修改任务状态为 FINISH } @Override public void doClose(SystemReviewTask systemReviewTask) { systemReviewTask.setTaskEndTime(new Date()); systemReviewTask.setTaskStatus(SystemReviewTask.STATUS_CLOSE); systemReviewTaskMapper.updateById(systemReviewTask); } // PENDING状态下 // 1.standard字段查询当前最新问卷 // 2.查询场景变更任务 // 3.需要联查问卷答案 @Override public SystemReviewTaskViewResponse doView(SystemReviewTask systemReviewTask) { // 获取最新问卷 List<ReviewStandard> standardTree = reviewStandardService.findTree(); // 获取当前问卷答案 List<ReviewDetailsResult> results = reviewDetailsResultService.findByTaskId(systemReviewTask.getId()); // 绑定问卷与答案 setDetailsResult(standardTree, results); // 赋值给任务 systemReviewTask.setStandard(standardTree); // 查询场景变更任务便于提醒用户场景变动 List<ReviewSceneChangeTask> lastChanges = reviewSceneChangeTaskService.findLastChangeByTaskId(systemReviewTask.getId()); // 构建返回结果 SystemReviewTaskViewResponse response = new SystemReviewTaskViewResponse(); response.setSystemReviewTask(systemReviewTask); response.setReviewSceneChangeTasks(lastChanges); return response; } private void setDetailsResult(List<ReviewStandard> standards, List<ReviewDetailsResult> results) { Map<Long, ReviewDetailsResult> resultMap = results.stream().collect(Collectors.toMap(ReviewDetailsResult::getReviewDetailsId, Function.identity(), (v1, v2) -> v1)); for(ReviewStandard standard : standards) { List<ReviewKeyPoint> keyPointList = standard.getKeyPointList(); for(ReviewKeyPoint keypoint : keyPointList) { List<ReviewDetails> reviewDetailsList = keypoint.getReviewDetailsList(); for(ReviewDetails details : reviewDetailsList) { details.setResult(resultMap.get(details.getId())); } } } } }