diff --git a/pom.xml b/pom.xml
index 6b0ef77d..e0e8bd5d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,7 +32,7 @@
https://github.com/YunaiV/ruoyi-vue-pro
- 3.0.35
+ 3.0.38
17
${java.version}
@@ -254,8 +254,8 @@
env-local
local
- localhost:8848
-
+
+ 172.16.46.63:30848
local
DEFAULT_GROUP
diff --git a/sql/dm/patch.sql b/sql/dm/patch.sql
index 2a130011..d20ce6f3 100644
--- a/sql/dm/patch.sql
+++ b/sql/dm/patch.sql
@@ -16,6 +16,7 @@ CREATE TABLE infra_bsn_file (
file_id bigint NOT NULL,
file_name varchar(500) DEFAULT '' NULL,
src varchar(100) DEFAULT '' NULL,
+ status smallint DEFAULT 1 NOT NULL,
creator varchar(64) DEFAULT '' NULL,
create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater varchar(64) DEFAULT '' NULL,
@@ -30,6 +31,7 @@ COMMENT ON COLUMN infra_bsn_file.bsn_cd IS '业务编码';
COMMENT ON COLUMN infra_bsn_file.file_id IS '附件fileId';
COMMENT ON COLUMN infra_bsn_file.file_name IS '附件名称';
COMMENT ON COLUMN infra_bsn_file.src IS '附件来源';
+COMMENT ON COLUMN infra_bsn_file.status IS '状态(1-正常,0-禁用)';
COMMENT ON COLUMN infra_bsn_file.creator IS '创建者';
COMMENT ON COLUMN infra_bsn_file.create_time IS '创建时间';
COMMENT ON COLUMN infra_bsn_file.updater IS '更新者';
diff --git a/sql/dm/新增业务附件表状态.sql b/sql/dm/新增业务附件表状态.sql
new file mode 100644
index 00000000..71f904aa
--- /dev/null
+++ b/sql/dm/新增业务附件表状态.sql
@@ -0,0 +1,3 @@
+-- 为业务附件关联表添加状态字段 (达梦数据库)
+ALTER TABLE infra_bsn_file ADD COLUMN status SMALLINT DEFAULT 1 NOT NULL;
+COMMENT ON COLUMN infra_bsn_file.status IS '状态(1-正常,0-禁用)';
\ No newline at end of file
diff --git a/zt-framework/zt-spring-boot-starter-biz-business/src/main/java/com/zt/plat/framework/business/filter/FileUploadFilter.java b/zt-framework/zt-spring-boot-starter-biz-business/src/main/java/com/zt/plat/framework/business/filter/FileUploadFilter.java
index 96848e57..e0bab5b2 100644
--- a/zt-framework/zt-spring-boot-starter-biz-business/src/main/java/com/zt/plat/framework/business/filter/FileUploadFilter.java
+++ b/zt-framework/zt-spring-boot-starter-biz-business/src/main/java/com/zt/plat/framework/business/filter/FileUploadFilter.java
@@ -3,6 +3,7 @@ package com.zt.plat.framework.business.filter;
import com.zt.plat.framework.common.util.spring.SpringUtils;
import com.zt.plat.module.infra.api.businessfile.BusinessFileApi;
import com.zt.plat.module.infra.api.businessfile.dto.BusinessFileSaveReqDTO;
+import com.zt.plat.module.infra.enums.businessfile.BusinessFileStatusEnum;
import com.esotericsoftware.minlog.Log;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -139,6 +140,7 @@ public class FileUploadFilter implements Filter {
createReqDTO.setFileId(Long.parseLong(fileId));
createReqDTO.setFileName(fileName);
createReqDTO.setSource(businessSource);
+ createReqDTO.setStatus(BusinessFileStatusEnum.NORMAL.getStatus()); // 设置默认状态为正常
reqDTOList.add(createReqDTO);
}
}
diff --git a/zt-module-bpm/zt-module-bpm-api/src/main/java/com/zt/plat/module/bpm/api/task/dto/BpmTaskRespDTO.java b/zt-module-bpm/zt-module-bpm-api/src/main/java/com/zt/plat/module/bpm/api/task/dto/BpmTaskRespDTO.java
index 1ae2e458..412c0981 100644
--- a/zt-module-bpm/zt-module-bpm-api/src/main/java/com/zt/plat/module/bpm/api/task/dto/BpmTaskRespDTO.java
+++ b/zt-module-bpm/zt-module-bpm-api/src/main/java/com/zt/plat/module/bpm/api/task/dto/BpmTaskRespDTO.java
@@ -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 formFields;
@Schema(description = "提交的表单值", example = "{\"name\": \"芋艿\"}")
private Map 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 children;
+
+ @Schema(description = "所属流程实例")
+ private ProcessInstanceDTO processInstance;
+
+ @Schema(description = "操作按钮设置值")
+ private Map 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> 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;
+ }
+
}
\ No newline at end of file
diff --git a/zt-module-bpm/zt-module-bpm-api/src/main/java/com/zt/plat/module/bpm/api/task/dto/UserSimpleDTO.java b/zt-module-bpm/zt-module-bpm-api/src/main/java/com/zt/plat/module/bpm/api/task/dto/UserSimpleDTO.java
new file mode 100644
index 00000000..ddb00d6d
--- /dev/null
+++ b/zt-module-bpm/zt-module-bpm-api/src/main/java/com/zt/plat/module/bpm/api/task/dto/UserSimpleDTO.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/zt-module-bpm/zt-module-bpm-server/src/main/java/com/zt/plat/module/bpm/api/task/BpmTaskApiImpl.java b/zt-module-bpm/zt-module-bpm-server/src/main/java/com/zt/plat/module/bpm/api/task/BpmTaskApiImpl.java
index d688f4ab..4d70c6ae 100644
--- a/zt-module-bpm/zt-module-bpm-server/src/main/java/com/zt/plat/module/bpm/api/task/BpmTaskApiImpl.java
+++ b/zt-module-bpm/zt-module-bpm-server/src/main/java/com/zt/plat/module/bpm/api/task/BpmTaskApiImpl.java
@@ -75,12 +75,14 @@ public class BpmTaskApiImpl implements BpmTaskApi {
Map userMap = adminUserApi.getUserMap(convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId())));
Map 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 result = BpmTaskConvert.INSTANCE.buildTaskRespDTOList(voPageResult.getList());
+
+ return success(result);
}
- @Override
+ @Override
public CommonResult> getTaskDonePage(@Valid BpmTaskPageReqDTO pageReqDTO) {
// 转换请求参数
BpmTaskPageReqVO pageReqVO = BeanUtils.toBean(pageReqDTO, BpmTaskPageReqVO.class);
@@ -96,9 +98,11 @@ public class BpmTaskApiImpl implements BpmTaskApi {
Map userMap = adminUserApi.getUserMap(convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId())));
Map 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 result = BpmTaskConvert.INSTANCE.buildTaskRespDTOList(voPageResult.getList());
+
+ return success(result);
}
@Override
@@ -121,9 +125,11 @@ public class BpmTaskApiImpl implements BpmTaskApi {
Map deptMap = deptApi.getDeptMap(convertSet(userMap.values(), DeptUtil::getDeptId));
Map 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 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 result = BeanUtils.toBean(voList, BpmTaskRespDTO.class);
+ List result = BpmTaskConvert.INSTANCE.buildTaskRespDTOList(voList);
return success(result);
}
@@ -187,9 +193,9 @@ public class BpmTaskApiImpl implements BpmTaskApi {
Map userMap = adminUserApi.getUserMap(convertSetByFlatMap(taskList, user -> Stream.of(NumberUtils.parseLong(user.getAssignee()), NumberUtils.parseLong(user.getOwner()))));
Map deptMap = deptApi.getDeptMap(convertSet(userMap.values(), DeptUtil::getDeptId));
- // 使用转换器构建结果并转换为 DTO
+ // 使用转换器构建完整的 VO 结果,然后转换为 DTO
var voList = BpmTaskConvert.INSTANCE.buildTaskListByParentTaskId(taskList, userMap, deptMap);
- List result = BeanUtils.toBean(voList, BpmTaskRespDTO.class);
+ List result = BpmTaskConvert.INSTANCE.buildTaskRespDTOList(voList);
return success(result);
}
diff --git a/zt-module-bpm/zt-module-bpm-server/src/main/java/com/zt/plat/module/bpm/convert/task/BpmTaskConvert.java b/zt-module-bpm/zt-module-bpm-server/src/main/java/com/zt/plat/module/bpm/convert/task/BpmTaskConvert.java
index 5926d842..ccba6d79 100644
--- a/zt-module-bpm/zt-module-bpm-server/src/main/java/com/zt/plat/module/bpm/convert/task/BpmTaskConvert.java
+++ b/zt-module-bpm/zt-module-bpm-server/src/main/java/com/zt/plat/module/bpm/convert/task/BpmTaskConvert.java
@@ -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 buildTaskRespDTOList(List 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 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;
+ }
+
}
diff --git a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/BusinessFileApi.java b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/BusinessFileApi.java
index 15cbf5cc..ded1090b 100644
--- a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/BusinessFileApi.java
+++ b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/BusinessFileApi.java
@@ -67,4 +67,19 @@ public interface BusinessFileApi {
CommonResult deleteBusinessFileByBusinessIdAndSource(@RequestParam("businessId") Long businessId,
@RequestParam("source") String source);
+ @PutMapping(PREFIX + "/enable")
+ @Operation(summary = "启用业务附件关联")
+ @Parameter(name = "id", description = "编号", required = true)
+ CommonResult enableBusinessFile(@RequestParam("id") Long id);
+
+ @PutMapping(PREFIX + "/disable")
+ @Operation(summary = "禁用业务附件关联")
+ @Parameter(name = "id", description = "编号", required = true)
+ CommonResult disableBusinessFile(@RequestParam("id") Long id);
+
+ @PutMapping(PREFIX + "/update-status")
+ @Operation(summary = "批量更新业务附件状态")
+ CommonResult updateBusinessFileStatus(@RequestParam("ids") List ids,
+ @RequestParam("status") Integer status);
+
}
diff --git a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFilePageReqDTO.java b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFilePageReqDTO.java
index 8bbf3872..46e78782 100644
--- a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFilePageReqDTO.java
+++ b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFilePageReqDTO.java
@@ -38,6 +38,11 @@ public class BusinessFilePageReqDTO extends PageParam implements Serializable {
*/
private String source;
+ /**
+ * 状态(1-正常,0-禁用)
+ */
+ private Integer status;
+
/**
* 创建时间
*/
diff --git a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFileRespDTO.java b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFileRespDTO.java
index 821db81e..82605536 100644
--- a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFileRespDTO.java
+++ b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFileRespDTO.java
@@ -49,6 +49,11 @@ public class BusinessFileRespDTO implements Serializable {
*/
private String source;
+ /**
+ * 状态(1-正常,0-禁用)
+ */
+ private Integer status;
+
/**
* 创建时间
*/
diff --git a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFileSaveReqDTO.java b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFileSaveReqDTO.java
index e3c390df..feda8107 100644
--- a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFileSaveReqDTO.java
+++ b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/businessfile/dto/BusinessFileSaveReqDTO.java
@@ -25,5 +25,7 @@ public class BusinessFileSaveReqDTO implements Serializable {
private Long fileId;
/** 业务来源 */
private String source;
+ /** 状态(1-正常,0-禁用) */
+ private Integer status;
}
diff --git a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/file/FileApi.java b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/file/FileApi.java
index 8f1e4889..ac773250 100644
--- a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/file/FileApi.java
+++ b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/file/FileApi.java
@@ -2,14 +2,18 @@ package com.zt.plat.module.infra.api.file;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.infra.api.file.dto.FileCreateReqDTO;
+import com.zt.plat.module.infra.api.file.dto.FileRespDTO;
import com.zt.plat.module.infra.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory =
@Tag(name = "RPC 服务 - 文件")
@@ -17,43 +21,19 @@ public interface FileApi {
String PREFIX = ApiConstants.PREFIX + "/file";
- /**
- * 保存文件,并返回文件的访问路径
- *
- * @param content 文件内容
- * @return 文件路径
- */
- default String createFile(byte[] content) {
- return createFile(content, null, null, null);
- }
-
- /**
- * 保存文件,并返回文件的访问路径
- *
- * @param content 文件内容
- * @param name 文件名称,允许空
- * @return 文件路径
- */
- default String createFile(byte[] content, String name) {
- return createFile(content, name, null, null);
- }
-
- /**
- * 保存文件,并返回文件的访问路径
- *
- * @param content 文件内容
- * @param name 文件名称,允许空
- * @param directory 目录,允许空
- * @param type 文件的 MIME 类型,允许空
- * @return 文件路径
- */
- default String createFile(@NotEmpty(message = "文件内容不能为空") byte[] content,
- String name, String directory, String type) {
- return createFile(new FileCreateReqDTO().setName(name).setDirectory(directory).setType(type).setContent(content)).getCheckedData();
- }
-
@PostMapping(PREFIX + "/create")
@Operation(summary = "保存文件,并返回文件的访问路径")
CommonResult createFile(@Valid @RequestBody FileCreateReqDTO createReqDTO);
+ /**
+ * 根据文件编号获取文件信息和二进制内容
+ *
+ * @param fileId 文件编号
+ * @return 文件信息,包含二进制数据
+ */
+ @GetMapping(PREFIX + "/get")
+ @Operation(summary = "根据文件编号获取文件信息和二进制内容")
+ CommonResult getFile(@Parameter(description = "文件编号", required = true, example = "1024")
+ @RequestParam("fileId") @NotNull(message = "文件编号不能为空") Long fileId);
+
}
diff --git a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/file/dto/FileRespDTO.java b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/file/dto/FileRespDTO.java
new file mode 100644
index 00000000..c5a77274
--- /dev/null
+++ b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/api/file/dto/FileRespDTO.java
@@ -0,0 +1,28 @@
+package com.zt.plat.module.infra.api.file.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "RPC 服务 - 文件信息 Response DTO")
+@Data
+public class FileRespDTO {
+
+ @Schema(description = "文件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long id;
+
+ @Schema(description = "原文件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "xxx.png")
+ private String name;
+
+ @Schema(description = "文件目录", example = "xxx")
+ private String directory;
+
+ @Schema(description = "文件的 MIME 类型", example = "image/png")
+ private String type;
+
+ @Schema(description = "文件大小", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Integer size;
+
+ @Schema(description = "文件内容", requiredMode = Schema.RequiredMode.REQUIRED)
+ private byte[] content;
+
+}
\ No newline at end of file
diff --git a/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/enums/businessfile/BusinessFileStatusEnum.java b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/enums/businessfile/BusinessFileStatusEnum.java
new file mode 100644
index 00000000..4832c258
--- /dev/null
+++ b/zt-module-infra/zt-module-infra-api/src/main/java/com/zt/plat/module/infra/enums/businessfile/BusinessFileStatusEnum.java
@@ -0,0 +1,33 @@
+package com.zt.plat.module.infra.enums.businessfile;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 业务附件状态枚举
+ *
+ * @author 后台管理
+ */
+@AllArgsConstructor
+@Getter
+public enum BusinessFileStatusEnum {
+
+ /**
+ * 正常
+ */
+ NORMAL(1, "正常"),
+ /**
+ * 禁用
+ */
+ DISABLED(0, "禁用");
+
+ /**
+ * 状态
+ */
+ private final Integer status;
+ /**
+ * 状态名
+ */
+ private final String name;
+
+}
\ No newline at end of file
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/api/businessfile/BusinessFileApiImpl.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/api/businessfile/BusinessFileApiImpl.java
index 9f20657e..5731f200 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/api/businessfile/BusinessFileApiImpl.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/api/businessfile/BusinessFileApiImpl.java
@@ -84,4 +84,22 @@ public class BusinessFileApiImpl implements BusinessFileApi {
businessFileService.deleteBusinessFileByBusinessIdAndSource(businessId, source);
return success(true);
}
+
+ @Override
+ public CommonResult enableBusinessFile(Long id) {
+ businessFileService.enableBusinessFile(id);
+ return success(true);
+ }
+
+ @Override
+ public CommonResult disableBusinessFile(Long id) {
+ businessFileService.disableBusinessFile(id);
+ return success(true);
+ }
+
+ @Override
+ public CommonResult updateBusinessFileStatus(List ids, Integer status) {
+ businessFileService.updateBusinessFileStatus(ids, status);
+ return success(true);
+ }
}
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/api/file/FileApiImpl.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/api/file/FileApiImpl.java
index 36719957..1dd7559e 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/api/file/FileApiImpl.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/api/file/FileApiImpl.java
@@ -2,6 +2,8 @@ package com.zt.plat.module.infra.api.file;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.infra.api.file.dto.FileCreateReqDTO;
+import com.zt.plat.module.infra.api.file.dto.FileRespDTO;
+import com.zt.plat.module.infra.dal.dataobject.file.FileDO;
import com.zt.plat.module.infra.service.file.FileService;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@@ -22,4 +24,40 @@ public class FileApiImpl implements FileApi {
createReqDTO.getDirectory(), createReqDTO.getType(), false));
}
+ @Override
+ public CommonResult getFile(Long fileId) {
+ try {
+ // 获取文件信息
+ FileDO fileDO = fileService.getActiveFileById(fileId);
+ if (fileDO == null) {
+ return CommonResult.error(404, "文件不存在");
+ }
+
+ // 获取文件内容
+ byte[] content = fileService.getFileContent(fileId);
+ if (content == null) {
+ return CommonResult.error(500, "文件内容读取失败");
+ }
+
+ // 构建响应对象
+ FileRespDTO respDTO = new FileRespDTO();
+ respDTO.setId(fileDO.getId());
+ respDTO.setName(fileDO.getName());
+ respDTO.setType(fileDO.getType());
+ respDTO.setSize(fileDO.getSize());
+ respDTO.setContent(content);
+
+ // 从文件路径或URL中提取目录信息
+ String path = fileDO.getPath();
+ if (path != null && path.contains("/")) {
+ String directory = path.substring(0, path.lastIndexOf("/"));
+ respDTO.setDirectory(directory);
+ }
+
+ return success(respDTO);
+ } catch (Exception e) {
+ return CommonResult.error(500, "获取文件失败:" + e.getMessage());
+ }
+ }
+
}
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/BusinessFileController.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/BusinessFileController.java
index 82971af0..8c4f8eaa 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/BusinessFileController.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/BusinessFileController.java
@@ -129,4 +129,31 @@ public class BusinessFileController {
return success(true);
}
+ @PutMapping("/enable")
+ @Operation(summary = "启用业务附件关联")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('infra:business-file:update')")
+ public CommonResult enableBusinessFile(@RequestParam("id") Long id) {
+ businessFileService.enableBusinessFile(id);
+ return success(true);
+ }
+
+ @PutMapping("/disable")
+ @Operation(summary = "禁用业务附件关联")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('infra:business-file:update')")
+ public CommonResult disableBusinessFile(@RequestParam("id") Long id) {
+ businessFileService.disableBusinessFile(id);
+ return success(true);
+ }
+
+ @PutMapping("/update-status")
+ @Operation(summary = "批量更新业务附件状态")
+ @PreAuthorize("@ss.hasPermission('infra:business-file:update')")
+ public CommonResult updateBusinessFileStatus(@RequestParam("ids") List ids,
+ @RequestParam("status") Integer status) {
+ businessFileService.updateBusinessFileStatus(ids, status);
+ return success(true);
+ }
+
}
\ No newline at end of file
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFilePageReqVO.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFilePageReqVO.java
index 6f57c5b6..34d1c44e 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFilePageReqVO.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFilePageReqVO.java
@@ -28,6 +28,9 @@ public class BusinessFilePageReqVO extends PageParam {
@Schema(description = "附件来源")
private String source;
+ @Schema(description = "状态(1-正常,0-禁用)", example = "1")
+ private Integer status;
+
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFileRespVO.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFileRespVO.java
index f5be615b..c9990c42 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFileRespVO.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFileRespVO.java
@@ -36,6 +36,10 @@ public class BusinessFileRespVO {
@ExcelProperty("附件来源")
private String source;
+ @Schema(description = "状态(1-正常,0-禁用)", example = "1")
+ @ExcelProperty("状态")
+ private Integer status;
+
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@@ -43,7 +47,4 @@ public class BusinessFileRespVO {
@Schema(description = "创建人", example = "1024")
private String creator;
- @Schema(description = "创建人名称", example = "张三")
- private String creatorName;
-
}
\ No newline at end of file
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFileSaveReqVO.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFileSaveReqVO.java
index 0e4a9156..632a5e9a 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFileSaveReqVO.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/controller/admin/businessfile/vo/BusinessFileSaveReqVO.java
@@ -25,4 +25,7 @@ public class BusinessFileSaveReqVO {
@Schema(description = "附件来源")
private String source;
+ @Schema(description = "状态(1-正常,0-禁用)", example = "1")
+ private Integer status;
+
}
\ No newline at end of file
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/dataobject/businessfile/BusinessFileDO.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/dataobject/businessfile/BusinessFileDO.java
index 7fb447a7..84df46e9 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/dataobject/businessfile/BusinessFileDO.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/dataobject/businessfile/BusinessFileDO.java
@@ -48,6 +48,11 @@ public class BusinessFileDO extends BaseDO {
*/
@TableField("SRC")
private String source;
+ /**
+ * 状态(1-正常,0-禁用)
+ */
+ @TableField("STATUS")
+ private Integer status;
}
\ No newline at end of file
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/mysql/businessfile/BusinessFileMapper.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/mysql/businessfile/BusinessFileMapper.java
index a305ed54..35b67b26 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/mysql/businessfile/BusinessFileMapper.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/dal/mysql/businessfile/BusinessFileMapper.java
@@ -24,6 +24,7 @@ public interface BusinessFileMapper extends BaseMapperX {
.eqIfPresent(BusinessFileDO::getFileId, reqVO.getFileId())
.likeIfPresent(BusinessFileDO::getFileName, reqVO.getFileName())
.eqIfPresent(BusinessFileDO::getSource, reqVO.getSource())
+ .eqIfPresent(BusinessFileDO::getStatus, reqVO.getStatus())
.betweenIfPresent(BusinessFileDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(BusinessFileDO::getId));
}
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/businessfile/BusinessFileService.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/businessfile/BusinessFileService.java
index 6d888dd3..c9b79f35 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/businessfile/BusinessFileService.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/businessfile/BusinessFileService.java
@@ -72,4 +72,27 @@ public interface BusinessFileService {
* @param source 业务来源
*/
void deleteBusinessFileByBusinessIdAndSource(Long businessId, String source);
+
+ /**
+ * 启用业务附件关联
+ *
+ * @param id 编号
+ */
+ void enableBusinessFile(Long id);
+
+ /**
+ * 禁用业务附件关联
+ *
+ * @param id 编号
+ */
+ void disableBusinessFile(Long id);
+
+ /**
+ * 批量更新业务附件状态
+ *
+ * @param ids 编号列表
+ * @param status 状态
+ */
+ void updateBusinessFileStatus(List ids, Integer status);
+
}
\ No newline at end of file
diff --git a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/businessfile/BusinessFileServiceImpl.java b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/businessfile/BusinessFileServiceImpl.java
index e53b539a..eb482468 100644
--- a/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/businessfile/BusinessFileServiceImpl.java
+++ b/zt-module-infra/zt-module-infra-server/src/main/java/com/zt/plat/module/infra/service/businessfile/BusinessFileServiceImpl.java
@@ -12,6 +12,7 @@ import com.zt.plat.module.infra.controller.admin.businessfile.vo.BusinessFileWit
import com.zt.plat.module.infra.dal.dataobject.businessfile.BusinessFileDO;
import com.zt.plat.module.infra.dal.dataobject.file.FileDO;
import com.zt.plat.module.infra.dal.mysql.businessfile.BusinessFileMapper;
+import com.zt.plat.module.infra.enums.businessfile.BusinessFileStatusEnum;
import com.zt.plat.module.infra.service.file.FileService;
import com.zt.plat.module.system.api.user.AdminUserApi;
import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO;
@@ -46,6 +47,10 @@ public class BusinessFileServiceImpl implements BusinessFileService {
public Long createBusinessFile(BusinessFileSaveReqVO createReqVO) {
// 插入
BusinessFileDO businessFile = BeanUtils.toBean(createReqVO, BusinessFileDO.class);
+ // 设置默认状态为正常
+ if (businessFile.getStatus() == null) {
+ businessFile.setStatus(BusinessFileStatusEnum.NORMAL.getStatus());
+ }
businessFileMapper.insert(businessFile);
// 返回
return businessFile.getId();
@@ -167,6 +172,10 @@ public class BusinessFileServiceImpl implements BusinessFileService {
List businessFileList = BeanUtils.toBean(createReqVOList, BusinessFileDO.class);
List ids = new ArrayList<>();
for (BusinessFileDO businessFile : businessFileList) {
+ // 设置默认状态为正常
+ if (businessFile.getStatus() == null) {
+ businessFile.setStatus(BusinessFileStatusEnum.NORMAL.getStatus());
+ }
businessFileMapper.insert(businessFile);
ids.add(businessFile.getId());
}
@@ -179,4 +188,39 @@ public class BusinessFileServiceImpl implements BusinessFileService {
.eq(BusinessFileDO::getBusinessId, businessId)
.eq(BusinessFileDO::getSource, source));
}
+
+ @Override
+ public void enableBusinessFile(Long id) {
+ // 校验存在
+ validateBusinessFileExists(id);
+ // 更新状态为正常
+ BusinessFileDO updateObj = new BusinessFileDO();
+ updateObj.setId(id);
+ updateObj.setStatus(BusinessFileStatusEnum.NORMAL.getStatus());
+ businessFileMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void disableBusinessFile(Long id) {
+ // 校验存在
+ validateBusinessFileExists(id);
+ // 更新状态为禁用
+ BusinessFileDO updateObj = new BusinessFileDO();
+ updateObj.setId(id);
+ updateObj.setStatus(BusinessFileStatusEnum.DISABLED.getStatus());
+ businessFileMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void updateBusinessFileStatus(List ids, Integer status) {
+ // 校验存在
+ validateBusinessFileExists(ids);
+ // 批量更新状态
+ for (Long id : ids) {
+ BusinessFileDO updateObj = new BusinessFileDO();
+ updateObj.setId(id);
+ updateObj.setStatus(status);
+ businessFileMapper.updateById(updateObj);
+ }
+ }
}
\ No newline at end of file
diff --git a/zt-module-system/zt-module-system-api/src/main/java/com/zt/plat/module/system/api/user/dto/AdminUserRespDTO.java b/zt-module-system/zt-module-system-api/src/main/java/com/zt/plat/module/system/api/user/dto/AdminUserRespDTO.java
index fab27124..d726751b 100644
--- a/zt-module-system/zt-module-system-api/src/main/java/com/zt/plat/module/system/api/user/dto/AdminUserRespDTO.java
+++ b/zt-module-system/zt-module-system-api/src/main/java/com/zt/plat/module/system/api/user/dto/AdminUserRespDTO.java
@@ -23,6 +23,16 @@ public class AdminUserRespDTO implements VO {
@Schema(description = "部门编号列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private List deptIds;
+ @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "1")
+ private Long deptId;
+
+ public Long getDeptId() {
+ if (deptIds != null && !deptIds.isEmpty()) {
+ return deptIds.get(0);
+ }
+ return null;
+ }
+
@Schema(description = "岗位编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1, 3]")
private Set postIds;
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/api/user/AdminUserApiImpl.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/api/user/AdminUserApiImpl.java
index 8727bcdf..07fa5d35 100644
--- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/api/user/AdminUserApiImpl.java
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/api/user/AdminUserApiImpl.java
@@ -12,16 +12,16 @@ import com.zt.plat.module.system.api.user.dto.AdminUserUpdateStatusReqDTO;
import com.zt.plat.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import com.zt.plat.module.system.dal.dataobject.dept.DeptDO;
import com.zt.plat.module.system.dal.dataobject.user.AdminUserDO;
+import com.zt.plat.module.system.dal.dataobject.userdept.UserDeptDO;
import com.zt.plat.module.system.service.dept.DeptService;
import com.zt.plat.module.system.service.user.AdminUserService;
+import com.zt.plat.module.system.service.userdept.UserDeptService;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertSet;
@@ -34,6 +34,8 @@ public class AdminUserApiImpl implements AdminUserApi {
private AdminUserService userService;
@Resource
private DeptService deptService;
+ @Resource
+ private UserDeptService userDeptService;
@Override
public CommonResult createUser(AdminUserSaveReqDTO reqVO) {
@@ -107,7 +109,23 @@ public class AdminUserApiImpl implements AdminUserApi {
public CommonResult> getUserList(Collection ids) {
return DataPermissionUtils.executeIgnore(() -> { // 禁用数据权限。原因是,一般基于指定 id 的 API 查询,都是数据拼接为主
List users = userService.getUserList(ids);
- return success(BeanUtils.toBean(users, AdminUserRespDTO.class));
+ List validUserDeptListByUserIds = userDeptService.getValidUserDeptListByUserIds(ids);
+
+ // 构建用户ID到部门ID列表的映射
+ Map> userDeptMap = validUserDeptListByUserIds.stream()
+ .collect(Collectors.groupingBy(
+ UserDeptDO::getUserId,
+ Collectors.mapping(UserDeptDO::getDeptId, Collectors.toList())
+ ));
+
+ // 转换并设置部门信息
+ List userRespList = BeanUtils.toBean(users, AdminUserRespDTO.class);
+ userRespList.forEach(userResp -> {
+ List deptIds = userDeptMap.getOrDefault(userResp.getId(), new ArrayList<>());
+ userResp.setDeptIds(deptIds);
+ });
+
+ return success(userRespList);
});
}
diff --git a/zt-module-template/zt-module-template-server/src/main/java/com/zt/plat/module/template/controller/admin/contract/DemoContractController.java b/zt-module-template/zt-module-template-server/src/main/java/com/zt/plat/module/template/controller/admin/contract/DemoContractController.java
index 6f39be19..b91e8e9d 100644
--- a/zt-module-template/zt-module-template-server/src/main/java/com/zt/plat/module/template/controller/admin/contract/DemoContractController.java
+++ b/zt-module-template/zt-module-template-server/src/main/java/com/zt/plat/module/template/controller/admin/contract/DemoContractController.java
@@ -13,11 +13,10 @@ import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.framework.excel.core.util.ExcelUtils;
import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi;
import com.zt.plat.module.bpm.api.task.BpmTaskApi;
-import com.zt.plat.module.bpm.api.task.dto.BpmTaskRespDTO;
import com.zt.plat.module.infra.api.businessfile.BusinessFileApi;
-import com.zt.plat.module.infra.api.businessfile.dto.BusinessFilePageReqDTO;
+import com.zt.plat.module.infra.api.file.FileApi;
+import com.zt.plat.module.infra.api.file.dto.FileRespDTO;
import com.zt.plat.module.system.api.dept.DeptApi;
-import com.zt.plat.module.system.api.dept.dto.CompanyDeptInfoRespDTO;
import com.zt.plat.module.template.controller.admin.contract.vo.DemoContractPageReqVO;
import com.zt.plat.module.template.controller.admin.contract.vo.DemoContractRespVO;
import com.zt.plat.module.template.controller.admin.contract.vo.DemoContractSaveReqVO;
@@ -35,11 +34,9 @@ import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
-import java.util.Set;
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
-import static com.zt.plat.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "管理后台 - 合同")
@RestController
@@ -67,6 +64,8 @@ public class DemoContractController extends AbstractFileUploadController impleme
private BpmTaskApi bpmTaskApi;
@Resource
private BpmProcessInstanceApi bpmInsApi;
+ @Resource
+ private FileApi fileApi;
@PostMapping("/create")
@Operation(summary = "创建合同")
@@ -114,9 +113,7 @@ public class DemoContractController extends AbstractFileUploadController impleme
@Operation(summary = "获得合同分页")
@PreAuthorize("@ss.hasPermission('template:demo-contract:query')")
public CommonResult> getDemoContractPage(@Valid DemoContractPageReqVO pageReqVO) {
- BusinessFilePageReqDTO pageReqDTO = new BusinessFilePageReqDTO();
- CommonResult> taskTodoPage = bpmTaskApi.getTaskListByProcessInstanceId("1111");
- CommonResult> companyDeptInfoListByUserId = deptApi.getCompanyDeptInfoListByUserId(getLoginUserId());
+ CommonResult file = fileApi.getFile(1968928810422521857L);
Long id = IdWorker.getId();
System.out.println("Generated ID: " + id);
PageResult pageResult = demoContractService.getDemoContractPage(pageReqVO);