zxl
2025-04-02 419104df560d427e9cfb610bb6549dcfe695822d
business/src/main/java/com/ycl/task/CodingTask.java
@@ -2,21 +2,19 @@
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;
@@ -28,49 +26,41 @@
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)
@@ -86,29 +76,29 @@
            //新增的记录集合
            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");