| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; |
| | | import com.ycl.common.enums.business.CodingRulerCodeTypeEnum; |
| | | import com.ycl.common.base.Result; |
| | | import com.ycl.common.enums.business.CodingRulerIntervalTypeEnum; |
| | | import com.ycl.common.enums.business.CodingRulerSymbolTypeEnum; |
| | | import com.ycl.common.enums.business.ProjectProcessTypeEnum; |
| | | import com.ycl.domain.entity.*; |
| | | import com.ycl.domain.vo.CodingRulerVO; |
| | | import com.ycl.domain.vo.ProcessCodingVO; |
| | | import com.ycl.domain.vo.ProjectCodingStatusVO; |
| | | import com.ycl.domain.vo.ProjectProcessVO; |
| | | import com.ycl.domain.vo.ProcessOvertimeTimesVO; |
| | | import com.ycl.factory.FlowServiceFactory; |
| | | import com.ycl.mapper.*; |
| | | import com.ycl.service.ProjectCodingStatusService; |
| | | import liquibase.pro.packaged.A; |
| | | import com.ycl.service.CodingRulerService; |
| | | import com.ycl.service.ProjectOvertimeTimesService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Slf4j |
| | | @RequiredArgsConstructor |
| | | @Component("codingTask") |
| | | public class CodingTask extends FlowServiceFactory { |
| | | @Autowired |
| | | private ProjectCodingStatusMapper projectCodingStatusMapper; |
| | | |
| | | @Autowired |
| | | private ProjectCodingStatusService projectCodingStatusService; |
| | | private final ProjectOvertimeTimesMapper projectOvertimeTimesMapper; |
| | | |
| | | @Autowired |
| | | private ProjectProcessMapper projectProcessMapper; |
| | | @Autowired |
| | | private ProjectInfoMapper projectInfoMapper; |
| | | @Autowired |
| | | private CodingRulerMapper codingRulerMapper; |
| | | private final ProjectOvertimeTimesService projectOvertimeTimesService; |
| | | |
| | | @Autowired |
| | | private ProcessCodingMapper processCodingMapper; |
| | | private final ProjectProcessMapper projectProcessMapper; |
| | | |
| | | private final ProjectInfoMapper projectInfoMapper; |
| | | |
| | | private final CodingRulerService codingRulerService; |
| | | |
| | | private final ProcessCodingMapper processCodingMapper; |
| | | |
| | | //计数项目超时任务数并更具赋码规则进行赋码 |
| | | public void codingTask(){ |
| | | log.info("开始计算项目并且赋码"); |
| | | //获得启用的赋码规则 |
| | | List<CodingRulerVO> codingRulerVOS = codingRulerMapper.getStartRuler(); |
| | | Result result = codingRulerService.getStartRuler(); |
| | | CodingRulerVO yellowRuler = (CodingRulerVO) result.get("yellowRuler"); |
| | | CodingRulerVO redRuler = (CodingRulerVO) result.get("redRuler"); |
| | | |
| | | //没启用直接结束 |
| | | if (CollectionUtils.isEmpty(codingRulerVOS)){ |
| | | log.info("未启用赋码规则"); |
| | | if (Objects.isNull(yellowRuler) && Objects.isNull(redRuler)) { |
| | | log.error("未启用赋码规则"); |
| | | return; |
| | | } |
| | | CodingRulerVO yellowRuler = null; |
| | | CodingRulerVO redRuler = null; |
| | | for (CodingRulerVO codingRulerVO : codingRulerVOS){ |
| | | if (CodingRulerCodeTypeEnum.YELLOW.getValue().equals(codingRulerVO.getProjectCodeType())){ |
| | | yellowRuler = codingRulerVO; |
| | | }else if (CodingRulerCodeTypeEnum.RED.getValue().equals(codingRulerVO.getProjectCodeType())){ |
| | | redRuler = codingRulerVO; |
| | | } |
| | | } |
| | | |
| | | //获得所有 超时任务数与流程实例id |
| | | List<ProcessCodingVO> processCodingVOS = processCodingMapper.countProjectOverTimeNum(); |
| | | if (!CollectionUtils.isEmpty(processCodingVOS)){ |
| | | List<ProcessOvertimeTimesVO> processOvertimeTimesVOS = processCodingMapper.countProjectOvertimeTimes(); |
| | | if (!CollectionUtils.isEmpty(processOvertimeTimesVOS)){ |
| | | //将流程实例id转换为list |
| | | List<String> processIds = processCodingVOS.stream().map(ProcessCodingVO::getProcessInsId).toList(); |
| | | List<String> processIds = processOvertimeTimesVOS.stream().map(ProcessOvertimeTimesVO::getProcessInsId).toList(); |
| | | //获得所有 更具流程定义id,流程相关项目id, key为流程id |
| | | Map<String, ProjectProcess> projectMap = new LambdaQueryChainWrapper<>(projectProcessMapper) |
| | | .in(ProjectProcess::getProcessInsId, processIds) |
| | |
| | | |
| | | |
| | | //新增的记录集合 |
| | | List<ProjectCodingStatus> addList = new ArrayList<>(); |
| | | List<ProjectOvertimeTimes> addList = new ArrayList<>(); |
| | | |
| | | for (ProcessCodingVO processCoding : processCodingVOS) { |
| | | for (ProcessOvertimeTimesVO processOvertimeTimesVO : processOvertimeTimesVOS) { |
| | | //判断 项目类型为 ProjectProcessTypeEnum.PROJECT 并且超时任务数大于0 |
| | | if (processCoding.getTaskOvertimeNum() != 0 && projectMap.containsKey(processCoding.getProcessInsId())) { |
| | | ProjectCodingStatus projectCodingStatus = new ProjectCodingStatus(); |
| | | projectCodingStatus.setProjectType(ProjectProcessTypeEnum.PROJECT.getValue()); |
| | | projectCodingStatus.setProjectId(projectMap.get(processCoding.getProcessInsId()).getProjectId()); |
| | | projectCodingStatus.setProcessInsId(processCoding.getProcessInsId()); |
| | | projectCodingStatus.setTaskOvertimeNum(processCoding.getTaskOvertimeNum()); |
| | | if (processOvertimeTimesVO.getTaskOvertimeNum() != 0 && projectMap.containsKey(processOvertimeTimesVO.getProcessInsId())) { |
| | | ProjectOvertimeTimes projectOvertimeTimes = new ProjectOvertimeTimes(); |
| | | projectOvertimeTimes.setProjectType(ProjectProcessTypeEnum.PROJECT.getValue()); |
| | | projectOvertimeTimes.setProjectId(projectMap.get(processOvertimeTimesVO.getProcessInsId()).getProjectId()); |
| | | projectOvertimeTimes.setProcessInsId(processOvertimeTimesVO.getProcessInsId()); |
| | | projectOvertimeTimes.setTaskOvertimeNum(processOvertimeTimesVO.getTaskOvertimeNum()); |
| | | //添加到新增集合内 |
| | | addList.add(projectCodingStatus); |
| | | addList.add(projectOvertimeTimes); |
| | | //检验赋码规则 |
| | | checkCodingType(projectCodingStatus.getTaskOvertimeNum(), |
| | | projectCodingStatus.getProjectId(), |
| | | checkCodingType(projectOvertimeTimes.getTaskOvertimeNum(), |
| | | projectOvertimeTimes.getProjectId(), |
| | | yellowProjectCodingIds,redProjectCodingIds, |
| | | yellowRuler,redRuler); |
| | | } |
| | | } |
| | | |
| | | if(!CollectionUtils.isEmpty(addList)){ |
| | | projectCodingStatusMapper.delAll(); |
| | | projectCodingStatusService.saveBatch(addList); |
| | | projectOvertimeTimesMapper.delAll(); |
| | | projectOvertimeTimesService.saveBatch(addList); |
| | | } |
| | | //修改项目赋码 |
| | | updateProjectCoding(redProjectCodingIds,"red"); |