StrategyCarReviewTaskPending.java 7.08 KB
Newer Older
W_Y's avatar
W_Y committed
1 2
package com.ruoyi.service.impl;

3
import com.ruoyi.common.constant.HttpStatus;
4
import com.ruoyi.common.core.domain.entity.SysUser;
5
import com.ruoyi.common.exception.ServiceException;
6
import com.ruoyi.common.utils.SecurityUtils;
W_Y's avatar
W_Y committed
7
import com.ruoyi.domain.*;
8
import com.ruoyi.mapper.*;
W_Y's avatar
W_Y committed
9 10 11 12 13
import com.ruoyi.service.ReviewDetailsResultService;
import com.ruoyi.service.ReviewSceneChangeTaskService;
import com.ruoyi.service.ReviewStandardService;
import com.ruoyi.service.StrategyCarReviewTask;
import com.ruoyi.web.response.CarReviewTaskViewResponse;
王飞's avatar
王飞 committed
14
import org.springframework.beans.factory.InitializingBean;
W_Y's avatar
W_Y committed
15
import org.springframework.beans.factory.annotation.Autowired;
王飞's avatar
王飞 committed
16
import org.springframework.context.ApplicationContext;
W_Y's avatar
W_Y committed
17 18 19
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

20
import java.util.Date;
W_Y's avatar
W_Y committed
21 22 23 24 25 26
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

@Transactional
王飞's avatar
王飞 committed
27 28 29 30 31 32 33
@Service
public class StrategyCarReviewTaskPending implements StrategyCarReviewTask, InitializingBean {

    @Autowired
    private StrategyCarReviewTaskContext strategyCarReviewTaskContext;
    @Autowired
    private ApplicationContext applicationContext;
W_Y's avatar
W_Y committed
34 35 36 37 38 39 40 41 42 43 44

    @Autowired
    private ReviewStandardService reviewStandardService;

    @Autowired
    private ReviewDetailsResultService reviewDetailsResultService;

    @Autowired
    private ReviewSceneChangeTaskService reviewSceneChangeTaskService;

    @Autowired
45
    private CarReviewTaskMapper carReviewTaskMapper;
W_Y's avatar
W_Y committed
46 47 48 49

    @Autowired
    private ReviewDetailsResultMapper reviewDetailsResultMapper;

W_Y's avatar
W_Y committed
50 51 52
    @Autowired
    private ReviewDetailsMapper reviewDetailsMapper;

53 54 55
    @Autowired
    private ReviewTaskInboxMapper reviewTaskInboxMapper;

56 57 58 59 60 61 62 63 64
    @Autowired
    private TaskMapper taskMapper;

    @Autowired
    private TaskSampleRelationMapper taskSampleRelationMapper;

    @Autowired
    private SampleManagementMapper sampleManagementMapper;

W_Y's avatar
W_Y committed
65 66 67 68 69 70 71 72 73 74 75 76
    // PENDING状态下
    // 1.standard字段查询当前最新问卷
    // 2.查询场景变更任务
    // 3.需要联查问卷答案
    @Override
    public CarReviewTaskViewResponse doView(CarReviewTask carReviewTask) {
        // 获取最新问卷
        List<ReviewStandard> standardTree = reviewStandardService.findTree(carReviewTask.getStandardId(), ReviewStandard.TYPE_CAR);

        // 获取当前问卷答案
        List<ReviewDetailsResult> results = reviewDetailsResultService.findByTaskId(carReviewTask.getId());

77 78 79 80 81 82 83 84 85 86 87 88 89
        // 任务样品关系
        List<TaskSampleRelation> relations = taskSampleRelationMapper.selectByTaskId(taskMapper.findByCarReviewTaskId(carReviewTask.getId()),TaskSampleRelation.COMPLETE_VEHICLE_SAMPLE);

        if (results.size() != 0 && results != null) {
            for (ReviewDetailsResult reviewDetailsResult : results) {
                if (reviewDetailsResult != null && reviewDetailsResult.getReviewEnterpriseArchiveId() == null && relations.size() != 0 && relations != null) {
                    TaskSampleRelation taskSampleRelation = relations.get(0);
                    Sample sample = sampleManagementMapper.selectSampleManagementById(taskSampleRelation.getSampleId());
                    reviewDetailsResult.setEnterpriseName(sample.getManufacturingEnterprise());
                }
            }
        }

W_Y's avatar
W_Y committed
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
        // 绑定问卷与答案
        setDetailsResult(standardTree, results);

        // 赋值给任务
        carReviewTask.setStandard(standardTree);

        // 查询场景变更任务便于提醒用户场景变动
        List<ReviewSceneChangeTask> lastChanges = reviewSceneChangeTaskService.findLastChangeByTaskId(carReviewTask.getId());

        // 构建返回结果

        CarReviewTaskViewResponse response = new CarReviewTaskViewResponse();
        response.setCarReviewTask(carReviewTask);
        response.setReviewSceneChangeTasks(lastChanges);

        return response;
    }

108 109
    @Override
    public void doStartReview(CarReviewTask carReviewTask) {
110
        throw new ServiceException("不能开始一个进行中的任务", HttpStatus.ERROR);
111 112 113
    }

