1. 升级 3.0.35 补全 bpm api

This commit is contained in:
chenbowen
2025-09-24 15:28:40 +08:00
parent 0c17191bc4
commit 32cb704e4f
26 changed files with 991 additions and 5 deletions

View File

@@ -0,0 +1,79 @@
package com.zt.plat.module.bpm.api.definition;
import com.zt.plat.framework.common.enums.CommonStatusEnum;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.bpm.api.definition.dto.BpmCategoryPageReqDTO;
import com.zt.plat.module.bpm.api.definition.dto.BpmCategoryRespDTO;
import com.zt.plat.module.bpm.api.definition.dto.BpmCategorySaveReqDTO;
import com.zt.plat.module.bpm.controller.admin.definition.vo.category.BpmCategoryPageReqVO;
import com.zt.plat.module.bpm.controller.admin.definition.vo.category.BpmCategorySaveReqVO;
import com.zt.plat.module.bpm.dal.dataobject.definition.BpmCategoryDO;
import com.zt.plat.module.bpm.service.definition.BpmCategoryService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import java.util.List;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
/**
* BPM 流程分类 Api 实现类
*
* @author ZT
*/
@RestController
@Validated
public class BpmCategoryApiImpl implements BpmCategoryApi {
@Resource
private BpmCategoryService categoryService;
@Override
public CommonResult<Long> createCategory(@Valid BpmCategorySaveReqDTO createReqDTO) {
BpmCategorySaveReqVO createReqVO = BeanUtils.toBean(createReqDTO, BpmCategorySaveReqVO.class);
return success(categoryService.createCategory(createReqVO));
}
@Override
public CommonResult<Boolean> updateCategory(@Valid BpmCategorySaveReqDTO updateReqDTO) {
BpmCategorySaveReqVO updateReqVO = BeanUtils.toBean(updateReqDTO, BpmCategorySaveReqVO.class);
categoryService.updateCategory(updateReqVO);
return success(true);
}
@Override
public CommonResult<Boolean> updateCategorySortBatch(List<Long> ids) {
categoryService.updateCategorySortBatch(ids);
return success(true);
}
@Override
public CommonResult<Boolean> deleteCategory(Long id) {
categoryService.deleteCategory(id);
return success(true);
}
@Override
public CommonResult<BpmCategoryRespDTO> getCategory(Long id) {
BpmCategoryDO category = categoryService.getCategory(id);
return success(BeanUtils.toBean(category, BpmCategoryRespDTO.class));
}
@Override
public CommonResult<PageResult<BpmCategoryRespDTO>> getCategoryPage(@Valid BpmCategoryPageReqDTO pageReqDTO) {
BpmCategoryPageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, BpmCategoryPageReqVO.class);
PageResult<BpmCategoryDO> pageResult = categoryService.getCategoryPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, BpmCategoryRespDTO.class));
}
@Override
public CommonResult<List<BpmCategoryRespDTO>> getCategorySimpleList() {
List<BpmCategoryDO> list = categoryService.getCategoryListByStatus(CommonStatusEnum.ENABLE.getStatus());
return success(BeanUtils.toBean(list, BpmCategoryRespDTO.class));
}
}

View File

@@ -0,0 +1,76 @@
package com.zt.plat.module.bpm.api.definition;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.bpm.api.definition.dto.BpmFormPageReqDTO;
import com.zt.plat.module.bpm.api.definition.dto.BpmFormRespDTO;
import com.zt.plat.module.bpm.api.definition.dto.BpmFormSaveReqDTO;
import com.zt.plat.module.bpm.controller.admin.definition.vo.form.BpmFormPageReqVO;
import com.zt.plat.module.bpm.controller.admin.definition.vo.form.BpmFormSaveReqVO;
import com.zt.plat.module.bpm.dal.dataobject.definition.BpmFormDO;
import com.zt.plat.module.bpm.service.definition.BpmFormService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import java.util.List;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
/**
* 动态表单 Api 实现类
*
* @author ZT
*/
@RestController
@Validated
public class BpmFormApiImpl implements BpmFormApi {
@Resource
private BpmFormService formService;
@Override
public CommonResult<Long> createForm(@Valid BpmFormSaveReqDTO createReqDTO) {
BpmFormSaveReqVO createReqVO = BeanUtils.toBean(createReqDTO, BpmFormSaveReqVO.class);
return success(formService.createForm(createReqVO));
}
@Override
public CommonResult<Boolean> updateForm(@Valid BpmFormSaveReqDTO updateReqDTO) {
BpmFormSaveReqVO updateReqVO = BeanUtils.toBean(updateReqDTO, BpmFormSaveReqVO.class);
formService.updateForm(updateReqVO);
return success(true);
}
@Override
public CommonResult<Boolean> deleteForm(Long id) {
formService.deleteForm(id);
return success(true);
}
@Override
public CommonResult<BpmFormRespDTO> getForm(Long id) {
BpmFormDO form = formService.getForm(id);
return success(BeanUtils.toBean(form, BpmFormRespDTO.class));
}
@Override
public CommonResult<PageResult<BpmFormRespDTO>> getFormPage(BpmFormPageReqDTO pageReqDTO) {
BpmFormPageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, BpmFormPageReqVO.class);
PageResult<BpmFormDO> pageResult = formService.getFormPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, BpmFormRespDTO.class));
}
@Override
public CommonResult<List<BpmFormRespDTO>> getFormSimpleList() {
List<BpmFormDO> list = formService.getFormList();
// 只返回 id、name 字段
List<BpmFormRespDTO> dtoList = list.stream()
.map(formDO -> new BpmFormRespDTO().setId(formDO.getId()).setName(formDO.getName()))
.collect(java.util.stream.Collectors.toList());
return success(dtoList);
}
}

