feat(bpm): 新增流程定义精简列表接口
- 新增 /list-simple 接口,用于获取流程定义列表(前端下拉框使用) - 实现流程定义精简列表的查询逻辑 - 添加相关数据结构和 Mapper 支持 - 优化部门权限查询逻辑
This commit is contained in:
parent
439c8caa12
commit
cf9fc3a65e
@ -2,20 +2,14 @@ package cn.iocoder.yudao.module.bpm.controller.admin.definition;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionListReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageItemRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.*;
|
||||
import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
@ -51,6 +45,14 @@ public class BpmProcessDefinitionController {
|
||||
return success(respVOS);
|
||||
}
|
||||
|
||||
@PostMapping ("/list-simple")
|
||||
@Operation(summary = "获得流程定义列表-前端下拉框使用")
|
||||
public CommonResult<List<BpmProcessDefinitionSimpleVO>> getProcessDefinitionSimpleList(@RequestBody BpmProcessDefinitionListReqVO reqVO) {
|
||||
|
||||
List<BpmProcessDefinitionSimpleVO> respVOS = bpmDefinitionService.getProcessDefinitionSimpleList(reqVO);
|
||||
return success(respVOS);
|
||||
}
|
||||
|
||||
@GetMapping ("/get-bpmn-xml")
|
||||
@Operation(summary = "获得流程定义的 BPMN XML")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
|
@ -5,6 +5,11 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 流程定义列表 Request VO")
|
||||
@Data
|
||||
@ -15,4 +20,10 @@ public class BpmProcessDefinitionListReqVO extends PageParam {
|
||||
@Schema(description = "中断状态-参见 SuspensionState 枚举", example = "1")
|
||||
private Integer suspensionState;
|
||||
|
||||
@Schema(description = "公司部门编号")
|
||||
private Long deptId;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
}
|
||||
|
@ -0,0 +1,18 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "流程定义VO")
|
||||
@Data
|
||||
public class BpmProcessDefinitionSimpleVO {
|
||||
|
||||
@Schema(description = "流程定义编号")
|
||||
private String ProcessDefinitionId;
|
||||
|
||||
@Schema(description = "流程名称", example = "芋道")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "待处理任务数量")
|
||||
private Integer todoCount;
|
||||
}
|
@ -1,10 +1,12 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.mysql.definition;
|
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionSimpleVO;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@ -19,4 +21,8 @@ public interface BpmProcessDefinitionExtMapper extends BaseMapperX<BpmProcessDef
|
||||
return selectOne("process_definition_id", processDefinitionId);
|
||||
}
|
||||
|
||||
List<BpmProcessDefinitionSimpleVO> selectSimpleList(@Param("definitionIds") List<String> definitionIds,
|
||||
@Param("deptIds") List<Long> deptIds,
|
||||
@Param("createTime") LocalDateTime[] createTime,
|
||||
@Param("userId") Long userId);
|
||||
}
|
||||
|
@ -2,10 +2,7 @@ package cn.iocoder.yudao.module.bpm.service.definition;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionListReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageItemRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.*;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO;
|
||||
import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO;
|
||||
import org.flowable.bpmn.model.BpmnModel;
|
||||
@ -156,4 +153,11 @@ public interface BpmProcessDefinitionService {
|
||||
* @return Bpmn 模型
|
||||
*/
|
||||
BpmnModel getBpmnModel(String processDefinitionId);
|
||||
|
||||
/**
|
||||
* 获得流程定义精简列表
|
||||
* @param reqVO 参数列表
|
||||
* @return 流程定义列表
|
||||
*/
|
||||
List<BpmProcessDefinitionSimpleVO> getProcessDefinitionSimpleList(BpmProcessDefinitionListReqVO reqVO);
|
||||
}
|
||||
|
@ -7,15 +7,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.PageUtils;
|
||||
import cn.iocoder.yudao.framework.flowable.core.util.BpmnModelUtils;
|
||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionListReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageItemRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.*;
|
||||
import cn.iocoder.yudao.module.bpm.convert.definition.BpmProcessDefinitionConvert;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO;
|
||||
import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmProcessDefinitionExtMapper;
|
||||
import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmProcessDefinitionCreateReqDTO;
|
||||
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.flowable.bpmn.converter.BpmnXMLConverter;
|
||||
import org.flowable.bpmn.model.BpmnModel;
|
||||
@ -31,10 +29,12 @@ import org.springframework.validation.annotation.Validated;
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_KEY_NOT_MATCH;
|
||||
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_DEFINITION_NAME_NOT_MATCH;
|
||||
import static java.util.Collections.emptyList;
|
||||
@ -63,6 +63,9 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ
|
||||
@Resource
|
||||
private BpmFormService formService;
|
||||
|
||||
@Resource
|
||||
private DeptApi deptApi;
|
||||
|
||||
@Override
|
||||
public ProcessDefinition getProcessDefinition(String id) {
|
||||
return repositoryService.getProcessDefinition(id);
|
||||
@ -119,6 +122,47 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ
|
||||
return repositoryService.getBpmnModel(processDefinitionId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BpmProcessDefinitionSimpleVO> getProcessDefinitionSimpleList(BpmProcessDefinitionListReqVO reqVO) {
|
||||
|
||||
// 拼接查询条件
|
||||
ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery();
|
||||
if (Objects.equals(SuspensionState.SUSPENDED.getStateCode(), reqVO.getSuspensionState())) {
|
||||
definitionQuery.suspended();
|
||||
} else if (Objects.equals(SuspensionState.ACTIVE.getStateCode(), reqVO.getSuspensionState())) {
|
||||
definitionQuery.active();
|
||||
}
|
||||
/**添加租户ID**/
|
||||
definitionQuery.processDefinitionTenantId(TenantContextHolder.getTenantId().toString()) ;
|
||||
// 执行查询
|
||||
List<ProcessDefinition> processDefinitions = definitionQuery.list();
|
||||
if (CollUtil.isEmpty(processDefinitions)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
List<Long> deptIds = null;
|
||||
// 获取所选公司下 所有子部门
|
||||
if (reqVO.getDeptId() != null) {
|
||||
deptIds = deptApi.getChildDeptList(reqVO.getDeptId()).getCheckedData();
|
||||
}
|
||||
|
||||
// 获取流程定义编号集合
|
||||
List<String> definitionIds = convertList(processDefinitions, ProcessDefinition::getId);
|
||||
|
||||
// 获取各流程待审核得数量
|
||||
List<BpmProcessDefinitionSimpleVO> definitionCounts = processDefinitionMapper.selectSimpleList(definitionIds, deptIds, reqVO.getCreateTime(), getLoginUserId());
|
||||
Map<String, BpmProcessDefinitionSimpleVO> mapCount = convertMap(definitionCounts, BpmProcessDefinitionSimpleVO::getProcessDefinitionId);
|
||||
|
||||
// 整合数据
|
||||
return processDefinitions.stream()
|
||||
.filter(item -> !item.getId().contains("work_task"))
|
||||
.map(item -> new BpmProcessDefinitionSimpleVO()
|
||||
.setName(item.getName())
|
||||
.setProcessDefinitionId(item.getId())
|
||||
.setTodoCount(Optional.ofNullable(mapCount.get(item.getId()).getTodoCount()).orElse(0)))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String createProcessDefinition(@Valid BpmProcessDefinitionCreateReqDTO createReqDTO) {
|
||||
// 创建 Deployment 部署
|
||||
|
@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmProcessDefinitionExtMapper">
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
<select id="selectSimpleList" resultType="cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionSimpleVO">
|
||||
SELECT
|
||||
a.process_definition_id AS ProcessDefinitionId,
|
||||
count(*) AS todoCount
|
||||
FROM
|
||||
bpm_process_instance_ext a
|
||||
INNER JOIN system_users u
|
||||
ON u.id = a.start_user_id
|
||||
<if test=" deptIds != null and deptIds.size > 0 ">
|
||||
AND u.dept_id IN
|
||||
<foreach collection="deptIds" item="deptId" index="index" open="(" close=")" separator=",">
|
||||
#{deptId}
|
||||
</foreach>
|
||||
</if>
|
||||
INNER JOIN bpm_task_ext b
|
||||
ON a.process_instance_id = b.process_instance_id
|
||||
AND b.result = 1
|
||||
AND b.assignee_user_id = #{userId}
|
||||
WHERE
|
||||
a.process_definition_id IN
|
||||
<foreach collection="definitionIds" item="id" index="index" open="(" close=")" separator=",">
|
||||
#{id}
|
||||
</foreach>
|
||||
<if test="createTime != null and createTime.length > 0">
|
||||
AND a.create_time
|
||||
<foreach collection="createTime" item="time" index="index" open="BETWEEN" close="" separator="AND">
|
||||
#{time}
|
||||
</foreach>
|
||||
</if>
|
||||
GROUP BY
|
||||
a.process_definition_id
|
||||
</select>
|
||||
</mapper>
|
@ -110,7 +110,7 @@ public class DeptApiImpl implements DeptApi {
|
||||
@Override
|
||||
@DataPermission(enable = false)
|
||||
public CommonResult<List<Long>> getChildDeptList(Long deptId) {
|
||||
List<DeptDO> deptDOS = deptService.getChildDeptList(deptId);
|
||||
List<DeptDO> deptDOS = deptService.getChildDept(deptId);
|
||||
if (CollectionUtil.isEmpty(deptDOS)) {
|
||||
return success(Collections.emptyList());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user