@@ -379,15 +379,14 @@ public class DashboardProjectManage { | |||||
//2.转换项目信息 | //2.转换项目信息 | ||||
if(Objects.nonNull(project)){ | if(Objects.nonNull(project)){ | ||||
ProtraitProjectInfoVO projectInfo = BeanUtil.copyProperties(project,ProtraitProjectInfoVO.class); | ProtraitProjectInfoVO projectInfo = BeanUtil.copyProperties(project,ProtraitProjectInfoVO.class); | ||||
//todo: 超期逻辑 | |||||
projectInfo.setOverdueSituation("即将超期"); | projectInfo.setOverdueSituation("即将超期"); | ||||
projectInfo.setSafetyInputRate(convertSafetyInputRate(project)); | projectInfo.setSafetyInputRate(convertSafetyInputRate(project)); | ||||
projectInfo.setStatus(Objects.nonNull(project.getStatus()) ? project.getStatus().toString() : null); | |||||
//3.项目状态情况 | //3.项目状态情况 | ||||
projectInfo.setStatusSituation(generateProjectStatus(project)); | projectInfo.setStatusSituation(generateProjectStatus(project)); | ||||
res.setProjectInfo(projectInfo); | res.setProjectInfo(projectInfo); | ||||
}else if(Objects.nonNull(baseInfo)){ | }else if(Objects.nonNull(baseInfo)){ | ||||
ProtraitProjectInfoVO projectInfo = BeanUtil.copyProperties(baseInfo,ProtraitProjectInfoVO.class); | ProtraitProjectInfoVO projectInfo = BeanUtil.copyProperties(baseInfo,ProtraitProjectInfoVO.class); | ||||
//todo: 超期逻辑 | |||||
projectInfo.setOverdueSituation("即将超期"); | projectInfo.setOverdueSituation("即将超期"); | ||||
projectInfo.setSafetyInputRate("0"); | projectInfo.setSafetyInputRate("0"); | ||||
if(Objects.nonNull(apply)){ | if(Objects.nonNull(apply)){ | ||||
@@ -404,10 +403,10 @@ public class DashboardProjectManage { | |||||
projectInfo.setBuildOrgCode(baseInfo.getBaseBuildDeprtDing()); | projectInfo.setBuildOrgCode(baseInfo.getBaseBuildDeprtDing()); | ||||
//3.项目状态情况 | //3.项目状态情况 | ||||
projectInfo.setStatusSituation(generateProjectStatus(baseInfo)); | projectInfo.setStatusSituation(generateProjectStatus(baseInfo)); | ||||
projectInfo.setStatus(baseInfo.getBaseProjSetProg()); | |||||
res.setProjectInfo(projectInfo); | res.setProjectInfo(projectInfo); | ||||
}else if(Objects.nonNull(operationBase)){ | }else if(Objects.nonNull(operationBase)){ | ||||
ProtraitProjectInfoVO projectInfo = BeanUtil.copyProperties(operationBase,ProtraitProjectInfoVO.class); | ProtraitProjectInfoVO projectInfo = BeanUtil.copyProperties(operationBase,ProtraitProjectInfoVO.class); | ||||
//todo: 超期逻辑 | |||||
projectInfo.setOverdueSituation("即将超期"); | projectInfo.setOverdueSituation("即将超期"); | ||||
projectInfo.setSafetyInputRate("0"); | projectInfo.setSafetyInputRate("0"); | ||||
if(Objects.nonNull(apply)){ | if(Objects.nonNull(apply)){ | ||||
@@ -424,6 +423,7 @@ public class DashboardProjectManage { | |||||
projectInfo.setBuildOrgCode(operationBase.getBaseBuildDeprtDing()); | projectInfo.setBuildOrgCode(operationBase.getBaseBuildDeprtDing()); | ||||
//3.项目状态情况 | //3.项目状态情况 | ||||
projectInfo.setStatusSituation(generateProjectStatus(operationBase)); | projectInfo.setStatusSituation(generateProjectStatus(operationBase)); | ||||
projectInfo.setStatus(operationBase.getBaseProjSetProg()); | |||||
res.setProjectInfo(projectInfo); | res.setProjectInfo(projectInfo); | ||||
} | } | ||||
@@ -49,6 +49,9 @@ public class ProtraitProjectInfoVO { | |||||
@ApiModelProperty("超期情况") | @ApiModelProperty("超期情况") | ||||
private String overdueSituation; | private String overdueSituation; | ||||
@ApiModelProperty("状态") | |||||
private String status; | |||||
@ApiModelProperty("项目状态情况") | @ApiModelProperty("项目状态情况") | ||||
private List<ProtraitProjectStatusSituationVO> statusSituation; | private List<ProtraitProjectStatusSituationVO> statusSituation; | ||||
} | } | ||||
@@ -45,4 +45,15 @@ public enum ProjectRenewalApprovalStatusEnum { | |||||
return StringUtils.EMPTY; | 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; | |||||
} | |||||
} | } |
@@ -121,10 +121,11 @@ public class EarlyWarningListener { | |||||
String employeeCode = hai.getAssignee(); | String employeeCode = hai.getAssignee(); | ||||
String taskId = hai.getTaskId(); | String taskId = hai.getTaskId(); | ||||
String path = "toDoCenter/handleDuringExamine?instanceId=" + | 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(), | earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,timeout,pi.getInstType(), | ||||
hai.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime() | 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); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -233,7 +233,7 @@ public class EarlyWarningInstanceNotStartTask { | |||||
for (String employeeCode : batchEmployees) { | for (String employeeCode : batchEmployees) { | ||||
earlyWarningManage.doEarlyWarning(noticeMethod, Objects.nonNull(noticeType) && noticeType.equals(1) ? noticeContent : adventContent, time, biz, | earlyWarningManage.doEarlyWarning(noticeMethod, Objects.nonNull(noticeType) && noticeType.equals(1) ? noticeContent : adventContent, time, biz, | ||||
needToWaringProject.getUpdateOn(),employeeCode, needToWaringProject, | 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){ | for(Integer noticeType : noticeTypes){ | ||||
earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&¬iceType.equals(1) ? noticeContent : adventContent,time,biz, | earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&¬iceType.equals(1) ? noticeContent : adventContent,time,biz, | ||||
needToWaringProject.getUpdateOn(),employeeCode,needToWaringProject, | 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){ | for(Integer noticeType : noticeTypes){ | ||||
earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&¬iceType.equals(1) ? noticeContent : adventContent,time,null, | earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&¬iceType.equals(1) ? noticeContent : adventContent,time,null, | ||||
needToWaringProject.getUpdateOn(),user.getEmployeeCode(),project, | needToWaringProject.getUpdateOn(),user.getEmployeeCode(),project, | ||||
WarningRuleTypeEnum.RENEWAL_FUND.getCode(),noticeType,path,employeesStr); | |||||
WarningRuleTypeEnum.RENEWAL_FUND.getCode(),noticeType,path,employeesStr,needToWaringProject.getId().toString()); | |||||
} | } | ||||
} | } | ||||
@@ -3,13 +3,25 @@ package com.ningdatech.pmapi.scheduler.task; | |||||
import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||
import cn.hutool.core.date.StopWatch; | import cn.hutool.core.date.StopWatch; | ||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | 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.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.projectlib.service.IProjectService; | ||||
import com.ningdatech.pmapi.sys.enumeration.ProjectEarlyWarningStatusEnum; | import com.ningdatech.pmapi.sys.enumeration.ProjectEarlyWarningStatusEnum; | ||||
import com.ningdatech.pmapi.sys.model.entity.ProjectEarlyWarning; | 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.ningdatech.pmapi.sys.service.IProjectEarlyWarningService; | ||||
import com.wflow.enums.WarningRuleTypeEnum; | |||||
import lombok.RequiredArgsConstructor; | import lombok.RequiredArgsConstructor; | ||||
import lombok.extern.slf4j.Slf4j; | 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.beans.factory.annotation.Value; | ||||
import org.springframework.scheduling.annotation.Scheduled; | import org.springframework.scheduling.annotation.Scheduled; | ||||
import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
@@ -34,6 +46,12 @@ public class EarlyWarningProjectTask { | |||||
private final IProjectEarlyWarningService projectEarlyWarningService; | private final IProjectEarlyWarningService projectEarlyWarningService; | ||||
private final IEarlyWarningRecordsService earlyWarningRecordsService; | |||||
private final IProjectRenewalFundDeclarationService renewalFundDeclarationService; | |||||
private final TaskService taskService; | |||||
@Value("${hostname}") | @Value("${hostname}") | ||||
private String HOST_NAME; | private String HOST_NAME; | ||||
@@ -127,19 +145,164 @@ public class EarlyWarningProjectTask { | |||||
log.info("=========== 预警项目维度任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); | 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); | |||||
} | |||||
} | |||||
} | } | ||||
} | } |
@@ -57,7 +57,8 @@ public class EarlyWarningManage { | |||||
*/ | */ | ||||
public void doEarlyWarning(String noticeMethod,String noticeContent, Integer timeout,Integer biz, | public void doEarlyWarning(String noticeMethod,String noticeContent, Integer timeout,Integer biz, | ||||
LocalDateTime startTime,String employeeCode, | 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.存入 预警记录 | //1.存入 预警记录 | ||||
UserFullInfoDTO user = userInfoHelper.getUserFullInfoByEmployeeCode(employeeCode); | UserFullInfoDTO user = userInfoHelper.getUserFullInfoByEmployeeCode(employeeCode); | ||||
WflowEarlyWarningRecords records = new WflowEarlyWarningRecords(); | WflowEarlyWarningRecords records = new WflowEarlyWarningRecords(); | ||||
@@ -107,6 +108,7 @@ public class EarlyWarningManage { | |||||
records.setPath(path); | records.setPath(path); | ||||
records.setBatchEmployees(batchEmployees); | records.setBatchEmployees(batchEmployees); | ||||
records.setBiz(biz); | records.setBiz(biz); | ||||
records.setNodeId(nodeId); | |||||
earlyWarningRecordsService.save(records); | earlyWarningRecordsService.save(records); | ||||
//2.消息提醒 | //2.消息提醒 | ||||
@@ -116,6 +116,9 @@ public class WflowEarlyWarningRecords implements Serializable { | |||||
@ApiModelProperty(value = "路径") | @ApiModelProperty(value = "路径") | ||||
private String path; | private String path; | ||||
@ApiModelProperty(value = "审批节点ID") | |||||
private String nodeId; | |||||
@ApiModelProperty(value = "这一批要通知的员工号") | @ApiModelProperty(value = "这一批要通知的员工号") | ||||
private String batchEmployees; | private String batchEmployees; | ||||
@@ -265,20 +265,16 @@ public class WorkbenchManage { | |||||
VUtils.isTrue(StringUtils.isBlank(batchEmployees)) | VUtils.isTrue(StringUtils.isBlank(batchEmployees)) | ||||
.throwMessage("催办失败,员工为空!"); | .throwMessage("催办失败,员工为空!"); | ||||
String[] employees = batchEmployees.split(StrPool.COMMA); | String[] employees = batchEmployees.split(StrPool.COMMA); | ||||
// Integer hours = LocalDateTime.now(); | |||||
//算出 当前和他的 小时差 | |||||
Long between = ChronoUnit.HOURS.between(instStart,LocalDateTime.now()); | Long between = ChronoUnit.HOURS.between(instStart,LocalDateTime.now()); | ||||
Integer times = 0; | Integer times = 0; | ||||
for(String employee : employees){ | for(String employee : employees){ | ||||
earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,between.intValue(),biz, | earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,between.intValue(),biz, | ||||
instStart,employee,project, | instStart,employee,project, | ||||
ruleType,noticeType,path,batchEmployees); | |||||
ruleType,noticeType,path,batchEmployees,record.getNodeId()); | |||||
times++; | times++; | ||||
} | } | ||||
return "催办成功了" + times + "个人"; | return "催办成功了" + times + "个人"; | ||||
} | } | ||||
public static void main(String[] args) { | |||||
System.out.println(ChronoUnit.HOURS.between(LocalDateTime.now(),LocalDateTime.now().plusMonths(1))); | |||||
} | |||||
} | } |