update 优化 !pr164 代码结构与修复一些问题

This commit is contained in:
疯狂的狮子Li
2024-06-03 16:20:43 +08:00
parent 992adc8589
commit bc05aabd5e
40 changed files with 198 additions and 380 deletions

View File

@@ -11,9 +11,9 @@ import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.workflow.api.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.api.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.api.domain.bo.TaskUrgingBo;
import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.bo.TaskUrgingBo;
import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
import org.dromara.workflow.service.IActProcessInstanceService;

View File

@@ -1,4 +1,4 @@
package org.dromara.workflow.testleave.controller;
package org.dromara.workflow.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
@@ -15,9 +15,9 @@ import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.workflow.testleave.domain.bo.TestLeaveBo;
import org.dromara.workflow.testleave.domain.vo.TestLeaveVo;
import org.dromara.workflow.testleave.service.ITestLeaveService;
import org.dromara.workflow.domain.bo.TestLeaveBo;
import org.dromara.workflow.domain.vo.TestLeaveVo;
import org.dromara.workflow.service.ITestLeaveService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

View File

@@ -1,4 +1,4 @@
package org.dromara.workflow.testleave.domain;
package org.dromara.workflow.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

View File

@@ -0,0 +1,43 @@
package org.dromara.workflow.domain.bo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 流程实例请求对象
*
* @author may
*/
@Data
public class ProcessInstanceBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程名称
*/
private String name;
/**
* 流程key
*/
private String key;
/**
* 任务发起人
*/
private String startUserId;
/**
* 业务id
*/
private String businessKey;
/**
* 模型分类
*/
private String categoryCode;
}

View File

@@ -0,0 +1,31 @@
package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import java.io.Serial;
import java.io.Serializable;
/**
* 流程实例作废请求对象
*
* @author may
*/
@Data
public class ProcessInvalidBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 业务id
*/
@NotBlank(message = "业务id不能为空", groups = {AddGroup.class})
private String businessKey;
/**
* 作废原因
*/
private String deleteReason;
}

View File

@@ -0,0 +1,34 @@
package org.dromara.workflow.domain.bo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 任务催办
*
* @author may
*/
@Data
public class TaskUrgingBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程实例id
*/
private String processInstanceId;
/**
* 消息类型
*/
private List<String> messageType;
/**
* 催办内容(为空默认系统内置信息)
*/
private String message;
}

View File

@@ -1,4 +1,4 @@
package org.dromara.workflow.testleave.domain.bo;
package org.dromara.workflow.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.workflow.testleave.domain.TestLeave;
import org.dromara.workflow.domain.TestLeave;
import java.util.Date;

View File

@@ -1,11 +1,10 @@
package org.dromara.workflow.testleave.domain.vo;
package org.dromara.workflow.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.workflow.api.domain.dto.BusinessInstanceDTO;
import org.dromara.workflow.testleave.domain.TestLeave;
import org.dromara.workflow.domain.TestLeave;
import java.io.Serial;
import java.io.Serializable;
@@ -68,10 +67,4 @@ public class TestLeaveVo implements Serializable {
@ExcelProperty(value = "状态")
private String status;
/**
* 业务与流程实例关联对象
*/
private BusinessInstanceDTO businessInstanceDTO;
}

View File