    @Override
114
    public void doConfirmReview(CarReviewTask carReviewTask) {
W_Y's avatar
W_Y committed
115
        List<ReviewDetails> detailsList = reviewDetailsMapper.findNoResult(carReviewTask.getId(),CarReviewTask.TYPE);
116
        List<ReviewTaskInbox> inboxList = reviewTaskInboxMapper.findConfirmListByTaskId(carReviewTask.getId());
W_Y's avatar
W_Y committed
117
        if (detailsList.size() != 0 && detailsList != null) {
W_Y's avatar
W_Y committed
118
            throw new ServiceException("存在未填写的问卷,请填写完整", HttpStatus.ERROR, detailsList);
W_Y's avatar
W_Y committed
119
        } else if (inboxList.size() != 0 && inboxList != null){
120 121
            throw new ServiceException("存在未确认的场景变更信息,请确认", HttpStatus.ERROR);
        }else {
W_Y's avatar
W_Y committed
122 123 124 125 126 127 128 129 130 131
            // 1. 获取最新问卷
            List<ReviewStandard> standardTree = reviewStandardService.findTree(carReviewTask.getStandardId(), ReviewStandard.TYPE_CAR);

            // 2. 所有细则必须有对应答案
            List<ReviewDetailsResult> results = reviewDetailsResultService.findByTaskId(carReviewTask.getId());

            // 3. 将最终问卷归档到 standard 字段
            setDetailsResult(standardTree, results);
            carReviewTask.setStandard(standardTree);

132
            // 4. 修改任务状态为 SIGNED 待签字
133
            carReviewTask.setTaskStatus(CarReviewTask.TASK_STATUS_SIGNED);
W_Y's avatar
W_Y committed
134 135 136

            // 7. 设置问卷结果
            if (reviewDetailsResultMapper.findNotPass(carReviewTask.getId()) > 0) {
137
                carReviewTask.setTaskResult("REJECT");
W_Y's avatar
W_Y committed
138
            } else {
139
                carReviewTask.setTaskResult("PASS");
W_Y's avatar
W_Y committed
140 141
            }
            carReviewTaskMapper.updateById(carReviewTask);
142
        }
143 144 145
    }

    @Override
wdy's avatar
wdy committed
146
    public void doSubmitReview(CarReviewTask carReviewTask,List<String> imagesUrl) {
147 148

        throw new ServiceException("不能提交一个未确认的任务", HttpStatus.ERROR);
W_Y's avatar
W_Y committed
149

150 151
    }

W_Y's avatar
W_Y committed
152 153 154 155 156
    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) {
157
            standard.setPassed(0);
W_Y's avatar
W_Y committed
158 159 160 161 162 163
            List<ReviewKeyPoint> keyPointList = standard.getKeyPointList();

            for(ReviewKeyPoint keypoint : keyPointList) {
                List<ReviewDetails> reviewDetailsList = keypoint.getReviewDetailsList();

                for(ReviewDetails details : reviewDetailsList) {
164
                    ReviewDetailsResult reviewDetailsResult = resultMap.get(details.getId());
165
                    if(reviewDetailsResult != null && reviewDetailsResult.getPassed() != 0) {
166 167 168
                        standard.setPassed(reviewDetailsResult.getPassed());
                    }
                    details.setResult(reviewDetailsResult);
W_Y's avatar
W_Y committed
169 170 171 172
                }
            }
        }
    }
王飞's avatar
王飞 committed
173 174 175

    @Override
    public void afterPropertiesSet() throws Exception {
176
        strategyCarReviewTaskContext.putResource(CarReviewTask.TASK_STATUS_PENDING, applicationContext.getBean(this.getClass()));
王飞's avatar
王飞 committed
177
    }
W_Y's avatar
W_Y committed
178
}