feat: 法规符合性排查流程-审批
This commit is contained in:
@@ -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";
|
||||
}
|
||||
|
||||
-43
@@ -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();
|
||||
|
||||
-78
@@ -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);
|
||||
}
|
||||
|
||||
+4
-481
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+67
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user