From 2b8871b47d8d6b24732422da1ac49887529d4c5c Mon Sep 17 00:00:00 2001 From: PoffyZhang <99775271@qq.com> Date: Tue, 21 Nov 2023 16:44:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=20=E9=A2=84?= =?UTF-8?q?=E8=AD=A6=20=E5=82=AC=E5=8A=9E=20=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/manage/DashboardProjectManage.java | 6 +- .../dashboard/model/vo/ProtraitProjectInfoVO.java | 3 + .../ProjectRenewalApprovalStatusEnum.java | 11 ++ .../scheduler/listener/EarlyWarningListener.java | 5 +- .../task/EarlyWarningInstanceNotStartTask.java | 6 +- .../scheduler/task/EarlyWarningProjectTask.java | 173 ++++++++++++++++++++- .../pmapi/sys/manage/EarlyWarningManage.java | 4 +- .../sys/model/entity/WflowEarlyWarningRecords.java | 3 + .../pmapi/workbench/manage/WorkbenchManage.java | 8 +- 9 files changed, 199 insertions(+), 20 deletions(-) diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/dashboard/manage/DashboardProjectManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/dashboard/manage/DashboardProjectManage.java index 899fc86..6398e2f 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/dashboard/manage/DashboardProjectManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/dashboard/manage/DashboardProjectManage.java @@ -379,15 +379,14 @@ public class DashboardProjectManage { //2.转换项目信息 if(Objects.nonNull(project)){ ProtraitProjectInfoVO projectInfo = BeanUtil.copyProperties(project,ProtraitProjectInfoVO.class); - //todo: 超期逻辑 projectInfo.setOverdueSituation("即将超期"); projectInfo.setSafetyInputRate(convertSafetyInputRate(project)); + projectInfo.setStatus(Objects.nonNull(project.getStatus()) ? project.getStatus().toString() : null); //3.项目状态情况 projectInfo.setStatusSituation(generateProjectStatus(project)); res.setProjectInfo(projectInfo); }else if(Objects.nonNull(baseInfo)){ ProtraitProjectInfoVO projectInfo = BeanUtil.copyProperties(baseInfo,ProtraitProjectInfoVO.class); - //todo: 超期逻辑 projectInfo.setOverdueSituation("即将超期"); projectInfo.setSafetyInputRate("0"); if(Objects.nonNull(apply)){ @@ -404,10 +403,10 @@ public class DashboardProjectManage { projectInfo.setBuildOrgCode(baseInfo.getBaseBuildDeprtDing()); //3.项目状态情况 projectInfo.setStatusSituation(generateProjectStatus(baseInfo)); + projectInfo.setStatus(baseInfo.getBaseProjSetProg()); res.setProjectInfo(projectInfo); }else if(Objects.nonNull(operationBase)){ ProtraitProjectInfoVO projectInfo = BeanUtil.copyProperties(operationBase,ProtraitProjectInfoVO.class); - //todo: 超期逻辑 projectInfo.setOverdueSituation("即将超期"); projectInfo.setSafetyInputRate("0"); if(Objects.nonNull(apply)){ @@ -424,6 +423,7 @@ public class DashboardProjectManage { projectInfo.setBuildOrgCode(operationBase.getBaseBuildDeprtDing()); //3.项目状态情况 projectInfo.setStatusSituation(generateProjectStatus(operationBase)); + projectInfo.setStatus(operationBase.getBaseProjSetProg()); res.setProjectInfo(projectInfo); } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/vo/ProtraitProjectInfoVO.java b/pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/vo/ProtraitProjectInfoVO.java index bc38835..e0b2234 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/vo/ProtraitProjectInfoVO.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/vo/ProtraitProjectInfoVO.java @@ -49,6 +49,9 @@ public class ProtraitProjectInfoVO { @ApiModelProperty("超期情况") private String overdueSituation; + @ApiModelProperty("状态") + private String status; + @ApiModelProperty("项目状态情况") private List statusSituation; } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/enumeration/ProjectRenewalApprovalStatusEnum.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/enumeration/ProjectRenewalApprovalStatusEnum.java index 27a38ed..7e042da 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/enumeration/ProjectRenewalApprovalStatusEnum.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectlib/enumeration/ProjectRenewalApprovalStatusEnum.java @@ -45,4 +45,15 @@ public enum ProjectRenewalApprovalStatusEnum { return StringUtils.EMPTY; } + public static ProjectRenewalApprovalStatusEnum match(String name) { + if (StringUtils.isBlank(name)) { + return null; + } + for (ProjectRenewalApprovalStatusEnum t : ProjectRenewalApprovalStatusEnum.values()) { + if (name.equals(t.name())) { + return t; + } + } + return null; + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/listener/EarlyWarningListener.java b/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/listener/EarlyWarningListener.java index 7838282..24ea2fd 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/listener/EarlyWarningListener.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/listener/EarlyWarningListener.java @@ -121,10 +121,11 @@ public class EarlyWarningListener { String employeeCode = hai.getAssignee(); String taskId = hai.getTaskId(); String path = "toDoCenter/handleDuringExamine?instanceId=" + - instanceId + "&projectId=1610&nodeId=" + nodeId + "&taskId=" + taskId; + instanceId + "&projectId=" + projectId + "&nodeId=" + nodeId + "&taskId=" + taskId; earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,timeout,pi.getInstType(), hai.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime() - ,employeeCode,project,WarningRuleTypeEnum.PROCESS_WARNING.getCode(),noticeType,path,batchEmployees); + ,employeeCode,project,WarningRuleTypeEnum.PROCESS_WARNING.getCode(),noticeType, + path,batchEmployees,nodeId); } } } \ No newline at end of file diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java b/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java index 8de93b0..274310c 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java @@ -233,7 +233,7 @@ public class EarlyWarningInstanceNotStartTask { for (String employeeCode : batchEmployees) { earlyWarningManage.doEarlyWarning(noticeMethod, Objects.nonNull(noticeType) && noticeType.equals(1) ? noticeContent : adventContent, time, biz, needToWaringProject.getUpdateOn(),employeeCode, needToWaringProject, - WarningRuleTypeEnum.DECLARED_WARNING.getCode(), noticeType, path, batchEmployeesStr); + WarningRuleTypeEnum.DECLARED_WARNING.getCode(), noticeType, path, batchEmployeesStr,null); } } } @@ -385,7 +385,7 @@ public class EarlyWarningInstanceNotStartTask { for(Integer noticeType : noticeTypes){ earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&¬iceType.equals(1) ? noticeContent : adventContent,time,biz, needToWaringProject.getUpdateOn(),employeeCode,needToWaringProject, - WarningRuleTypeEnum.OPERATION_WARNING.getCode(),noticeType,path,employeeCode); + WarningRuleTypeEnum.OPERATION_WARNING.getCode(),noticeType,path,employeeCode,null); } } @@ -500,7 +500,7 @@ public class EarlyWarningInstanceNotStartTask { for(Integer noticeType : noticeTypes){ earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&¬iceType.equals(1) ? noticeContent : adventContent,time,null, needToWaringProject.getUpdateOn(),user.getEmployeeCode(),project, - WarningRuleTypeEnum.RENEWAL_FUND.getCode(),noticeType,path,employeesStr); + WarningRuleTypeEnum.RENEWAL_FUND.getCode(),noticeType,path,employeesStr,needToWaringProject.getId().toString()); } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningProjectTask.java b/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningProjectTask.java index e461aae..a24cc0f 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningProjectTask.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningProjectTask.java @@ -3,13 +3,25 @@ package com.ningdatech.pmapi.scheduler.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.StopWatch; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ningdatech.pmapi.common.constant.BizConst; +import com.ningdatech.pmapi.projectlib.enumeration.ProjectRenewalApprovalStatusEnum; +import com.ningdatech.pmapi.projectlib.enumeration.WarningFlowTypeEnum; +import com.ningdatech.pmapi.projectlib.enumeration.WarningOperationTypeEnum; import com.ningdatech.pmapi.projectlib.model.entity.Project; +import com.ningdatech.pmapi.projectlib.model.entity.ProjectRenewalFundDeclaration; +import com.ningdatech.pmapi.projectlib.service.IProjectRenewalFundDeclarationService; import com.ningdatech.pmapi.projectlib.service.IProjectService; import com.ningdatech.pmapi.sys.enumeration.ProjectEarlyWarningStatusEnum; import com.ningdatech.pmapi.sys.model.entity.ProjectEarlyWarning; +import com.ningdatech.pmapi.sys.model.entity.WflowEarlyWarningRecords; +import com.ningdatech.pmapi.sys.service.IEarlyWarningRecordsService; import com.ningdatech.pmapi.sys.service.IProjectEarlyWarningService; +import com.wflow.enums.WarningRuleTypeEnum; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.flowable.engine.TaskService; +import org.flowable.task.api.Task; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -34,6 +46,12 @@ public class EarlyWarningProjectTask { private final IProjectEarlyWarningService projectEarlyWarningService; + private final IEarlyWarningRecordsService earlyWarningRecordsService; + + private final IProjectRenewalFundDeclarationService renewalFundDeclarationService; + + private final TaskService taskService; + @Value("${hostname}") private String HOST_NAME; @@ -127,19 +145,164 @@ public class EarlyWarningProjectTask { log.info("=========== 预警项目维度任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); } - private void checkRenewalFundWarning(List renewalFundWarning) { + private void checkRenewalFundWarning(List renewalFundWarnings) { + if(CollUtil.isEmpty(renewalFundWarnings)){ + return; + } + for(ProjectEarlyWarning renewalFundWarning : renewalFundWarnings){ + String projectCode = renewalFundWarning.getProjectCode(); + Project project = projectService.getProjectByCode(projectCode); + if(Objects.isNull(project)){ + continue; + } + + WflowEarlyWarningRecords record = earlyWarningRecordsService.getOne(Wrappers.lambdaQuery(WflowEarlyWarningRecords.class) + .eq(WflowEarlyWarningRecords::getProjectCode, projectCode) + .eq(WflowEarlyWarningRecords::getRuleType, WarningRuleTypeEnum.OPERATION_WARNING.getCode()) + .orderByDesc(WflowEarlyWarningRecords::getWarningTime) + .last(BizConst.LIMIT_1)); + if(Objects.isNull(record)){ + continue; + } + //借用了NODEID 其实 是续建id + String nodeId = record.getNodeId(); + ProjectRenewalFundDeclaration renewalFund = renewalFundDeclarationService.getById(nodeId); + if(Objects.isNull(renewalFund)){ + continue; + } + String approvalStatus = renewalFund.getApprovalStatus(); + ProjectRenewalApprovalStatusEnum match = ProjectRenewalApprovalStatusEnum + .match(approvalStatus); + if(Objects.nonNull(match)){ + //如果是已经审批 + if(match.name().equals(ProjectRenewalApprovalStatusEnum.PASS.name())){ + renewalFundWarning.setRenewalFundWarning(Boolean.FALSE); + //其它三种 都没有 说明已经正常了 + if(!renewalFundWarning.getProcessWarning() && + !renewalFundWarning.getDeclaredWarning() && + !renewalFundWarning.getOperationWarning()){ + renewalFundWarning.setNormal(Boolean.TRUE); + } + projectEarlyWarningService.updateById(renewalFundWarning); + } + } + } } - private void checkOperationWarning(List operationWarning) { + private void checkOperationWarning(List operationWarnings) { + if(CollUtil.isEmpty(operationWarnings)){ + return; + } + for( ProjectEarlyWarning operationWarning : operationWarnings){ + String projectCode = operationWarning.getProjectCode(); + Project project = projectService.getProjectByCode(projectCode); + if(Objects.isNull(project)){ + continue; + } + WflowEarlyWarningRecords record = earlyWarningRecordsService.getOne(Wrappers.lambdaQuery(WflowEarlyWarningRecords.class) + .eq(WflowEarlyWarningRecords::getProjectCode, projectCode) + .eq(WflowEarlyWarningRecords::getRuleType, WarningRuleTypeEnum.OPERATION_WARNING.getCode()) + .orderByDesc(WflowEarlyWarningRecords::getWarningTime) + .last(BizConst.LIMIT_1)); + if(Objects.isNull(record)){ + continue; + } + Integer biz = record.getBiz(); + WarningOperationTypeEnum operationTypeEnum = WarningOperationTypeEnum.getByCode(biz); + if(Objects.isNull(operationTypeEnum)){ + continue; + } + Integer projectStutas = operationTypeEnum.getProjectStutas(); + //已经不是这个状态了 说明已经被提交了 + if(!projectStutas.equals(project.getStatus())){ + operationWarning.setOperationWarning(Boolean.FALSE); + //其它三种 都没有 说明已经正常了 + if(!operationWarning.getProcessWarning() && + !operationWarning.getDeclaredWarning() && + !operationWarning.getRenewalFundWarning()){ + operationWarning.setNormal(Boolean.TRUE); + } + projectEarlyWarningService.updateById(operationWarning); + } + } } - private void checkDeclaredWarning(List declaredWarning) { - + private void checkDeclaredWarning(List declaredWarnings) { + if(CollUtil.isEmpty(declaredWarnings)){ + return; + } + for( ProjectEarlyWarning declaredWarning : declaredWarnings){ + String projectCode = declaredWarning.getProjectCode(); + Project project = projectService.getProjectByCode(projectCode); + if(Objects.isNull(project)){ + continue; + } + WflowEarlyWarningRecords record = earlyWarningRecordsService.getOne(Wrappers.lambdaQuery(WflowEarlyWarningRecords.class) + .eq(WflowEarlyWarningRecords::getProjectCode, projectCode) + .eq(WflowEarlyWarningRecords::getRuleType, WarningRuleTypeEnum.DECLARED_WARNING.getCode()) + .orderByDesc(WflowEarlyWarningRecords::getWarningTime) + .last(BizConst.LIMIT_1)); + if(Objects.isNull(record)){ + continue; + } + Integer biz = record.getBiz(); + WarningFlowTypeEnum flowTypeEnum = WarningFlowTypeEnum.getByCode(biz); + if(Objects.isNull(flowTypeEnum)){ + continue; + } + Integer projectStutas = flowTypeEnum.getProjectStutas(); + //已经不是这个状态了 说明已经被提交了 + if(!projectStutas.equals(project.getStatus())){ + declaredWarning.setDeclaredWarning(Boolean.FALSE); + //其它三种 都没有 说明已经正常了 + if(!declaredWarning.getProcessWarning() && + !declaredWarning.getOperationWarning() && + !declaredWarning.getRenewalFundWarning()){ + declaredWarning.setNormal(Boolean.TRUE); + } + projectEarlyWarningService.updateById(declaredWarning); + } + } } - private void checkProcessWarning(List processWarning) { + /** + * 流程 查看 是否已经处理过 + * @param processWarnings + */ + private void checkProcessWarning(List processWarnings) { + if(CollUtil.isEmpty(processWarnings)){ + return; + } + for( ProjectEarlyWarning processWarning : processWarnings){ + String projectCode = processWarning.getProjectCode(); + WflowEarlyWarningRecords record = earlyWarningRecordsService.getOne(Wrappers.lambdaQuery(WflowEarlyWarningRecords.class) + .eq(WflowEarlyWarningRecords::getProjectCode, projectCode) + .orderByDesc(WflowEarlyWarningRecords::getWarningTime) + .last(BizConst.LIMIT_1)); + if(Objects.isNull(record)){ + continue; + } + String nodeId = record.getNodeId(); + if(StringUtils.isBlank(nodeId)){ + continue; + } + List tasks = taskService.createTaskQuery() + .taskDefinitionKey(nodeId) + .list(); + if(CollUtil.isEmpty(tasks)){ + //说明 已经审批通过了 + processWarning.setProcessWarning(Boolean.FALSE); + //其它三种 都没有 说明已经正常了 + if(!processWarning.getDeclaredWarning() && + !processWarning.getOperationWarning() && + !processWarning.getRenewalFundWarning()){ + processWarning.setNormal(Boolean.TRUE); + } + projectEarlyWarningService.updateById(processWarning); + } + } } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/sys/manage/EarlyWarningManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/sys/manage/EarlyWarningManage.java index e3fa344..b686e57 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/sys/manage/EarlyWarningManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/sys/manage/EarlyWarningManage.java @@ -57,7 +57,8 @@ public class EarlyWarningManage { */ public void doEarlyWarning(String noticeMethod,String noticeContent, Integer timeout,Integer biz, LocalDateTime startTime,String employeeCode, - Project project,Integer ruleType,Integer noticeType,String path,String batchEmployees) { + Project project,Integer ruleType,Integer noticeType, + String path,String batchEmployees,String nodeId) { //1.存入 预警记录 UserFullInfoDTO user = userInfoHelper.getUserFullInfoByEmployeeCode(employeeCode); WflowEarlyWarningRecords records = new WflowEarlyWarningRecords(); @@ -107,6 +108,7 @@ public class EarlyWarningManage { records.setPath(path); records.setBatchEmployees(batchEmployees); records.setBiz(biz); + records.setNodeId(nodeId); earlyWarningRecordsService.save(records); //2.消息提醒 diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/entity/WflowEarlyWarningRecords.java b/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/entity/WflowEarlyWarningRecords.java index 0f01a7f..6142b56 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/entity/WflowEarlyWarningRecords.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/sys/model/entity/WflowEarlyWarningRecords.java @@ -116,6 +116,9 @@ public class WflowEarlyWarningRecords implements Serializable { @ApiModelProperty(value = "路径") private String path; + @ApiModelProperty(value = "审批节点ID") + private String nodeId; + @ApiModelProperty(value = "这一批要通知的员工号") private String batchEmployees; diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java index a3d6772..d5783a3 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java @@ -265,20 +265,16 @@ public class WorkbenchManage { VUtils.isTrue(StringUtils.isBlank(batchEmployees)) .throwMessage("催办失败,员工为空!"); String[] employees = batchEmployees.split(StrPool.COMMA); -// Integer hours = LocalDateTime.now(); + //算出 当前和他的 小时差 Long between = ChronoUnit.HOURS.between(instStart,LocalDateTime.now()); Integer times = 0; for(String employee : employees){ earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,between.intValue(),biz, instStart,employee,project, - ruleType,noticeType,path,batchEmployees); + ruleType,noticeType,path,batchEmployees,record.getNodeId()); times++; } return "催办成功了" + times + "个人"; } - - public static void main(String[] args) { - System.out.println(ChronoUnit.HOURS.between(LocalDateTime.now(),LocalDateTime.now().plusMonths(1))); - } }