|
@@ -1,23 +1,29 @@
|
|
|
package cn.iocoder.yudao.module.bpm.convert.task;
|
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
|
|
|
import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
|
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
|
|
|
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceBpmnModelViewRespVO;
|
|
|
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO;
|
|
|
+import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
|
|
|
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO;
|
|
|
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO;
|
|
|
import cn.iocoder.yudao.module.bpm.event.BpmProcessInstanceStatusEvent;
|
|
|
+import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils;
|
|
|
import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils;
|
|
|
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO;
|
|
|
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO;
|
|
|
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
|
|
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
+import org.flowable.bpmn.model.BpmnModel;
|
|
|
import org.flowable.engine.history.HistoricProcessInstance;
|
|
|
import org.flowable.engine.repository.ProcessDefinition;
|
|
|
import org.flowable.engine.runtime.ProcessInstance;
|
|
|
import org.flowable.task.api.Task;
|
|
|
+import org.flowable.task.api.history.HistoricTaskInstance;
|
|
|
import org.mapstruct.Mapper;
|
|
|
import org.mapstruct.Mapping;
|
|
|
import org.mapstruct.MappingTarget;
|
|
@@ -25,6 +31,9 @@ import org.mapstruct.factory.Mappers;
|
|
|
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
+
|
|
|
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
|
|
|
|
|
|
/**
|
|
|
* 流程实例 Convert
|
|
@@ -109,4 +118,49 @@ public interface BpmProcessInstanceConvert {
|
|
|
.setStartUserId(NumberUtils.parseLong(instance.getStartUserId()));
|
|
|
}
|
|
|
|
|
|
+ default BpmProcessInstanceBpmnModelViewRespVO buildProcessInstanceBpmnModelView(HistoricProcessInstance processInstance,
|
|
|
+ List<HistoricTaskInstance> taskInstances,
|
|
|
+ BpmnModel bpmnModel,
|
|
|
+ Set<String> unfinishedTaskActivityIds,
|
|
|
+ Set<String> finishedTaskActivityIds,
|
|
|
+ Set<String> finishedSequenceFlowActivityIds,
|
|
|
+ Set<String> rejectTaskActivityIds,
|
|
|
+ Map<Long, AdminUserRespDTO> userMap,
|
|
|
+ Map<Long, DeptRespDTO> deptMap) {
|
|
|
+ BpmProcessInstanceBpmnModelViewRespVO respVO = new BpmProcessInstanceBpmnModelViewRespVO();
|
|
|
+ // 基本信息
|
|
|
+ respVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmProcessInstanceRespVO.class, o -> o
|
|
|
+ .setStatus(FlowableUtils.getProcessInstanceStatus(processInstance)))
|
|
|
+ .setStartUser(buildUser(processInstance.getStartUserId(), userMap, deptMap)));
|
|
|
+ respVO.setTasks(convertList(taskInstances, task -> BeanUtils.toBean(task, BpmTaskRespVO.class)
|
|
|
+ .setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task))
|
|
|
+ .setAssigneeUser(buildUser(task.getAssignee(), userMap, deptMap))
|
|
|
+ .setOwnerUser(buildUser(task.getOwner(), userMap, deptMap))));
|
|
|
+ respVO.setBpmnXml(BpmnModelUtils.getBpmnXml(bpmnModel));
|
|
|
+ // 进度信息
|
|
|
+ respVO.setUnfinishedTaskActivityIds(unfinishedTaskActivityIds)
|
|
|
+ .setFinishedTaskActivityIds(finishedTaskActivityIds)
|
|
|
+ .setFinishedSequenceFlowActivityIds(finishedSequenceFlowActivityIds)
|
|
|
+ .setRejectedTaskActivityIds(rejectTaskActivityIds);
|
|
|
+ return respVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ default BpmProcessInstanceRespVO.User buildUser(String userId,
|
|
|
+ Map<Long, AdminUserRespDTO> userMap,
|
|
|
+ Map<Long, DeptRespDTO> deptMap) {
|
|
|
+ if (StrUtil.isBlank(userId)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ AdminUserRespDTO user = userMap.get(NumberUtils.parseLong(userId));
|
|
|
+ if (user == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ BpmProcessInstanceRespVO.User userVO = BeanUtils.toBean(user, BpmProcessInstanceRespVO.User.class);
|
|
|
+ DeptRespDTO dept = user.getDeptId() != null ? deptMap.get(user.getDeptId()) : null;
|
|
|
+ if (dept != null) {
|
|
|
+ userVO.setDeptName(dept.getName());
|
|
|
+ }
|
|
|
+ return userVO;
|
|
|
+ }
|
|
|
+
|
|
|
}
|