From e4d0e6b601d2aae36cd0258e5cab01f331ba6f55 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Mon, 23 Sep 2024 16:54:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=81=E6=A0=87=E5=88=B6=E4=BF=AE?= =?UTF-8?q?=E8=AE=A2=E5=BE=81=E6=B1=82=E6=84=8F=E8=A7=81=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=87=86=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activiti/enums/ProcessTypeEnum.java | 1 + .../process/common/enums/ProcessType.java | 1 + .../controller/ESRevisionController.java | 101 +++ .../entity/EsRevisionAdvice.java | 121 ++++ .../entity/HandleAdviceEnum.java | 38 ++ .../entity/ProcessEsRevision.java | 134 ++++ .../entity/RevisionTaskNodeIdConstant.java | 46 ++ .../entity/vo/ProcessRevisionVO.java | 15 + .../job/AdviceDeadlineJob.java | 115 ++++ .../ProcessESRevisionEndListener.java | 107 +++ .../mapper/EsRevisionAdviceMapper.java | 18 + .../mapper/EsRevisionMapper.java | 18 + .../service/EsRevisionAdviceService.java | 13 + .../service/EsRevisionService.java | 24 + .../impl/EsRevisionAdviceServiceImpl.java | 22 + .../service/impl/EsRevisionServiceImpl.java | 644 ++++++++++++++++++ .../enterprise/entity/ESPProjectStatus.java | 37 + .../EnterpriseStandardPlanService.java | 6 +- 18 files changed, 1457 insertions(+), 4 deletions(-) create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/controller/ESRevisionController.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/EsRevisionAdvice.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/HandleAdviceEnum.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/ProcessEsRevision.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/RevisionTaskNodeIdConstant.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/vo/ProcessRevisionVO.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/job/AdviceDeadlineJob.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/listener/ProcessESRevisionEndListener.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/mapper/EsRevisionAdviceMapper.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/mapper/EsRevisionMapper.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/EsRevisionAdviceService.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/EsRevisionService.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionAdviceServiceImpl.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionServiceImpl.java create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/ESPProjectStatus.java diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java b/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java index 83dda701..aae1ee6a 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java @@ -16,6 +16,7 @@ public enum ProcessTypeEnum { STANDARD_COMPLIANCE_CHECK("法规符合性排查流程", 3, "com.jero.modules.activiti.process.standardComplianceCheck.service.StandardComplianceCheckFlow", "/workCenter/RegulatoryComplianceCheckProcess", "/workCenter/RegulatoryComplianceCheckProcess"), MARKET_STANDARD_PUBLISH("市场清单发布流程", 4, "com.jero.modules.activiti.process.ms.service.impl.ProcessMarketStandardReleaseServiceImpl", "/workCenter/MarketListReleaseProcess", "/workCenter/MarketListReleaseProcess"), ENTERPRISE_STANDARD_ABOLISH_PUBLISH("企标废止发布流程", 5, "com.jero.modules.activiti.process.abolish.service.impl.ProcessAbolishReleaseServiceImpl", "/workCenter/AbolishReleaseProcess", "/workCenter/AbolishReleaseProcess"), + ES_REVISION_ADVICE("企业标准制修订及征求意见流程", 6, "com.jero.modules.activiti.process.esRevisionAdvice.service.impl.EsRevisionServiceImpl","/workCenter/enterpriseStandardRevision/enterpriseStandardRevisionFlow","/workCenter/enterpriseStandardRevision") ; private final String name; diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/enums/ProcessType.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/enums/ProcessType.java index 0a15ad25..cee47a21 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/enums/ProcessType.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/enums/ProcessType.java @@ -16,6 +16,7 @@ public enum ProcessType { STANDARD_COMPLIANCE_CHECK("法规符合性评估流程", "3", "laws-evaluation-main", "ProcessStandardComplianceCheckServiceImpl"), MARKET_STANDARD_PUBLISH("市场清单发布流程", "4", "market_standard_publish", "ProcessNewStandardImportServiceImpl"), ENTERPRISE_STANDARD_ABOLISH_PUBLISH("企标废止发布流程", "5", "enterprise_standard_abolish_publish", "ProcessAbolishReleaseServiceImpl"), + ES_REVISION_ADVICE("企标制修订征求意见流程", "6", "es-revision-advice", "ProcessEsRevisionServiceImpl") ; private final String name; diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/controller/ESRevisionController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/controller/ESRevisionController.java new file mode 100644 index 00000000..d6ef9786 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/controller/ESRevisionController.java @@ -0,0 +1,101 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.controller; + +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.aspect.annotation.Translation; +import com.jero.modules.activiti.enums.ProcessTypeEnum; +import com.jero.modules.activiti.process.common.entity.ProcessDraft; +import com.jero.modules.activiti.process.common.service.ActFlowCommonService; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.vo.ProcessRevisionVO; +import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService; +import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; +import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.ProcessSccVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + + +/** + * @author: Mzaxd + * @Date: 2023/10/18 10:44 + */ +@Slf4j +@RestController +@Api(tags = "企标制修订流程") +@RequestMapping("/process/es/revision") +public class ESRevisionController { + + @Resource + private EsRevisionService revisionService; + + @Resource + private ActFlowCommonService actFlowCommonService; + + /** + * 企标制修订流程 + * + * @param processInfoVO + */ + @AutoLog(value = "企标制修订流程-发起流程") + @ApiOperation(value="企标制修订流程-发起流程", notes="企标制修订流程-发起流程") + @PostMapping("/start") + public Result startProcess(@RequestBody ProcessInfoVO processInfoVO) { + revisionService.startProcess(processInfoVO); + return Result.OK(); + } + + @AutoLog(value = "法规符合性排查流程-提交") + @ApiOperation(value = "法规符合性排查流程-提交", notes = "法规符合性排查流程-提交") + @PostMapping("/submit") + public Result submit(@RequestBody ProcessInfoVO processInfoVO) { + revisionService.submit(processInfoVO); + return Result.OK(); + } + + /** + * 保存到待办 + * @param taskId + */ + @AutoLog(value = "企标制修订流程-办理") + @ApiOperation(value="企标制修订流程-办理", notes="企标制修订流程-办理") + @GetMapping("/handle/{taskId}") + @Translation + public Result handle(@PathVariable("taskId") String taskId) { + ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.ES_REVISION_ADVICE); + if (draft != null) { + return Result.OK(draft); + } + return Result.OK(revisionService.getHandleData(taskId)); + } + + /** + * 同意 + * + * @param processInfoVO + */ + @AutoLog(value = "企标制修订流程-同意") + @ApiOperation(value="企标制修订流程-同意", notes="企标制修订流程-同意") + @PostMapping("/agree") + public Result agree(@RequestBody ProcessInfoVO processInfoVO) { + revisionService.approval(processInfoVO, true); + return Result.OK(); + } + + /** + * 驳回 + * + * @param processInfoVO + */ + @AutoLog(value = "企标制修订流程-驳回") + @ApiOperation(value="企标制修订流程-驳回", notes="企标制修订流程-驳回") + @PostMapping("/reject") + public Result reject(@RequestBody ProcessInfoVO processInfoVO) { + revisionService.approval(processInfoVO, false); + return Result.OK(); + } + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/EsRevisionAdvice.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/EsRevisionAdvice.java new file mode 100644 index 00000000..59113b71 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/EsRevisionAdvice.java @@ -0,0 +1,121 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + * + * @TableName process_es_revision_advice + */ +@TableName(value ="process_es_revision_advice") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class EsRevisionAdvice implements Serializable { + /** + * 主键ID + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键ID") + private String id; + + /** + * 创建人 + */ + @ApiModelProperty(value = "创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新人 + */ + @ApiModelProperty(value = "更新人") + private String updateBy; + + /** + * 更新时间 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 所属部门 + */ + @ApiModelProperty(value = "所属部门") + private String orgCode; + + /** + * 流程实例Id + */ + @ApiModelProperty(value = "流程实例Id") + private String processInstanceId; + + /** + * 执行id + */ + @ApiModelProperty(value = "执行id") + private String executionId; + + /** + * 条款号 + */ + @ApiModelProperty(value = "条款号") + private String clauseNum; + + /** + * 条款名称 + */ + @ApiModelProperty(value = "条款名称") + private String clauseName; + + /** + * 修改意见内容(包括修改理由和依据) + */ + @ApiModelProperty(value = "修改意见内容(包括修改理由和依据)") + private String editAdvice; + + /** + * 意见提出人 + */ + @Dict(dictTable = "sys_user", dicText = "CONCAT(realname, '(', username, ')')", dicCode = "id") + @ApiModelProperty(value = "意见提出人") + private String createUserId; + + /** + * 1采纳 2部分采纳 3不采纳 + */ + @ApiModelProperty(value = "1采纳 2部分采纳 3不采纳") + @Dict(dicCode = "consultation_opinion") + private String handleAdvice; + + /** + * 0无意见 1有意见 + */ + @ApiModelProperty(value = "0无意见 1有意见") + @Dict(dicCode = "yn") + private String haveNoOpinion; + + /** + * 理由 + */ + @ApiModelProperty(value = "理由") + private String reason; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/HandleAdviceEnum.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/HandleAdviceEnum.java new file mode 100644 index 00000000..3b26a169 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/HandleAdviceEnum.java @@ -0,0 +1,38 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.entity; + +import lombok.Getter; + +/** + * @author: Mzaxd + * @Date: 2024/1/28 17:36 + */ +@Getter +public enum HandleAdviceEnum { + + /** + * 1:采纳 + */ + AGREE("同意", "1"), + + /** + * 2:部分采纳 + */ + PART_DISAGREE("部分采纳", "2"), + + /** + * 3:不采纳 + */ + DISAGREE("不采纳", "3"), + ; + + private final String name; + + private final String value; + + + HandleAdviceEnum(String name, String value) { + this.name = name; + this.value = value; + } + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/ProcessEsRevision.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/ProcessEsRevision.java new file mode 100644 index 00000000..8c9d136a --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/ProcessEsRevision.java @@ -0,0 +1,134 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * + * @TableName process_es_revision + */ +@TableName(value ="process_es_revision") +@Data +public class ProcessEsRevision implements Serializable { + /** + * 主键ID + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键ID") + private String id; + + /** + * 创建人 + */ + @ApiModelProperty(value = "创建人") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新人 + */ + @ApiModelProperty(value = "更新人") + private String updateBy; + + /** + * 更新时间 + */ + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 所属部门 + */ + @ApiModelProperty(value = "所属部门") + private String orgCode; + + /** + * 0表示未删除,1表示删除 + */ + @ApiModelProperty(value = "0表示未删除,1表示删除") + private Integer delFlag; + + /** + * 企标计划Id + */ + @ApiModelProperty(value = "企标计划Id") + private String espId; + + /** + * 流程实例Id + */ + @ApiModelProperty(value = "流程实例Id") + private String processInstanceId; + + /** + * 是否开启征求意见 0不征求 1征求 + */ + @TableField(exist = false) + @ApiModelProperty(value = "是否开启征求意见 0不征求 1征求") + private String adviceFlag; + + /** + * 发布日期 + */ + @ApiModelProperty(value = "发布日期") + private String releaseDate; + + /** + * 实施日期 + */ + @ApiModelProperty(value = "实施日期") + private String implementDate; + + /** + * 征求意见截止日期 + */ + @TableField(exist = false) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty(value = "征求意见截止日期") + private Date adviceDeadline; + + /** + * 主起草人 + */ + @ApiModelProperty(value = "主起草人") + private String mainDraftUser; + + + @TableField(exist = false) + @ApiModelProperty(value = "意见列表") + private List advices; + + /** + * 在线编辑文件id + */ + @ApiModelProperty(value = "在线编辑文件id") + private String onEditFile; + + /** + * 0无意见 1有意见 + */ + @ApiModelProperty(value = "0无意见 1有意见") + @TableField(exist = false) + @Dict(dicCode = "yn") + private String haveNoOpinion; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/RevisionTaskNodeIdConstant.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/RevisionTaskNodeIdConstant.java new file mode 100644 index 00000000..286009ec --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/RevisionTaskNodeIdConstant.java @@ -0,0 +1,46 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.entity; + +/** + * @author: Mzaxd + * @Date: 2023/12/19 15:14 + */ +public class RevisionTaskNodeIdConstant { + + /** 主起草人分发 */ + public static final String MAIN_DRAFT_USER_DISTRIBUTE = "Activity_0v98tow"; + /** 其他起草人上传企标 */ + public static final String OTHER_DRAFT_USER_UPLOAD = "Activity_1d2la4l"; + /** 主起草人汇总 */ + public static final String MAIN_DRAFT_USER_COLLECT_FIRST = "Activity_1dz3u0m"; + /** 标准化审批 */ + public static final String STANDARDIZATION_CHECK = "Activity_0m576ex"; + /** 评分人评分 */ + public static final String RATER_RATE = "Activity_1qhpnpa"; + /** 标准化确认是否开启征求意见 */ + public static final String CONFIRM_ADVISE = "Activity_1siuksf"; + /** 部门联络人下发 */ + public static final String CONTACT_USER_DISTRIBUTE = "Activity_1ns6olf"; + /** 征求意见对象填写意见 */ + public static final String ADVICE = "Activity_04m430n"; + /** 部门联络人汇总数据 */ + public static final String CONTACT_USER_COLLECT = "Activity_1riqzkp"; + /** 部所联络人主管级领导审批 */ + public static final String CONTACT_USER_LEADER_APPROVAL = "Activity_1ralk8e"; + /** 主起草人汇总 */ + public static final String MAIN_DRAFT_USER_COLLECT_SECOND = "Activity_1hb9aun"; + /** 主起草人上传会议纪要 */ + public static final String MAIN_DRAFT_USER_UPLOAD = "Activity_11uuyg0"; + /** 其它起草人校对 */ + public static final String OTHER_DRAFT_USER_CHECK = "Activity_1seways"; + /** 主管级领导审批 */ + public static final String LEADER_APPROVAL = "Activity_1l028rz"; + /** 标准化审批 */ + public static final String STANDARDIZATION_APPROVAL = "Activity_0uxua0b"; + /** 相关部门领导会签 */ + public static final String RELATED_LEADER_APPROVAL = "Activity_05pybsc"; + /** 总工程师审批 */ + public static final String CHIEF_ENGINEER_APPROVAL = "Activity_1yr56ac"; + /** 主起草人发布 */ + public static final String MAIN_DRAFT_USER_RELEASE = "Activity_0n0h60s"; + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/vo/ProcessRevisionVO.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/vo/ProcessRevisionVO.java new file mode 100644 index 00000000..e16e945e --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/entity/vo/ProcessRevisionVO.java @@ -0,0 +1,15 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.entity.vo; + +import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision; +import lombok.Data; + +import java.util.List; + +@Data +public class ProcessRevisionVO { + + ProcessEsRevision processInfo; + + List adviceList; +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/job/AdviceDeadlineJob.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/job/AdviceDeadlineJob.java new file mode 100644 index 00000000..73a3fb94 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/job/AdviceDeadlineJob.java @@ -0,0 +1,115 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.job; + +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.esRevisionAdvice.entity.ProcessEsRevision; +import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService; +import com.jero.modules.activiti.service.ProcessApprovalRecordService; +import lombok.extern.slf4j.Slf4j; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.runtime.Execution; +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; + + @Resource + private TaskService taskService; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + log.info("开始执行征求意见截止日期每日定时任务"); + LambdaQueryWrapper revisionLambdaQueryWrapper = new LambdaQueryWrapper<>(); + revisionLambdaQueryWrapper.eq(ProcessEsRevision::getDelFlag, YesOrNoEnum.NO.getValue()); + revisionLambdaQueryWrapper.isNotNull(ProcessEsRevision::getProcessInstanceId); + List revisionList = revisionService.list(revisionLambdaQueryWrapper); + if (revisionList == null || revisionList.isEmpty()) { + return; + } + Map revisionMap = revisionList.stream() + .collect(Collectors.toMap(ProcessEsRevision::getProcessInstanceId, revision -> revision)); + // 找到所有征求意见的未完成的待办 + LambdaQueryWrapper arWrapper = new LambdaQueryWrapper<>(); + arWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue()); + arWrapper.in(ProcessApprovalRecord::getProcessInstanceId, revisionMap.keySet()); + arWrapper.eq(ProcessApprovalRecord::getTaskName, "征求意见对象填写意见"); + arWrapper.isNotNull(ProcessApprovalRecord::getTaskId); + List arList = approvalRecordService.list(arWrapper); + Date curDate = new Date(); + for (ProcessApprovalRecord record : arList) { + String taskId = record.getTaskId(); + // 根据record获取每一个任务的deadline + // 获取Task + taskService.createTaskQuery().taskId(record.getTaskId()).singleResult(); + // 根据Task获取其父级executionId + String executionId = taskService.createTaskQuery() + .taskId(record.getTaskId()).singleResult().getExecutionId(); + // 获取Execution + Execution execution = runtimeService.createExecutionQuery().executionId(executionId).singleResult(); + String parentExecutionId = execution.getParentId(); + // 根据executionId获取流程变量 + Date adviceDeadline = (Date) taskService.getVariable(taskId, parentExecutionId + "-adviceDeadline"); + if (adviceDeadline == null) { + continue; + } + adviceDeadline = getDeadlineDate(adviceDeadline); + // 如果当前日期大于该条数据的截止日期 则自动完成任务 +// if (curDate.after(adviceDeadline)) { +// ESRevisionDataVO handleData = revisionService.getHandleData(taskId); +// handleData.getCommon().setTaskId(taskId); +//// ProcessEsRevision data = handleData.getData(); +// EsRevisionAdvice esRevisionAdvice = new EsRevisionAdvice(); +// esRevisionAdvice.setClauseName("无"); +// esRevisionAdvice.setClauseNum("无"); +// esRevisionAdvice.setEditAdvice("到期自动提交"); +//// data.setAdvices(new ArrayList<>(Collections.singletonList(esRevisionAdvice))); +// revisionService.approval(handleData, true); +// } + } + log.info("征求意见截止日期每日定时任务执行结束"); + } + + @NotNull + private static Date getDeadlineDate(Date deadline) { + // 设置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/esRevisionAdvice/listener/ProcessESRevisionEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/listener/ProcessESRevisionEndListener.java new file mode 100644 index 00000000..cba60628 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/listener/ProcessESRevisionEndListener.java @@ -0,0 +1,107 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.listener; + +import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService; +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/19 11:59 + */ +@Component +public class ProcessESRevisionEndListener implements ExecutionListener { + + @Resource + private EnterpriseStandardPlanService espService; + +// @Resource +// private EsRevisionService esRevisionService; +// +// @Resource +// private EnterpriseStandardReviewMeetingRecordService rmrService; +// +// @Resource +// private EnterpriseStandardRmrEvaluateDetailService rmrDetailService; +// +// @Resource +// private ILawsCommonService lawsCommonService; +// +// @Resource +// private IBusProcessModelHisService busProcessModelHisService; + + + + @Override + public void notify(DelegateExecution delegateExecution) { + // 获取流程实例Id + String processInstanceId = delegateExecution.getProcessInstanceId(); + // 根据流程Id获取业务数据 +// LambdaQueryWrapper revisionWrapper = new LambdaQueryWrapper<>(); +// revisionWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId); +// // 获取企标相关数据 +// ProcessEsRevision data = esRevisionService.getOne(revisionWrapper); +// Map variables = JSON.parseObject(data.getBusinessJson(), Map.class); +// String inspectContentJson = data.getInspectContentJson(); +// List> inspectContentList; +// if (StrUtil.isNotBlank(inspectContentJson)) { +// inspectContentList = +// JSON.parseObject(inspectContentJson, new TypeReference>>() {}); +// variables.put(FieldCommon.CHECK_LIST, inspectContentList); +// } +// // 将标准号进行拆分后填充字段 +// String standardNumber = (String) variables.get(FieldCommon.STANDARD_NUMBER); +// if (StringUtils.isNotBlank(standardNumber)) { +// Map map = EnterpriseStandardUtil.splitStandardNumber(standardNumber); +// variables.putAll(map); +// // 如果没有主起草人,则需要填充主起草人 +// } +// // 主起草人 +// String mainDraftUser = (String) variables.get(FieldCommon.MAIN_DRAFTING_USER); +// if (StringUtils.isBlank(mainDraftUser)) { +// variables.put(FieldCommon.MAIN_DRAFTING_USER, data.getMainDraftUser()); +// } +// // 标准状态 +// variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.RELEASE.getStateValue()); +// String tryFlag = (String) variables.get(FieldCommon.TRY_FLAG); +// if (tryFlag != null) { +// if (tryFlag.equals(YesOrNoEnum.YES.getValue())) { +// variables.put(FieldCommon.STANDARD_STATE, StandardStateEnum.TRIAL_OPERATION.getStateValue()); +// } +// } +// variables.put(FieldCommon.RELEASE_DATE, data.getReleaseDate()); +// variables.put(FieldCommon.IMPLEMENTATION_DATE, data.getImplementDate()); +// variables.put(FieldCommon.MAIN_DRAFTING_UNIT_RESPONSIBLE_PERSON, data.getApprovalUser()); +// variables.put(FieldCommon.MODULE, TableNameEnum.ENTERPRISE_STANDARDS.getValue()); +// variables.put(FieldCommon.AUTH_DEPT, data.getAuthDept()); +// String standardId = IdWorker.getIdStr(); +// variables.put(FieldCommon.ID, standardId); +// // minio上传在线编辑文件 +// String onEditFile = data.getOnEditFile(); +// if (StringUtils.isNotBlank(onEditFile)) { +// String fileId = busProcessModelHisService.saveProcessFileToOss(onEditFile); +// variables.put(FieldCommon.FILE_PUBLISH_OF_ORIGINAL, fileId); +// } +// // 发布企标 +// lawsCommonService.commonAdd(variables); +// String espId = data.getEspId(); +// EnterpriseStandardPlan esp = espService.getById(espId); +// // 保存评审会记录 +// EnterpriseStandardReviewMeetingRecord esRmr = new EnterpriseStandardReviewMeetingRecord(); +// esRmr.setStandardId(standardId); +// esRmr.setPlanId(esp.getId()); +// esRmr.setReviewDate(data.getReviewDate()); +// esRmr.setReviewUser(data.getReviewUser()); +// rmrService.save(esRmr); +// // 保存评审会评审结果 +// List reviewMeetingDetailVOS = data.parseReviewMeetingDetails(); +// List rmrEvaluateDetails = +// BeanCopyUtils.copyBeanList(reviewMeetingDetailVOS, EnterpriseStandardRmrEvaluateDetail.class); +// rmrEvaluateDetails.forEach(r -> r.setReviewMeetingId(esRmr.getId())); +// rmrDetailService.saveBatch(rmrEvaluateDetails); +// // 更新企标计划状态 +// espService.updateById(esp); + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/mapper/EsRevisionAdviceMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/mapper/EsRevisionAdviceMapper.java new file mode 100644 index 00000000..e51b91cb --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/mapper/EsRevisionAdviceMapper.java @@ -0,0 +1,18 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice; + +/** +* @author ThinkBook +* @description 针对表【process_es_revision_advice】的数据库操作Mapper +* @createDate 2023-12-20 17:17:56 +* @Entity com.jero.modules.activiti.process.esRevision.entity.EsRevisionAdvice +*/ +public interface EsRevisionAdviceMapper extends BaseMapper { + +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/mapper/EsRevisionMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/mapper/EsRevisionMapper.java new file mode 100644 index 00000000..23e0413d --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/mapper/EsRevisionMapper.java @@ -0,0 +1,18 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision; + +/** +* @author ThinkBook +* @description 针对表【process_es_revision】的数据库操作Mapper +* @createDate 2023-12-19 11:58:59 +* @Entity com.jero.modules.activiti.process.esRevision.entity.EsRevision +*/ +public interface EsRevisionMapper extends BaseMapper { + +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/EsRevisionAdviceService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/EsRevisionAdviceService.java new file mode 100644 index 00000000..638f3659 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/EsRevisionAdviceService.java @@ -0,0 +1,13 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice; + +/** +* @author ThinkBook +* @description 针对表【process_es_revision_advice】的数据库操作Service +* @createDate 2023-12-20 17:17:56 +*/ +public interface EsRevisionAdviceService extends IService { + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/EsRevisionService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/EsRevisionService.java new file mode 100644 index 00000000..05d74dce --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/EsRevisionService.java @@ -0,0 +1,24 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.vo.ProcessRevisionVO; +import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; + +/** + * @author ThinkBook + * @description 针对表【process_es_revision】的数据库操作Service + * @createDate 2023-12-19 11:58:59 + */ +public interface EsRevisionService extends IService { + + + ProcessInfoVO getHandleData(String taskId); + + void startProcess(ProcessInfoVO processInfoVO); + + void approval(ProcessInfoVO processInfoVO, boolean pass); + + void submit(ProcessInfoVO processInfoVO); +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionAdviceServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionAdviceServiceImpl.java new file mode 100644 index 00000000..0ea65e90 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionAdviceServiceImpl.java @@ -0,0 +1,22 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice; +import com.jero.modules.activiti.process.esRevisionAdvice.mapper.EsRevisionAdviceMapper; +import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionAdviceService; +import org.springframework.stereotype.Service; + +/** +* @author ThinkBook +* @description 针对表【process_es_revision_advice】的数据库操作Service实现 +* @createDate 2023-12-20 17:17:56 +*/ +@Service +public class EsRevisionAdviceServiceImpl extends ServiceImpl + implements EsRevisionAdviceService{ + +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionServiceImpl.java new file mode 100644 index 00000000..caaae8e8 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevisionAdvice/service/impl/EsRevisionServiceImpl.java @@ -0,0 +1,644 @@ +package com.jero.modules.activiti.process.esRevisionAdvice.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.api.dto.message.SendMessageDTO; +import com.jero.common.api.vo.ResultCommon; +import com.jero.common.aspect.TranslationAspect; +import com.jero.common.exception.JeroBootException; +import com.jero.modules.activiti.entity.ProcessAll; +import com.jero.modules.activiti.enums.ProcessStatusEnum; +import com.jero.modules.activiti.enums.ProcessTypeEnum; +import com.jero.modules.activiti.process.common.enums.ProcessType; +import com.jero.modules.activiti.process.common.service.ActFlowCommonService; +import com.jero.modules.activiti.process.common.service.ProcessDraftService; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.EsRevisionAdvice; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.HandleAdviceEnum; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.ProcessEsRevision; +import com.jero.modules.activiti.process.esRevisionAdvice.entity.vo.ProcessRevisionVO; +import com.jero.modules.activiti.process.esRevisionAdvice.mapper.EsRevisionMapper; +import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionAdviceService; +import com.jero.modules.activiti.process.esRevisionAdvice.service.EsRevisionService; +import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO; +import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO; +import com.jero.modules.activiti.process.fb.service.IProcessHandleService; +import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; +import com.jero.modules.activiti.service.ProcessAllService; +import com.jero.modules.activiti.service.ProcessApprovalRecordService; +import com.jero.modules.activiti.service.ProcessNodeLinkService; +import com.jero.modules.laws.common.util.CurrentUserUtil; +import com.jero.modules.laws.enterprise.entity.ESPProjectStatus; +import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan; +import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService; +import com.jero.modules.laws.system.service.ILawsContactManageService; +import com.jero.modules.sys.utils.UserUtils; +import com.jero.modules.system.service.ISysUserDepartService; +import com.jero.modules.system.service.ISysUserService; +import lombok.extern.slf4j.Slf4j; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.runtime.ProcessInstance; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + + +/** + * @author ThinkBook + * @description 针对表【process_es_revision】的数据库操作Service实现 + * @createDate 2023-12-19 11:58:59 + */ +@Service +@Slf4j +@Transactional(rollbackFor = JeroBootException.class) +public class EsRevisionServiceImpl extends ServiceImpl + implements EsRevisionService { + + @Resource + private ActFlowCommonService actFlowCommonService; + + @Resource + private ProcessNodeLinkService processNodeLinkService; + + @Resource + private RuntimeService runtimeService; + + @Resource + private IProcessHandleService processHandleService; + + @Resource + private ProcessAllService processAllService; + + @Resource + private TaskService taskService; + + @Resource + private EnterpriseStandardPlanService espService; + + @Resource + private EsRevisionAdviceService adviceService; + + @Resource + private TranslationAspect translationAspect; + + @Resource + private ISysUserDepartService sysUserDepartService; + +// @Resource +// private SendMessageAPI sendMessageAPI; + + @Resource + private ILawsContactManageService contactManageService; + + @Resource + private ProcessApprovalRecordService parService; + + @Resource + private ISysUserService userService; + + @Resource + private ProcessDraftService prcDraftService; + + @Resource + private CurrentUserUtil currentUserUtil; + + @Override + public void startProcess(ProcessInfoVO processInfoVO) { + // 流程Key + String processDefinitionKey = ProcessType.ES_REVISION_ADVICE.getProcessKey(); + // 流程信息 + BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO(); + // 任务信息 + BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO(); + // 人员信息 + Map userInfoMap = processInfoVO.getUserInfoMap(); + // 当前用户Id + String userId = UserUtils.getUserId(); + // 设置流程变量 + Map actVariables = this.setVariables(processInfoVO); + // 删除草稿 + actFlowCommonService.getExistDraftAndRemove(processInfoVO.getDraftId()); + // 启动流程 + ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables); + // 获取流程实例ID + String processDefinitionId = processInstance.getProcessDefinitionId(); + String processInstanceId = processInstance.getId(); + processInfo.setProcessInstanceId(processInstanceId); + processInfo.setProcessDefinitionId(processDefinitionId); + processInfo.setProcessType(ProcessTypeEnum.ES_REVISION_ADVICE.getValue()); + // 第一个节点业务数据处理 + this.startNodeBusProcess(processInfoVO); + // 保存选人信息 + processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userInfoMap); + // 获取第一个任务的taskId + String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId); + processTask.setTaskId(taskId); + // 保存第一个节点的草稿 + processHandleService.saveToDraft(processInfoVO, userId); + // 保存第一个节点的快照 + processHandleService.saveToSnapshot(processInfoVO, userId); + // 更新审批表为完成,填充数据 + actFlowCommonService.updateApprovalInfo(processTask, taskId); + // 根据流程实例id更新流程总表 + actFlowCommonService.updateProcessAll(processInfo); + // 自动完成第一个任务 + actFlowCommonService.completeTask(taskId, userId); + } + + private void startNodeBusProcess(ProcessInfoVO processInfoVO) { + // 保存数据 + ProcessRevisionVO businessInfoDTO = processInfoVO.getBusinessInfoDTO(); + ProcessEsRevision processInfo = businessInfoDTO.getProcessInfo(); + save(processInfo); + // 修改企标计划状态 + // 检查企标计划是否已被删除 + String espId = processInfo.getEspId(); + EnterpriseStandardPlan esp = espService.getById(espId); + if (esp == null) { + throw new JeroBootException(ResultCommon.INVALID_ESP); + } + // 设置状态为运行中 + espService.changeProjectStatus(espId, ESPProjectStatus.IN_PROGRESS); + } + + private Map setVariables(ProcessInfoVO processInfoVO) { + Map userInfoMap = processInfoVO.getUserInfoMap(); + // 获取分发人 + return new HashMap<>(userInfoMap); + } + + private Map getUserMap(Map variables) { + // 转成逗号拼接 + variables.put("otherDraftUserList", Optional.ofNullable((ArrayList) variables.get("otherDraftUserList")) + .map(list -> String.join(",", list)) + .orElse("")); + variables.remove("distribute"); + return variables; + } + + public void startRunTask(ProcessInfoVO processInfoVO) { + // 检查企标计划是否已被删除 +// String espId = revisionData.getData().getEspId(); +// EnterpriseStandardPlan esp = espService.getById(espId); +// if (esp == null) { +// throw new JeroBootException(ResultCommon.INVALID_ESP); +// } +// // 设置状态为运行中 +// espService.changeProjectStatus(espId, ESPProjectStatus.IN_PROGRESS); + } + + @Override + public ProcessInfoVO getHandleData(String taskId) { + if (!actFlowCommonService.taskExists(taskId)) { + throw new JeroBootException("任务不存在"); + } +// String userId = actFlowCommonService.getOriginTaskAssignee(taskId); +// String executionId = taskService.createTaskQuery().taskId(taskId).singleResult().getExecutionId(); +// // 根据当前执行Id获取所有子执行Id +// List executionIdList = actFlowCommonService.getAllChildExecutionIds(executionId); +// executionIdList.add(executionId); +// ESRevisionDataVO revisionDataVO = new ESRevisionDataVO(); +// // 使用流程引擎根据taskId找到流程实例Id +// String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId); +// // 获取流程通用数据 +// ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); +// CommonVO commonVO = new CommonVO(); +// commonVO.setPrcName(process.getPrcName()); +// commonVO.setTaskId(process.getTaskId()); +// commonVO.setPrcMes(process.getPrcMes()); +// commonVO.setDueTime(process.getDueTime()); +// commonVO.setNodeId(process.getNodeId()); +// revisionDataVO.setCommon(commonVO); +// ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId); +// // 获取流程实例数据 +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); +// LambdaQueryWrapper advicesWrapper = new LambdaQueryWrapper<>(); +// advicesWrapper.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId); +// wrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId); +// ProcessEsRevision data = getOne(wrapper); +// List adviceList = new ArrayList<>(); +// List otherDraftUserVOS = data.parseOtherDraftUserVOS(); +// List inspectContentVOS = data.parseInspectContents(); +// String xmlNodeId = record.getNodeId(); +// Object passObject = taskService.getVariable(taskId, "pass"); +// boolean pass = true; +// if (passObject != null) { +// pass = (boolean) passObject; +// } +// // 某些节点需要对数据进行特殊处理 +// switch (xmlNodeId) { +// case OTHER_DRAFT_USER_UPLOAD: +// otherDraftUserVOS = otherDraftUserVOS.stream() +// .filter(o -> o.getTaskId().equals(taskId)).collect(Collectors.toList()); +// break; +// case CONTACT_USER_DISTRIBUTE: +// if (pass) { +// data.setWorkGroup(null); +// data.setAuthDept(null); +// data.setReviewUser(null); +// } +// case CONTACT_USER_COLLECT: +// // 根据联络人找到部门联络人主管级领导 +// LambdaQueryWrapper contactWrapper = new LambdaQueryWrapper<>(); +// advicesWrapper.eq(EsRevisionAdvice::getExecutionId, executionId); +// contactWrapper.eq(LawsContactManage::getContactId, userId); +// List list = contactManageService.list(contactWrapper); +// if (list != null && list.size() == 1) { +// data.setContactUserLeader(list.get(0).getLeaderId()); +// } +// case CONTACT_USER_LEADER_APPROVAL: +// advicesWrapper.eq(EsRevisionAdvice::getExecutionId, executionId); +// adviceList = adviceService.list(advicesWrapper); +// break; +// case MAIN_DRAFT_USER_COLLECT_SECOND: +// adviceList = adviceService.list(advicesWrapper); +// break; +// } +// data.setAdvices(adviceList); +// data.setOtherDraftUserVOS(otherDraftUserVOS); +// data.setInspectContents(inspectContentVOS); +// revisionDataVO.setData(data); +// return revisionDataVO; + return null; + } + + @Override + public void approval(ProcessInfoVO processInfoVO, boolean pass) { +// CommonVO commonVO = revisionData.getCommon(); +// String taskId = commonVO.getTaskId(); + // 获取task +// if (StrUtil.isBlank(taskId) || !actFlowCommonService.taskExists(taskId)) { +// throw new JeroBootException("taskId为空或任务不存在"); +// } +// String userId = actFlowCommonService.getOriginTaskAssignee(taskId); +// Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); +// // 获取执行id +// String executionId = task.getExecutionId(); +// // 获取当前节点的id +// ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId); +// String xmlNodeId = record.getNodeId(); +// String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId); +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); +// LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); +// LambdaUpdateWrapper adviceWrapper = new LambdaUpdateWrapper<>(); +// wrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId); +// wrapper.eq(ProcessEsRevision::getDelFlag, YesOrNoEnum.NO.getValue()); +// adviceWrapper.eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId); +// ProcessEsRevision dataDb = getOne(wrapper); +// updateWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId); +// updateWrapper.eq(ProcessEsRevision::getDelFlag, YesOrNoEnum.NO.getValue()); +// // 获取当前流程 +// ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); +// String processDefinitionId = processInstance.getProcessDefinitionId(); +// Map userMap = new HashMap<>(); +// List advices; +// ProcessEsRevision data; +// Map flowUser; + // 更新审批表为完成,填充数据 +// actFlowCommonService.updateApprovalInfo(commonVO, taskId, pass); +// String curUserId; +// switch (xmlNodeId) { +// case MAIN_DRAFT_USER_DISTRIBUTE: +// // 判断是否分发 设置流程变量 +// data = revisionData.getData(); +// flowUser = revisionData.getFlowUser(); +// List otherDraftUserVOS = data.getOtherDraftUserVOS(); +// if (otherDraftUserVOS == null || otherDraftUserVOS.isEmpty()) { +// taskService.setVariable(taskId, "distribute", false); +// } else { +// taskService.setVariable(taskId, "distribute", true); +// taskService.setVariable(taskId, "otherDraftUserList", otherDraftUserVOS.stream().map(OtherDraftUserVO::getUser) +// .collect(Collectors.toList())); +// otherDraftUserVOS.forEach(o -> o.setFinishFlag(YesOrNoEnum.NO.getValue())); +// data.setProofreader(otherDraftUserVOS.stream() +// .map(OtherDraftUserVO::getUser) +// .distinct() +// .collect(Collectors.joining(","))); +// data.setOtherDraftUserVOS(otherDraftUserVOS); +// data.setOtherDrafterUploadFileJson(otherDraftUserVOS); +// } +// saveOrUpdate(data); +// String standardizationUser = (String) flowUser.get("standardizationUser"); +// taskService.setVariable(taskId, "standardizationUser", standardizationUser); +// // 保存人员信息 +// Map actVariables = this.setVariables(revisionData); +// processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(actVariables)); +// // 替换草稿数据 +// this.replaceAutoStartDraft(revisionData, processInstanceId); +// break; +// case OTHER_DRAFT_USER_UPLOAD: +// List otherDraftUserVODbList = dataDb.parseOtherDraftUserVOS(); +// data = revisionData.getData(); +// List otherDraftUserVOList = data.getOtherDraftUserVOS(); +// otherDraftUserVODbList.forEach(o -> { +// if (o.getTaskId().equals(taskId)) { +// o.setFileId(otherDraftUserVOList.get(0).getFileId()); +// } +// }); +// dataDb.setOtherDrafterUploadFileJson(otherDraftUserVODbList); +// saveOrUpdate(dataDb); +// break; +// case MAIN_DRAFT_USER_COLLECT_FIRST: +// // 判断是否需要稽查 设置流程变量 保存稽查列表 +// data = revisionData.getData(); +// boolean inspectFlag = !data.getInspectFlag().equals(YesOrNoEnum.NO.getValue()); +// if (inspectFlag) { +// List inspectContents = data.getInspectContents(); +// data.setInspectContentJson(inspectContents); +// } +// // 保存流程数据 +// saveOrUpdate(data); +// break; +// case STANDARDIZATION_CHECK: +// // 判断是否可以评审 +// if (pass) { +// data = revisionData.getData(); +// List raterList = Arrays.asList(data.getRaters().split(",")); +// taskService.setVariable(taskId, "raterList", raterList); +// // 保存流程数据 +// saveOrUpdate(data); +// userMap.put("raterList", data.getRaters()); +// processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap); +// } +// break; +// case RATER_RATE: +// // 保存打分记录 +// data = revisionData.getData(); +// List reviewMeetingDetails = data.getReviewMeetingDetails(); +// // 设置当前评分人 +// curUserId = UserUtils.getUserId(); +// String finalCurUserId = curUserId; +// reviewMeetingDetails.forEach(reviewMeetingDetail -> reviewMeetingDetail.setAdjudicatorId(finalCurUserId)); +// ProcessEsRevision revisionDb = getById(dataDb.getId()); +// List reviewMeetingDetailsDb = revisionDb.parseReviewMeetingDetails(); +// if (reviewMeetingDetailsDb == null) { +// reviewMeetingDetailsDb = new ArrayList<>(); +// } +// reviewMeetingDetailsDb.addAll(reviewMeetingDetails); +// revisionDb.setReviewMeetingDetailJson(reviewMeetingDetailsDb); +// saveOrUpdate(revisionDb); +// break; +// case CONFIRM_ADVISE: +// // 判断是否开启征求意见子流程 设置流程变量 +// data = revisionData.getData(); +// boolean adviceFlag = !data.getAdviceFlag().equals("0"); +// if (adviceFlag) { +// // 保存征求意见截止时间 +// saveOrUpdate(data); +// List contactUserList = Arrays.asList(data.getContactUser().split(",")); +// taskService.setVariable(taskId, "contactUserList", contactUserList); +// taskService.setVariable(taskId, "open", true); +// String mainDraftUser = (String) taskService.getVariable(taskId, "mainDraftUser"); +// // 保存流程数据 +// saveOrUpdate(data); +// userMap.put("mainDraftCollectUser", mainDraftUser); +// userMap.put("contactUser", data.getContactUser()); +// processNodeLinkService.incrementSaveNodeUserLink(processDefinitionId, processInstanceId, userMap); +// } else { +// taskService.setVariable(taskId, "open", false); +// } +// break; +// case CONTACT_USER_DISTRIBUTE: +// data = revisionData.getData(); +// Date totalAdviceDeadline = data.getTotalAdviceDeadline(); +// Date adviceDeadline = data.getAdviceDeadline(); +// // 征求意见截至日期不能晚于总截止时间 +// if (totalAdviceDeadline != null) { +// if (adviceDeadline.getTime() > totalAdviceDeadline.getTime()) { +// log.error("总截止时间:{} 当前提交征求意见截止时间{}", totalAdviceDeadline, adviceDeadline); +// throw new JeroBootException("各部门联络人设置的截止时间不能晚于标准化设置的征求意见截止时间!"); +// } +// } +// String workGroup = data.getWorkGroup(); +// List adviceUserList = Arrays.asList(workGroup.split(",")); +// // 如果人员超过600则提示 +// if (adviceUserList.size() > 600) { +// log.error("当前提交人员超过600人"); +// throw new JeroBootException("当前提交人员超过600人,请重新选择!"); +// } +// runtimeService.setVariableLocal(executionId, "adviceUserList", adviceUserList); +// runtimeService.setVariable(executionId, executionId + "-adviceDeadline", adviceDeadline); +// runtimeService.setVariable(executionId, "contactExecutionId", executionId); +// userMap.put("adviceUserList", workGroup); +// processNodeLinkService.incrementSaveNodeUserLink(processDefinitionId, processInstanceId, userMap); +// // 设置截止时间 +// saveOrUpdate(data); +// break; +// case ADVICE: +// data = revisionData.getData(); +// String haveNoOpinion = data.getHaveNoOpinion(); +// advices = data.getAdvices(); +// if (YesOrNoEnum.NO.getValue().equals(data.getHaveNoOpinion())) { +// EsRevisionAdvice advice = new EsRevisionAdvice(); +// advice.setClauseName("无"); +// advice.setClauseNum("无"); +// advice.setEditAdvice("无"); +// advices = new ArrayList<>(Collections.singletonList(advice)); +// } +// String contactUserExecutionId = (String) runtimeService.getVariable(executionId, executionId + "-ContactExecutionId"); +// advices.forEach(advice -> { +// advice.setCreateUserId(userId); +// advice.setProcessInstanceId(processInstanceId); +// advice.setExecutionId(contactUserExecutionId); +// advice.setHaveNoOpinion(haveNoOpinion); +// }); +// adviceService.saveBatch(advices); +// break; +// case CONTACT_USER_COLLECT: +// data = revisionData.getData(); +// // 先删后增 +// String contactUserLeader = data.getContactUserLeader(); +// runtimeService.setVariable(executionId, "contactUserLeader", contactUserLeader); +// runtimeService.setVariable(executionId, executionId + "-ContactUserLeader", contactUserLeader); +// userMap.put("contactUserLeader", data.getContactUserLeader()); +// advices = data.getAdvices(); +// adviceWrapper.eq(EsRevisionAdvice::getExecutionId, executionId); +// adviceService.remove(adviceWrapper); +// advices.forEach(advice -> { +// advice.setProcessInstanceId(processInstanceId); +// advice.setExecutionId(executionId); +// if (StrUtil.isBlank(advice.getCreateUserId())) { +// advice.setCreateUserId(UserUtils.getUserId()); +// } +// }); +// adviceService.saveBatch(advices); +// processNodeLinkService.incrementSaveNodeUserLink(processDefinitionId, processInstanceId, userMap); +// break; +// case CONTACT_USER_LEADER_APPROVAL: +// // 保存流程数据 +// if (pass) { +// data = revisionData.getData(); +// // 保存征求意见记录 先删后增 +// adviceService.remove(new LambdaQueryWrapper() +// .eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId) +// .eq(EsRevisionAdvice::getExecutionId, executionId)); +// advices = data.getAdvices(); +// adviceWrapper.eq(EsRevisionAdvice::getExecutionId, executionId); +// adviceService.remove(adviceWrapper); +// advices.forEach(advice -> advice.setProcessInstanceId(processInstanceId)); +// advices.forEach(advice -> advice.setExecutionId(executionId)); +// advices.forEach(advice -> { +// if (StrUtil.isBlank(advice.getCreateUserId())) { +// advice.setCreateUserId(UserUtils.getUserId()); +// } +// }); +// adviceService.saveBatch(advices); +// } +// break; +// case MAIN_DRAFT_USER_COLLECT_SECOND: +// // 保存流程数据 +// data = revisionData.getData(); +// // 更改保存征求意见记录 +// advices = data.getAdvices(); +// // 如果没有创建人的记录说明是主起草人新增的 需要设置创建人 +// advices.forEach(advice -> { +// if (StrUtil.isBlank(advice.getCreateUserId())) { +// advice.setCreateUserId(UserUtils.getUserId()); +// } +// }); +// adviceService.saveOrUpdateBatch(advices); +// if (StrUtil.isNotBlank(data.getId())) { +// updateById(data); +// } +// // 给所有意见提出人发送意见反馈消息 +// this.sendMessageToAdviceUser(data, processInstanceId); +// break; +// case MAIN_DRAFT_USER_UPLOAD: +// // 设置后续节点的办理人 +// data = revisionData.getData(); +// List proofreaderList = Arrays.asList(data.getProofreader().split(",")); +// List approvalUserList = Arrays.asList(data.getApprovalUser().split(",")); +// String approvalUserStandard = data.getApprovalUserStandard(); +// List relatedLeaderList = Arrays.asList(data.getRelatedLeader().split(",")); +// String chiefEngineer = data.getChiefEngineer(); +// flowUser = new HashMap<>(); +// flowUser.put("otherDraftCheckUserList", proofreaderList); +// flowUser.put("mainDraftUserLeaderList", approvalUserList); +// flowUser.put("standardizationUser", approvalUserStandard); +// flowUser.put("relatedDeptLeaderList", relatedLeaderList); +// flowUser.put("chiefEngineer", chiefEngineer); +// taskService.setVariables(taskId, flowUser); +// userMap.put("otherDraftCheckUserList", data.getProofreader()); +// userMap.put("mainDraftUserLeaderList", data.getApprovalUser()); +// userMap.put("standardizationUserFinal", approvalUserStandard); +// userMap.put("relatedDeptLeaderList", data.getRelatedLeader()); +// userMap.put("chiefEngineer", chiefEngineer); +// saveOrUpdate(data); +// processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap); +// break; +// case MAIN_DRAFT_USER_RELEASE: +// data = revisionData.getData(); +// curUserId = UserUtils.getUserId(); +// data.setMainDraftUser(curUserId); +// saveOrUpdate(data); +// // 给授权部门的所有人员发送消息 +// this.sendMessageToAuthDeptUser(processInstanceId); +// break; +// } +// // 转办修改流程变量逻辑 +// switch (xmlNodeId) { +// case MAIN_DRAFT_USER_COLLECT_FIRST: +// case MAIN_DRAFT_USER_COLLECT_SECOND: +// case MAIN_DRAFT_USER_UPLOAD: +// // 获取当前节点的id +// curUserId = UserUtils.getUserId(); +// taskService.setVariable(taskId, "mainDraftUser", curUserId); +// break; +// case STANDARDIZATION_CHECK: +// case CONFIRM_ADVISE: +// // 获取当前节点的id +// curUserId = UserUtils.getUserId(); +// taskService.setVariable(taskId, "standardizationUser", curUserId); +// break; +// case CONTACT_USER_DISTRIBUTE: +// case CONTACT_USER_COLLECT: +// // 获取当前节点的id +// curUserId = UserUtils.getUserId(); +// runtimeService.setVariable(executionId, "contactUser", curUserId); +// runtimeService.setVariable(executionId, curUserId + "-ExecutionId", executionId); +// break; +// case CONTACT_USER_LEADER_APPROVAL: +// // 获取当前节点的id +// curUserId = UserUtils.getUserId(); +// runtimeService.setVariable(executionId, "contactUserLeader", curUserId); +// runtimeService.setVariable(executionId, executionId + "-ContactUserLeader", curUserId); +// break; +// case LEADER_APPROVAL: +// // 根据流程实例Id修改审批人字段 +// // 获取当前节点的id +// curUserId = UserUtils.getUserId(); +// runtimeService.setVariable(executionId, "contactUserLeader", curUserId); +// } +// runtimeService.setVariable(processInstanceId, "pass", pass); +// // 审批节点 +// actFlowCommonService.completeTask(taskId, userId); +// if (xmlNodeId.equals(MAIN_DRAFT_USER_DISTRIBUTE)) { +// this.processOtherDraftUploadTask(processInstanceId); +// } + } + + @Override + public void submit(ProcessInfoVO processInfoVO) { + + } + + private void sendMessageToMainDraftUser(ProcessEsRevision revision, String processInstanceId) { + ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId); + List advices = revision.getAdvices(); + Map> adviceMap = advices.stream() + .collect(Collectors.groupingBy(EsRevisionAdvice::getCreateUserId)); + // 按照Map的Key遍历 + for (String userId : adviceMap.keySet()) { + List adviceList = adviceMap.get(userId); + // 只有未被采纳和部分采纳才发消息 + if (adviceList.stream().allMatch(advice -> HandleAdviceEnum.AGREE.getValue().equals(advice.getHandleAdvice()))) { + continue; + } + SendMessageDTO sendMessageDTO = new SendMessageDTO(); +// sendMessageDTO.setTemplateCode(MessageTemplateCodeCommon.ES_REVISION_ADVICE); + sendMessageDTO.setToUserId(userId); + Map sendMap = new HashMap<>(); + sendMap.put("prcNum", processAll.getPrcNum()); + sendMap.put("prcName", processAll.getPrcName()); + StringBuilder msg = new StringBuilder(); + for (EsRevisionAdvice advice : adviceList) { + // 采纳的不发消息 + if (HandleAdviceEnum.AGREE.getValue().equals(advice.getHandleAdvice())) { + continue; + } + msg.append(advice.getClauseNum()).append(" ").append(advice.getClauseName()); + if (HandleAdviceEnum.DISAGREE.getValue().equals(advice.getHandleAdvice())) { + msg.append(" 未被采纳,"); + } else { + msg.append(" 被部分采纳,"); + } + msg.append("理由为:").append(advice.getReason()).append(";"); + } + // 去除最后一个分号 + if (StrUtil.isNotBlank(msg)) { + msg.deleteCharAt(msg.length() - 1); + } + sendMap.put("msg", msg.toString()); + sendMessageDTO.setMap(sendMap); +// sendMessageAPI.sendMessage(sendMessageDTO); + } + } + + +// @Override + public void updateAllPlanDate() { + // 从流程主表找到所有企标制修订流程 + List processAlls = processAllService.list(new LambdaQueryWrapper() +// .eq(ProcessAll::getPrcType, ProcessTypeEnum.ES_REVISION.getValue()) + .ne(ProcessAll::getPrcStatus, ProcessStatusEnum.WITHDRAWN.getValue())); +// this.updatePlanDateByProcessInstanceId(processAlls); + } +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/ESPProjectStatus.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/ESPProjectStatus.java new file mode 100644 index 00000000..de52c271 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/ESPProjectStatus.java @@ -0,0 +1,37 @@ +package com.jero.modules.laws.enterprise.entity; + +import lombok.Getter; + +/** + * @author: Mzaxd + * @Date: 2023/10/13 14:17 + */ +@Getter +public enum ESPProjectStatus { + + NOT_STARTED("未开始", "1"), + IN_PROGRESS("进行中", "2"), + OVERDUE_COMPLETED("逾期完成", "3"), + OVERDUE("逾期", "4"), + COMPLETED("完成", "5"); + + private final String name; + + private final String value; + + ESPProjectStatus(String name, String value) { + this.name = name; + this.value = value; + } + + public static String getValueByName(String name) { + for (ESPProjectStatus status : ESPProjectStatus.values()) { + if (status.getName().equals(name)) { + return status.getValue(); + } + } + // 如果找不到对应的状态值,则返回“未开始”的状态值 + return ESPProjectStatus.NOT_STARTED.getValue(); + } + +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/EnterpriseStandardPlanService.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/EnterpriseStandardPlanService.java index 609ad504..4a381051 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/EnterpriseStandardPlanService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/EnterpriseStandardPlanService.java @@ -1,13 +1,11 @@ package com.jero.modules.laws.enterprise.service; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.jero.modules.laws.enterprise.entity.dto.ESPlanQueryDTO; -import com.jero.modules.laws.enterprise.entity.vo.EnterpriseStandardPlanVo; -import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan; import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan; +import com.jero.modules.laws.enterprise.entity.vo.EnterpriseStandardPlanVo; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; /** * @author ThinkBook