refactor: 优化部门管理相关 API,合并 DeptResp 及 DeptDetailResp

This commit is contained in:
Charles7c 2024-04-10 21:27:46 +08:00
parent bd0f40c6ad
commit a2cf072609
7 changed files with 39 additions and 122 deletions

View File

@ -38,11 +38,11 @@ public class DeptQuery implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 名称
* 关键词
*/
@Schema(description = "名称", example = "测试部")
@Query(type = QueryType.LIKE)
private String name;
@Schema(description = "关键词", example = "测试部")
@Query(columns = {"name", "description"}, type = QueryType.LIKE)
private String description;
/**
* 状态

View File

@ -1,101 +0,0 @@
/*
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package top.charles7c.continew.admin.system.model.resp;
import cn.crane4j.annotation.AssembleMethod;
import cn.crane4j.annotation.ContainerMethod;
import cn.crane4j.annotation.Mapping;
import cn.crane4j.annotation.condition.ConditionOnExpression;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import top.charles7c.continew.admin.common.enums.DisEnableStatusEnum;
import top.charles7c.continew.admin.system.service.DeptService;
import top.charles7c.continew.starter.extension.crud.converter.ExcelBaseEnumConverter;
import top.charles7c.continew.starter.extension.crud.model.resp.BaseDetailResp;
import java.io.Serial;
/**
* 部门详情信息
*
* @author Charles7c
* @since 2023/2/1 22:19
*/
@Data
@ExcelIgnoreUnannotated
@Schema(description = "部门详情信息")
public class DeptDetailResp extends BaseDetailResp {
@Serial
private static final long serialVersionUID = 1L;
/**
* 名称
*/
@Schema(description = "名称", example = "测试部")
@ExcelProperty(value = "名称")
private String name;
/**
* 上级部门 ID
*/
@Schema(description = "上级部门 ID", example = "2")
@ConditionOnExpression(value = "#target.parentId != 0")
@AssembleMethod(targetType = DeptService.class, method = @ContainerMethod(bindMethod = "get", resultType = DeptDetailResp.class), props = @Mapping(src = "name", ref = "parentName"))
private Long parentId;
/**
* 上级部门
*/
@Schema(description = "上级部门", example = "天津总部")
@ExcelProperty(value = "上级部门")
private String parentName;
/**
* 排序
*/
@Schema(description = "排序", example = "1")
private Integer sort;
/**
* 状态
*/
@Schema(description = "状态1启用2禁用", type = "Integer", allowableValues = {"1", "2"}, example = "1")
@ExcelProperty(value = "状态", converter = ExcelBaseEnumConverter.class)
private DisEnableStatusEnum status;
/**
* 是否为系统内置数据
*/
@Schema(description = "是否为系统内置数据", example = "false")
@ExcelProperty(value = "系统内置")
private Boolean isSystem;
/**
* 描述
*/
@Schema(description = "描述", example = "测试部描述信息")
@ExcelProperty(value = "描述")
private String description;
@Override
public Boolean getDisabled() {
return this.getIsSystem();
}
}

View File