@@ -1,13 +1,8 @@
package org.dromara.workflow.dubbo;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.workflow.api.domain.RemoteWorkflowService;
import org.dromara.workflow.api.domain.dto.BusinessInstanceDTO;
import org.dromara.workflow.common.enums.BusinessStatusEnum;
import org.dromara.workflow.domain.ActHiProcinst;
import org.dromara.workflow.service.IActHiProcinstService;
import org.dromara.workflow.service.WorkflowService;
@@ -42,34 +37,6 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService {
return workflowService.getBusinessStatus(businessKey);
}
@Override
public BusinessInstanceDTO getBusinessInstance(String businessKey) {
ActHiProcinst actHiProcinst = actHiProcinstService.selectByBusinessKey(businessKey);
if (actHiProcinst == null) {
BusinessInstanceDTO businessInstanceDTO = new BusinessInstanceDTO();
businessInstanceDTO.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus());
return businessInstanceDTO;
}
BusinessInstanceDTO businessInstanceDTO = BeanUtil.toBean(actHiProcinst, BusinessInstanceDTO.class);
businessInstanceDTO.setBusinessStatusName(BusinessStatusEnum.findByStatus(businessInstanceDTO.getBusinessStatus()));
businessInstanceDTO.setProcessDefinitionId(actHiProcinst.getProcDefId());
return businessInstanceDTO;
}
@Override
public List<BusinessInstanceDTO> getBusinessInstance(List<String> businessKeys) {
List<ActHiProcinst> actHiProcinstList = actHiProcinstService.selectByBusinessKeyIn(businessKeys);
List<BusinessInstanceDTO> businessInstanceList = BeanUtil.copyToList(actHiProcinstList, BusinessInstanceDTO.class,
CopyOptions.create().setFieldMapping(Map.of("procDefId", "processDefinitionId")));
businessInstanceList.forEach(dto -> {
dto.setBusinessStatusName(BusinessStatusEnum.findByStatus(dto.getBusinessStatus()));
});
return businessInstanceList;
}
@Override
public void setVariable(String taskId, String variableName, Object value) {
workflowService.setVariable(taskId, variableName, value);

View File

@@ -1,6 +1,5 @@
package org.dromara.workflow.flowable.handler;
import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.workflow.api.domain.event.ProcessEvent;
import org.dromara.workflow.api.domain.event.ProcessTaskEvent;
@@ -29,7 +28,6 @@ public class FlowProcessEventHandler {
processEvent.setBusinessKey(businessKey);
processEvent.setStatus(status);
processEvent.setSubmit(submit);
processEvent.setRequest(ServletUtils.getRequest());
SpringUtils.context().publishEvent(processEvent);
}
@@ -45,7 +43,6 @@ public class FlowProcessEventHandler {
processTaskEvent.setKeyNode(keyNode);
processTaskEvent.setTaskId(taskId);
processTaskEvent.setBusinessKey(businessKey);
processTaskEvent.setRequest(ServletUtils.getRequest());
SpringUtils.context().publishEvent(processTaskEvent);
}
}

View File