View File

@@ -0,0 +1,41 @@
package com.zt.plat.module.bpm.api.definition;
import com.zt.plat.framework.common.enums.CommonStatusEnum;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.bpm.api.definition.dto.BpmUserGroupRespDTO;
import com.zt.plat.module.bpm.dal.dataobject.definition.BpmUserGroupDO;
import com.zt.plat.module.bpm.service.definition.BpmUserGroupService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import jakarta.annotation.Resource;
import java.util.List;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
/**
* 用户组 Api 实现类
*
* @author ZT
*/
@RestController
@Validated
public class BpmUserGroupApiImpl implements BpmUserGroupApi {
@Resource
private BpmUserGroupService userGroupService;
@Override
public CommonResult<BpmUserGroupRespDTO> getUserGroup(Long id) {
BpmUserGroupDO userGroup = userGroupService.getUserGroup(id);
return success(BeanUtils.toBean(userGroup, BpmUserGroupRespDTO.class));
}
@Override
public CommonResult<List<BpmUserGroupRespDTO>> getUserGroupSimpleList() {
List<BpmUserGroupDO> list = userGroupService.getUserGroupListByStatus(CommonStatusEnum.ENABLE.getStatus());
return success(BeanUtils.toBean(list, BpmUserGroupRespDTO.class));
}
}

View File

