diff --git a/script/sql/enum.sql b/script/sql/enum.sql index 260cf38..1d10b08 100644 --- a/script/sql/enum.sql +++ b/script/sql/enum.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS sys_setting; +DROP TABLE IF EXISTS sys_enum; -CREATE TABLE sys_setting ( +CREATE TABLE sys_enum ( id BIGSERIAL PRIMARY KEY, catalog VARCHAR(200) NOT NULL, type VARCHAR(200) NOT NULL, @@ -17,20 +17,20 @@ CREATE TABLE sys_setting ( CONSTRAINT uk_catalog_type_name UNIQUE (catalog, type, name) ); -CREATE INDEX idx_sys_setting_catalog_type ON sys_setting (catalog, type); -CREATE INDEX idx_sys_setting_sort ON sys_setting (sort); +CREATE INDEX idx_sys_enum_catalog_type ON sys_enum (catalog, type); +CREATE INDEX idx_sys_enum_sort ON sys_enum (sort); -COMMENT ON TABLE sys_setting IS '系统枚举类'; -COMMENT ON COLUMN sys_setting.id IS 'ID'; -COMMENT ON COLUMN sys_setting.catalog IS '模块'; -COMMENT ON COLUMN sys_setting.type IS '类型'; -COMMENT ON COLUMN sys_setting.name IS '名称'; -COMMENT ON COLUMN sys_setting.value IS '值'; -COMMENT ON COLUMN sys_setting.strvalue IS '字符串值'; -COMMENT ON COLUMN sys_setting.sort IS '排序'; -COMMENT ON COLUMN sys_setting.version IS '版本'; -COMMENT ON COLUMN sys_setting.create_time IS '创建时间'; -COMMENT ON COLUMN sys_setting.update_time IS '更新时间'; -COMMENT ON COLUMN sys_setting.remark IS '备注'; -COMMENT ON COLUMN sys_setting.create_by IS '创建者'; -COMMENT ON COLUMN sys_setting.update_by IS '更新者'; +COMMENT ON TABLE sys_enum IS '系统枚举类'; +COMMENT ON COLUMN sys_enum.id IS 'ID'; +COMMENT ON COLUMN sys_enum.catalog IS '模块'; +COMMENT ON COLUMN sys_enum.type IS '类型'; +COMMENT ON COLUMN sys_enum.name IS '名称'; +COMMENT ON COLUMN sys_enum.value IS '值'; +COMMENT ON COLUMN sys_enum.strvalue IS '字符串值'; +COMMENT ON COLUMN sys_enum.sort IS '排序'; +COMMENT ON COLUMN sys_enum.version IS '版本'; +COMMENT ON COLUMN sys_enum.create_time IS '创建时间'; +COMMENT ON COLUMN sys_enum.update_time IS '更新时间'; +COMMENT ON COLUMN sys_enum.remark IS '备注'; +COMMENT ON COLUMN sys_enum.create_by IS '创建者'; +COMMENT ON COLUMN sys_enum.update_by IS '更新者'; diff --git a/src/main/java/com/bruce/common/controller/SysEnumController.java b/src/main/java/com/bruce/common/controller/SysEnumController.java index 38571ea..84f3444 100644 --- a/src/main/java/com/bruce/common/controller/SysEnumController.java +++ b/src/main/java/com/bruce/common/controller/SysEnumController.java @@ -4,9 +4,13 @@ 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.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -33,4 +37,16 @@ public class SysEnumController { public List queryByCatalogAndType(@RequestParam String catalog, @RequestParam String type) { return sysEnumService.listByCatalogAndType(catalog, type); } + + @Operation(summary = "新增或修改系统枚举") + @PostMapping + public boolean saveOrUpdate(@RequestBody SysEnum sysEnum) { + return sysEnumService.saveOrUpdate(sysEnum); + } + + @Operation(summary = "删除系统枚举") + @DeleteMapping("/{id}") + public boolean deleteById(@PathVariable Long id) { + return sysEnumService.removeById(id); + } } diff --git a/src/main/java/com/bruce/common/entity/SysEnum.java b/src/main/java/com/bruce/common/entity/SysEnum.java index 2df9f8c..2333072 100644 --- a/src/main/java/com/bruce/common/entity/SysEnum.java +++ b/src/main/java/com/bruce/common/entity/SysEnum.java @@ -9,7 +9,7 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @EqualsAndHashCode(callSuper = true) -@TableName("sys_setting") +@TableName("sys_enum") @Schema(description = "系统枚举配置") public class SysEnum extends BaseEntity { diff --git a/src/main/java/com/bruce/common/enums/CommonStatusEnum.java b/src/main/java/com/bruce/common/enums/CommonStatusEnum.java new file mode 100644 index 0000000..0883a0f --- /dev/null +++ b/src/main/java/com/bruce/common/enums/CommonStatusEnum.java @@ -0,0 +1,20 @@ +package com.bruce.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum CommonStatusEnum { + + DISABLED(0, "禁用"), + ENABLED(1, "启用"), + DRAFT(2, "草稿"), + PROCESSING(3, "处理中"), + COMPLETED(4, "已完成"), + FAILED(5, "失败"); + + private final Integer value; + + private final String label; +} diff --git a/src/main/java/com/bruce/common/enums/EnableStatusEnum.java b/src/main/java/com/bruce/common/enums/EnableStatusEnum.java new file mode 100644 index 0000000..9fc0be5 --- /dev/null +++ b/src/main/java/com/bruce/common/enums/EnableStatusEnum.java @@ -0,0 +1,16 @@ +package com.bruce.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum EnableStatusEnum { + + DISABLED(0, "禁用"), + ENABLED(1, "启用"); + + private final Integer value; + + private final String label; +} diff --git a/src/main/java/com/bruce/rag/enums/RagIndexStatusEnum.java b/src/main/java/com/bruce/rag/enums/RagIndexStatusEnum.java new file mode 100644 index 0000000..e7337c2 --- /dev/null +++ b/src/main/java/com/bruce/rag/enums/RagIndexStatusEnum.java @@ -0,0 +1,18 @@ +package com.bruce.rag.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum RagIndexStatusEnum { + + PENDING(1, "待索引"), + INDEXING(2, "索引中"), + INDEXED(3, "已索引"), + FAILED(4, "索引失败"); + + private final Integer value; + + private final String label; +} diff --git a/src/main/java/com/bruce/rag/enums/RagParseStatusEnum.java b/src/main/java/com/bruce/rag/enums/RagParseStatusEnum.java new file mode 100644 index 0000000..f15485c --- /dev/null +++ b/src/main/java/com/bruce/rag/enums/RagParseStatusEnum.java @@ -0,0 +1,18 @@ +package com.bruce.rag.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum RagParseStatusEnum { + + UPLOADED(1, "已上传"), + PARSING(2, "解析中"), + PARSED(3, "已解析"), + FAILED(4, "解析失败"); + + private final Integer value; + + private final String label; +} diff --git a/src/test/java/com/bruce/common/enumconfig/EnumDefinitionTests.java b/src/test/java/com/bruce/common/enumconfig/EnumDefinitionTests.java index 1b89a19..b146fe6 100644 --- a/src/test/java/com/bruce/common/enumconfig/EnumDefinitionTests.java +++ b/src/test/java/com/bruce/common/enumconfig/EnumDefinitionTests.java @@ -1,30 +1,42 @@ package com.bruce.common.enumconfig; -import com.bruce.common.enums.BaseDictEnum; +import com.bruce.common.enums.CommonStatusEnum; import com.bruce.common.enums.EnableStatusEnum; import com.bruce.rag.enums.RagIndexStatusEnum; import com.bruce.rag.enums.RagParseStatusEnum; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; class EnumDefinitionTests { @Test - void enumDefinitionsShouldExist() { - assertTrue(BaseDictEnum.class.isAssignableFrom(EnableStatusEnum.class)); - assertTrue(BaseDictEnum.class.isAssignableFrom(RagParseStatusEnum.class)); - assertTrue(BaseDictEnum.class.isAssignableFrom(RagIndexStatusEnum.class)); + void enumValuesShouldBeStable() { + assertEquals(1, EnableStatusEnum.ENABLED.getValue()); + assertEquals(0, EnableStatusEnum.DISABLED.getValue()); + assertEquals(0, CommonStatusEnum.DISABLED.getValue()); + assertEquals(1, CommonStatusEnum.ENABLED.getValue()); + assertEquals(2, CommonStatusEnum.DRAFT.getValue()); + assertEquals(3, CommonStatusEnum.PROCESSING.getValue()); + assertEquals(4, CommonStatusEnum.COMPLETED.getValue()); + assertEquals(5, CommonStatusEnum.FAILED.getValue()); + assertEquals(1, RagParseStatusEnum.UPLOADED.getValue()); + assertEquals(4, RagParseStatusEnum.FAILED.getValue()); + assertEquals(1, RagIndexStatusEnum.PENDING.getValue()); + assertEquals(3, RagIndexStatusEnum.INDEXED.getValue()); } @Test - void enumCodesShouldBeStable() { - assertEquals("ENABLED", EnableStatusEnum.ENABLED.getCode()); - assertEquals("DISABLED", EnableStatusEnum.DISABLED.getCode()); - assertEquals("UPLOADED", RagParseStatusEnum.UPLOADED.getCode()); - assertEquals("FAILED", RagParseStatusEnum.FAILED.getCode()); - assertEquals("PENDING", RagIndexStatusEnum.PENDING.getCode()); - assertEquals("INDEXED", RagIndexStatusEnum.INDEXED.getCode()); + void enumNamesShouldBeStable() { + assertEquals("启用", EnableStatusEnum.ENABLED.getLabel()); + assertEquals("禁用", EnableStatusEnum.DISABLED.getLabel()); + assertEquals("草稿", CommonStatusEnum.DRAFT.getLabel()); + assertEquals("处理中", CommonStatusEnum.PROCESSING.getLabel()); + assertEquals("已完成", CommonStatusEnum.COMPLETED.getLabel()); + assertEquals("失败", CommonStatusEnum.FAILED.getLabel()); + assertEquals("已上传", RagParseStatusEnum.UPLOADED.getLabel()); + assertEquals("解析失败", RagParseStatusEnum.FAILED.getLabel()); + assertEquals("待索引", RagIndexStatusEnum.PENDING.getLabel()); + assertEquals("已索引", RagIndexStatusEnum.INDEXED.getLabel()); } } diff --git a/src/test/java/com/bruce/common/enumconfig/SysEnumComponentStructureTests.java b/src/test/java/com/bruce/common/enumconfig/SysEnumComponentStructureTests.java index bbc8963..1bfa244 100644 --- a/src/test/java/com/bruce/common/enumconfig/SysEnumComponentStructureTests.java +++ b/src/test/java/com/bruce/common/enumconfig/SysEnumComponentStructureTests.java @@ -34,4 +34,20 @@ class SysEnumComponentStructureTests { assertNotNull(serviceMethod); assertNotNull(controllerMethod); } + + @Test + void sysEnumShouldExposeSaveOrUpdateAndDeleteInterfaces() throws NoSuchMethodException { + Method saveOrUpdateMethod = SysEnumController.class.getMethod("saveOrUpdate", SysEnum.class); + Method deleteMethod = SysEnumController.class.getMethod("deleteById", Long.class); + + assertNotNull(saveOrUpdateMethod); + assertNotNull(deleteMethod); + } + + @Test + void sysEnumShouldProvideManualInitTestEntry() throws NoSuchMethodException { + Method initMethod = SysEnumDataInitTests.class.getMethod("initDefaultEnums"); + + assertNotNull(initMethod); + } } diff --git a/src/test/java/com/bruce/common/enumconfig/SysEnumDataInitTests.java b/src/test/java/com/bruce/common/enumconfig/SysEnumDataInitTests.java new file mode 100644 index 0000000..e84c1a7 --- /dev/null +++ b/src/test/java/com/bruce/common/enumconfig/SysEnumDataInitTests.java @@ -0,0 +1,62 @@ +package com.bruce.common.enumconfig; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.bruce.common.entity.SysEnum; +import com.bruce.common.enums.CommonStatusEnum; +import com.bruce.common.enums.EnableStatusEnum; +import com.bruce.common.service.ISysEnumService; +import com.bruce.rag.enums.RagIndexStatusEnum; +import com.bruce.rag.enums.RagParseStatusEnum; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +@EnabledIfSystemProperty(named = "runEnumInit", matches = "true") +class SysEnumDataInitTests { + + @Autowired + private ISysEnumService sysEnumService; + + @Test + public void initDefaultEnums() { + saveOrUpdate("common", "enable_status", EnableStatusEnum.DISABLED.getLabel(), EnableStatusEnum.DISABLED.getValue(), 0, "通用启用状态"); + saveOrUpdate("common", "enable_status", EnableStatusEnum.ENABLED.getLabel(), EnableStatusEnum.ENABLED.getValue(), 1, "通用启用状态"); + + saveOrUpdate("common", "common_status", CommonStatusEnum.DISABLED.getLabel(), CommonStatusEnum.DISABLED.getValue(), 0, "通用状态"); + saveOrUpdate("common", "common_status", CommonStatusEnum.ENABLED.getLabel(), CommonStatusEnum.ENABLED.getValue(), 1, "通用状态"); + saveOrUpdate("common", "common_status", CommonStatusEnum.DRAFT.getLabel(), CommonStatusEnum.DRAFT.getValue(), 2, "通用状态"); + saveOrUpdate("common", "common_status", CommonStatusEnum.PROCESSING.getLabel(), CommonStatusEnum.PROCESSING.getValue(), 3, "通用状态"); + saveOrUpdate("common", "common_status", CommonStatusEnum.COMPLETED.getLabel(), CommonStatusEnum.COMPLETED.getValue(), 4, "通用状态"); + saveOrUpdate("common", "common_status", CommonStatusEnum.FAILED.getLabel(), CommonStatusEnum.FAILED.getValue(), 5, "通用状态"); + + saveOrUpdate("rag", "parse_status", RagParseStatusEnum.UPLOADED.getLabel(), RagParseStatusEnum.UPLOADED.getValue(), 1, "RAG文档解析状态"); + saveOrUpdate("rag", "parse_status", RagParseStatusEnum.PARSING.getLabel(), RagParseStatusEnum.PARSING.getValue(), 2, "RAG文档解析状态"); + saveOrUpdate("rag", "parse_status", RagParseStatusEnum.PARSED.getLabel(), RagParseStatusEnum.PARSED.getValue(), 3, "RAG文档解析状态"); + saveOrUpdate("rag", "parse_status", RagParseStatusEnum.FAILED.getLabel(), RagParseStatusEnum.FAILED.getValue(), 4, "RAG文档解析状态"); + + saveOrUpdate("rag", "index_status", RagIndexStatusEnum.PENDING.getLabel(), RagIndexStatusEnum.PENDING.getValue(), 1, "RAG文档索引状态"); + saveOrUpdate("rag", "index_status", RagIndexStatusEnum.INDEXING.getLabel(), RagIndexStatusEnum.INDEXING.getValue(), 2, "RAG文档索引状态"); + saveOrUpdate("rag", "index_status", RagIndexStatusEnum.INDEXED.getLabel(), RagIndexStatusEnum.INDEXED.getValue(), 3, "RAG文档索引状态"); + saveOrUpdate("rag", "index_status", RagIndexStatusEnum.FAILED.getLabel(), RagIndexStatusEnum.FAILED.getValue(), 4, "RAG文档索引状态"); + } + + private void saveOrUpdate(String catalog, String type, String name, Integer value, Integer sort, String remark) { + SysEnum sysEnum = sysEnumService.getOne(new LambdaQueryWrapper() + .eq(SysEnum::getCatalog, catalog) + .eq(SysEnum::getType, type) + .eq(SysEnum::getName, name)); + if (sysEnum == null) { + sysEnum = new SysEnum(); + } + sysEnum.setCatalog(catalog); + sysEnum.setType(type); + sysEnum.setName(name); + sysEnum.setValue(value); + sysEnum.setStrvalue(null); + sysEnum.setSort(sort); + sysEnum.setRemark(remark); + sysEnumService.saveOrUpdate(sysEnum); + } +}