diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/OperateTypeEnum.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/OperateTypeEnum.java index ad391fe4..f7b40243 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/OperateTypeEnum.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/OperateTypeEnum.java @@ -1,9 +1,12 @@ package com.jero.modules.activiti.process.esRevision.entity; +import lombok.Getter; + /** * @author: Mzaxd * @Date: 2023/12/22 15:04 */ +@Getter public enum OperateTypeEnum { CANNOT_OPERATE("不能操作显示", "1"), @@ -18,12 +21,4 @@ public enum OperateTypeEnum { this.value = value; } - public String getName() { - return name; - } - - public String getValue() { - return value; - } - } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/ProcessEsRevision.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/ProcessEsRevision.java index 4eb948ee..679228a9 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/ProcessEsRevision.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/ProcessEsRevision.java @@ -257,6 +257,9 @@ public class ProcessEsRevision implements Serializable { @ApiModelProperty(value = "主起草人") private String mainDraftUser; + @ApiModelProperty(value = "其他起草人上传节点是否完成标识 0未完成 1已完成") + private String otherDrafterUploadFinishFlag; + /** * 总工程师 */ diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/job/AdviceDeadlineJob.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/job/AdviceDeadlineJob.java new file mode 100644 index 00000000..d6d0725b --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/job/AdviceDeadlineJob.java @@ -0,0 +1,109 @@ +package com.jero.modules.activiti.process.esRevision.job; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.enums.FinishFlagEnum; +import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision; +import com.jero.modules.activiti.process.esRevision.entity.vo.ESRevisionDataVO; +import com.jero.modules.activiti.process.esRevision.entity.vo.OtherDraftUserVO; +import com.jero.modules.activiti.process.esRevision.service.EsRevisionService; +import com.jero.modules.activiti.service.ProcessApprovalRecordService; +import lombok.extern.slf4j.Slf4j; +import org.activiti.engine.RuntimeService; +import org.jetbrains.annotations.NotNull; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import javax.annotation.Resource; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author: Mzaxd + * @Date: 2023/12/28 18:40 + */ +@Slf4j +public class AdviceDeadlineJob implements Job { + + @Resource + private EsRevisionService revisionService; + + @Resource + private ProcessApprovalRecordService approvalRecordService; + + @Resource + private RuntimeService runtimeService; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + LambdaQueryWrapper revisionLambdaQueryWrapper = new LambdaQueryWrapper<>(); + revisionLambdaQueryWrapper.eq(ProcessEsRevision::getOtherDrafterUploadFinishFlag, YesOrNoEnum.NO.getValue()); + List revisionList = revisionService.list(revisionLambdaQueryWrapper); + LambdaQueryWrapper arWrapper = new LambdaQueryWrapper<>(); + arWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue()); + for (ProcessEsRevision revision : revisionList) { + String prcId = revision.getProcessInstanceId(); + List otherDraftUserVOS = revision.parseOtherDraftUserVOS(); + if (otherDraftUserVOS == null || otherDraftUserVOS.isEmpty()) { + continue; + } + arWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, prcId); + List arList = approvalRecordService.list(arWrapper); + Map arMap = arList.stream().collect(Collectors.toMap(ProcessApprovalRecord::getOriginUserId, ar -> ar)); + Date curDate = new Date(); + for (OtherDraftUserVO otherDraftUser : otherDraftUserVOS) { + String originUserId = otherDraftUser.getUser(); + if (StrUtil.isNotBlank(otherDraftUser.getFileId())) { + continue; + } + // 获取TaskId + Date deadline = getDeadlineDate(otherDraftUser); + // 如果当前日期大于该条数据的截止日期 则自动完成任务 + if (curDate.after(deadline)) { + ProcessApprovalRecord ar = arMap.get(originUserId); + if (ar == null) { + log.error("未找到对应待办"); + continue; + } + String taskId = ar.getTaskId(); + String taskName = ar.getTaskName(); + if (StrUtil.isBlank(taskId)) { + log.error("任务Id为空"); + continue; + } + if (!taskName.equals("其他起草人上传企标")) { + continue; + } + ESRevisionDataVO handleData = revisionService.getHandleData(taskId); + handleData.getCommon().setTaskId(taskId); + revisionService.approval(handleData, true); + } + } + } + } + + @NotNull + private static Date getDeadlineDate(OtherDraftUserVO otherDraftUser) { + Date deadline = otherDraftUser.getDeadline(); + // 设置deadline为今天的最后一秒 + // 创建一个 Calendar 对象 + Calendar calendar = Calendar.getInstance(); + // 获取当前日期和时间 + calendar.setTime(deadline); + // 设置时间部分为当天的最后一秒 + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + calendar.set(Calendar.MILLISECOND, 999); + + // 将修改后的日期和时间设置回原始的 Date 对象 + deadline = calendar.getTime(); + return deadline; + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/job/OtherDraftUserUploadDeadlineJob.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/job/OtherDraftUserUploadDeadlineJob.java new file mode 100644 index 00000000..54c62109 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/job/OtherDraftUserUploadDeadlineJob.java @@ -0,0 +1,109 @@ +package com.jero.modules.activiti.process.esRevision.job; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.enums.FinishFlagEnum; +import com.jero.modules.activiti.process.common.enums.ProcessType; +import com.jero.modules.activiti.process.common.service.ActFlowCommonService; +import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision; +import com.jero.modules.activiti.process.esRevision.entity.RevisionTaskNodeIdConstant; +import com.jero.modules.activiti.process.esRevision.entity.vo.ESRevisionDataVO; +import com.jero.modules.activiti.process.esRevision.entity.vo.OtherDraftUserVO; +import com.jero.modules.activiti.process.esRevision.service.EsRevisionService; +import com.jero.modules.activiti.service.ProcessApprovalRecordService; +import lombok.extern.slf4j.Slf4j; +import org.apache.tomcat.jni.Proc; +import org.jetbrains.annotations.NotNull; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import javax.annotation.Resource; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author: Mzaxd + * @Date: 2023/12/28 18:40 + */ +@Slf4j +public class OtherDraftUserUploadDeadlineJob implements Job { + + @Resource + private EsRevisionService revisionService; + + @Resource + private ProcessApprovalRecordService approvalRecordService; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + LambdaQueryWrapper revisionLambdaQueryWrapper = new LambdaQueryWrapper<>(); + revisionLambdaQueryWrapper.eq(ProcessEsRevision::getOtherDrafterUploadFinishFlag, YesOrNoEnum.NO.getValue()); + List revisionList = revisionService.list(revisionLambdaQueryWrapper); + LambdaQueryWrapper arWrapper = new LambdaQueryWrapper<>(); + arWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue()); + for (ProcessEsRevision revision : revisionList) { + String prcId = revision.getProcessInstanceId(); + List otherDraftUserVOS = revision.parseOtherDraftUserVOS(); + if (otherDraftUserVOS == null || otherDraftUserVOS.isEmpty()) { + continue; + } + arWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, prcId); + List arList = approvalRecordService.list(arWrapper); + Map arMap = arList.stream().collect(Collectors.toMap(ProcessApprovalRecord::getOriginUserId, ar -> ar)); + Date curDate = new Date(); + for (OtherDraftUserVO otherDraftUser : otherDraftUserVOS) { + String originUserId = otherDraftUser.getUser(); + if (StrUtil.isNotBlank(otherDraftUser.getFileId())) { + continue; + } + // 获取TaskId + Date deadline = getDeadlineDate(otherDraftUser); + // 如果当前日期大于该条数据的截止日期 则自动完成任务 + if (curDate.after(deadline)) { + ProcessApprovalRecord ar = arMap.get(originUserId); + if (ar == null) { + log.error("未找到对应待办"); + continue; + } + String taskId = ar.getTaskId(); + String taskName = ar.getTaskName(); + if (StrUtil.isBlank(taskId)) { + log.error("任务Id为空"); + continue; + } + if (!taskName.equals("其他起草人上传企标")) { + continue; + } + ESRevisionDataVO handleData = revisionService.getHandleData(taskId); + handleData.getCommon().setTaskId(taskId); + revisionService.approval(handleData, true); + } + } + } + } + + @NotNull + private static Date getDeadlineDate(OtherDraftUserVO otherDraftUser) { + Date deadline = otherDraftUser.getDeadline(); + // 设置deadline为今天的最后一秒 + // 创建一个 Calendar 对象 + Calendar calendar = Calendar.getInstance(); + // 获取当前日期和时间 + calendar.setTime(deadline); + // 设置时间部分为当天的最后一秒 + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + calendar.set(Calendar.MILLISECOND, 999); + + // 将修改后的日期和时间设置回原始的 Date 对象 + deadline = calendar.getTime(); + return deadline; + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/listener/OtherDrafterUploadCreateListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/listener/OtherDrafterUploadCreateListener.java deleted file mode 100644 index 3bd99b35..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/listener/OtherDrafterUploadCreateListener.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.jero.modules.activiti.process.esRevision.listener; - -import lombok.extern.slf4j.Slf4j; -import org.activiti.engine.TaskService; -import org.activiti.engine.delegate.DelegateExecution; -import org.activiti.engine.delegate.ExecutionListener; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; - -/** - * @author: Mzaxd - * @Date: 2023/12/21 14:01 - * @Description: 其他起草人上传文件节点需要设置每个节点的截止时间也就是流程图上 - * 的时间边界事件,需要从流程变量中取出对应的时间然后放入对应子流程中 - */ -@Slf4j -@Component -public class OtherDrafterUploadCreateListener implements ExecutionListener { - - @Override - public void notify(DelegateExecution delegateExecution) { - log.info("企标制修订流程 其他起草人上传节点 创建监听执行器开始执行"); - // 获取执行人 - String otherDraftUser = (String) delegateExecution.getVariable("otherDraftUser"); - // 获取对应的结束时间 - String deadline = (String) delegateExecution.getVariable(otherDraftUser + "-deadline"); - // 设置流程变量 - delegateExecution.setVariable("deadline", deadline); - log.info("企标制修订流程 其他起草人上传节点 创建监听执行器开始执行"); - } -} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/listener/ProcessESRevisionEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/listener/ProcessESRevisionEndListener.java index bb00edd3..650e091f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/listener/ProcessESRevisionEndListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/listener/ProcessESRevisionEndListener.java @@ -115,5 +115,7 @@ public class ProcessESRevisionEndListener implements ExecutionListener { // 企标计划改为已完成 esp.setProjectStatus(ESPProjectStatus.COMPLETED.getValue()); espService.updateById(esp); + // 软删除制修订计划 + esRevisionService.removeById(data.getId()); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java index 48e8259a..e0fbbc1d 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java @@ -253,7 +253,12 @@ public class EsRevisionServiceImpl extends ServiceImpl deadlineMap = new HashMap<>(); - otherDraftUserVOS.forEach(otherDraftUserVO -> deadlineMap - .put(otherDraftUserVO.getUser() + "-deadline", otherDraftUserVO.getISODeadlineTime())); - taskService.setVariables(taskId, deadlineMap); data.setOtherDraftUserVOS(otherDraftUserVOS); data.setOtherDrafterUploadFileJson(otherDraftUserVOS); } @@ -387,6 +387,7 @@ public class EsRevisionServiceImpl extends ServiceImpl reviewMeetingDetails = data.getReviewMeetingDetails(); // 设置当前评分人 + curUserId = UserUtils.getUserId(); reviewMeetingDetails.forEach(reviewMeetingDetail -> reviewMeetingDetail.setAdjudicatorId(curUserId)); ProcessEsRevision revisionDb = getById(dataDb.getId()); List reviewMeetingDetailsDb = revisionDb.parseReviewMeetingDetails(); @@ -466,7 +467,7 @@ public class EsRevisionServiceImpl extends ServiceImpl advice.setExecutionId(executionId)); advices.forEach(advice -> { if (StrUtil.isBlank(advice.getCreateUserId())) { - advice.setCreateUserId(curUserId); + advice.setCreateUserId(UserUtils.getUserId()); } }); adviceService.saveBatch(advices); @@ -523,6 +524,7 @@ public class EsRevisionServiceImpl extends ServiceImpl