diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormCategoryApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormCategoryApiController.java new file mode 100644 index 00000000..7538d068 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormCategoryApiController.java @@ -0,0 +1,44 @@ +package com.qqchen.deploy.backend.workflow.api; + +import com.qqchen.deploy.backend.framework.api.Response; +import com.qqchen.deploy.backend.framework.controller.BaseController; +import com.qqchen.deploy.backend.workflow.dto.FormCategoryDTO; +import com.qqchen.deploy.backend.workflow.dto.query.FormCategoryQuery; +import com.qqchen.deploy.backend.workflow.entity.FormCategory; +import com.qqchen.deploy.backend.workflow.service.IFormCategoryService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 表单分类API控制器 + * + * @author qqchen + * @date 2025-10-24 + */ +@Slf4j +@RestController +@RequestMapping("/api/v1/forms/categories") +@Tag(name = "表单分类管理", description = "表单分类管理相关接口") +public class FormCategoryApiController extends BaseController { + + @Resource + private IFormCategoryService formCategoryService; + + @Operation(summary = "查询所有启用的分类") + @GetMapping("/enabled") + public Response> findAllEnabled() { + List result = formCategoryService.findAllEnabled(); + return Response.success(result); + } + + @Override + protected void exportData(jakarta.servlet.http.HttpServletResponse response, java.util.List data) { + // 暂不支持导出 + } +} + diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDataApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDataApiController.java index 7adcabb8..984ed71b 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDataApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDataApiController.java @@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.*; */ @Slf4j @RestController -@RequestMapping("/api/v1/workflow/form-data") +@RequestMapping("/api/v1/forms/data") @Tag(name = "表单数据管理", description = "表单数据管理相关接口") public class FormDataApiController extends BaseController { diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDefinitionApiController.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDefinitionApiController.java index 81f44ee5..ee6259ea 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDefinitionApiController.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/api/FormDefinitionApiController.java @@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.*; */ @Slf4j @RestController -@RequestMapping("/api/v1/workflow/form-definition") +@RequestMapping("/api/v1/forms/definitions") @Tag(name = "表单定义管理", description = "表单定义管理相关接口") public class FormDefinitionApiController extends BaseController { diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/converter/FormCategoryConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/converter/FormCategoryConverter.java new file mode 100644 index 00000000..06cd087b --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/converter/FormCategoryConverter.java @@ -0,0 +1,17 @@ +package com.qqchen.deploy.backend.workflow.converter; + +import com.qqchen.deploy.backend.framework.converter.BaseConverter; +import com.qqchen.deploy.backend.workflow.dto.FormCategoryDTO; +import com.qqchen.deploy.backend.workflow.entity.FormCategory; +import org.mapstruct.Mapper; + +/** + * 表单分类转换器 + * + * @author qqchen + * @date 2025-10-24 + */ +@Mapper(config = BaseConverter.class) +public interface FormCategoryConverter extends BaseConverter { +} + diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/FormCategoryDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/FormCategoryDTO.java new file mode 100644 index 00000000..24ea2055 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/FormCategoryDTO.java @@ -0,0 +1,55 @@ +package com.qqchen.deploy.backend.workflow.dto; + +import com.qqchen.deploy.backend.framework.dto.BaseDTO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 表单分类DTO + * + * @author qqchen + * @date 2025-10-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "表单分类DTO") +public class FormCategoryDTO extends BaseDTO { + + /** + * 分类名称 + */ + @Schema(description = "分类名称", example = "审批表单") + private String name; + + /** + * 分类编码 + */ + @Schema(description = "分类编码", example = "APPROVAL") + private String code; + + /** + * 分类描述 + */ + @Schema(description = "分类描述", example = "用于审批流程的表单") + private String description; + + /** + * 图标 + */ + @Schema(description = "图标", example = "CheckCircleOutlined") + private String icon; + + /** + * 排序 + */ + @Schema(description = "排序", example = "1") + private Integer sort; + + /** + * 是否启用 + */ + @Schema(description = "是否启用", example = "true") + private Boolean enabled; +} + diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/FormDefinitionDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/FormDefinitionDTO.java index 47948755..f6e8b7da 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/FormDefinitionDTO.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/FormDefinitionDTO.java @@ -2,7 +2,6 @@ package com.qqchen.deploy.backend.workflow.dto; import com.qqchen.deploy.backend.framework.dto.BaseDTO; import com.qqchen.deploy.backend.workflow.dto.form.FormSchema; -import com.qqchen.deploy.backend.workflow.enums.FormCategoryEnums; import com.qqchen.deploy.backend.workflow.enums.FormDefinitionStatusEnums; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -40,10 +39,16 @@ public class FormDefinitionDTO extends BaseDTO { private Integer formVersion; /** - * 表单分类 + * 表单分类ID */ - @Schema(description = "表单分类") - private FormCategoryEnums category; + @Schema(description = "表单分类ID", example = "1") + private Long categoryId; + + /** + * 表单分类信息(用于展示) + */ + @Schema(description = "表单分类信息") + private FormCategoryDTO category; /** * 表单描述 diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/query/FormCategoryQuery.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/query/FormCategoryQuery.java new file mode 100644 index 00000000..2f593fb6 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/query/FormCategoryQuery.java @@ -0,0 +1,37 @@ +package com.qqchen.deploy.backend.workflow.dto.query; + +import com.qqchen.deploy.backend.framework.annotation.QueryField; +import com.qqchen.deploy.backend.framework.enums.QueryType; +import com.qqchen.deploy.backend.framework.query.BaseQuery; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 表单分类查询对象 + * + * @author qqchen + * @date 2025-10-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class FormCategoryQuery extends BaseQuery { + + /** + * 分类名称(模糊查询) + */ + @QueryField(field = "name", type = QueryType.LIKE) + private String name; + + /** + * 分类编码(精确查询) + */ + @QueryField(field = "code", type = QueryType.EQUAL) + private String code; + + /** + * 是否启用(精确查询) + */ + @QueryField(field = "enabled", type = QueryType.EQUAL) + private Boolean enabled; +} + diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/query/FormDefinitionQuery.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/query/FormDefinitionQuery.java index 7e0a808d..4b8fa635 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/query/FormDefinitionQuery.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/query/FormDefinitionQuery.java @@ -3,7 +3,6 @@ package com.qqchen.deploy.backend.workflow.dto.query; import com.qqchen.deploy.backend.framework.annotation.QueryField; import com.qqchen.deploy.backend.framework.enums.QueryType; import com.qqchen.deploy.backend.framework.query.BaseQuery; -import com.qqchen.deploy.backend.workflow.enums.FormCategoryEnums; import com.qqchen.deploy.backend.workflow.enums.FormDefinitionStatusEnums; import lombok.Data; import lombok.EqualsAndHashCode; @@ -37,10 +36,10 @@ public class FormDefinitionQuery extends BaseQuery { private Integer formVersion; /** - * 表单分类(精确查询) + * 表单分类ID(精确查询) */ - @QueryField(field = "category", type = QueryType.EQUAL) - private FormCategoryEnums category; + @QueryField(field = "categoryId", type = QueryType.EQUAL) + private Long categoryId; /** * 状态(精确查询) diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/FormCategory.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/FormCategory.java new file mode 100644 index 00000000..6fb220f1 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/FormCategory.java @@ -0,0 +1,58 @@ +package com.qqchen.deploy.backend.workflow.entity; + +import com.qqchen.deploy.backend.framework.annotation.LogicDelete; +import com.qqchen.deploy.backend.framework.domain.Entity; +import jakarta.persistence.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 表单分类实体 + * + * @author qqchen + * @date 2025-10-24 + */ +@Data +@Table(name = "form_category") +@jakarta.persistence.Entity +@EqualsAndHashCode(callSuper = true) +@LogicDelete +public class FormCategory extends Entity { + + /** + * 分类名称 + */ + @Column(nullable = false, length = 100) + private String name; + + /** + * 分类编码(唯一) + */ + @Column(nullable = false, length = 50, unique = true) + private String code; + + /** + * 分类描述 + */ + @Column(length = 500) + private String description; + + /** + * 图标 + */ + @Column(length = 50) + private String icon; + + /** + * 排序 + */ + @Column(nullable = false) + private Integer sort; + + /** + * 是否启用 + */ + @Column(nullable = false) + private Boolean enabled; +} + diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/FormDefinition.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/FormDefinition.java index 7ce04baa..9164b893 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/FormDefinition.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/FormDefinition.java @@ -4,7 +4,6 @@ import com.qqchen.deploy.backend.framework.annotation.LogicDelete; import com.qqchen.deploy.backend.framework.domain.Entity; import com.qqchen.deploy.backend.workflow.dto.form.FormSchema; import com.qqchen.deploy.backend.workflow.entity.converter.FormSchemaType; -import com.qqchen.deploy.backend.workflow.enums.FormCategoryEnums; import com.qqchen.deploy.backend.workflow.enums.FormDefinitionStatusEnums; import com.vladmihalcea.hibernate.type.json.JsonType; import jakarta.persistence.*; @@ -46,11 +45,10 @@ public class FormDefinition extends Entity { private Integer formVersion; /** - * 表单分类 + * 表单分类ID */ - @Column(name = "category") - @Enumerated(EnumType.STRING) - private FormCategoryEnums category; + @Column(name = "category_id") + private Long categoryId; /** * 表单描述 @@ -62,7 +60,7 @@ public class FormDefinition extends Entity { * 表单Schema(前端设计器导出的JSON结构) */ @Type(FormSchemaType.class) - @Column(name = "schema", nullable = false, columnDefinition = "json") + @Column(name = "`schema`", nullable = false, columnDefinition = "json") private FormSchema schema; /** diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/FormCategoryEnums.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/FormCategoryEnums.java deleted file mode 100644 index 1817121e..00000000 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/FormCategoryEnums.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.qqchen.deploy.backend.workflow.enums; - -import lombok.Getter; - -/** - * 表单分类枚举 - * - * @author qqchen - * @date 2025-10-24 - */ -@Getter -public enum FormCategoryEnums { - - APPROVAL("APPROVAL", "审批"), - DATA_COLLECTION("DATA_COLLECTION", "数据采集"), - SURVEY("SURVEY", "问卷调查"), - OTHER("OTHER", "其他"); - - private final String code; - - private final String description; - - FormCategoryEnums(String code, String description) { - this.code = code; - this.description = description; - } - -} - diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/repository/IFormCategoryRepository.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/repository/IFormCategoryRepository.java new file mode 100644 index 00000000..46b86b85 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/repository/IFormCategoryRepository.java @@ -0,0 +1,42 @@ +package com.qqchen.deploy.backend.workflow.repository; + +import com.qqchen.deploy.backend.framework.repository.IBaseRepository; +import com.qqchen.deploy.backend.workflow.entity.FormCategory; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +/** + * 表单分类Repository接口 + * + * @author qqchen + * @date 2025-10-24 + */ +@Repository +public interface IFormCategoryRepository extends IBaseRepository { + + /** + * 根据编码查询 + * + * @param code 分类编码 + * @return 表单分类 + */ + Optional findByCodeAndDeletedFalse(String code); + + /** + * 检查编码是否存在 + * + * @param code 分类编码 + * @return 是否存在 + */ + boolean existsByCodeAndDeletedFalse(String code); + + /** + * 查询所有启用的分类(按排序) + * + * @return 分类列表 + */ + List findByEnabledTrueAndDeletedFalseOrderBySortAsc(); +} + diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/IFormCategoryService.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/IFormCategoryService.java new file mode 100644 index 00000000..fdb74a89 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/IFormCategoryService.java @@ -0,0 +1,25 @@ +package com.qqchen.deploy.backend.workflow.service; + +import com.qqchen.deploy.backend.framework.service.IBaseService; +import com.qqchen.deploy.backend.workflow.dto.FormCategoryDTO; +import com.qqchen.deploy.backend.workflow.dto.query.FormCategoryQuery; +import com.qqchen.deploy.backend.workflow.entity.FormCategory; + +import java.util.List; + +/** + * 表单分类服务接口 + * + * @author qqchen + * @date 2025-10-24 + */ +public interface IFormCategoryService extends IBaseService { + + /** + * 查询所有启用的分类 + * + * @return 分类列表 + */ + List findAllEnabled(); +} + diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/FormCategoryServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/FormCategoryServiceImpl.java new file mode 100644 index 00000000..80f7c621 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/FormCategoryServiceImpl.java @@ -0,0 +1,42 @@ +package com.qqchen.deploy.backend.workflow.service.impl; + +import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl; +import com.qqchen.deploy.backend.workflow.dto.FormCategoryDTO; +import com.qqchen.deploy.backend.workflow.dto.query.FormCategoryQuery; +import com.qqchen.deploy.backend.workflow.entity.FormCategory; +import com.qqchen.deploy.backend.workflow.repository.IFormCategoryRepository; +import com.qqchen.deploy.backend.workflow.service.IFormCategoryService; +import com.qqchen.deploy.backend.workflow.converter.FormCategoryConverter; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 表单分类服务实现 + * + * @author qqchen + * @date 2025-10-24 + */ +@Slf4j +@Service +public class FormCategoryServiceImpl extends BaseServiceImpl implements IFormCategoryService { + + @Resource + private IFormCategoryRepository formCategoryRepository; + + @Resource + private FormCategoryConverter formCategoryConverter; + + @Override + public List findAllEnabled() { + log.info("查询所有启用的表单分类"); + List categories = formCategoryRepository.findByEnabledTrueAndDeletedFalseOrderBySortAsc(); + return categories.stream() + .map(formCategoryConverter::toDto) + .collect(Collectors.toList()); + } +} + diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/FormDefinitionServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/FormDefinitionServiceImpl.java index ac989144..b2cbc353 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/FormDefinitionServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/FormDefinitionServiceImpl.java @@ -48,7 +48,7 @@ public class FormDefinitionServiceImpl extends BaseServiceImpl