@@ -1,8 +1,8 @@
package org.dromara.workflow.testleave.mapper;
package org.dromara.workflow.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.workflow.testleave.domain.TestLeave;
import org.dromara.workflow.testleave.domain.vo.TestLeaveVo;
import org.dromara.workflow.domain.TestLeave;
import org.dromara.workflow.domain.vo.TestLeaveVo;
/**
* 请假Mapper接口

View File

@@ -2,9 +2,9 @@ package org.dromara.workflow.service;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.workflow.api.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.api.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.api.domain.bo.TaskUrgingBo;
import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.bo.TaskUrgingBo;
import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
import org.dromara.workflow.domain.vo.ProcessInstanceVo;

View File

@@ -1,9 +1,9 @@
package org.dromara.workflow.testleave.service;
package org.dromara.workflow.service;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.workflow.testleave.domain.bo.TestLeaveBo;
import org.dromara.workflow.testleave.domain.vo.TestLeaveVo;
import org.dromara.workflow.domain.bo.TestLeaveBo;
import org.dromara.workflow.domain.vo.TestLeaveVo;
import java.util.Collection;
import java.util.List;

View File

@@ -32,23 +32,6 @@ public interface WorkflowService {
*/
String getBusinessStatus(String businessKey);
/**
* 设置流程实例对象
*
* @param obj 业务对象
* @param businessKey 业务id
*/
void setBusinessInstanceDTO(Object obj, String businessKey);
/**
* 设置流程实例对象
*
* @param obj 业务对象
* @param idList 业务id
* @param fieldName 主键属性名称
*/
void setBusinessInstanceListDTO(Object obj, List<String> idList, String fieldName);
/**
* 设置流程变量(全局变量)
*

View File

@@ -15,13 +15,13 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.workflow.api.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.api.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.api.domain.bo.TaskUrgingBo;
import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.common.enums.BusinessStatusEnum;
import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.ActHiProcinst;
import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.bo.TaskUrgingBo;
import org.dromara.workflow.domain.vo.*;
import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator;
import org.dromara.workflow.flowable.cmd.DeleteExecutionCmd;
@@ -33,7 +33,7 @@ import org.dromara.workflow.service.IWfNodeConfigService;
import org.dromara.workflow.service.IWfTaskBackNodeService;
import org.dromara.workflow.utils.QueryUtils;
import org.dromara.workflow.utils.WorkflowUtils;
import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.engine.*;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance;

View File

@@ -16,7 +16,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.dto.UserDTO;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.system.api.model.RoleDTO;
import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.common.enums.BusinessStatusEnum;
@@ -818,7 +818,7 @@ public class ActTaskServiceImpl implements IActTaskService {
if (multiInstance.getType() instanceof SequentialMultiInstanceBehavior) {
List<Long> userIds = StreamUtils.filter(assigneeList, e -> !String.valueOf(e).equals(task.getAssignee()));
List<UserDTO> userList = userService.selectListByIds(userIds);
List<RemoteUserVo> userList = userService.selectListByIds(userIds);
for (Long userId : userIds) {
TaskVo taskVo = new TaskVo();
taskVo.setId("串行会签");
@@ -836,7 +836,7 @@ public class ActTaskServiceImpl implements IActTaskService {
List<Task> tasks = StreamUtils.filter(taskList, e -> StringUtils.isBlank(e.getParentTaskId()) && !e.getExecutionId().equals(task.getExecutionId()) && e.getTaskDefinitionKey().equals(task.getTaskDefinitionKey()));
if (CollUtil.isNotEmpty(tasks)) {
List<Long> userIds = StreamUtils.toList(tasks, e -> Long.valueOf(e.getAssignee()));
List<UserDTO> userList = userService.selectListByIds(userIds);
List<RemoteUserVo> userList = userService.selectListByIds(userIds);
for (Task t : tasks) {
TaskVo taskVo = new TaskVo();
taskVo.setId(t.getId());

View File

@@ -1,6 +1,5 @@
package org.dromara.workflow.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -14,15 +13,14 @@ import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.workflow.api.domain.RemoteWorkflowService;
import org.dromara.workflow.api.domain.dto.BusinessInstanceDTO;
import org.dromara.workflow.api.domain.event.ProcessEvent;
import org.dromara.workflow.api.domain.event.ProcessTaskEvent;
import org.dromara.workflow.common.enums.BusinessStatusEnum;
import org.dromara.workflow.testleave.domain.TestLeave;
import org.dromara.workflow.testleave.domain.bo.TestLeaveBo;
import org.dromara.workflow.testleave.domain.vo.TestLeaveVo;
import org.dromara.workflow.testleave.mapper.TestLeaveMapper;
import org.dromara.workflow.testleave.service.ITestLeaveService;
import org.dromara.workflow.domain.TestLeave;
import org.dromara.workflow.domain.bo.TestLeaveBo;
import org.dromara.workflow.domain.vo.TestLeaveVo;
import org.dromara.workflow.mapper.TestLeaveMapper;
import org.dromara.workflow.service.ITestLeaveService;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -50,10 +48,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
*/
@Override
public TestLeaveVo queryById(Long id) {
TestLeaveVo testLeaveVo = baseMapper.selectVoById(id);
BusinessInstanceDTO businessInstance = workflowService.getBusinessInstance(String.valueOf(id));
testLeaveVo.setBusinessInstanceDTO(businessInstance);
return testLeaveVo;
return baseMapper.selectVoById(id);
}
/**
@@ -63,23 +58,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
public TableDataInfo<TestLeaveVo> queryPageList(TestLeaveBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<TestLeave> lqw = buildQueryWrapper(bo);
Page<TestLeaveVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
TableDataInfo<TestLeaveVo> build = TableDataInfo.build(result);
List<TestLeaveVo> rows = build.getRows();
if (CollUtil.isNotEmpty(rows)) {
List<String> ids = StreamUtils.toList(rows, e -> String.valueOf(e.getId()));
List<BusinessInstanceDTO> processInstances = workflowService.getBusinessInstance(ids);
for (TestLeaveVo vo : rows) {
BusinessInstanceDTO processInstanceDTO = null;
for (BusinessInstanceDTO processInstance : processInstances) {
if (String.valueOf(vo.getId()).equals(processInstance.getBusinessKey())) {
processInstanceDTO = processInstance;
break;
}
}
vo.setBusinessInstanceDTO(processInstanceDTO);
}
}
return build;
return TableDataInfo.build(result);
}
/**
@@ -110,10 +89,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
if (flag) {
bo.setId(add.getId());
}
TestLeaveVo testLeaveVo = MapstructUtils.convert(add, TestLeaveVo.class);
BusinessInstanceDTO businessInstance = workflowService.getBusinessInstance(String.valueOf(add.getId()));
testLeaveVo.setBusinessInstanceDTO(businessInstance);
return testLeaveVo;
return MapstructUtils.convert(add, TestLeaveVo.class);
}
/**
@@ -123,10 +99,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
public TestLeaveVo updateByBo(TestLeaveBo bo) {
TestLeave update = MapstructUtils.convert(bo, TestLeave.class);
baseMapper.updateById(update);
TestLeaveVo testLeaveVo = MapstructUtils.convert(update, TestLeaveVo.class);
BusinessInstanceDTO businessInstance = workflowService.getBusinessInstance(String.valueOf(update.getId()));
testLeaveVo.setBusinessInstanceDTO(businessInstance);
return testLeaveVo;
return MapstructUtils.convert(update, TestLeaveVo.class);
}
/**

View File

@@ -53,29 +53,6 @@ public class WorkflowServiceImpl implements WorkflowService {
return WorkflowUtils.getBusinessStatus(businessKey);
}
/**
* 设置流程实例对象
*
* @param obj 业务对象
* @param businessKey 业务id
*/
@Override
public void setBusinessInstanceDTO(Object obj, String businessKey) {
WorkflowUtils.setBusinessInstanceDTO(obj, businessKey);
}
/**
* 设置流程实例对象
*
* @param obj 业务对象
* @param idList 业务id
* @param fieldName 主键属性名称
*/
@Override
public void setBusinessInstanceListDTO(Object obj, List<String> idList, String fieldName) {
WorkflowUtils.setBusinessInstanceListDTO(obj, idList, fieldName);
}
/**
* 设置流程变量(全局变量)
*

View File

@@ -1,6 +1,5 @@
package org.dromara.workflow.utils;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -10,21 +9,17 @@ import lombok.NoArgsConstructor;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.reflect.ReflectUtils;
import org.dromara.common.mail.utils.MailUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.common.websocket.dto.WebSocketMessageDto;
import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.dto.UserDTO;
import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.dromara.system.api.model.RoleDTO;
import org.dromara.workflow.api.domain.dto.BusinessInstanceDTO;
import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.common.enums.BusinessStatusEnum;
import org.dromara.workflow.common.enums.MessageTypeEnum;
import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.ActHiProcinst;
import org.dromara.workflow.domain.ActHiTaskinst;
import org.dromara.workflow.domain.vo.MultiInstanceVo;
import org.dromara.workflow.domain.vo.ParticipantVo;
@@ -46,8 +41,6 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import java.util.*;
import static org.dromara.workflow.common.constant.FlowConstant.BUSINESS_INSTANCE_DTO;
/**
* 工作流工具
*
@@ -146,10 +139,10 @@ public class WorkflowUtils {
List<Long> userIds = USER_SERVICE.selectUserIdsByRoleIds(groupIds);
if (CollUtil.isNotEmpty(userIds)) {
participantVo.setGroupIds(groupIds);
List<UserDTO> userList = USER_SERVICE.selectListByIds(userIds);
List<RemoteUserVo> userList = USER_SERVICE.selectListByIds(userIds);
if (CollUtil.isNotEmpty(userList)) {
List<Long> userIdList = StreamUtils.toList(userList, UserDTO::getUserId);
List<String> nickNames = StreamUtils.toList(userList, UserDTO::getNickName);
List<Long> userIdList = StreamUtils.toList(userList, RemoteUserVo::getUserId);
List<String> nickNames = StreamUtils.toList(userList, RemoteUserVo::getNickName);
participantVo.setCandidate(userIdList);
participantVo.setCandidateName(nickNames);
participantVo.setClaim(!StringUtils.isBlank(task.getAssignee()));
@@ -165,10 +158,10 @@ public class WorkflowUtils {
}
}
List<UserDTO> userList = USER_SERVICE.selectListByIds(userIdList);
List<RemoteUserVo> userList = USER_SERVICE.selectListByIds(userIdList);
if (CollUtil.isNotEmpty(userList)) {
List<Long> userIds = StreamUtils.toList(userList, UserDTO::getUserId);
List<String> nickNames = StreamUtils.toList(userList, UserDTO::getNickName);
List<Long> userIds = StreamUtils.toList(userList, RemoteUserVo::getUserId);
List<String> nickNames = StreamUtils.toList(userList, RemoteUserVo::getNickName);
participantVo.setCandidate(userIds);
participantVo.setCandidateName(nickNames);
// 判断当前任务是否具有多个办理人
@@ -235,67 +228,6 @@ public class WorkflowUtils {
return historicProcessInstance.getBusinessStatus();
}
/**
* 设置流程实例对象
*
* @param obj 业务对象
* @param businessKey 业务id
*/
public static void setBusinessInstanceDTO(Object obj, String businessKey) {
if (StringUtils.isBlank(businessKey) || obj == null) {
return;
}
ActHiProcinst actHiProcinst = ACT_HI_PROCINST_SERVICE.selectByBusinessKey(businessKey);
if (actHiProcinst == null) {
BusinessInstanceDTO businessInstanceDTO = new BusinessInstanceDTO();
businessInstanceDTO.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus());
ReflectUtils.invokeSetter(obj, BUSINESS_INSTANCE_DTO, businessInstanceDTO);
return;
}
BusinessInstanceDTO businessInstanceDTO = BeanUtil.toBean(actHiProcinst, BusinessInstanceDTO.class);
businessInstanceDTO.setBusinessStatusName(BusinessStatusEnum.findByStatus(businessInstanceDTO.getBusinessStatus()));
businessInstanceDTO.setProcessDefinitionId(actHiProcinst.getProcDefId());
ReflectUtils.invokeSetter(obj, BUSINESS_INSTANCE_DTO, businessInstanceDTO);
}
/**
* 设置流程实例对象
*
* @param obj 业务对象
* @param idList 业务id
* @param fieldName 主键属性名称
*/
public static void setBusinessInstanceListDTO(Object obj, List<String> idList, String fieldName) {
if (CollUtil.isEmpty(idList) || obj == null) {
return;
}
List<ActHiProcinst> actHiProcinstList = ACT_HI_PROCINST_SERVICE.selectByBusinessKeyIn(idList);
if (obj instanceof Collection<?> collection) {
for (Object o : collection) {
String fieldValue = ReflectUtils.invokeGetter(o, fieldName).toString();
if (CollUtil.isEmpty(actHiProcinstList)) {
BusinessInstanceDTO businessInstanceDTO = new BusinessInstanceDTO();
businessInstanceDTO.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus());
businessInstanceDTO.setBusinessStatusName(BusinessStatusEnum.findByStatus(businessInstanceDTO.getBusinessStatus()));
ReflectUtils.invokeSetter(o, BUSINESS_INSTANCE_DTO, businessInstanceDTO);
} else {
ActHiProcinst actHiProcinst = actHiProcinstList.stream().filter(e -> e.getBusinessKey().equals(fieldValue)).findFirst().orElse(null);
if (ObjectUtil.isNotEmpty(actHiProcinst)) {
BusinessInstanceDTO businessInstanceDTO = BeanUtil.toBean(actHiProcinst, BusinessInstanceDTO.class);
businessInstanceDTO.setBusinessStatusName(BusinessStatusEnum.findByStatus(businessInstanceDTO.getBusinessStatus()));
businessInstanceDTO.setProcessDefinitionId(actHiProcinst.getProcDefId());
ReflectUtils.invokeSetter(o, BUSINESS_INSTANCE_DTO, businessInstanceDTO);
} else {
BusinessInstanceDTO businessInstanceDTO = new BusinessInstanceDTO();
businessInstanceDTO.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus());
businessInstanceDTO.setBusinessStatusName(BusinessStatusEnum.findByStatus(businessInstanceDTO.getBusinessStatus()));
ReflectUtils.invokeSetter(o, BUSINESS_INSTANCE_DTO, businessInstanceDTO);
}
}
}
}
}
/**
* 发送消息
*
@@ -323,7 +255,7 @@ public class WorkflowUtils {
}
}
if (CollUtil.isNotEmpty(userIds)) {
List<UserDTO> userList = USER_SERVICE.selectListByIds(new ArrayList<>(userIds));
List<RemoteUserVo> userList = USER_SERVICE.selectListByIds(new ArrayList<>(userIds));
for (String code : messageType) {
MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code);
if (ObjectUtil.isNotEmpty(messageTypeEnum)) {
@@ -335,7 +267,7 @@ public class WorkflowUtils {
WebSocketUtils.publishMessage(dto);
break;
case EMAIL_MESSAGE:
MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), "单据审批提醒", message);
MailUtils.sendText(StreamUtils.join(userList, RemoteUserVo::getEmail), "单据审批提醒", message);
break;
case SMS_MESSAGE:
//todo 短信发送

View File

@@ -2,6 +2,6 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.workflow.testleave.mapper.TestLeaveMapper">
<mapper namespace="org.dromara.workflow.mapper.TestLeaveMapper">
</mapper>