Browse Source

工作台 预警 催办 处理

master
PoffyZhang 10 months ago
parent
commit
2b8871b47d
9 changed files with 199 additions and 20 deletions
  1. +3
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/dashboard/manage/DashboardProjectManage.java
  2. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/vo/ProtraitProjectInfoVO.java
  3. +11
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/enumeration/ProjectRenewalApprovalStatusEnum.java
  4. +3
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/scheduler/listener/EarlyWarningListener.java
  5. +3
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java
  6. +168
    -5
      pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningProjectTask.java
  7. +3
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/sys/manage/EarlyWarningManage.java
  8. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/sys/model/entity/WflowEarlyWarningRecords.java
  9. +2
    -6
      pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java

+ 3
- 3
pmapi/src/main/java/com/ningdatech/pmapi/dashboard/manage/DashboardProjectManage.java View File

@@ -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);
}



+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/vo/ProtraitProjectInfoVO.java View File

@@ -49,6 +49,9 @@ public class ProtraitProjectInfoVO {
@ApiModelProperty("超期情况")
private String overdueSituation;

@ApiModelProperty("状态")
private String status;

@ApiModelProperty("项目状态情况")
private List<ProtraitProjectStatusSituationVO> statusSituation;
}


+ 11
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/enumeration/ProjectRenewalApprovalStatusEnum.java View File

@@ -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;
}
}

+ 3
- 2
pmapi/src/main/java/com/ningdatech/pmapi/scheduler/listener/EarlyWarningListener.java View File

@@ -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);
}
}
}

+ 3
- 3
pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java View File

@@ -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)&&noticeType.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)&&noticeType.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());
}
}



+ 168
- 5
pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningProjectTask.java View File

@@ -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<ProjectEarlyWarning> renewalFundWarning) {
private void checkRenewalFundWarning(List<ProjectEarlyWarning> 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<ProjectEarlyWarning> operationWarning) {
private void checkOperationWarning(List<ProjectEarlyWarning> 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<ProjectEarlyWarning> declaredWarning) {

private void checkDeclaredWarning(List<ProjectEarlyWarning> 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<ProjectEarlyWarning> processWarning) {
/**
* 流程 查看 是否已经处理过
* @param processWarnings
*/
private void checkProcessWarning(List<ProjectEarlyWarning> 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<Task> 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);
}
}

}
}

+ 3
- 1
pmapi/src/main/java/com/ningdatech/pmapi/sys/manage/EarlyWarningManage.java View File

@@ -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.消息提醒


+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/sys/model/entity/WflowEarlyWarningRecords.java View File

@@ -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;



+ 2
- 6
pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java View File

@@ -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)));
}
}

Loading…
Cancel
Save