diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java b/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java index 44ad6730..e7de4ac3 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.jero.common.api.vo.Result; import com.jero.common.api.vo.ResultCommon; import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.aspect.annotation.Translation; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.MessageUtils; @@ -17,6 +18,8 @@ import com.jero.modules.activiti.enums.FinishFlagEnum; import com.jero.modules.activiti.enums.ProcessStatusEnum; import com.jero.modules.activiti.process.common.common.DraftCommon; import com.jero.modules.activiti.process.common.entity.ProcessDraft; +import com.jero.modules.activiti.process.common.entity.ProcessSnapshot; +import com.jero.modules.activiti.process.common.service.ActFlowCommonService; import com.jero.modules.activiti.process.common.service.ProcessDraftService; import com.jero.modules.activiti.process.fb.service.IProcessHandleService; import com.jero.modules.activiti.service.ProcessAllService; @@ -26,6 +29,7 @@ import com.jero.modules.activiti.vo.ResolveTaskParam; import com.jero.modules.laws.common.util.CurrentUserUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; @@ -54,6 +58,8 @@ public class WorkCenterController { private ProcessApprovalRecordService processApprovalRecordService; @Resource private IProcessHandleService processHandleService; + @Resource + private ActFlowCommonService actFlowCommonService; @ApiOperation(value = "查询待办流程列表") @GetMapping("/getTodoList") @@ -258,4 +264,16 @@ public class WorkCenterController { return Result.OK(processApprovalRecord); } + /** + * 快照跳转 + * @param snapshotId + */ + @AutoLog(value = "快照跳转") + @ApiOperation(value="快照跳转", notes="快照跳转") + @GetMapping("/snapshotHandle") + @Translation + public Result snapshotHandle(@RequestParam("snapshotId") @ApiParam("快照Id") String snapshotId) { + return Result.OK(actFlowCommonService.getExistSnapshot(snapshotId)); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessApprovalRecord.java b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessApprovalRecord.java index 258c0569..8a0324c4 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessApprovalRecord.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/entity/ProcessApprovalRecord.java @@ -206,4 +206,11 @@ public class ProcessApprovalRecord { @TableField(value = "transfer_task_id") @ApiModelProperty(value = "转办任务id") private String transferTaskId; + + /** + * 快照Id + */ + @TableField(exist = false) + @ApiModelProperty(value = "快照Id") + private String snapshotId; } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/entity/ProcessSnapshot.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/entity/ProcessSnapshot.java new file mode 100644 index 00000000..283f867f --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/entity/ProcessSnapshot.java @@ -0,0 +1,121 @@ +package com.jero.modules.activiti.process.common.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; + +/** + * 草稿表 + * @TableName process_snapshot + */ +@TableName(value ="process_snapshot") +@Data +public class ProcessSnapshot implements Serializable { + /** + * 主键ID + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键ID") + private String id; + + /** + * 创建人ID + */ + @ApiModelProperty(value = "创建人ID") + private String createBy; + + /** + * 创建时间 + */ + @ApiModelProperty(value = "创建时间") + private Date createTime; + + /** + * 修改人ID + */ + @ApiModelProperty(value = "修改人ID") + private String updateBy; + + /** + * 修改时间 + */ + @ApiModelProperty(value = "修改时间") + private Date updateTime; + + /** + * 部门code + */ + @ApiModelProperty(value = "部门code") + private String orgCode; + + /** + * 流程类型 + */ + @ApiModelProperty(value = "流程类型") + private String prcName; + + /** + * 流程实例id + */ + @ApiModelProperty(value = "流程实例id") + private String processInstanceId; + + /** + * 项目类型 + */ + @Dict(dicCode = "prc_type") + @ApiModelProperty(value = "项目类型") + private Integer prcType; + + /** + * 节点id + */ + @TableField(exist = false) + @ApiModelProperty(value = "节点id") + private String nodeId; + + /**任务id*/ + @ApiModelProperty(value = "任务id") + private java.lang.String taskId; + + /**流程审批信息-备注*/ + @ApiModelProperty(value = "流程审批信息-备注") + private java.lang.String handleText; + + /**流程审批信息-附件*/ + @ApiModelProperty(value = "流程审批信息-附件") + private java.lang.String handleFile; + + /**用户id*/ + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname") + @ApiModelProperty(value = "用户id") + private java.lang.String userId; + + /**流程信息-截止日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "流程信息-截止日期") + private java.util.Date processDueDate; + + /**流程信息-流程说明*/ + @ApiModelProperty(value = "流程信息-流程说明") + private java.lang.String processDescription; + + /** + * 草稿信息json字符串 + */ + @ApiModelProperty(value = "草稿信息json字符串") + private String infoJsonStr; + + @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/common/mapper/ProcessSnapshotMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/mapper/ProcessSnapshotMapper.java new file mode 100644 index 00000000..301fb991 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/mapper/ProcessSnapshotMapper.java @@ -0,0 +1,18 @@ +package com.jero.modules.activiti.process.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.activiti.process.common.entity.ProcessSnapshot; + +/** +* @author ThinkBook +* @description 针对表【process_snapshot(草稿表)】的数据库操作Mapper +* @createDate 2024-07-10 16:27:54 +* @Entity com.jero.modules.activiti.process.common.entity.ProcessSnapshot +*/ +public interface ProcessSnapshotMapper extends BaseMapper { + +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java index 01f73527..719e71f3 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java @@ -13,6 +13,7 @@ import com.jero.modules.activiti.enums.ProcessTypeEnum; import com.jero.modules.activiti.process.common.common.DraftCommon; import com.jero.modules.activiti.process.common.entity.CommonVO; import com.jero.modules.activiti.process.common.entity.ProcessDraft; +import com.jero.modules.activiti.process.common.entity.ProcessSnapshot; import com.jero.modules.activiti.process.common.entity.StandTypeVO; import com.jero.modules.activiti.process.common.enums.StandardStateEnum; import com.jero.modules.activiti.process.esArchive.entity.vo.ESArchiveDataVO; @@ -77,6 +78,9 @@ public class ActFlowCommonService { @Resource private ILawsEnterpriseStandardService esService; + @Resource + private ProcessSnapshotService processSnapshotService; + /** * 启动流程实例 */ @@ -495,4 +499,10 @@ public class ActFlowCommonService { } return null; } + + public ProcessSnapshot getExistSnapshot(String snapshotId) { + LambdaQueryWrapper draftWrapper = new LambdaQueryWrapper<>(); + draftWrapper.eq(ProcessSnapshot::getId, snapshotId); + return processSnapshotService.getOne(draftWrapper); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ProcessSnapshotService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ProcessSnapshotService.java new file mode 100644 index 00000000..3c70de3e --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ProcessSnapshotService.java @@ -0,0 +1,13 @@ +package com.jero.modules.activiti.process.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.activiti.process.common.entity.ProcessSnapshot; + +/** +* @author ThinkBook +* @description 针对表【process_snapshot(草稿表)】的数据库操作Service +* @createDate 2024-07-10 16:27:54 +*/ +public interface ProcessSnapshotService extends IService { + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/impl/ProcessSnapshotServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/impl/ProcessSnapshotServiceImpl.java new file mode 100644 index 00000000..44633744 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/impl/ProcessSnapshotServiceImpl.java @@ -0,0 +1,22 @@ +package com.jero.modules.activiti.process.common.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.modules.activiti.process.common.entity.ProcessSnapshot; +import com.jero.modules.activiti.process.common.mapper.ProcessSnapshotMapper; +import com.jero.modules.activiti.process.common.service.ProcessSnapshotService; +import org.springframework.stereotype.Service; + +/** +* @author ThinkBook +* @description 针对表【process_snapshot(草稿表)】的数据库操作Service实现 +* @createDate 2024-07-10 16:27:54 +*/ +@Service +public class ProcessSnapshotServiceImpl extends ServiceImpl + implements ProcessSnapshotService{ + +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java index aa8c2a16..9e85ad3d 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java @@ -161,4 +161,6 @@ public interface IProcessHandleService { List subProcessList(String superProcessInstanceId, String subProcessDefinitionKey); void saveNodeUserLink(String processInstanceId, String nodeId, List userIdList); + + void saveToSnapshot(ProcessInfoVO processInfoVO, String userId); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java index 2c30280f..3555a188 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java @@ -13,7 +13,9 @@ import com.jero.modules.activiti.enums.CommitFlagEnum; import com.jero.modules.activiti.enums.ProcessTypeEnum; import com.jero.modules.activiti.process.common.common.DraftCommon; import com.jero.modules.activiti.process.common.entity.ProcessDraft; +import com.jero.modules.activiti.process.common.entity.ProcessSnapshot; import com.jero.modules.activiti.process.common.service.ProcessDraftService; +import com.jero.modules.activiti.process.common.service.ProcessSnapshotService; import com.jero.modules.activiti.process.fb.common.ConsultationTaskKey; import com.jero.modules.activiti.process.fb.common.ProcessDefinitionKey; import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO; @@ -67,6 +69,8 @@ public class ProcessHandleServiceImpl implements IProcessHandleService { private ProcessNodeLinkService processNodeLinkService; // 流程实例节点关联用户表 @Resource private ProcessDraftService processDraftService; // 流程草稿表 + @Resource + private ProcessSnapshotService processSnapshotService; // 流程草稿表 /** * @Author: liao @@ -489,6 +493,37 @@ public class ProcessHandleServiceImpl implements IProcessHandleService { return processDraft.getId(); } + @Override + public void saveToSnapshot(ProcessInfoVO processInfoVO, String userId) { + BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO(); + BasicTaskInfoDTO basicTaskInfoDTO = processInfoVO.getBasicTaskInfoDTO(); + String taskId = null; + String handleText = null; + String handleFile = null; + if (basicTaskInfoDTO != null) { + taskId = basicTaskInfoDTO.getTaskId(); + handleText = basicTaskInfoDTO.getHandleText(); + handleFile = basicTaskInfoDTO.getHandleFile(); + } else { + processInfoVO.setBasicTaskInfoDTO(new BasicTaskInfoDTO()); + } + + ProcessSnapshot processSnapshot = new ProcessSnapshot(); + + // 根据是否有taskId区分保存来源(待办、草稿) + processSnapshot.setProcessInstanceId(basicProcessInfoDTO.getProcessInstanceId()); // 流程实例id + processSnapshot.setPrcName(basicProcessInfoDTO.getProcessName()); // 流程名称 + processSnapshot.setPrcType(basicProcessInfoDTO.getProcessType()); // 流程类型 + processSnapshot.setProcessDueDate(basicProcessInfoDTO.getProcessDueDate()); // 流程信息-截止日期 + processSnapshot.setProcessDescription(basicProcessInfoDTO.getProcessDescription()); // 流程信息-流程说明 + processSnapshot.setTaskId(taskId); // 任务id + processSnapshot.setHandleText(handleText); // 流程审批信息-备注 + processSnapshot.setHandleFile(handleFile); // 流程审批信息-附件 + processSnapshot.setUserId(userId); // 用户id + processSnapshot.setInfoJsonStr(processInfoVO.getInfoJsonStr());//草稿信息json字符串 + processSnapshotService.save(processSnapshot); + } + @Override public ProcessInfoVO getDraftByDraftId(String draftId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessApprovalRecordService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessApprovalRecordService.java index 1ec989c6..a3d26b78 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessApprovalRecordService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessApprovalRecordService.java @@ -1,5 +1,6 @@ package com.jero.modules.activiti.service; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -12,6 +13,8 @@ import com.jero.modules.activiti.entity.ProcessApprovalRecord; import com.jero.modules.activiti.enums.FinishFlagEnum; import com.jero.modules.activiti.enums.ProcessTypeEnum; import com.jero.modules.activiti.mapper.ProcessApprovalRecordMapper; +import com.jero.modules.activiti.process.common.entity.ProcessSnapshot; +import com.jero.modules.activiti.process.common.service.ProcessSnapshotService; import com.jero.modules.activiti.process.esInitChange.entity.EsInitChangeConstant; import com.jero.modules.laws.common.util.CurrentUserUtil; import org.apache.commons.lang3.StringUtils; @@ -21,7 +24,9 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; /** * @@ -36,6 +41,9 @@ public class ProcessApprovalRecordService extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ProcessApprovalRecord::getTaskId,taskId); @@ -60,7 +68,17 @@ public class ProcessApprovalRecordService extends ServiceImpl pageList = this.page(page, wrapper); List records = pageList.getRecords(); + List taskIdList = records.stream().map(ProcessApprovalRecord::getTaskId).collect(Collectors.toList()); + LambdaQueryWrapper processSnapshotWrapper = new LambdaQueryWrapper<>(); + processSnapshotWrapper.in(ProcessSnapshot::getTaskId, taskIdList); + List snapshotList = processSnapshotService.list(processSnapshotWrapper); + Map> snapshotMap = snapshotList.stream().collect(Collectors.groupingBy(ProcessSnapshot::getTaskId)); for (ProcessApprovalRecord record : records) { + List processSnapshots = snapshotMap.get(record.getTaskId()); + if (CollUtil.isNotEmpty(processSnapshots)) { + ProcessSnapshot snapshot = processSnapshots.get(0); + record.setSnapshotId(snapshot.getId()); + } String userId = record.getUserId(); String taskAcceptor = sysBaseAPI.translateUserRealNameFromTable(userId); String delegateBy = record.getDelegateBy();