GraphTemplateController.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package com.lingyue.graph.controller;
  2. import com.lingyue.common.domain.AjaxResult;
  3. import com.lingyue.graph.dto.ElementDTO;
  4. import com.lingyue.graph.dto.PageResult;
  5. import com.lingyue.graph.dto.TemplateDTO;
  6. import com.lingyue.graph.service.TemplateService;
  7. import io.swagger.v3.oas.annotations.Operation;
  8. import io.swagger.v3.oas.annotations.Parameter;
  9. import io.swagger.v3.oas.annotations.tags.Tag;
  10. import lombok.Data;
  11. import lombok.RequiredArgsConstructor;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.web.bind.annotation.*;
  14. import java.util.List;
  15. import java.util.Map;
  16. /**
  17. * 图谱模板管理控制器
  18. *
  19. * @author lingyue
  20. * @since 2026-02-12
  21. */
  22. @Slf4j
  23. @RestController
  24. @RequestMapping("/api/v1/graph/templates")
  25. @RequiredArgsConstructor
  26. @Tag(name = "图谱模板管理", description = "图谱模板CRUD、要素管理")
  27. public class GraphTemplateController {
  28. private final TemplateService templateService;
  29. @GetMapping
  30. @Operation(summary = "获取模板列表", description = "分页获取模板列表")
  31. public AjaxResult<PageResult<TemplateDTO>> list(
  32. @Parameter(description = "页码") @RequestParam(defaultValue = "1") int page,
  33. @Parameter(description = "每页数量") @RequestParam(defaultValue = "20") int pageSize,
  34. @Parameter(description = "关键词") @RequestParam(required = false) String keyword,
  35. @Parameter(description = "分类") @RequestParam(required = false) String category,
  36. @Parameter(description = "状态") @RequestParam(required = false) String status) {
  37. PageResult<TemplateDTO> result = templateService.list(page, pageSize, keyword, category, status);
  38. return AjaxResult.success(result);
  39. }
  40. @GetMapping("/{id}")
  41. @Operation(summary = "获取模板详情")
  42. public AjaxResult<TemplateDTO> getById(
  43. @Parameter(description = "模板ID", required = true) @PathVariable Long id) {
  44. TemplateDTO template = templateService.getById(id);
  45. if (template == null) {
  46. return AjaxResult.error("模板不存在: " + id, null);
  47. }
  48. return AjaxResult.success(template);
  49. }
  50. @PostMapping
  51. @Operation(summary = "创建模板")
  52. public AjaxResult<TemplateDTO> create(@RequestBody CreateTemplateRequest request) {
  53. TemplateDTO template = templateService.create(
  54. request.getName(),
  55. request.getCategory(),
  56. request.getDescription(),
  57. request.getSourceFileId(),
  58. request.getCreatedBy());
  59. return AjaxResult.success(template);
  60. }
  61. @PutMapping("/{id}")
  62. @Operation(summary = "更新模板")
  63. public AjaxResult<TemplateDTO> update(
  64. @Parameter(description = "模板ID", required = true) @PathVariable Long id,
  65. @RequestBody UpdateTemplateRequest request) {
  66. TemplateDTO template = templateService.update(
  67. id, request.getName(), request.getCategory(), request.getDescription(), request.getStatus());
  68. return AjaxResult.success(template);
  69. }
  70. @DeleteMapping("/{id}")
  71. @Operation(summary = "删除模板")
  72. public AjaxResult<?> delete(
  73. @Parameter(description = "模板ID", required = true) @PathVariable Long id) {
  74. templateService.delete(id);
  75. return AjaxResult.success("删除成功");
  76. }
  77. @GetMapping("/{templateId}/elements")
  78. @Operation(summary = "获取模板要素列表")
  79. public AjaxResult<List<ElementDTO>> listElements(
  80. @Parameter(description = "模板ID", required = true) @PathVariable Long templateId) {
  81. List<ElementDTO> elements = templateService.listElements(templateId);
  82. return AjaxResult.success(elements);
  83. }
  84. @PostMapping("/{templateId}/elements")
  85. @Operation(summary = "添加要素到模板")
  86. public AjaxResult<ElementDTO> addElement(
  87. @Parameter(description = "模板ID", required = true) @PathVariable Long templateId,
  88. @RequestBody AddElementRequest request) {
  89. ElementDTO element = templateService.addElement(
  90. templateId,
  91. request.getElementKey(),
  92. request.getName(),
  93. request.getElementType(),
  94. request.isRequired(),
  95. request.getDefaultValue(),
  96. request.getDescription());
  97. return AjaxResult.success(element);
  98. }
  99. @PutMapping("/{templateId}/elements/reorder")
  100. @Operation(summary = "调整要素顺序")
  101. public AjaxResult<?> reorderElements(
  102. @Parameter(description = "模板ID", required = true) @PathVariable Long templateId,
  103. @RequestBody ReorderRequest request) {
  104. templateService.reorderElements(templateId, request.getElementIds());
  105. return AjaxResult.success("排序成功");
  106. }
  107. @PostMapping("/{id}/create-report")
  108. @Operation(summary = "基于模板创建报告")
  109. public AjaxResult<Map<String, Object>> createReport(
  110. @Parameter(description = "模板ID", required = true) @PathVariable Long id,
  111. @RequestBody CreateReportFromTemplateRequest request) {
  112. Long reportId = templateService.createReportFromTemplate(
  113. id, request.getProjectId(), request.getReportName(), request.getCreatedBy());
  114. return AjaxResult.success(Map.of(
  115. "reportId", reportId,
  116. "templateId", id,
  117. "status", "draft"
  118. ));
  119. }
  120. @Data
  121. public static class CreateTemplateRequest {
  122. private String name;
  123. private String category;
  124. private String description;
  125. private Long sourceFileId;
  126. private Long createdBy;
  127. }
  128. @Data
  129. public static class UpdateTemplateRequest {
  130. private String name;
  131. private String category;
  132. private String description;
  133. private String status;
  134. }
  135. @Data
  136. public static class AddElementRequest {
  137. private String elementKey;
  138. private String name;
  139. private String elementType;
  140. private boolean required;
  141. private String defaultValue;
  142. private String description;
  143. }
  144. @Data
  145. public static class ReorderRequest {
  146. private List<Long> elementIds;
  147. }
  148. @Data
  149. public static class CreateReportFromTemplateRequest {
  150. private Long projectId;
  151. private String reportName;
  152. private Long createdBy;
  153. }
  154. }