|
@@ -7,25 +7,18 @@ import cn.hutool.core.util.StrUtil;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyCreateReqVO;
|
|
|
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyMyPageReqVO;
|
|
|
-import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyPageItemRespVO;
|
|
|
-import cn.iocoder.yudao.module.bpm.convert.cc.BpmProcessInstanceCopyConvert;
|
|
|
import cn.iocoder.yudao.module.bpm.dal.dataobject.cc.BpmProcessInstanceCopyDO;
|
|
|
import cn.iocoder.yudao.module.bpm.dal.mysql.cc.BpmProcessInstanceCopyMapper;
|
|
|
import cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants;
|
|
|
-import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum;
|
|
|
import cn.iocoder.yudao.module.bpm.service.candidate.BpmCandidateSourceInfo;
|
|
|
import cn.iocoder.yudao.module.bpm.service.candidate.BpmCandidateSourceInfoProcessorChain;
|
|
|
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
|
|
|
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
|
|
|
import cn.iocoder.yudao.module.bpm.service.task.cc.dto.BpmDelegateExecutionDTO;
|
|
|
-import cn.iocoder.yudao.module.bpm.util.FlowableUtils;
|
|
|
-import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
|
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
import jakarta.annotation.Resource;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.flowable.engine.RuntimeService;
|
|
|
import org.flowable.engine.delegate.DelegateExecution;
|
|
|
-import org.flowable.engine.repository.ProcessDefinition;
|
|
|
import org.flowable.engine.runtime.ProcessInstance;
|
|
|
import org.flowable.task.api.Task;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
@@ -33,14 +26,14 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.*;
|
|
|
-import java.util.stream.Collectors;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
|
|
|
|
|
/**
|
|
|
- * Flowable流程抄送实现
|
|
|
+ * 流程抄送 Service 实现类
|
|
|
*
|
|
|
* @author kyle
|
|
|
*/
|
|
@@ -61,6 +54,9 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
|
|
|
@Resource
|
|
|
@Lazy
|
|
|
private BpmTaskService bpmTaskService;
|
|
|
+ @Resource
|
|
|
+ @Lazy
|
|
|
+ private BpmProcessInstanceService bpmProcessInstanceService;
|
|
|
|
|
|
@Override
|
|
|
public boolean makeCopy(BpmCandidateSourceInfo sourceInfo) {
|
|
@@ -86,7 +82,7 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
|
|
|
// 调用
|
|
|
// 设置任务id
|
|
|
copyDO.setTaskId(sourceInfo.getTaskId());
|
|
|
- copyDO.setTaskName(FlowableUtils.getTaskNameByTaskId(sourceInfo.getTaskId()));
|
|
|
+ copyDO.setTaskName(task.getName());
|
|
|
copyDO.setProcessInstanceId(processInstanceId);
|
|
|
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
|
|
.processInstanceId(processInstanceId)
|
|
@@ -95,10 +91,9 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
|
|
|
log.warn("相关流程实例不存在 {}", sourceInfo.getTaskId());
|
|
|
return false;
|
|
|
}
|
|
|
- copyDO.setStartUserId(FlowableUtils.getStartUserIdFromProcessInstance(processInstance));
|
|
|
+ copyDO.setStartUserId(Long.parseLong(processInstance.getStartUserId()));
|
|
|
copyDO.setProcessInstanceName(processInstance.getName());
|
|
|
- ProcessDefinition processDefinition = FlowableUtils.getProcessDefinition(processInstance.getProcessDefinitionId());
|
|
|
- copyDO.setCategory(processDefinition.getCategory());
|
|
|
+ copyDO.setCategory(processInstance.getProcessDefinitionCategory());
|
|
|
copyDO.setReason(sourceInfo.getReason());
|
|
|
copyDO.setCreator(sourceInfo.getCreator());
|
|
|
copyDO.setCreateTime(LocalDateTime.now());
|
|
@@ -113,53 +108,32 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Void createProcessInstanceCopy(Long userId, BpmProcessInstanceCopyCreateReqVO reqVO) {
|
|
|
- if (!ObjectUtil.equal(reqVO.getType(), BpmTaskAssignRuleTypeEnum.USER.getType())) {
|
|
|
- throw new IllegalArgumentException("业务仅支持USER");
|
|
|
- }
|
|
|
+ public void createProcessInstanceCopy(Long userId, BpmProcessInstanceCopyCreateReqVO reqVO) {
|
|
|
+ // 1.1 校验任务存在
|
|
|
Task task = bpmTaskService.getTask(reqVO.getTaskId());
|
|
|
if (ObjectUtil.isNull(task)) {
|
|
|
throw exception(ErrorCodeConstants.TASK_NOT_EXISTS);
|
|
|
}
|
|
|
+ // 1.2 校验流程存在
|
|
|
String processInstanceId = task.getProcessInstanceId();
|
|
|
- if (StrUtil.isBlank(processInstanceId)) {
|
|
|
+ ProcessInstance processInstance = bpmProcessInstanceService.getProcessInstance(processInstanceId);
|
|
|
+ if (processInstance == null) {
|
|
|
+ log.warn("[createProcessInstanceCopy][任务({}) 对应的流程不存在]", reqVO.getTaskId());
|
|
|
throw exception(ErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS);
|
|
|
}
|
|
|
- // 在能正常审批的情况下抄送流程
|
|
|
- BpmProcessInstanceCopyDO copyDO = new BpmProcessInstanceCopyDO();
|
|
|
- // 调用
|
|
|
- // 设置任务id
|
|
|
- copyDO.setTaskId(reqVO.getTaskId());
|
|
|
- copyDO.setTaskName(FlowableUtils.getTaskNameByTaskId(reqVO.getTaskId()));
|
|
|
- copyDO.setProcessInstanceId(processInstanceId);
|
|
|
- ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
|
|
- .processInstanceId(processInstanceId)
|
|
|
- .singleResult();
|
|
|
- if (null == processInstance) {
|
|
|
- log.warn("相关流程实例不存在 {}", reqVO.getTaskId());
|
|
|
- throw exception(ErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS);
|
|
|
- }
|
|
|
- copyDO.setStartUserId(FlowableUtils.getStartUserIdFromProcessInstance(processInstance));
|
|
|
- copyDO.setProcessInstanceName(processInstance.getName());
|
|
|
- ProcessDefinition processDefinition = FlowableUtils.getProcessDefinition(processInstance.getProcessDefinitionId());
|
|
|
- copyDO.setCategory(processDefinition.getCategory());
|
|
|
- copyDO.setReason(reqVO.getReason());
|
|
|
- copyDO.setCreator(String.valueOf(userId));
|
|
|
- copyDO.setCreateTime(LocalDateTime.now());
|
|
|
- List<BpmProcessInstanceCopyDO> copyList = new ArrayList<>(reqVO.getOptions().size());
|
|
|
- for (Long copyUserId : reqVO.getOptions()) {
|
|
|
- BpmProcessInstanceCopyDO copy = BeanUtil.copyProperties(copyDO, BpmProcessInstanceCopyDO.class);
|
|
|
- copy.setUserId(copyUserId);
|
|
|
- copyList.add(copy);
|
|
|
- }
|
|
|
- processInstanceCopyMapper.insertBatch(copyList);
|
|
|
- return null;
|
|
|
+
|
|
|
+ // 2. 创建抄送流程
|
|
|
+ BpmProcessInstanceCopyDO copy = new BpmProcessInstanceCopyDO()
|
|
|
+ .setTaskId(reqVO.getTaskId()).setTaskName(task.getName())
|
|
|
+ .setProcessInstanceId(processInstanceId).setStartUserId(Long.valueOf(processInstance.getStartUserId()))
|
|
|
+ .setProcessInstanceName(processInstance.getName()).setCategory(processInstance.getProcessDefinitionCategory())
|
|
|
+ .setReason(reqVO.getReason());
|
|
|
+ processInstanceCopyMapper.insert(copy);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public PageResult<BpmProcessInstanceCopyDO> getMyProcessInstanceCopyPage(Long loginUserId, BpmProcessInstanceCopyMyPageReqVO pageReqVO) {
|
|
|
- // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页
|
|
|
- return processInstanceCopyMapper.selectPage(loginUserId, pageReqVO);
|
|
|
+ public PageResult<BpmProcessInstanceCopyDO> getMyProcessInstanceCopyPage(Long userId, BpmProcessInstanceCopyMyPageReqVO pageReqVO) {
|
|
|
+ return processInstanceCopyMapper.selectPage(userId, pageReqVO);
|
|
|
}
|
|
|
|
|
|
}
|