update 增加通用接口 降低耦合
This commit is contained in:
parent
6ce92e1669
commit
9b507f06c4
@ -0,0 +1,71 @@
|
||||
package org.dromara.common.core.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 业务与流程实例关联对象
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class BusinessInstanceDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 流程实例id
|
||||
*/
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 流程定义id
|
||||
*/
|
||||
private String processDefinitionId;
|
||||
|
||||
/**
|
||||
* 流程定义名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 业务id
|
||||
*/
|
||||
private String businessKey;
|
||||
|
||||
/**
|
||||
* 租户id
|
||||
*/
|
||||
private String tenantId;
|
||||
|
||||
/**
|
||||
* 启动时间
|
||||
*/
|
||||
private Date startTime;
|
||||
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
private Date endTime;
|
||||
|
||||
/**
|
||||
* 启动人id
|
||||
*/
|
||||
private String startUserId;
|
||||
|
||||
/**
|
||||
* 流程状态
|
||||
*/
|
||||
private String businessStatus;
|
||||
|
||||
/**
|
||||
* 流程状态
|
||||
*/
|
||||
private String businessStatusName;
|
||||
}
|
@ -30,4 +30,21 @@ public interface WorkflowService {
|
||||
* @param businessKey 业务id
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
@ -71,9 +71,9 @@ public interface FlowConstant {
|
||||
String ZIP = "ZIP";
|
||||
|
||||
/**
|
||||
* 流程实例对象
|
||||
* 业务与流程实例关联对象
|
||||
*/
|
||||
String PROCESS_INSTANCE_VO = "processInstanceVo";
|
||||
String BUSINESS_INSTANCE_DTO = "businessInstanceDTO";
|
||||
|
||||
/**
|
||||
* 流程定义配置
|
||||
|
@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.common.core.domain.dto.BusinessInstanceDTO;
|
||||
import org.dromara.workflow.domain.TestLeave;
|
||||
|
||||
import java.io.Serial;
|
||||
@ -62,9 +63,9 @@ public class TestLeaveVo implements Serializable {
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 流程实例对象
|
||||
* 业务与流程实例关联对象
|
||||
*/
|
||||
private ProcessInstanceVo processInstanceVo;
|
||||
private BusinessInstanceDTO businessInstanceDTO;
|
||||
|
||||
|
||||
}
|
||||
|
@ -160,7 +160,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
public boolean completeTask(CompleteTaskBo completeTaskBo) {
|
||||
try {
|
||||
String userId = String.valueOf(LoginHelper.getUserId());
|
||||
Task task = WorkflowUtils.getTaskByCurrUser(completeTaskBo.getTaskId());
|
||||
Task task = WorkflowUtils.getTaskByCurrentUser(completeTaskBo.getTaskId());
|
||||
if (task == null) {
|
||||
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
|
||||
}
|
||||
@ -463,7 +463,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean delegateTask(DelegateBo delegateBo) {
|
||||
Task task = WorkflowUtils.getTaskByCurrUser(delegateBo.getTaskId());
|
||||
Task task = WorkflowUtils.getTaskByCurrentUser(delegateBo.getTaskId());
|
||||
|
||||
if (ObjectUtil.isEmpty(task)) {
|
||||
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
|
||||
@ -537,7 +537,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
*/
|
||||
@Override
|
||||
public boolean transferTask(TransmitBo transmitBo) {
|
||||
Task task = WorkflowUtils.getTaskByCurrUser(transmitBo.getTaskId());
|
||||
Task task = WorkflowUtils.getTaskByCurrentUser(transmitBo.getTaskId());
|
||||
if (ObjectUtil.isEmpty(task)) {
|
||||
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
|
||||
}
|
||||
@ -663,7 +663,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String backProcess(BackProcessBo backProcessBo) {
|
||||
String userId = String.valueOf(LoginHelper.getUserId());
|
||||
Task task = WorkflowUtils.getTaskByCurrUser(backProcessBo.getTaskId());
|
||||
Task task = WorkflowUtils.getTaskByCurrentUser(backProcessBo.getTaskId());
|
||||
|
||||
if (ObjectUtil.isEmpty(task)) {
|
||||
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
|
||||
|
@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.service.WorkflowService;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
@ -15,9 +16,7 @@ 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.IActProcessInstanceService;
|
||||
import org.dromara.workflow.service.ITestLeaveService;
|
||||
import org.dromara.workflow.utils.WorkflowUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -35,7 +34,7 @@ import java.util.List;
|
||||
public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||
|
||||
private final TestLeaveMapper baseMapper;
|
||||
private final IActProcessInstanceService actProcessInstanceService;
|
||||
private final WorkflowService workflowService;
|
||||
|
||||
/**
|
||||
* 查询请假
|
||||
@ -43,7 +42,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||
@Override
|
||||
public TestLeaveVo queryById(Long id) {
|
||||
TestLeaveVo testLeaveVo = baseMapper.selectVoById(id);
|
||||
WorkflowUtils.setProcessInstanceVo(testLeaveVo, String.valueOf(id));
|
||||
workflowService.setBusinessInstanceDTO(testLeaveVo, String.valueOf(id));
|
||||
return testLeaveVo;
|
||||
}
|
||||
|
||||
@ -58,7 +57,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||
List<TestLeaveVo> rows = build.getRows();
|
||||
if (CollUtil.isNotEmpty(rows)) {
|
||||
List<String> ids = StreamUtils.toList(rows, e -> String.valueOf(e.getId()));
|
||||
WorkflowUtils.setProcessInstanceListVo(rows, ids, "id");
|
||||
workflowService.setBusinessInstanceListDTO(rows, ids, "id");
|
||||
}
|
||||
return build;
|
||||
}
|
||||
@ -92,7 +91,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
TestLeaveVo testLeaveVo = MapstructUtils.convert(add, TestLeaveVo.class);
|
||||
WorkflowUtils.setProcessInstanceVo(testLeaveVo, String.valueOf(add.getId()));
|
||||
workflowService.setBusinessInstanceDTO(testLeaveVo, String.valueOf(add.getId()));
|
||||
return testLeaveVo;
|
||||
}
|
||||
|
||||
@ -104,7 +103,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||
TestLeave update = MapstructUtils.convert(bo, TestLeave.class);
|
||||
baseMapper.updateById(update);
|
||||
TestLeaveVo testLeaveVo = MapstructUtils.convert(update, TestLeaveVo.class);
|
||||
WorkflowUtils.setProcessInstanceVo(testLeaveVo, String.valueOf(update.getId()));
|
||||
workflowService.setBusinessInstanceDTO(testLeaveVo, String.valueOf(update.getId()));
|
||||
return testLeaveVo;
|
||||
}
|
||||
|
||||
@ -115,7 +114,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids) {
|
||||
List<String> idList = StreamUtils.toList(ids, String::valueOf);
|
||||
actProcessInstanceService.deleteRunAndHisInstance(idList);
|
||||
workflowService.deleteRunAndHisInstance(idList);
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
|
@ -49,4 +49,27 @@ public class WorkflowServiceImpl implements WorkflowService {
|
||||
public String getBusinessStatus(String businessKey) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.common.core.domain.dto.BusinessInstanceDTO;
|
||||
import org.dromara.common.core.domain.dto.RoleDTO;
|
||||
import org.dromara.common.core.domain.dto.UserDTO;
|
||||
import org.dromara.common.core.service.UserService;
|
||||
@ -27,7 +28,6 @@ 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;
|
||||
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
|
||||
import org.dromara.workflow.flowable.cmd.UpdateHiTaskInstCmd;
|
||||
import org.dromara.workflow.mapper.ActHiTaskinstMapper;
|
||||
import org.dromara.workflow.service.IActHiProcinstService;
|
||||
@ -46,7 +46,7 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static org.dromara.workflow.common.constant.FlowConstant.PROCESS_INSTANCE_VO;
|
||||
import static org.dromara.workflow.common.constant.FlowConstant.BUSINESS_INSTANCE_DTO;
|
||||
|
||||
/**
|
||||
* 工作流工具
|
||||
@ -241,20 +241,21 @@ public class WorkflowUtils {
|
||||
* @param obj 业务对象
|
||||
* @param businessKey 业务id
|
||||
*/
|
||||
public static void setProcessInstanceVo(Object obj, String businessKey) {
|
||||
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) {
|
||||
ProcessInstanceVo processInstanceVo = new ProcessInstanceVo();
|
||||
processInstanceVo.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus());
|
||||
ReflectUtils.invokeSetter(obj, PROCESS_INSTANCE_VO, processInstanceVo);
|
||||
BusinessInstanceDTO businessInstanceDTO = new BusinessInstanceDTO();
|
||||
businessInstanceDTO.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus());
|
||||
ReflectUtils.invokeSetter(obj, BUSINESS_INSTANCE_DTO, businessInstanceDTO);
|
||||
return;
|
||||
}
|
||||
ProcessInstanceVo processInstanceVo = BeanUtil.toBean(actHiProcinst, ProcessInstanceVo.class);
|
||||
processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(processInstanceVo.getBusinessStatus()));
|
||||
ReflectUtils.invokeSetter(obj, PROCESS_INSTANCE_VO, processInstanceVo);
|
||||
BusinessInstanceDTO businessInstanceDTO = BeanUtil.toBean(actHiProcinst, BusinessInstanceDTO.class);
|
||||
businessInstanceDTO.setBusinessStatusName(BusinessStatusEnum.findByStatus(businessInstanceDTO.getBusinessStatus()));
|
||||
businessInstanceDTO.setProcessDefinitionId(actHiProcinst.getProcDefId());
|
||||
ReflectUtils.invokeSetter(obj, BUSINESS_INSTANCE_DTO, businessInstanceDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -264,7 +265,7 @@ public class WorkflowUtils {
|
||||
* @param idList 业务id
|
||||
* @param fieldName 主键属性名称
|
||||
*/
|
||||
public static void setProcessInstanceListVo(Object obj, List<String> idList, String fieldName) {
|
||||
public static void setBusinessInstanceListDTO(Object obj, List<String> idList, String fieldName) {
|
||||
if (CollUtil.isEmpty(idList) || obj == null) {
|
||||
return;
|
||||
}
|
||||
@ -273,21 +274,22 @@ public class WorkflowUtils {
|
||||
for (Object o : collection) {
|
||||
String fieldValue = ReflectUtils.invokeGetter(o, fieldName).toString();
|
||||
if (CollUtil.isEmpty(actHiProcinstList)) {
|
||||
ProcessInstanceVo processInstanceVo = new ProcessInstanceVo();
|
||||
processInstanceVo.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus());
|
||||
processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(processInstanceVo.getBusinessStatus()));
|
||||
ReflectUtils.invokeSetter(o, PROCESS_INSTANCE_VO, processInstanceVo);
|
||||
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)) {
|
||||
ProcessInstanceVo processInstanceVo = BeanUtil.toBean(actHiProcinst, ProcessInstanceVo.class);
|
||||
processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(processInstanceVo.getBusinessStatus()));
|
||||
ReflectUtils.invokeSetter(o, PROCESS_INSTANCE_VO, processInstanceVo);
|
||||
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 {
|
||||
ProcessInstanceVo processInstanceVo = new ProcessInstanceVo();
|
||||
processInstanceVo.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus());
|
||||
processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(processInstanceVo.getBusinessStatus()));
|
||||
ReflectUtils.invokeSetter(o, PROCESS_INSTANCE_VO, processInstanceVo);
|
||||
BusinessInstanceDTO businessInstanceDTO = new BusinessInstanceDTO();
|
||||
businessInstanceDTO.setBusinessStatus(BusinessStatusEnum.DRAFT.getStatus());
|
||||
businessInstanceDTO.setBusinessStatusName(BusinessStatusEnum.findByStatus(businessInstanceDTO.getBusinessStatus()));
|
||||
ReflectUtils.invokeSetter(o, BUSINESS_INSTANCE_DTO, businessInstanceDTO);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -346,10 +348,11 @@ public class WorkflowUtils {
|
||||
|
||||
/**
|
||||
* 根据任务id查询 当前用户的任务,检查 当前人员 是否是该 taskId 的办理人
|
||||
*
|
||||
* @param taskId 任务id
|
||||
* @return
|
||||
* @return 结果
|
||||
*/
|
||||
public static Task getTaskByCurrUser(String taskId){
|
||||
public static Task getTaskByCurrentUser(String taskId) {
|
||||
TaskQuery taskQuery = QueryUtils.taskQuery();
|
||||
taskQuery.taskId(taskId).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId()));
|
||||
|
||||
@ -358,8 +361,6 @@ public class WorkflowUtils {
|
||||
List<String> groupIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId()));
|
||||
taskQuery.taskCandidateGroupIn(groupIds);
|
||||
}
|
||||
Task task = taskQuery.singleResult();
|
||||
|
||||
return task;
|
||||
return taskQuery.singleResult();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user