From e85cd3fe826efe0baaa3fc09ea371467127c370c Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期二, 15 七月 2025 18:11:31 +0800 Subject: [PATCH] Merge branch 'dev' --- business/src/main/java/com/ycl/task/CodingTask.java | 216 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 216 insertions(+), 0 deletions(-) diff --git a/business/src/main/java/com/ycl/task/CodingTask.java b/business/src/main/java/com/ycl/task/CodingTask.java new file mode 100644 index 0000000..2dd19dd --- /dev/null +++ b/business/src/main/java/com/ycl/task/CodingTask.java @@ -0,0 +1,216 @@ +package com.ycl.task; + +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; +import com.ycl.common.base.Result; +import com.ycl.common.enums.business.CodingRulerIntervalTypeEnum; +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.ProcessOvertimeTimesVO; +import com.ycl.factory.FlowServiceFactory; +import com.ycl.mapper.*; +import com.ycl.service.CodingRulerService; +import com.ycl.service.ProjectOvertimeTimesService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Slf4j +@RequiredArgsConstructor +@Component("codingTask") +public class CodingTask extends FlowServiceFactory { + + private final ProjectOvertimeTimesMapper projectOvertimeTimesMapper; + + private final ProjectOvertimeTimesService projectOvertimeTimesService; + + private final ProjectProcessMapper projectProcessMapper; + + private final ProjectInfoMapper projectInfoMapper; + + private final CodingRulerService codingRulerService; + + private final ProcessCodingMapper processCodingMapper; + + //璁℃暟椤圭洰瓒呮椂浠诲姟鏁板苟鏇村叿璧嬬爜瑙勫垯杩涜璧嬬爜 + public void codingTask(){ + log.info("寮�濮嬭绠楅」鐩苟涓旇祴鐮�"); + //鑾峰緱鍚敤鐨勮祴鐮佽鍒� + Result result = codingRulerService.getStartRuler(); + CodingRulerVO yellowRuler = (CodingRulerVO) result.get("yellowRuler"); + CodingRulerVO redRuler = (CodingRulerVO) result.get("redRuler"); + + //娌″惎鐢ㄧ洿鎺ョ粨鏉� + if (Objects.isNull(yellowRuler) && Objects.isNull(redRuler)) { + log.error("鏈惎鐢ㄨ祴鐮佽鍒�"); + return; + } + + //鑾峰緱鎵�鏈� 瓒呮椂浠诲姟鏁颁笌娴佺▼瀹炰緥id + List<ProcessOvertimeTimesVO> processOvertimeTimesVOS = processCodingMapper.countProjectOvertimeTimes(); + if (!CollectionUtils.isEmpty(processOvertimeTimesVOS)){ + //灏嗘祦绋嬪疄渚媔d杞崲涓簂ist + List<String> processIds = processOvertimeTimesVOS.stream().map(ProcessOvertimeTimesVO::getProcessInsId).toList(); + //鑾峰緱鎵�鏈� 鏇村叿娴佺▼瀹氫箟id锛屾祦绋嬬浉鍏抽」鐩甶d锛� key涓烘祦绋媔d + Map<String, ProjectProcess> projectMap = new LambdaQueryChainWrapper<>(projectProcessMapper) + .in(ProjectProcess::getProcessInsId, processIds) + .eq(ProjectProcess::getProjectType, ProjectProcessTypeEnum.PROJECT) + .list() + .stream() + .collect(Collectors.toMap(ProjectProcess::getProcessInsId, Function.identity())); + + //淇敼涓洪粍鐮佺殑椤圭洰 id + List<String> yellowProjectCodingIds = new ArrayList<>(); + //淇敼涓虹孩鐮佺殑椤圭洰 id + List<String> redProjectCodingIds = new ArrayList<>(); + + + //鏂板鐨勮褰曢泦鍚� + List<ProjectOvertimeTimes> addList = new ArrayList<>(); + + for (ProcessOvertimeTimesVO processOvertimeTimesVO : processOvertimeTimesVOS) { + //鍒ゆ柇 椤圭洰绫诲瀷涓� ProjectProcessTypeEnum.PROJECT 骞朵笖瓒呮椂浠诲姟鏁板ぇ浜�0 + 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(projectOvertimeTimes); + //妫�楠岃祴鐮佽鍒� + checkCodingType(projectOvertimeTimes.getTaskOvertimeNum(), + projectOvertimeTimes.getProjectId(), + yellowProjectCodingIds,redProjectCodingIds, + yellowRuler,redRuler); + } + } + + if(!CollectionUtils.isEmpty(addList)){ + projectOvertimeTimesMapper.delAll(); + projectOvertimeTimesService.saveBatch(addList); + } + //淇敼椤圭洰璧嬬爜 + updateProjectCoding(redProjectCodingIds,"red"); + log.info("鎵撳嵃璧嬪�间负绾㈢爜鐨勯」鐩甶d"); + for (String s : redProjectCodingIds){ + System.out.println(s); + } + log.info("鎵撳嵃璧嬪�间负绾㈢爜鐨勯」鐩甶d瀹屾瘯"); + updateProjectCoding(yellowProjectCodingIds,"yellow"); + log.info("鎵撳嵃璧嬪�间负榛勭爜鐨勯」鐩甶d"); + for (String s : yellowProjectCodingIds){ + System.out.println(s); + } + log.info("鎵撳嵃璧嬪�间负榛勭爜鐨勯」鐩甶d瀹屾瘯"); + } + + log.info("缁撴潫璁$畻椤圭洰骞朵笖璧嬬爜"); + } + + /** + * 璧嬬爜 + * + * @param projectIds 娴佺▼瀹炰緥ID鍒楄〃 + * @param coding 璧嬬爜鍊� + */ + private void updateProjectCoding(List<String> projectIds, String coding) { + if (!CollectionUtils.isEmpty(projectIds)) { + //灏唅d 绫诲瀷杞崲涓篖ong + List<Long> longList = projectIds.stream() + .map(Long::parseLong) + .collect(Collectors.toList()); + new LambdaUpdateChainWrapper<>(projectInfoMapper) + .in(ProjectInfo::getId, longList) + .set(ProjectInfo::getCoding, coding) + .update(); + } + } + + + /** + * + * @param overTimeNum 瓒呮椂浠诲姟鏁� + * @param projectId 椤圭洰id + * @param yellowProjectCodingIds 淇敼椤圭洰璧嬬爜涓洪粍鐮佺殑id闆嗗悎 + * @param redProjectCodingIds 淇敼椤圭洰璧嬬爜涓虹孩鐮佺殑id闆嗗悎 + * @param yellowRuler 榛勭爜瑙勫垯 + * @param redRuler 绾㈢爜瑙勫垯 + */ + private void checkCodingType(Long overTimeNum,String projectId, + List<String> yellowProjectCodingIds, List<String> redProjectCodingIds, + CodingRulerVO yellowRuler,CodingRulerVO redRuler){ + //鍏堝垽鏂孩鐮侊紝瑙勫垯濡傛灉婊¤冻锛屽垯涓嶆墽琛岄粍鐮佽鍒� + if (judgeState(overTimeNum, projectId, redProjectCodingIds, redRuler)) return; + + //鍒ゆ柇鏄惁婊¤冻榛勭爜瑙勫垯 + judgeState(overTimeNum, projectId, yellowProjectCodingIds, yellowRuler); + + + } + + private boolean judgeState(Long overTimeNum, String projectId, List<String> projectCodingIds, CodingRulerVO ruler) { + if (ruler != null){ + if (CodingRulerIntervalTypeEnum.Interval.getValue().equals(ruler.getIntervalType())){ + //鍖洪棿鎯呭喌 + boolean result = false; + //鍒ゆ柇婊¤冻宸﹀尯闂� + if (ruler.getLeftSymbol().equals("0")){ + result = (overTimeNum > ruler.getLeftValue()); + }else if (ruler.getLeftSymbol().equals("1")){ + result = (overTimeNum >= ruler.getLeftValue()); + }else if (ruler.getLeftSymbol().equals("2")){ + result = (Objects.equals(overTimeNum, ruler.getLeftValue())); + } + //婊¤冻鍒欏垽鏂弧瓒冲彸鍖洪棿 + if (result){ + if (ruler.getRightSymbol().equals("2")){ + result = (Objects.equals(overTimeNum, ruler.getRightValue())); + }else if (ruler.getRightSymbol().equals("3")){ + result = (overTimeNum < ruler.getRightValue()); + }else if (ruler.getRightSymbol().equals("4")){ + result = (overTimeNum <= ruler.getRightValue()); + } + } + if (result){ + //绗﹀悎璇ヨ祴鐮佹潯浠� + projectCodingIds.add(projectId); + return true; + } + } + else{ + //鍗曞尯闂存儏鍐� + boolean result = false; + if (ruler.getLeftSymbol().equals("0")){ + result = (overTimeNum > ruler.getLeftValue()); + }else if (ruler.getLeftSymbol().equals("1")){ + result = (overTimeNum >= ruler.getLeftValue()); + }else if (ruler.getLeftSymbol().equals("2")){ + result = (Objects.equals(overTimeNum, ruler.getLeftValue())); + }else if (ruler.getLeftSymbol().equals("3")){ + result = (overTimeNum < ruler.getLeftValue()); + }else if (ruler.getLeftSymbol().equals("4")){ + result = (overTimeNum <= ruler.getLeftValue()); + } + if (result){ + //绗﹀悎璇ヨ祴鐮佹潯浠� + projectCodingIds.add(projectId); + return true; + } + + } + } + return false; + } + +} -- Gitblit v1.8.0