diff --git a/src/main/java/com/bruce/common/controller/SysEnumController.java b/src/main/java/com/bruce/common/controller/SysEnumController.java new file mode 100644 index 0000000..38571ea --- /dev/null +++ b/src/main/java/com/bruce/common/controller/SysEnumController.java @@ -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 list() { + return sysEnumService.list(); + } + + @Operation(summary = "根据模块和类型查询系统枚举") + @GetMapping("/query") + public List queryByCatalogAndType(@RequestParam String catalog, @RequestParam String type) { + return sysEnumService.listByCatalogAndType(catalog, type); + } +} diff --git a/src/main/java/com/bruce/common/entity/BaseEntity.java b/src/main/java/com/bruce/common/entity/BaseEntity.java index 3ed739e..b999c54 100644 --- a/src/main/java/com/bruce/common/entity/BaseEntity.java +++ b/src/main/java/com/bruce/common/entity/BaseEntity.java @@ -3,6 +3,7 @@ package com.bruce.common.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.Version; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -35,4 +36,8 @@ public class BaseEntity { @TableField(value = "update_time") private Date updateTime; + @Schema(description = "版本") + @Version + private Integer version; + } diff --git a/src/main/java/com/bruce/common/entity/SysEnum.java b/src/main/java/com/bruce/common/entity/SysEnum.java index af7770e..2df9f8c 100644 --- a/src/main/java/com/bruce/common/entity/SysEnum.java +++ b/src/main/java/com/bruce/common/entity/SysEnum.java @@ -31,9 +31,6 @@ public class SysEnum extends BaseEntity { @Schema(description = "排序") private Integer sort; - @Schema(description = "版本") - private Integer version; - @Schema(description = "备注") private String remark; } diff --git a/src/main/java/com/bruce/common/mapper/SysEnumMapper.java b/src/main/java/com/bruce/common/mapper/SysEnumMapper.java new file mode 100644 index 0000000..6e3e4a2 --- /dev/null +++ b/src/main/java/com/bruce/common/mapper/SysEnumMapper.java @@ -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 { +} diff --git a/src/main/java/com/bruce/common/service/ISysEnumService.java b/src/main/java/com/bruce/common/service/ISysEnumService.java new file mode 100644 index 0000000..8d6c035 --- /dev/null +++ b/src/main/java/com/bruce/common/service/ISysEnumService.java @@ -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 { + + List listByCatalogAndType(String catalog, String type); +} diff --git a/src/main/java/com/bruce/common/service/impl/SysEnumServiceImpl.java b/src/main/java/com/bruce/common/service/impl/SysEnumServiceImpl.java new file mode 100644 index 0000000..bb60800 --- /dev/null +++ b/src/main/java/com/bruce/common/service/impl/SysEnumServiceImpl.java @@ -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 implements ISysEnumService { + + @Override + public List listByCatalogAndType(String catalog, String type) { + return lambdaQuery() + .eq(SysEnum::getCatalog, catalog) + .eq(SysEnum::getType, type) + .orderByAsc(SysEnum::getSort) + .list(); + } +} diff --git a/src/test/java/com/bruce/common/entity/EntityStructureTests.java b/src/test/java/com/bruce/common/entity/EntityStructureTests.java index eac7b48..b95b58e 100644 --- a/src/test/java/com/bruce/common/entity/EntityStructureTests.java +++ b/src/test/java/com/bruce/common/entity/EntityStructureTests.java @@ -2,6 +2,7 @@ package com.bruce.common.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.Version; import io.swagger.v3.oas.annotations.media.Schema; import org.junit.jupiter.api.Test; @@ -34,7 +35,6 @@ class EntityStructureTests { assertTrue(fieldNames.contains("value")); assertTrue(fieldNames.contains("strvalue")); assertTrue(fieldNames.contains("sort")); - assertTrue(fieldNames.contains("version")); assertTrue(fieldNames.contains("remark")); assertTrue(BaseEntity.class.isAssignableFrom(SysEnum.class)); } @@ -51,4 +51,15 @@ class EntityStructureTests { assertNotNull(createTimeSchema); 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()))); + } } diff --git a/src/test/java/com/bruce/common/enumconfig/SysEnumComponentStructureTests.java b/src/test/java/com/bruce/common/enumconfig/SysEnumComponentStructureTests.java new file mode 100644 index 0000000..bbc8963 --- /dev/null +++ b/src/test/java/com/bruce/common/enumconfig/SysEnumComponentStructureTests.java @@ -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); + } +}