feat: 增加枚举查询接口并完善基础实体版本字段

This commit is contained in:
2026-05-18 21:25:42 +08:00
parent 1c20c45b6b
commit 009be37cf6
8 changed files with 132 additions and 4 deletions

View File

@@ -0,0 +1,36 @@
package com.bruce.common.controller;
import com.bruce.common.entity.SysEnum;
import com.bruce.common.service.ISysEnumService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Tag(name = "系统枚举管理")
@RestController
@RequestMapping("/api/sys-enums")
public class SysEnumController {
private final ISysEnumService sysEnumService;
public SysEnumController(ISysEnumService sysEnumService) {
this.sysEnumService = sysEnumService;
}
@Operation(summary = "查询全部系统枚举")
@GetMapping
public List<SysEnum> list() {
return sysEnumService.list();
}
@Operation(summary = "根据模块和类型查询系统枚举")
@GetMapping("/query")
public List<SysEnum> queryByCatalogAndType(@RequestParam String catalog, @RequestParam String type) {
return sysEnumService.listByCatalogAndType(catalog, type);
}
}

View File

@@ -3,6 +3,7 @@ package com.bruce.common.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.Version;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@@ -35,4 +36,8 @@ public class BaseEntity {
@TableField(value = "update_time") @TableField(value = "update_time")
private Date updateTime; private Date updateTime;
@Schema(description = "版本")
@Version
private Integer version;
} }

View File

@@ -31,9 +31,6 @@ public class SysEnum extends BaseEntity {
@Schema(description = "排序") @Schema(description = "排序")
private Integer sort; private Integer sort;
@Schema(description = "版本")
private Integer version;
@Schema(description = "备注") @Schema(description = "备注")
private String remark; private String remark;
} }

View File

@@ -0,0 +1,9 @@
package com.bruce.common.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bruce.common.entity.SysEnum;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SysEnumMapper extends BaseMapper<SysEnum> {
}

View File

@@ -0,0 +1,11 @@
package com.bruce.common.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bruce.common.entity.SysEnum;
import java.util.List;
public interface ISysEnumService extends IService<SysEnum> {
List<SysEnum> listByCatalogAndType(String catalog, String type);
}

View File

@@ -0,0 +1,22 @@
package com.bruce.common.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bruce.common.entity.SysEnum;
import com.bruce.common.mapper.SysEnumMapper;
import com.bruce.common.service.ISysEnumService;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SysEnumServiceImpl extends ServiceImpl<SysEnumMapper, SysEnum> implements ISysEnumService {
@Override
public List<SysEnum> listByCatalogAndType(String catalog, String type) {
return lambdaQuery()
.eq(SysEnum::getCatalog, catalog)
.eq(SysEnum::getType, type)
.orderByAsc(SysEnum::getSort)
.list();
}
}

View File

@@ -2,6 +2,7 @@ package com.bruce.common.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.Version;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -34,7 +35,6 @@ class EntityStructureTests {
assertTrue(fieldNames.contains("value")); assertTrue(fieldNames.contains("value"));
assertTrue(fieldNames.contains("strvalue")); assertTrue(fieldNames.contains("strvalue"));
assertTrue(fieldNames.contains("sort")); assertTrue(fieldNames.contains("sort"));
assertTrue(fieldNames.contains("version"));
assertTrue(fieldNames.contains("remark")); assertTrue(fieldNames.contains("remark"));
assertTrue(BaseEntity.class.isAssignableFrom(SysEnum.class)); assertTrue(BaseEntity.class.isAssignableFrom(SysEnum.class));
} }
@@ -51,4 +51,15 @@ class EntityStructureTests {
assertNotNull(createTimeSchema); assertNotNull(createTimeSchema);
assertNotNull(catalogSchema); assertNotNull(catalogSchema);
} }
@Test
void versionShouldBeDefinedOnBaseEntityOnly() throws NoSuchFieldException {
Field versionField = BaseEntity.class.getDeclaredField("version");
Version version = versionField.getAnnotation(Version.class);
assertNotNull(versionField);
assertNotNull(version);
assertTrue(Arrays.stream(SysEnum.class.getDeclaredFields()).noneMatch(field -> "version".equals(field.getName())));
assertTrue(Arrays.stream(SysAttachment.class.getDeclaredFields()).noneMatch(field -> "version".equals(field.getName())));
}
} }

View File

@@ -0,0 +1,37 @@
package com.bruce.common.enumconfig;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bruce.common.controller.SysEnumController;
import com.bruce.common.entity.SysEnum;
import com.bruce.common.mapper.SysEnumMapper;
import com.bruce.common.service.ISysEnumService;
import com.bruce.common.service.impl.SysEnumServiceImpl;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Method;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
class SysEnumComponentStructureTests {
@Test
void sysEnumComponentsShouldReuseMybatisPlusBaseTypes() {
assertTrue(BaseMapper.class.isAssignableFrom(SysEnumMapper.class));
assertTrue(IService.class.isAssignableFrom(ISysEnumService.class));
assertTrue(ServiceImpl.class.isAssignableFrom(SysEnumServiceImpl.class));
assertTrue(ISysEnumService.class.isAssignableFrom(SysEnumServiceImpl.class));
assertTrue(SysEnum.class.isAssignableFrom(SysEnum.class));
}
@Test
void sysEnumShouldExposeQueryMethodForCatalogAndType() throws NoSuchMethodException {
Method serviceMethod = ISysEnumService.class.getMethod("listByCatalogAndType", String.class, String.class);
Method controllerMethod = SysEnumController.class.getMethod("queryByCatalogAndType", String.class, String.class);
assertNotNull(serviceMethod);
assertNotNull(controllerMethod);
}
}