Merge remote-tracking branch 'base-version/main' into test

# Conflicts:
#	pom.xml
#	zt-dependencies/pom.xml
This commit is contained in:
chenbowen
2025-09-25 19:25:47 +08:00
29 changed files with 519 additions and 68 deletions

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.bpm.api.task.dto;
import com.zt.plat.framework.common.core.KeyValue;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -46,14 +47,87 @@ public class BpmTaskRespDTO {
@Schema(description = "表单编号", example = "1024")
private Long formId;
@Schema(description = "表单路径", example = "/form/leave")
private String formPath;
@Schema(description = "表单名字", example = "请假表单")
private String formName;
@Schema(description = "表单的配置", example = "[]")
private String formConf;
@Schema(description = "表单项的数组", example = "[]")
private String formFields;
private List<String> formFields;
@Schema(description = "提交的表单值", example = "{\"name\": \"芋艿\"}")
private Map<String, Object> formVariables;
@Schema(description = "任务负责人编号", example = "2048")
private Long owner;
@Schema(description = "负责人的用户信息")
private UserSimpleDTO ownerUser;
@Schema(description = "任务分配人编号", example = "2048")
private Long assignee;
@Schema(description = "审核的用户信息")
private UserSimpleDTO assigneeUser;
@Schema(description = "父任务编号", example = "1024")
private String parentTaskId;
@Schema(description = "子任务列表(由加签生成)")
private List<BpmTaskRespDTO> children;
@Schema(description = "所属流程实例")
private ProcessInstanceDTO processInstance;
@Schema(description = "操作按钮设置值")
private Map<Integer, OperationButtonSettingDTO> buttonsSetting;
@Schema(description = "是否需要签名", example = "false")
private Boolean signEnable;
@Schema(description = "是否填写审批意见", example = "false")
private Boolean reasonRequire;
@Schema(description = "节点类型", example = "10")
private Integer nodeType;
@Data
@Schema(description = "流程实例信息")
public static class ProcessInstanceDTO {
@Schema(description = "流程实例编号", example = "1024")
private String id;
@Schema(description = "流程实例名称", example = "芋道")
private String name;
@Schema(description = "提交时间")
private LocalDateTime createTime;
@Schema(description = "流程定义的编号", example = "2048")
private String processDefinitionId;
@Schema(description = "流程摘要", example = "[]")
private List<KeyValue<String, String>> summary;
@Schema(description = "发起人的用户信息")
private UserSimpleDTO startUser;
}
@Data
@Schema(description = "操作按钮设置")
public static class OperationButtonSettingDTO {
@Schema(description = "显示名称", example = "审批")
private String displayName;
@Schema(description = "是否启用", example = "true")
private Boolean enable;
}
}

View File

@@ -0,0 +1,25 @@
package com.zt.plat.module.bpm.api.task.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "RPC 服务 - 用户精简信息 DTO")
@Data
public class UserSimpleDTO {
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
private String nickname;
@Schema(description = "用户头像", example = "https://www.iocoder.cn/1.png")
private String avatar;
@Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long deptId;
@Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "研发部")
private String deptName;
}

View File

@@ -75,12 +75,14 @@ public class BpmTaskApiImpl implements BpmTaskApi {
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
// 使用转换器构建完整的 VO 结果,然后转换为 DTO
var voPageResult = BpmTaskConvert.INSTANCE.buildTodoTaskPage(pageResult, processInstanceMap, userMap, processDefinitionInfoMap);
return success(BeanUtils.toBean(voPageResult.getList(), BpmTaskRespDTO.class));
List<BpmTaskRespDTO> result = BpmTaskConvert.INSTANCE.buildTaskRespDTOList(voPageResult.getList());
return success(result);
}
@Override
@Override
public CommonResult<List<BpmTaskRespDTO>> getTaskDonePage(@Valid BpmTaskPageReqDTO pageReqDTO) {
// 转换请求参数
BpmTaskPageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, BpmTaskPageReqVO.class);
@@ -96,9 +98,11 @@ public class BpmTaskApiImpl implements BpmTaskApi {
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
// 使用转换器构建完整的 VO 结果,然后转换为 DTO
var voPageResult = BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, null, processDefinitionInfoMap);
return success(BeanUtils.toBean(voPageResult.getList(), BpmTaskRespDTO.class));
List<BpmTaskRespDTO> result = BpmTaskConvert.INSTANCE.buildTaskRespDTOList(voPageResult.getList());
return success(result);
}
@Override
@@ -121,9 +125,11 @@ public class BpmTaskApiImpl implements BpmTaskApi {
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), DeptUtil::getDeptId));
Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap(convertSet(pageResult.getList(), HistoricTaskInstance::getProcessDefinitionId));
// 使用转换器构建结果并转换为 DTO
// 使用转换器构建完整的 VO 结果,然后转换为 DTO
var voPageResult = BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, deptMap, processDefinitionInfoMap);
return success(BeanUtils.toBean(voPageResult.getList(), BpmTaskRespDTO.class));
List<BpmTaskRespDTO> result = BpmTaskConvert.INSTANCE.buildTaskRespDTOList(voPageResult.getList());
return success(result);
}
@Override
@@ -152,9 +158,9 @@ public class BpmTaskApiImpl implements BpmTaskApi {
}
}));
// 使用转换器构建结果并转换为 DTO
// 使用转换器构建完整的 VO 结果,然后转换为 DTO
var voList = BpmTaskConvert.INSTANCE.buildTaskListByProcessInstanceId(taskList, formMap, userMap, deptMap);
List<BpmTaskRespDTO> result = BeanUtils.toBean(voList, BpmTaskRespDTO.class);
List<BpmTaskRespDTO> result = BpmTaskConvert.INSTANCE.buildTaskRespDTOList(voList);
return success(result);
}
@@ -187,9 +193,9 @@ public class BpmTaskApiImpl implements BpmTaskApi {
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
// 使用转换器构建完整的 VO 结果,然后转换为 DTO
var voList = BpmTaskConvert.INSTANCE.buildTaskListByParentTaskId(taskList, userMap, deptMap);
List<BpmTaskRespDTO> result = BeanUtils.toBean(voList, BpmTaskRespDTO.class);
List<BpmTaskRespDTO> result = BpmTaskConvert.INSTANCE.buildTaskRespDTOList(voList);
return success(result);
}

