update 新增流程分类id查询

This commit is contained in:
AprilWind 2024-12-19 14:52:51 +08:00
parent a2730a3422
commit 764782c58b
12 changed files with 85 additions and 33 deletions

View File

@ -6,7 +6,6 @@ import lombok.Getter;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@ -116,30 +115,23 @@ public enum BusinessStatusEnum {
}
/**
* 运行中的实例状态
* 获取运行中的实例状态列表
*
* @return 运行中的实例状态
* @return 包含运行中实例状态的不可变列表
* 包含 DRAFTWAITINGBACK CANCEL 状态
*/
public static List<String> runningStatus() {
List<String> list = new ArrayList<>();
list.add(BusinessStatusEnum.DRAFT.getStatus());
list.add(BusinessStatusEnum.WAITING.getStatus());
list.add(BusinessStatusEnum.BACK.getStatus());
list.add(BusinessStatusEnum.CANCEL.getStatus());
return list;
return Arrays.asList(DRAFT.status, WAITING.status, BACK.status, CANCEL.status);
}
/**
* 结束实例状态
* 获取结束实例的状态列表
*
* @return 结束实例状态
* @return 包含结束实例状态的不可变列表
* 包含 FINISHINVALID TERMINATION 状态
*/
public static List<String> finishStatus() {
List<String> list = new ArrayList<>();
list.add(BusinessStatusEnum.FINISH.getStatus());
list.add(BusinessStatusEnum.INVALID.getStatus());
list.add(BusinessStatusEnum.TERMINATION.getStatus());
return list;
return Arrays.asList(FINISH.status, INVALID.status, TERMINATION.status);
}
/**

View File

@ -38,7 +38,7 @@ public class FlowInstanceBo implements Serializable {
private String businessId;
/**
* 模型分类
* 流程分类id
*/
private String category;
@ -47,9 +47,9 @@ public class FlowInstanceBo implements Serializable {
*/
private String nodeName;
/**
* 申请人Ids
*/
private List<Long> createByIds;
}

View File

@ -32,6 +32,11 @@ public class FlowTaskBo implements Serializable {
*/
private String flowCode;
/**
* 流程分类id
*/
private String category;
/**
* 流程实例id
*/
@ -41,8 +46,10 @@ public class FlowTaskBo implements Serializable {
* 权限列表
*/
private List<String> permissionList;
/**
* 申请人Ids
*/
private List<Long> createByIds;
}

View File

@ -52,7 +52,7 @@ public class FlowDefinitionVo implements Serializable {
private String flowName;
/**
* 流程类别
* 流程分类id
*/
private String category;

View File

@ -160,6 +160,16 @@ public class FlowHisTaskVo implements Serializable {
*/
private String createBy;
/**
* 申请人
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
private String createByName;
/**
* 流程分类id
*/
private String category;
/**
* 审批表单是否自定义Y是 N否
@ -223,9 +233,5 @@ public class FlowHisTaskVo implements Serializable {
this.cooperateType = cooperateType;
this.cooperateTypeName = CooperateType.getValueByKey(cooperateType);
}
/**
* 申请人
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
private String createByName;
}

View File

@ -114,6 +114,11 @@ public class FlowTaskVo implements Serializable {
*/
private String flowStatus;
/**
* 流程分类id
*/
private String category;
/**
* 流程状态
*/

View File

@ -9,6 +9,8 @@ import org.dromara.workflow.domain.FlowCategory;
import org.dromara.workflow.domain.vo.FlowCategoryVo;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 流程分类Mapper接口
@ -41,4 +43,18 @@ public interface FlwCategoryMapper extends BaseMapperPlus<FlowCategory, FlowCate
.apply(DataBaseHelper.findInSet(parentId, "ancestors")));
}
/**
* 根据父流程分类ID查询包括父ID及其所有子流程分类ID的列表
*
* @param parentId 父流程分类ID
* @return 包含父ID和子流程分类ID的列表
*/
default List<Long> selectCategoryIdsByParentId(Long parentId) {
return Stream.concat(
this.selectListByParentId(parentId).stream()
.map(FlowCategory::getCategoryId),
Stream.of(parentId)
).collect(Collectors.toList());
}
}

View File

