feat: 快照功能后端支持

This commit is contained in:
2024-07-22 13:55:40 +08:00
parent b47ff56c87
commit 2a012f4972
10 changed files with 264 additions and 0 deletions
@@ -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<ProcessSnapshot> snapshotHandle(@RequestParam("snapshotId") @ApiParam("快照Id") String snapshotId) {
return Result.OK(actFlowCommonService.getExistSnapshot(snapshotId));
}
}
@@ -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;
}
@@ -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;
}
@@ -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<ProcessSnapshot> {
}
@@ -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<ProcessSnapshot> draftWrapper = new LambdaQueryWrapper<>();
draftWrapper.eq(ProcessSnapshot::getId, snapshotId);
return processSnapshotService.getOne(draftWrapper);
}
}
@@ -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<ProcessSnapshot> {
}
@@ -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<ProcessSnapshotMapper, ProcessSnapshot>
implements ProcessSnapshotService{
}
@@ -153,4 +153,6 @@ public interface IProcessHandleService {
List<ProcessInstance> subProcessList(String superProcessInstanceId, String subProcessDefinitionKey);
void saveNodeUserLink(String processInstanceId, String nodeId, List<String> userIdList);
void saveToSnapshot(ProcessInfoVO processInfoVO, String userId);
}
@@ -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
@@ -467,6 +471,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<ProcessDraft> wrapper = new LambdaQueryWrapper<>();
@@ -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<ProcessApprovalRec
@Resource
private ProcessAllService processAllService;
@Resource
private ProcessSnapshotService processSnapshotService;
public ProcessApprovalRecord getToDoByTaskId(String taskId){
LambdaQueryWrapper<ProcessApprovalRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessApprovalRecord::getTaskId,taskId);
@@ -60,7 +68,17 @@ public class ProcessApprovalRecordService extends ServiceImpl<ProcessApprovalRec
wrapper.last("ORDER BY IF(ISNULL(create_time), 1, 0) DESC ,create_time DESC, end_time DESC");
Page<ProcessApprovalRecord> pageList = this.page(page, wrapper);
List<ProcessApprovalRecord> records = pageList.getRecords();
List<String> taskIdList = records.stream().map(ProcessApprovalRecord::getTaskId).collect(Collectors.toList());
LambdaQueryWrapper<ProcessSnapshot> processSnapshotWrapper = new LambdaQueryWrapper<>();
processSnapshotWrapper.in(ProcessSnapshot::getTaskId, taskIdList);
List<ProcessSnapshot> snapshotList = processSnapshotService.list(processSnapshotWrapper);
Map<String, List<ProcessSnapshot>> snapshotMap = snapshotList.stream().collect(Collectors.groupingBy(ProcessSnapshot::getTaskId));
for (ProcessApprovalRecord record : records) {
List<ProcessSnapshot> 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();