feat: 法规符合性排查流程-审批

This commit is contained in:
2024-07-05 16:10:31 +08:00
parent 0fc132ebf5
commit 6a1b786b48
5 changed files with 71 additions and 604 deletions
@@ -6,7 +6,6 @@ package com.jero.modules.activiti.common;
*/
public class ActivitiCommon {
public static final String PASS = "pass";
public static final String MAIN_INSTANCE_ID = "mainInstanceId";
public static final String PARENT_TASK_ID = "parentTaskId";
}
@@ -31,7 +31,6 @@ import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.identity.Authentication;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
@@ -150,18 +149,6 @@ public class ActFlowCommonService {
processApprovalRecordService.updateById(approvalRecord);
}
public void updateApprovalInfoWithoutNodeId(String taskId) {
ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId);
if (approvalRecord == null) {
return;
}
approvalRecord.setCommitText(null);
approvalRecord.setCommitFile(null);
approvalRecord.setFinishFlag(FinishFlagEnum.COMPLETE.getValue());
approvalRecord.setEndTime(new Date());
processApprovalRecordService.updateById(approvalRecord);
}
public ProcessApprovalRecord getNodeIdByTaskId(String taskId) {
return processApprovalRecordService.getToDoByTaskId(taskId);
}
@@ -412,36 +399,6 @@ public class ActFlowCommonService {
processApprovalRecordService.update(updateWrapper);
}
/**
* 根据指定的执行Id递归获取所有子执行Id
*
* @param executionId 指定的执行Id
* @return 所有子执行Id的列表
*/
public List<String> getAllChildExecutionIds(String executionId) {
List<String> childExecutionIds = new ArrayList<>();
Execution execution = runtimeService.createExecutionQuery().executionId(executionId).singleResult();
if (execution != null) {
String processInstanceId = execution.getProcessInstanceId();
collectChildExecutionIds(processInstanceId, executionId, childExecutionIds);
}
return childExecutionIds;
}
private void collectChildExecutionIds(String processInstanceId, String parentExecutionId, List<String> collectedIds) {
List<Execution> childExecutions = runtimeService.createExecutionQuery()
.processInstanceId(processInstanceId)
.list();
for (Execution childExecution : childExecutions) {
if (childExecution.getSuperExecutionId() != null && childExecution.getSuperExecutionId().equals(parentExecutionId)) {
collectedIds.add(childExecution.getId());
// 递归调用,以获取更深层次的子流程执行Id
collectChildExecutionIds(processInstanceId, childExecution.getId(), collectedIds);
}
}
}
public String getOriginTaskAssignee(String taskId) {
ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId);
return approvalRecord.getOriginUserId();
@@ -2,9 +2,7 @@ package com.jero.modules.activiti.process.fb.service;
import com.jero.modules.activiti.process.fb.dto.ProcessDTO;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import org.activiti.engine.runtime.ProcessInstance;
import java.util.List;
import java.util.Map;
/**
@@ -22,13 +20,6 @@ public interface IProcessHandleService {
String startChildrenProcess(ProcessInfoVO processInfoVO);
/**
* @Author: liao
* @Date: 2023/11/6 11:56
* @Description: 审批
**/
void approveTask(ProcessInfoVO processInfoVO, boolean pass);
/**
* @Author: liao
* @Date: 2023/11/10 9:44
@@ -50,12 +41,6 @@ public interface IProcessHandleService {
**/
void isMyTask(String taskId);
/**
* 超期判断
* @param taskId
*/
void isOverDue(String taskId);
/**
* @Author: liao
* @Date: 2023/11/6 14:22
@@ -70,12 +55,6 @@ public interface IProcessHandleService {
**/
void updateProcessAll(ProcessInfoVO processInfoVO);
/**
* @Author: caihaohan
* @Date: 2024/1/15 10:45
* @Description: 更新流程总表
**/
void updateProcessAllCustomUserId(ProcessInfoVO processInfoVO, String userId);
/**
* @Author: liao
@@ -84,23 +63,6 @@ public interface IProcessHandleService {
**/
void updateApprovalRecord(ProcessInfoVO processInfoVO);
/**
* @Author: liao
* @Date: 2023/11/3 10:29
* @Description: 保存为草稿
**/
String saveToDraft(ProcessInfoVO processInfoVO);
void saveToDraftCustomUserId(ProcessInfoVO processInfoVO, String userId);
/**
* @Author: yjz
* @Date: 2023/11/3 10:29
* @Description: 保存为草稿
**/
void saveToDraft2(ProcessInfoVO processInfoVO);
/**
* @Author: liao
* @Date: 2023/11/3 11:13
@@ -108,10 +70,6 @@ public interface IProcessHandleService {
**/
String getDefinitionIdByKey(String definitionKey);
ProcessInfoVO getDraftByDraftId(String draftId);
ProcessInfoVO getDraftByTaskId(String taskId);
/**
* @Author: liao
* @Date: 2023/11/20 16:48
@@ -119,40 +77,4 @@ public interface IProcessHandleService {
**/
void deleteMyDraft(String taskId, String businessId, Integer processType);
/**
* @Author: caihaohan
* @Date: 2024/1/15 16:48
* @Description: 删除自己的草稿
**/
void deleteMyDraftCustomUserId(String taskId, String businessId, Integer processType, String userId);
/**
* @Author: liao
* @Date: 2023/11/8 11:16
* @Description: 查询流程信息
**/
ProcessInfoVO queryProcessInfoVO(String draftId, String processInstanceId, String taskId);
/**
* @Author: liao
* @Date: 2023/11/8 11:16
* @Description: 查询流程信息
**/
ProcessInfoVO queryProcessInfoVO(String draftId, String processInstanceId, String taskId, String projectId);
/**
* @Author: liao
* @Date: 2023/11/8 13:36
* @Description: 判断流程是否结束
**/
Boolean isProcessFinish(String processInstanceId);
/**
* @Author: liao
* @Date: 2023/11/14 11:37
* @Description: 获取全部子流程实例
**/
List<ProcessInstance> subProcessList(String superProcessInstanceId, String subProcessDefinitionKey);
void saveNodeUserLink(String processInstanceId, String nodeId, List<String> userIdList);
}
@@ -1,30 +1,25 @@
package com.jero.modules.activiti.process.fb.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.entity.ProcessNodeLink;
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.service.ProcessDraftService;
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;
import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO;
import com.jero.modules.activiti.process.fb.dto.ProcessDTO;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.service.*;
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.activiti.service.WorkCenterService;
import com.jero.modules.laws.common.util.CurrentUserUtil;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
@@ -32,7 +27,6 @@ import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -54,16 +48,12 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
@Resource
private TaskService taskService;
@Resource
private HistoryService historyService;
@Resource
private RepositoryService repositoryService;
@Resource
private ProcessAllService processAllService; // 流程实例总表
@Resource
private ProcessApprovalRecordService processApprovalRecordService; // 任务审批表
@Resource
private ProcessNodeService processNodeService;
@Resource
private ProcessNodeLinkService processNodeLinkService; // 流程实例节点关联用户表
@Resource
private ProcessDraftService processDraftService; // 流程草稿表
@@ -169,86 +159,6 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
return processInstanceId;
}
/**
* @Author: liao
* @Date: 2023/11/6 11:56
* @Description: 审批
**/
@Override
public void approveTask(ProcessInfoVO processInfoVO, boolean pass) {
// 判断是否是自己的任务
BasicTaskInfoDTO basicTaskInfoDTO = processInfoVO.getBasicTaskInfoDTO();
BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO();
String taskId = basicTaskInfoDTO.getTaskId();
isMyTask(taskId);
// 保存
updateProcessAll(processInfoVO);
updateApprovalRecord(processInfoVO);
// 删除自己的草稿
deleteMyDraft(taskId, processInfoVO.getBusinessId(), basicProcessInfoDTO.getProcessType());
ProcessDTO processDTO = getProcessDTO(taskId);
String processInstanceId = processDTO.getProcessInstanceId();
String processDefinitionId = processDTO.getProcessDefinitionId();
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
Map<String, Object> variables = setProcessVariables(userInfoMap);
if (!Objects.isNull(userInfoMap) && !userInfoMap.isEmpty()) {
// 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userInfoMap);
}
if (pass) { // 通过
variables.put("pass", true);
basicTaskInfoDTO.setCommitFlag(CommitFlagEnum.PASS.getValue());
} else { // 驳回
variables.put("pass", false);
basicTaskInfoDTO.setCommitFlag(CommitFlagEnum.REJECT.getValue());
}
// 更新审批记录表
updateApprovalRecord(processInfoVO);
runtimeService.setVariablesLocal(processInstanceId, variables);
// 完成任务
taskService.complete(taskId);
System.out.println("================================启动流程=================================");
System.out.println("流程定义id: " + processDefinitionId);
System.out.println("流程实例id: " + processInstanceId);
System.out.println("任务id: " + taskId);
System.out.println("变量: " + variables);
System.out.println("=======================================================================");
if (!pass) {
log.info("==========流程驳回,若驳回到的节点之前经过转办,则驳回到转办人手里方法开始==========");
// 驳回的节点
List<ProcessApprovalRecord> processApprovalRecordList = processApprovalRecordService.list(
new LambdaQueryWrapper<ProcessApprovalRecord>()
.eq(ProcessApprovalRecord::getProcessInstanceId, processInstanceId)
.orderByDesc(ProcessApprovalRecord::getCreateTime));
if (!processApprovalRecordList.isEmpty()) {
ProcessApprovalRecord processApprovalRecord = processApprovalRecordList.get(0);
processApprovalRecordList.remove(0);
Optional<ProcessApprovalRecord> optional = processApprovalRecordList.stream().filter(v ->
v.getTaskName().equals(processApprovalRecord.getTaskName())
&& v.getNodeId().equals(processApprovalRecord.getNodeId())).findFirst();
optional.ifPresent(v -> {
// 是否转办过
if (StringUtils.isNotBlank(v.getTransferBy())) {
// 转办给转办人
taskService.setAssignee(processApprovalRecord.getTaskId(), v.getUserId());
// 更新流程审批记录表
processApprovalRecordService.update(
new LambdaUpdateWrapper<ProcessApprovalRecord>()
.eq(ProcessApprovalRecord::getTaskId, processApprovalRecord.getTaskId())
.set(ProcessApprovalRecord::getUserId, v.getUserId())
.set(ProcessApprovalRecord::getOriginUserId, v.getUserId()));
}
});
}
log.info("==========流程驳回,若驳回到的节点之前经过转办,则驳回到转办人手里方法结束==========");
}
}
/**
* @Author: liao
* @Date: 2023/11/10 9:54
@@ -322,17 +232,6 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
//}
}
@Override
public void isOverDue(String taskId) {
// 判断是否超期数据
ProcessApprovalRecord processApprovalRecord = processApprovalRecordService.getOne(
new LambdaQueryWrapper<ProcessApprovalRecord>()
.eq(ProcessApprovalRecord::getTaskId, taskId), false);
if (!Objects.isNull(processApprovalRecord)
&& YesOrNoEnum.YES.getValue().equals(processApprovalRecord.getOverDue())){
throw new JeroBootException(ResultCommon.OVER_DUE);
}
}
/**
* @Author: liao
@@ -379,27 +278,6 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
processAllService.updateById(process);
}
/**
* @Author: liao
* @Date: 2023/11/3 10:46
* @Description: 更新流程总表
**/
@Override
public void updateProcessAllCustomUserId(ProcessInfoVO processInfoVO, String userId) {
BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO();
ProcessAll process = processAllService.getByProcessInstanceId(basicProcessInfoDTO.getProcessInstanceId());
if (Objects.isNull(process)) {
process = new ProcessAll();
}
process.setPrcName(basicProcessInfoDTO.getProcessName()); // 流程名称
process.setMes(basicProcessInfoDTO.getProcessDescription()); // 流程说明
process.setPrcMes(basicProcessInfoDTO.getProcessDescription()); // 流程说明
process.setDueTime(basicProcessInfoDTO.getProcessDueDate()); // 流程截止时间
process.setPrcType(basicProcessInfoDTO.getProcessType()); // 流程类型
process.setProjectId(processInfoVO.getBusinessId()); // 业务id
processAllService.updateById(process);
}
/**
* @Author: liao
* @Date: 2023/11/3 10:53
@@ -421,105 +299,6 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
processApprovalRecordService.updateById(approvalRecord);
}
/**
* @Author: liao
* @Date: 2023/11/3 10:30
* @Description: 保存为草稿
**/
@Override
public String saveToDraft(ProcessInfoVO processInfoVO) {
return this.saveToDraft(processInfoVO, CurrentUserUtil.getId());
}
@Override
public void saveToDraftCustomUserId(ProcessInfoVO processInfoVO, String userId) {
this.saveToDraft(processInfoVO, userId);
}
private String saveToDraft(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());
}
// 保存
updateProcessAllCustomUserId(processInfoVO, userId);
updateApprovalRecord(processInfoVO);
// 删除自己的草稿
ProcessDraft processDraft = new ProcessDraft();
String draftId = processInfoVO.getDraftId();
if (StringUtils.isNotBlank(draftId)) {
processDraft.setId(draftId);
//processDraftService.removeById(draftId);
}
// 根据是否有taskId区分保存来源(待办、草稿)
processDraft.setProjectId(processInfoVO.getBusinessId()); // 业务id
processDraft.setProcessInstanceId(basicProcessInfoDTO.getProcessInstanceId()); // 流程实例id
processDraft.setPrcName(basicProcessInfoDTO.getProcessName()); // 流程名称
processDraft.setPrcType(basicProcessInfoDTO.getProcessType()); // 流程类型
processDraft.setProcessDueDate(basicProcessInfoDTO.getProcessDueDate()); // 流程信息-截止日期
processDraft.setProcessDescription(basicProcessInfoDTO.getProcessDescription()); // 流程信息-流程说明
processDraft.setTaskId(taskId); // 任务id
processDraft.setHandleText(handleText); // 流程审批信息-备注
processDraft.setHandleFile(handleFile); // 流程审批信息-附件
processDraft.setUserId(userId); // 用户id
processDraft.setInfoJsonStr(processInfoVO.getInfoJsonStr());//草稿信息json字符串
processDraft.setSaveSource(processInfoVO.getSaveSource());//来源(启动流程时有用,用于保存初始业务信息用于强制驳回)
processDraftService.saveOrUpdate(processDraft);
return processDraft.getId();
}
@Override
public ProcessInfoVO getDraftByDraftId(String draftId) {
LambdaQueryWrapper<ProcessDraft> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessDraft::getUserId, CurrentUserUtil.getId());
wrapper.eq(ProcessDraft::getId, draftId);
ProcessDraft processDraft = processDraftService.getOne(wrapper);
return generateProcessInfoByDraft(processDraft);
}
@NotNull
private ProcessInfoVO generateProcessInfoByDraft(ProcessDraft processDraft) {
ProcessInfoVO processInfoVO = new ProcessInfoVO();
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
BasicTaskInfoDTO basicTaskInfoDTO = new BasicTaskInfoDTO();
processInfoVO.setBusinessId(processDraft.getProjectId()); // 业务id
basicProcessInfoDTO.setProcessInstanceId(processDraft.getProcessInstanceId()); // 流程实例id
basicProcessInfoDTO.setProcessName(processDraft.getPrcName()); // 流程名称
basicProcessInfoDTO.setProcessType(processDraft.getPrcType()); // 流程类型
basicProcessInfoDTO.setProcessDueDate(processDraft.getProcessDueDate()); // 流程信息-截止日期
basicProcessInfoDTO.setProcessDescription(processDraft.getProcessDescription()); // 流程信息-流程说明
basicTaskInfoDTO.setTaskId(processDraft.getTaskId()); // 任务id
basicTaskInfoDTO.setHandleText(processDraft.getHandleText()); // 流程审批信息-备注
basicTaskInfoDTO.setHandleFile(processDraft.getHandleFile()); // 流程审批信息-附件
processInfoVO.setInfoJsonStr(processDraft.getInfoJsonStr());//草稿信息json字符串
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
processInfoVO.setBasicTaskInfoDTO(basicTaskInfoDTO);
return processInfoVO;
}
@Override
public ProcessInfoVO getDraftByTaskId(String taskId) {
LambdaQueryWrapper<ProcessDraft> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessDraft::getUserId, CurrentUserUtil.getId());
wrapper.eq(ProcessDraft::getTaskId, taskId);
ProcessDraft processDraft = processDraftService.getOne(wrapper);
return processDraft != null ? generateProcessInfoByDraft(processDraft) : null;
}
/**
* @Author: liao
* @Date: 2023/11/9 16:46
@@ -547,32 +326,6 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
}
}
/**
* @Author: caihaohan
* @Date: 2024/1/15 16:46
* @Description: 删除自己的草稿
**/
@Override
public void deleteMyDraftCustomUserId(String taskId, String businessId, Integer processType, String userId) {
LambdaQueryWrapper<ProcessDraft> deleteWrapper = new LambdaQueryWrapper<>();
deleteWrapper.eq(ProcessDraft::getUserId, userId);
if (processType != null) {
deleteWrapper.eq(ProcessDraft::getPrcType, processType);
}
if (StringUtils.isNotBlank(businessId)) {
deleteWrapper.eq(ProcessDraft::getProjectId, businessId);
}
if (StringUtils.isNotBlank(taskId)) {
deleteWrapper.eq(ProcessDraft::getTaskId, taskId);
}
deleteWrapper.and(qw -> qw.ne(ProcessDraft::getSaveSource, DraftCommon.INITIAL_SOURCE)
.or().isNull(ProcessDraft::getSaveSource));
List<ProcessDraft> processDraftList = processDraftService.list(deleteWrapper);
for (ProcessDraft processDraft : processDraftList) {
processDraftService.removeById(processDraft.getId());
}
}
/**
* @Author: liao
* @Date: 2023/11/3 11:14
@@ -586,234 +339,4 @@ public class ProcessHandleServiceImpl implements IProcessHandleService {
.singleResult().getId();
}
/**
* @Author: liao
* @Date: 2023/11/8 11:16
* @Description: 查询流程信息
**/
@Override
public ProcessInfoVO queryProcessInfoVO(String draftId, String processInstanceId, String taskId, String projectId) {
if (StringUtils.isBlank(draftId) && StringUtils.isBlank(taskId)) {
throw new JeroBootException(ResultCommon.NO_PERMISSION);
}
if (StringUtils.isNotBlank(taskId)) {
isOverDue(taskId);
isMyTask(taskId);
}
ProcessInfoVO processInfoVO = new ProcessInfoVO();
// 流程信息
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
// 审批信息
BasicTaskInfoDTO basicTaskInfoDTO = new BasicTaskInfoDTO();
processInfoVO.setBasicTaskInfoDTO(basicTaskInfoDTO);
// 先查询草稿表是否存储
ProcessDraft processDraft = processDraftService.getById(draftId);
if (!Objects.isNull(processDraft)) {
// 流程信息
basicProcessInfoDTO.setProcessInstanceId(processDraft.getProcessInstanceId()); // 流程实例id
basicProcessInfoDTO.setProcessName(processDraft.getPrcName()); // 流程名称
basicProcessInfoDTO.setProcessType(processDraft.getPrcType()); // 流程类型
basicProcessInfoDTO.setProcessDueDate(processDraft.getProcessDueDate()); // 流程信息-截止日期
basicProcessInfoDTO.setProcessDescription(processDraft.getProcessDescription()); // 流程信息
// 流程审批信息
basicTaskInfoDTO.setHandleFile(processDraft.getHandleFile());
basicTaskInfoDTO.setHandleText(processDraft.getHandleText());
basicTaskInfoDTO.setTaskId(processDraft.getTaskId());
processInfoVO.setInfoJsonStr(processDraft.getInfoJsonStr());
} else {
// 流程信息
ProcessAll processAll = processAllService.getOne(new LambdaQueryWrapper<ProcessAll>()
.eq(ProcessAll::getProjectId, projectId)
.orderByDesc(ProcessAll::getCreateTime), false);
if (!Objects.isNull(processAll)) {
basicProcessInfoDTO.setProcessInstanceId(processAll.getProcessInstanceId());
basicProcessInfoDTO.setProcessType(processAll.getPrcType());
basicProcessInfoDTO.setProcessName(processAll.getPrcName());
basicProcessInfoDTO.setProcessDescription(processAll.getPrcMes());
basicProcessInfoDTO.setProcessDueDate(processAll.getDueTime());
}
// 流程审批信息
ProcessApprovalRecord processApprovalRecord = processApprovalRecordService.getOne(new LambdaQueryWrapper<ProcessApprovalRecord>()
.eq(ProcessApprovalRecord::getProjectId, projectId)
.eq(StringUtils.isNotBlank(taskId), ProcessApprovalRecord::getTaskId, taskId));
if (!Objects.isNull(processApprovalRecord)) {
basicTaskInfoDTO.setTaskId(processApprovalRecord.getTaskId());
basicTaskInfoDTO.setHandleText(processApprovalRecord.getCommitText());
basicTaskInfoDTO.setHandleFile(processApprovalRecord.getCommitFile());
}
}
processInfoVO.setDraftId(draftId);
processInfoVO.setBusinessId(projectId);
return processInfoVO;
}
@Override
public void saveToDraft2(ProcessInfoVO processInfoVO) {
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());
}
// 保存
updateProcessAll(processInfoVO);
updateApprovalRecord(processInfoVO);
// 删除自己的草稿
String draftId = processInfoVO.getDraftId();
if (StringUtils.isNotBlank(draftId)) {
processDraftService.removeById(draftId);
}
deleteMyDraft(taskId, processInfoVO.getBusinessId(), basicProcessInfoDTO.getProcessType());
// 根据是否有taskId区分保存来源(待办、草稿)
BasicTaskInfoDTO basicTaskInfoDTO1 = processInfoVO.getBasicTaskInfoDTO();
// 非发起节点不保存到草稿
if (StringUtils.isBlank(basicTaskInfoDTO1.getTaskId())) {
ProcessDraft processDraft = new ProcessDraft();
processDraft.setProjectId(processInfoVO.getBusinessId()); // 业务id
processDraft.setProcessInstanceId(basicProcessInfoDTO.getProcessInstanceId()); // 流程实例id
processDraft.setPrcName(basicProcessInfoDTO.getProcessName()); // 流程名称
processDraft.setPrcType(basicProcessInfoDTO.getProcessType()); // 流程类型
processDraft.setProcessDueDate(basicProcessInfoDTO.getProcessDueDate()); // 流程信息-截止日期
processDraft.setProcessDescription(basicProcessInfoDTO.getProcessDescription()); // 流程信息-流程说明
processDraft.setTaskId(taskId); // 任务id
processDraft.setHandleText(handleText); // 流程审批信息-备注
processDraft.setHandleFile(handleFile); // 流程审批信息-附件
processDraft.setUserId(CurrentUserUtil.getId()); // 用户id
processDraft.setInfoJsonStr(processInfoVO.getInfoJsonStr());//草稿信息json字符串
processDraft.setSaveSource(processInfoVO.getSaveSource());//来源(启动流程时有用,用于保存初始业务信息用于强制驳回)
processDraftService.save(processDraft);
}
}
/**
* @Author: liao
* @Date: 2023/11/8 11:16
* @Description: 查询流程信息
**/
@Override
public ProcessInfoVO queryProcessInfoVO(String draftId, String processInstanceId, String taskId) {
if (StringUtils.isBlank(draftId) && StringUtils.isBlank(taskId)) {
throw new JeroBootException(ResultCommon.NO_PERMISSION);
}
if (StringUtils.isNotBlank(taskId)) {
isMyTask(taskId);
}
ProcessInfoVO processInfoVO = new ProcessInfoVO();
// 流程信息
BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO();
processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO);
// 审批信息
BasicTaskInfoDTO basicTaskInfoDTO = new BasicTaskInfoDTO();
processInfoVO.setBasicTaskInfoDTO(basicTaskInfoDTO);
// 流程信息
if (StringUtils.isNotBlank(processInstanceId)) {
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
if (!Objects.isNull(processAll)) {
basicProcessInfoDTO.setProcessInstanceId(processAll.getProcessInstanceId());
basicProcessInfoDTO.setProcessType(processAll.getPrcType());
basicProcessInfoDTO.setProcessName(processAll.getPrcName());
basicProcessInfoDTO.setProcessDescription(processAll.getMes());
basicProcessInfoDTO.setProcessDueDate(processAll.getDueTime());
processInfoVO.setBusinessId(processAll.getProjectId());
}
}
// 审批信息
if (StringUtils.isNotBlank(draftId)) {
ProcessDraft processDraft = processDraftService.getById(draftId);
if (!CurrentUserUtil.getId().equals(processDraft.getUserId())) {
throw new JeroBootException(ResultCommon.NO_PERMISSION);
}
if (!Objects.isNull(processDraft)) {
basicTaskInfoDTO.setTaskId(processDraft.getTaskId());
basicTaskInfoDTO.setHandleText(processDraft.getHandleText());
basicTaskInfoDTO.setHandleFile(processDraft.getHandleFile());
processInfoVO.setDraftId(draftId);
basicProcessInfoDTO.setProcessType(processDraft.getPrcType());
basicProcessInfoDTO.setProcessName(processDraft.getPrcName());
basicProcessInfoDTO.setProcessDescription(processDraft.getProcessDescription());
basicProcessInfoDTO.setProcessDueDate(processDraft.getProcessDueDate());
processInfoVO.setInfoJsonStr(processDraft.getInfoJsonStr());
}
}
return processInfoVO;
}
/**
* @Author: liao
* @Date: 2023/11/8 13:37
* @Description: 判断流程是否结束
**/
@Override
public Boolean isProcessFinish(String processInstanceId) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
if (processInstance == null) {
return true;
}
return false;
}
/**
* @Author: liao
* @Date: 2023/11/14 11:38
* @Description: 获取全部子流程实例
**/
@Override
public List<ProcessInstance> subProcessList(String superProcessInstanceId, String subProcessDefinitionKey) {
return runtimeService.createProcessInstanceQuery()
.superProcessInstanceId(superProcessInstanceId)
.processDefinitionKey(subProcessDefinitionKey)
.list();
}
/**
* 保存流程定义节点用户
*
* @param processInstanceId
* @param nodeId
* @param userIdList
*/
@Override
public void saveNodeUserLink(String processInstanceId, String nodeId, List<String> userIdList) {
String processDefinitionId = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
LambdaQueryWrapper<ProcessNode> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessNode::getProcessDefinitionId, processDefinitionId);
queryWrapper.eq(ProcessNode::getIsView, 1);
queryWrapper.eq(ProcessNode::getXmlNodeId, nodeId);
ProcessNode processNode = processNodeService.getOne(queryWrapper, false);
if (processNode == null) {
return;
}
List<ProcessNodeLink> linkList = new ArrayList<>();
userIdList.forEach(userId -> {
ProcessNodeLink link = new ProcessNodeLink();
link.setProcessDefinitionId(processDefinitionId);
link.setProcessNodeId(processNode.getId());
link.setProcessInstanceId(processInstanceId);
link.setUserId(userId);
linkList.add(link);
});
if (!linkList.isEmpty()) {
processNodeLinkService.saveBatch(linkList, linkList.size());
}
}
}
@@ -1,7 +1,11 @@
package com.jero.modules.activiti.process.standardComplianceCheck.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.common.ActivitiCommon;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
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;
@@ -16,10 +20,14 @@ import com.jero.modules.activiti.process.standardComplianceCheck.entity.ProcessS
import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.ProcessSccVO;
import com.jero.modules.activiti.process.standardComplianceCheck.mapper.ProcessStandardComplianceCheckMapper;
import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckService;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.sys.utils.UserUtils;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -27,6 +35,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.jero.modules.activiti.common.ActivitiCommon.PASS;
import static com.jero.modules.activiti.process.standardComplianceCheck.common.ProcessStandardComplianceCheckConstants.*;
/**
@@ -47,6 +56,15 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
@Resource
private ProcessNodeLinkService processNodeLinkService;
@Resource
private TaskService taskService;
@Resource
private ProcessAllService processAllService;
@Resource
private RuntimeService runtimeService;
@Override
public void startProcess(ProcessInfoVO<ProcessSccVO> processInfoVO) {
// 流程Key
@@ -103,7 +121,39 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
@Override
public void approveTask(ProcessInfoVO<ProcessSccVO> processInfoVO, boolean pass) {
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
String taskId = processTask.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);
// 获取当前流程
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
String processDefinitionId = processInstance.getProcessDefinitionId();
Map<String, Object> userMap = new HashMap<>();
Map<String, Object> flowUser;
// 更新审批表为完成,填充数据
actFlowCommonService.updateApprovalInfo(processTask, taskId);
String curUserId;
switch (xmlNodeId) {
}
// 转办修改流程变量逻辑
switch (xmlNodeId) {
}
runtimeService.setVariable(processInstanceId, PASS, pass);
// 审批节点
actFlowCommonService.completeTask(taskId, userId);
}
@Override
@@ -113,7 +163,23 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
@Override
public ProcessInfoVO<ProcessSccVO> getHandleData(String taskId) {
return null;
if (!actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("任务不存在");
}
ProcessInfoVO<ProcessSccVO> result = new ProcessInfoVO<>();
String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
String executionId = taskService.createTaskQuery().taskId(taskId).singleResult().getExecutionId();
// 使用流程引擎根据taskId找到流程实例Id
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
// 获取流程通用数据
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
ProcessApprovalRecord record = actFlowCommonService.getNodeIdByTaskId(taskId);
String xmlNodeId = record.getNodeId();
// 设置流程信息
switch (xmlNodeId) {
//TODO
}
return result;
}
@Override