@ -16,11 +16,19 @@
package top.charles7c.continew.admin.system.model.resp;
import cn.crane4j.annotation.AssembleMethod;
import cn.crane4j.annotation.ContainerMethod;
import cn.crane4j.annotation.Mapping;
import cn.crane4j.annotation.condition.ConditionOnExpression;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import top.charles7c.continew.admin.common.enums.DisEnableStatusEnum;
import top.charles7c.continew.admin.system.service.DeptService;
import top.charles7c.continew.starter.extension.crud.annotation.TreeField;
import top.charles7c.continew.starter.extension.crud.model.resp.BaseResp;
import top.charles7c.continew.starter.extension.crud.converter.ExcelBaseEnumConverter;
import top.charles7c.continew.starter.extension.crud.model.resp.BaseDetailResp;
import java.io.Serial;
@ -31,9 +39,10 @@ import java.io.Serial;
* @since 2023/1/22 13:53
*/
@Data
@ExcelIgnoreUnannotated
@TreeField(value = "id", nameKey = "name")
@Schema(description = "部门信息")
public class DeptResp extends BaseResp {
public class DeptResp extends BaseDetailResp {
@Serial
private static final long serialVersionUID = 1L;
@ -42,36 +51,50 @@ public class DeptResp extends BaseResp {
* 名称
*/
@Schema(description = "名称", example = "测试部")
@ExcelProperty(value = "名称")
private String name;
/**
* 上级部门 ID
*/
@Schema(description = "上级部门 ID", example = "2")
@ConditionOnExpression(value = "#target.parentId != 0")
@AssembleMethod(targetType = DeptService.class, method = @ContainerMethod(bindMethod = "get", resultType = DeptResp.class), props = @Mapping(src = "name", ref = "parentName"))
private Long parentId;
/**
* 排序
* 上级部门
*/
@Schema(description = "排序", example = "3")
private Integer sort;
@Schema(description = "上级部门", example = "天津总部")
@ExcelProperty(value = "上级部门")
private String parentName;
/**
* 状态
*/
@Schema(description = "状态1启用2禁用", type = "Integer", allowableValues = {"1", "2"}, example = "1")
@ExcelProperty(value = "状态", converter = ExcelBaseEnumConverter.class)
private DisEnableStatusEnum status;
/**
* 排序
*/
@Schema(description = "排序", example = "3")
@ExcelProperty(value = "排序")
private Integer sort;
/**
* 是否为系统内置数据
*/
@Schema(description = "是否为系统内置数据", example = "false")
@ExcelProperty(value = "系统内置")
private Boolean isSystem;
/**
* 描述
*/
@Schema(description = "描述", example = "测试部描述信息")
@ExcelProperty(value = "描述")
private String description;
@Override

View File

@ -125,7 +125,7 @@ public class UserDetailResp extends BaseDetailResp {
* 部门 ID
*/
@Schema(description = "部门 ID", example = "5")
@AssembleMethod(targetType = DeptService.class, method = @ContainerMethod(bindMethod = "get", resultType = DeptDetailResp.class), props = @Mapping(src = "name", ref = "deptName"))
@AssembleMethod(targetType = DeptService.class, method = @ContainerMethod(bindMethod = "get", resultType = DeptResp.class), props = @Mapping(src = "name", ref = "deptName"))
private Long deptId;
/**

View File

@ -19,10 +19,9 @@ package top.charles7c.continew.admin.system.service;
import top.charles7c.continew.admin.system.model.entity.DeptDO;
import top.charles7c.continew.admin.system.model.query.DeptQuery;
import top.charles7c.continew.admin.system.model.req.DeptReq;
import top.charles7c.continew.admin.system.model.resp.DeptDetailResp;
import top.charles7c.continew.admin.system.model.resp.DeptResp;
import top.charles7c.continew.starter.extension.crud.service.BaseService;
import top.charles7c.continew.starter.data.mybatis.plus.service.IService;
import top.charles7c.continew.starter.extension.crud.service.BaseService;
/**
* 部门业务接口
@ -30,4 +29,4 @@ import top.charles7c.continew.starter.data.mybatis.plus.service.IService;
* @author Charles7c
* @since 2023/1/22 17:54
*/
public interface DeptService extends BaseService<DeptResp, DeptDetailResp, DeptQuery, DeptReq>, IService<DeptDO> {}
public interface DeptService extends BaseService<DeptResp, DeptResp, DeptQuery, DeptReq>, IService<DeptDO> {}

View File

@ -27,7 +27,6 @@ import top.charles7c.continew.admin.system.mapper.DeptMapper;
import top.charles7c.continew.admin.system.model.entity.DeptDO;
import top.charles7c.continew.admin.system.model.query.DeptQuery;
import top.charles7c.continew.admin.system.model.req.DeptReq;
import top.charles7c.continew.admin.system.model.resp.DeptDetailResp;
import top.charles7c.continew.admin.system.model.resp.DeptResp;
import top.charles7c.continew.admin.system.service.DeptService;
import top.charles7c.continew.admin.system.service.RoleDeptService;
@ -49,7 +48,7 @@ import java.util.Optional;
*/
@Service
@RequiredArgsConstructor
public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptResp, DeptDetailResp, DeptQuery, DeptReq> implements DeptService {
public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptResp, DeptResp, DeptQuery, DeptReq> implements DeptService {
private final UserService userService;
private final RoleDeptService roleDeptService;
@ -60,7 +59,7 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptRes
boolean isExists = this.isNameExists(name, req.getParentId(), null);
CheckUtils.throwIf(isExists, "新增失败,[{}] 已存在", name);
req.setAncestors(this.getAncestors(req.getParentId()));
req.setStatus(DisEnableStatusEnum.DISABLE);
req.setStatus(DisEnableStatusEnum.ENABLE);
}
@Override

View File

@ -17,12 +17,9 @@
package top.charles7c.continew.admin.webapi.system;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;
import top.charles7c.continew.admin.system.model.query.DeptQuery;
import top.charles7c.continew.admin.system.model.req.DeptReq;
import top.charles7c.continew.admin.system.model.resp.DeptDetailResp;
import top.charles7c.continew.admin.system.model.resp.DeptResp;
import top.charles7c.continew.admin.system.service.DeptService;
import top.charles7c.continew.starter.extension.crud.annotation.CrudRequestMapping;
@ -38,4 +35,4 @@ import top.charles7c.continew.starter.extension.crud.enums.Api;
@Tag(name = "部门管理 API")
@RestController
@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.GET, Api.ADD, Api.UPDATE, Api.DELETE, Api.EXPORT})
public class DeptController extends BaseController<DeptService, DeptResp, DeptDetailResp, DeptQuery, DeptReq> {}
public class DeptController extends BaseController<DeptService, DeptResp, DeptResp, DeptQuery, DeptReq> {}