@ -36,6 +36,7 @@ public interface FlwTaskMapper {
* @return 结果
*/
List<FlowTaskVo> getListRunTask(@Param(Constants.WRAPPER) Wrapper<FlowTaskBo> queryWrapper);
/**
* 获取已办
*

View File

@ -29,7 +29,6 @@ import org.dromara.warm.flow.orm.entity.FlowDefinition;
import org.dromara.warm.flow.orm.entity.FlowHisTask;
import org.dromara.warm.flow.orm.mapper.FlowDefinitionMapper;
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
import org.dromara.workflow.domain.FlowCategory;
import org.dromara.workflow.domain.vo.FlowDefinitionVo;
import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.mapper.FlwDefMapper;
@ -40,7 +39,6 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
/**
* 流程定义 服务层实现
@ -70,12 +68,7 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
queryWrapper.like(StringUtils.isNotBlank(flowDefinition.getFlowCode()), "flow_code", flowDefinition.getFlowCode());
queryWrapper.like(StringUtils.isNotBlank(flowDefinition.getFlowName()), "flow_Name", flowDefinition.getFlowName());
if (StringUtils.isNotBlank(flowDefinition.getCategory())) {
Long categoryId = Convert.toLong(flowDefinition.getCategory());
List<Long> categoryIds = flwCategoryMapper.selectListByParentId(categoryId)
.stream()
.map(FlowCategory::getCategoryId)
.collect(Collectors.toList());
categoryIds.add(categoryId);
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowDefinition.getCategory()));
queryWrapper.in("category", categoryIds);
}
queryWrapper.orderByDesc("create_time");

View File

@ -2,6 +2,7 @@ package org.dromara.workflow.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -41,6 +42,7 @@ import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowInstanceVo;
import org.dromara.workflow.domain.vo.VariableVo;
import org.dromara.workflow.handler.FlowProcessEventHandler;
import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.mapper.FlwInstanceMapper;
import org.dromara.workflow.service.IFlwInstanceService;
import org.dromara.workflow.service.IFlwTaskService;
@ -70,6 +72,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
private final TaskService taskService;
private final IFlwTaskService flwTaskService;
private final FlowProcessEventHandler flowProcessEventHandler;
private final FlwCategoryMapper flwCategoryMapper;
/**
* 分页查询正在运行的流程实例
@ -130,7 +133,10 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getNodeName()), "fi.node_name", flowInstanceBo.getNodeName());
queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowName()), "fd.flow_name", flowInstanceBo.getFlowName());
queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowCode()), "fd.flow_code", flowInstanceBo.getFlowCode());
queryWrapper.eq(StringUtils.isNotBlank(flowInstanceBo.getCategory()), "fd.category", flowInstanceBo.getCategory());
if (StringUtils.isNotBlank(flowInstanceBo.getCategory())) {
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowInstanceBo.getCategory()));
queryWrapper.in("fd.category", categoryIds);
}
queryWrapper.eq(StringUtils.isNotBlank(flowInstanceBo.getBusinessId()), "fi.business_id", flowInstanceBo.getBusinessId());
queryWrapper.in(CollUtil.isNotEmpty(flowInstanceBo.getCreateByIds()), "fi.create_by", flowInstanceBo.getCreateByIds());
queryWrapper.eq("fi.del_flag", "0");

View File

@ -2,6 +2,7 @@ package org.dromara.workflow.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -41,6 +42,7 @@ import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo;
import org.dromara.workflow.handler.FlowProcessEventHandler;
import org.dromara.workflow.handler.WorkflowPermissionHandler;
import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.mapper.FlwTaskMapper;
import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.utils.WorkflowUtils;
@ -76,6 +78,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
private final IdentifierGenerator identifierGenerator;
private final NodeService nodeService;
private final FlowNodeMapper flowNodeMapper;
private final FlwCategoryMapper flwCategoryMapper;
/**
* 启动任务
@ -249,6 +252,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
queryWrapper.in("t.processed_by", SpringUtils.getBean(WorkflowPermissionHandler.class).permissions());
queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
if (StringUtils.isNotBlank(flowTaskBo.getCategory())) {
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory()));
queryWrapper.in("d.category", categoryIds);
}
Page<FlowTaskVo> page = this.getFlowTaskVoPage(pageQuery, queryWrapper);
return TableDataInfo.build(page);
}
@ -265,6 +272,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
queryWrapper.in("t.approver", LoginHelper.getUserIdStr());
queryWrapper.orderByDesc("t.create_time").orderByDesc("t.update_time");
if (StringUtils.isNotBlank(flowTaskBo.getCategory())) {
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory()));
queryWrapper.in("c.category", categoryIds);
}
Page<FlowHisTaskVo> page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
}
@ -279,6 +290,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
public TableDataInfo<FlowTaskVo> pageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
if (StringUtils.isNotBlank(flowTaskBo.getCategory())) {
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory()));
queryWrapper.in("d.category", categoryIds);
}
Page<FlowTaskVo> page = getFlowTaskVoPage(pageQuery, queryWrapper);
return TableDataInfo.build(page);
}
@ -309,6 +324,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
@Override
public TableDataInfo<FlowHisTaskVo> pageByAllTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
if (StringUtils.isNotBlank(flowTaskBo.getCategory())) {
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory()));
queryWrapper.in("c.category", categoryIds);
}
Page<FlowHisTaskVo> page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
}
@ -323,6 +342,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
public TableDataInfo<FlowTaskVo> pageByTaskCopy(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr());
if (StringUtils.isNotBlank(flowTaskBo.getCategory())) {
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory()));
queryWrapper.in("d.category", categoryIds);
}
Page<FlowTaskVo> page = flwTaskMapper.getTaskCopyByPage(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
}

View File

@ -26,6 +26,7 @@
d.flow_name,
d.flow_code,
d.form_custom,
d.category,
COALESCE(t.form_path, d.form_path) as form_path,
d.version,
uu.processed_by,
@ -69,6 +70,7 @@
b.create_by,
c.flow_name,
c.flow_code,
c.category,
c.version
from flow_his_task a
left join flow_instance b on a.instance_id = b.id
@ -95,6 +97,7 @@
b.node_code,
d.flow_name,
d.flow_code,
d.category,
d.version
from flow_user a
left join flow_his_task b on a.associated = b.task_id