View File

@@ -8,6 +8,8 @@ import com.zt.plat.framework.common.util.collection.CollectionUtils;
import com.zt.plat.framework.common.util.date.DateUtils;
import com.zt.plat.framework.common.util.number.NumberUtils;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.bpm.api.task.dto.BpmTaskRespDTO;
import com.zt.plat.module.bpm.api.task.dto.UserSimpleDTO;
import com.zt.plat.module.bpm.controller.admin.base.user.UserSimpleBaseVO;
import com.zt.plat.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
import com.zt.plat.module.bpm.dal.dataobject.definition.BpmFormDO;
@@ -230,4 +232,85 @@ public interface BpmTaskConvert {
childTask.setTenantId(parentTask.getTenantId());
}
/**
* 将 BpmTaskRespVO 转换为 BpmTaskRespDTO保持完整的嵌套结构
*/
default List<BpmTaskRespDTO> buildTaskRespDTOList(List<BpmTaskRespVO> voList) {
return CollectionUtils.convertList(voList, this::buildTaskRespDTO);
}
/**
* 将 BpmTaskRespVO 转换为 BpmTaskRespDTO保持完整的嵌套结构
*/
default BpmTaskRespDTO buildTaskRespDTO(BpmTaskRespVO vo) {
if (vo == null) {
return null;
}
BpmTaskRespDTO dto = BeanUtils.toBean(vo, BpmTaskRespDTO.class);
// 转换用户信息
if (vo.getAssigneeUser() != null) {
dto.setAssigneeUser(convertToUserSimpleDTO(vo.getAssigneeUser()));
}
if (vo.getOwnerUser() != null) {
dto.setOwnerUser(convertToUserSimpleDTO(vo.getOwnerUser()));
}
// 转换流程实例信息
if (vo.getProcessInstance() != null) {
BpmTaskRespDTO.ProcessInstanceDTO processInstanceDTO = new BpmTaskRespDTO.ProcessInstanceDTO();
processInstanceDTO.setId(vo.getProcessInstance().getId());
processInstanceDTO.setName(vo.getProcessInstance().getName());
processInstanceDTO.setCreateTime(vo.getProcessInstance().getCreateTime());
processInstanceDTO.setProcessDefinitionId(vo.getProcessInstance().getProcessDefinitionId());
processInstanceDTO.setSummary(vo.getProcessInstance().getSummary());
if (vo.getProcessInstance().getStartUser() != null) {
processInstanceDTO.setStartUser(convertToUserSimpleDTO(vo.getProcessInstance().getStartUser()));
}
dto.setProcessInstance(processInstanceDTO);
}
// 转换操作按钮设置
if (vo.getButtonsSetting() != null) {
Map<Integer, BpmTaskRespDTO.OperationButtonSettingDTO> buttonsSettingDTO = vo.getButtonsSetting().entrySet()
.stream()
.collect(java.util.stream.Collectors.toMap(
Map.Entry::getKey,
entry -> {
BpmTaskRespDTO.OperationButtonSettingDTO settingDTO = new BpmTaskRespDTO.OperationButtonSettingDTO();
settingDTO.setDisplayName(entry.getValue().getDisplayName());
settingDTO.setEnable(entry.getValue().getEnable());
return settingDTO;
}
));
dto.setButtonsSetting(buttonsSettingDTO);
}
// 递归转换子任务
if (vo.getChildren() != null) {
dto.setChildren(buildTaskRespDTOList(vo.getChildren()));
}
return dto;
}
/**
* 将 UserSimpleBaseVO 转换为 UserSimpleDTO确保所有字段都被正确赋值
*/
default UserSimpleDTO convertToUserSimpleDTO(UserSimpleBaseVO vo) {
if (vo == null) {
return null;
}
UserSimpleDTO dto = new UserSimpleDTO();
dto.setId(vo.getId());
dto.setNickname(vo.getNickname());
dto.setAvatar(vo.getAvatar());
dto.setDeptId(vo.getDeptId());
dto.setDeptName(vo.getDeptName()); // 确保 deptName 被正确赋值
return dto;
}
}