package com.ruoyi.service.impl; import com.ruoyi.common.DataStatisticsUtils; import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.domain.*; import com.ruoyi.mapper.*; import com.ruoyi.service.*; import com.ruoyi.web.response.SystemReviewTaskViewResponse; 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.math.BigDecimal; import java.text.DecimalFormat; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @Transactional @Service public class StrategySystemReviewTaskPending implements StrategySystemReviewTask, InitializingBean { @Autowired private StrategySystemReviewTaskContext strategySystemReviewTaskContext; @Autowired private ApplicationContext applicationContext; @Autowired private ReviewStandardService reviewStandardService; @Autowired private ReviewDetailsResultService reviewDetailsResultService; @Autowired private ReviewSceneChangeTaskService reviewSceneChangeTaskService; @Autowired private SystemReviewTaskMapper systemReviewTaskMapper; @Autowired private ReviewDetailsResultMapper reviewDetailsResultMapper; @Autowired private ReviewDetailsMapper reviewDetailsMapper; @Autowired private ReviewTaskInboxMapper reviewTaskInboxMapper; @Autowired private TaskMapper taskMapper; @Autowired private TaskSampleRelationMapper taskSampleRelationMapper; @Autowired private SampleManagementMapper sampleManagementMapper; @Autowired private ReviewEnterpriseArchiveMapper reviewEnterpriseArchiveMapper; @Autowired private TaskUserRelationMapper taskUserRelationMapper; @Override public void doStart(SystemReviewTask systemReviewTask) { throw new ServiceException("不能开始一个已经开始的任务", HttpStatus.ERROR); } @Override public void doSubmit(SystemReviewTask systemReviewTask, List<String> imagesUrl) { throw new ServiceException("不能提交一个未确认的任务", HttpStatus.ERROR); } @Override public void doClose(SystemReviewTask systemReviewTask) { systemReviewTask.setTaskEndTime(new Date()); systemReviewTask.setTaskStatus(SystemReviewTask.STATUS_CLOSE); systemReviewTaskMapper.updateById(systemReviewTask); } @Override public void doConfirm(SystemReviewTask systemReviewTask) { List<ReviewDetails> detailsList = reviewDetailsMapper.findNoResult(systemReviewTask.getId(),SystemReviewTask.TYPE); List<ReviewTaskInbox> inboxList = reviewTaskInboxMapper.findConfirmListByTaskId(systemReviewTask.getId()); if (detailsList.size() != 0 && detailsList != null) { throw new ServiceException("存在未填写的表单,请填写完整", HttpStatus.ERROR, detailsList); } else if (inboxList.size() != 0 && inboxList != null){ throw new ServiceException("存在未确认的场景变更信息,请确认", HttpStatus.ERROR); } else { // 1. 获取最新问卷 List<ReviewStandard> standardTree = reviewStandardService.findTree(systemReviewTask.getStandardId(), ReviewStandard.TYPE_SYSTEM); // 2. 所有细则必须有对应答案 List<ReviewDetailsResult> results = reviewDetailsResultService.findByTaskId(systemReviewTask.getId()); // 3. 将最终问卷归档到 standard 字段 setDetailsResult(standardTree, results, systemReviewTask); systemReviewTask.setStandard(standardTree); // 4. 修改任务状态为 SIGNED 待签字 systemReviewTask.setTaskStatus(SystemReviewTask.STATUS_SIGNED); // 5. 设置问卷结果 if (reviewDetailsResultMapper.findNotPass(systemReviewTask.getId()) > 0) { systemReviewTask.setTaskResult("REJECT"); } else { systemReviewTask.setTaskResult("PASS"); } systemReviewTaskMapper.updateById(systemReviewTask); } } // PENDING状态下 // 1.standard字段查询当前最新问卷 // 2.查询场景变更任务 // 3.需要联查问卷答案 @Override public SystemReviewTaskViewResponse doView(SystemReviewTask systemReviewTask) { // 获取最新问卷 List<ReviewStandard> standardTree = reviewStandardService.findTree(systemReviewTask.getStandardId(), ReviewStandard.TYPE_SYSTEM); // 获取当前问卷答案 List<ReviewDetailsResult> results = reviewDetailsResultService.findByTaskId(systemReviewTask.getId()); // 任务样品关系 List<TaskSampleRelation> relations = taskSampleRelationMapper.selectByTaskId(taskMapper.findBySystemReviewTaskId(systemReviewTask.getId()),TaskSampleRelation.COMPLETE_VEHICLE_SAMPLE); // 绑定问卷与答案 setDetailsResult(standardTree, results, systemReviewTask); // 赋值给任务 systemReviewTask.setStandard(standardTree); // 查询场景变更任务便于提醒用户场景变动 List<ReviewSceneChangeTask> lastChanges = reviewSceneChangeTaskService.findLastChangeByTaskId(systemReviewTask.getId()); List<TaskSampleRelation> sampleRelations = taskSampleRelationMapper.selectByTaskId(taskMapper.findBySystemReviewTaskId(systemReviewTask.getId()),TaskSampleRelation.COMPLETE_VEHICLE_SAMPLE); TaskSampleRelation taskSampleRelation = sampleRelations.get(0); Sample sample = sampleManagementMapper.selectSampleManagementById(taskSampleRelation.getSampleId()); systemReviewTask.setEnterpriseName(sample.getManufacturingEnterprise()); // 构建返回结果 SystemReviewTaskViewResponse response = new SystemReviewTaskViewResponse(); systemReviewTask.setImagesUrl("/vehicle-quality-review-oss/2024/03/04/qianzi1_20240304104011A001.jpg,/vehicle-quality-review-oss/2024/03/04/qianzi2_20240304104121A002.jpg"); response.setSystemReviewTask(systemReviewTask); response.setReviewSceneChangeTasks(lastChanges); return response; } private void setDetailsResult(List<ReviewStandard> standards, List<ReviewDetailsResult> results,SystemReviewTask systemReviewTask) { Map<Long, ReviewDetailsResult> resultMap = results.stream().collect(Collectors.toMap(ReviewDetailsResult::getReviewDetailsId, Function.identity(), (v1, v2) -> v1)); for(ReviewStandard standard : standards) { standard.setPassed(ReviewStandard.PASSED); List<ReviewKeyPoint> keyPointList = standard.getKeyPointList(); for(ReviewKeyPoint keypoint : keyPointList) { List<ReviewDetails> reviewDetailsList = keypoint.getReviewDetailsList(); for(ReviewDetails details : reviewDetailsList) { ReviewDetailsResult reviewDetailsResult = resultMap.get(details.getId()); if(reviewDetailsResult == null || Objects.equals(reviewDetailsResult.getPassed(), ReviewStandard.NO_PASSED)) { standard.setPassed(ReviewStandard.NO_PASSED); } if(reviewDetailsResult != null && reviewDetailsResult.getReviewEnterpriseArchiveId() != null) { ReviewEnterpriseArchive reviewEnterpriseArchive = reviewEnterpriseArchiveMapper.selectById(reviewDetailsResult.getReviewEnterpriseArchiveId()); reviewDetailsResult.setFileName(reviewEnterpriseArchive.getFileName()); } details.setResult(reviewDetailsResult); } } } List<TaskUserRelation> relationList = taskUserRelationMapper.selectQTeamMembers(taskMapper.findBySystemReviewTaskId(systemReviewTask.getId())); systemReviewTask.setStandards(DataStatisticsUtils.calculateStandards(standards)); BigDecimal standardPass = new BigDecimal((DataStatisticsUtils.calculateStandardsPass(standards, resultMap) / (double) systemReviewTask.getStandards())*100); systemReviewTask.setStandardsPass(standardPass.setScale(1,BigDecimal.ROUND_UP).doubleValue()); systemReviewTask.setDetails(DataStatisticsUtils.calculateDetails(standards)); BigDecimal detailsPass = new BigDecimal((DataStatisticsUtils.calculateDetailsPass(standards, resultMap) / (double) systemReviewTask.getDetails())*100); systemReviewTask.setDetailsPass(detailsPass.setScale(1,BigDecimal.ROUND_UP).doubleValue()); systemReviewTask.setPerson(relationList.size()); systemReviewTaskMapper.updateById(systemReviewTask); } @Override public void afterPropertiesSet() throws Exception { strategySystemReviewTaskContext.putResource(SystemReviewTask.STATUS_PENDING, applicationContext.getBean(this.getClass())); } }