@@ -0,0 +1,197 @@
package com.zt.plat.module.bpm.api.task;
import cn.hutool.core.collection.CollUtil;
import com.zt.plat.framework.business.core.util.DeptUtil;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.number.NumberUtils;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
import com.zt.plat.module.bpm.api.task.dto.BpmTaskPageReqDTO;
import com.zt.plat.module.bpm.api.task.dto.BpmTaskRespDTO;
import com.zt.plat.module.bpm.controller.admin.task.vo.task.BpmTaskPageReqVO;
import com.zt.plat.module.bpm.convert.task.BpmTaskConvert;
import com.zt.plat.module.bpm.dal.dataobject.definition.BpmFormDO;
import com.zt.plat.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO;
import com.zt.plat.module.bpm.service.definition.BpmFormService;
import com.zt.plat.module.bpm.service.definition.BpmProcessDefinitionService;
import com.zt.plat.module.bpm.service.task.BpmProcessInstanceService;
import com.zt.plat.module.bpm.service.task.BpmTaskService;
import com.zt.plat.module.system.api.dept.DeptApi;
import com.zt.plat.module.system.api.dept.dto.DeptRespDTO;
import com.zt.plat.module.system.api.user.AdminUserApi;
import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import java.util.stream.Stream;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertSet;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertSetByFlatMap;
/**
* BPM 任务 API 实现类
*
* @author ZT
*/
@RestController
@Validated
public class BpmTaskApiImpl implements BpmTaskApi {
@Resource
private BpmTaskService taskService;
@Resource
private BpmProcessInstanceService processInstanceService;
@Resource
private BpmFormService formService;
@Resource
private BpmProcessDefinitionService processDefinitionService;
@Resource
private AdminUserApi adminUserApi;
@Resource
private DeptApi deptApi;
@Override
public CommonResult<List<BpmTaskRespDTO>> getTaskTodoPage(@Valid BpmTaskPageReqDTO pageReqDTO) {
// 转换请求参数
BpmTaskPageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, BpmTaskPageReqVO.class);
// 调用 Service 层方法
PageResult<Task> pageResult = taskService.getTaskTodoPage(SecurityFrameworkUtils.getLoginUserId(), pageReqVO);
if (CollUtil.isEmpty(pageResult.getList())) {
return success(new ArrayList<>());
}
// 拼接数据 - 参考 Controller 逻辑
Map<String, ProcessInstance> processInstanceMap = processInstanceService.getProcessInstanceMap(convertSet(pageResult.getList(), Task::getProcessInstanceId));
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId())));
Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap(convertSet(pageResult.getList(), Task::getProcessDefinitionId));
// 使用转换器构建结果并转换为 DTO
var voPageResult = BpmTaskConvert.INSTANCE.buildTodoTaskPage(pageResult, processInstanceMap, userMap, processDefinitionInfoMap);
return success(BeanUtils.toBean(voPageResult.getList(), BpmTaskRespDTO.class));
}
@Override
public CommonResult<List<BpmTaskRespDTO>> getTaskDonePage(@Valid BpmTaskPageReqDTO pageReqDTO) {
// 转换请求参数
BpmTaskPageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, BpmTaskPageReqVO.class);
// 调用 Service 层方法
PageResult<HistoricTaskInstance> pageResult = taskService.getTaskDonePage(SecurityFrameworkUtils.getLoginUserId(), pageReqVO);
if (CollUtil.isEmpty(pageResult.getList())) {
return success(new ArrayList<>());
}
// 拼接数据 - 参考 Controller 逻辑
Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap(convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId));
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId())));
Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap(convertSet(pageResult.getList(), HistoricTaskInstance::getProcessDefinitionId));
// 使用转换器构建结果并转换为 DTO
var voPageResult = BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, null, processDefinitionInfoMap);
return success(BeanUtils.toBean(voPageResult.getList(), BpmTaskRespDTO.class));
}
@Override
public CommonResult<List<BpmTaskRespDTO>> getTaskManagerPage(@Valid BpmTaskPageReqDTO pageReqDTO) {
// 转换请求参数
BpmTaskPageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, BpmTaskPageReqVO.class);
// 调用 Service 层方法
PageResult<HistoricTaskInstance> pageResult = taskService.getTaskPage(SecurityFrameworkUtils.getLoginUserId(), pageReqVO);
if (CollUtil.isEmpty(pageResult.getList())) {
return success(new ArrayList<>());
}
// 拼接数据 - 参考 Controller 逻辑
Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap(convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId));
// 获得 User 和 Dept Map
Set<Long> userIds = convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()));
userIds.addAll(convertSet(pageResult.getList(), task -> NumberUtils.parseLong(task.getAssignee())));
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), DeptUtil::getDeptId));
Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap(convertSet(pageResult.getList(), HistoricTaskInstance::getProcessDefinitionId));
// 使用转换器构建结果并转换为 DTO
var voPageResult = BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, deptMap, processDefinitionInfoMap);
return success(BeanUtils.toBean(voPageResult.getList(), BpmTaskRespDTO.class));
}
@Override
public CommonResult<List<BpmTaskRespDTO>> getTaskListByProcessInstanceId(String processInstanceId) {
// 调用 Service 层方法
List<HistoricTaskInstance> taskList = taskService.getTaskListByProcessInstanceId(processInstanceId, true);
if (CollUtil.isEmpty(taskList)) {
return success(Collections.emptyList());
}
// 拼接数据 - 参考 Controller 逻辑
Set<Long> userIds = convertSetByFlatMap(taskList, task -> Stream.of(NumberUtils.parseLong(task.getAssignee()), NumberUtils.parseLong(task.getOwner())));
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), DeptUtil::getDeptId));
// 获得 Form Map
Map<Long, BpmFormDO> formMap = formService.getFormMap(convertSet(taskList, task -> {
String formKey = task.getFormKey();
if (formKey == null || formKey.isBlank()) {
return 0L;
}
try {
return Long.parseLong(formKey);
} catch (NumberFormatException e) {
// 如果 formKey 不是数字比如是URL返回0L
return 0L;
}
}));
// 使用转换器构建结果并转换为 DTO
var voList = BpmTaskConvert.INSTANCE.buildTaskListByProcessInstanceId(taskList, formMap, userMap, deptMap);
List<BpmTaskRespDTO> result = BeanUtils.toBean(voList, BpmTaskRespDTO.class);
return success(result);
}
@Override
public CommonResult<List<BpmTaskRespDTO>> getTaskListByReturn(String id) {
// 调用 Service 层方法
var userTaskList = taskService.getUserTaskListByReturn(id);
// 转换返回结果 - 只返回 id 和 name对应 taskDefinitionKey 和 name
List<BpmTaskRespDTO> result = userTaskList.stream().map(userTask -> {
BpmTaskRespDTO dto = new BpmTaskRespDTO();
dto.setName(userTask.getName());
dto.setTaskDefinitionKey(userTask.getId());
return dto;
}).toList();
return success(result);
}
@Override
public CommonResult<List<BpmTaskRespDTO>> getTaskListByParentTaskId(String parentTaskId) {
// 调用 Service 层方法
List<Task> taskList = taskService.getTaskListByParentTaskId(parentTaskId);
if (CollUtil.isEmpty(taskList)) {
return success(Collections.emptyList());
}
// 拼接数据 - 参考 Controller 逻辑
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertSetByFlatMap(taskList, user -> Stream.of(NumberUtils.parseLong(user.getAssignee()), NumberUtils.parseLong(user.getOwner()))));
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), DeptUtil::getDeptId));
// 使用转换器构建结果并转换为 DTO
var voList = BpmTaskConvert.INSTANCE.buildTaskListByParentTaskId(taskList, userMap, deptMap);
List<BpmTaskRespDTO> result = BeanUtils.toBean(voList, BpmTaskRespDTO.class);
return success(result);
}
}