فهرست منبع

feat(rule): add entryPath and sourceText fields to rule inputs

- Add entryPath field for ZIP entry path (e.g. 'folder/file.pdf')
- Add sourceText field for storing source excerpt/paragraph
- Add deleteByTypeAndFrom method to EdgeService/EdgeMapper
- RuleService.updateRule now handles inputs update
- Support precise source tracking for ZIP attachments
何文松 7 ساعت پیش
والد
کامیت
1605074151

+ 3 - 0
backend/lingyue-graph/src/main/java/com/lingyue/graph/mapper/EdgeMapper.java

@@ -30,4 +30,7 @@ public interface EdgeMapper extends BaseMapper<Edge> {
 
     @Select("SELECT COUNT(*) FROM edges WHERE edge_type = #{edgeType} AND from_node_id = #{fromNodeId}")
     int countByTypeAndFrom(@Param("edgeType") String edgeType, @Param("fromNodeId") Long fromNodeId);
+
+    @Delete("DELETE FROM edges WHERE edge_type = #{edgeType} AND from_node_id = #{fromNodeId}")
+    int deleteByTypeAndFrom(@Param("edgeType") String edgeType, @Param("fromNodeId") Long fromNodeId);
 }

+ 4 - 0
backend/lingyue-graph/src/main/java/com/lingyue/graph/service/EdgeService.java

@@ -52,4 +52,8 @@ public class EdgeService extends ServiceImpl<EdgeMapper, Edge> {
     public int countByTypeAndFrom(String edgeType, Long fromNodeId) {
         return baseMapper.countByTypeAndFrom(edgeType, fromNodeId);
     }
+
+    public void deleteByTypeAndFrom(String edgeType, Long fromNodeId) {
+        baseMapper.deleteByTypeAndFrom(edgeType, fromNodeId);
+    }
 }

+ 2 - 0
backend/lingyue-project/src/main/java/com/lingyue/project/rule/dto/RuleCreateDTO.java

@@ -33,5 +33,7 @@ public class RuleCreateDTO {
         private String inputName;
         private Long sourceNodeId;
         private String fixedValue;
+        private String entryPath;  // ZIP内文件路径,如 "工作方案/xxx.pdf"
+        private String sourceText; // 来源段落/摘要文本
     }
 }

+ 2 - 0
backend/lingyue-project/src/main/java/com/lingyue/project/rule/dto/RuleVO.java

@@ -36,6 +36,8 @@ public class RuleVO {
         private String inputName;
         private String inputType;
         private String fixedValue;
+        private String entryPath;  // ZIP内文件路径
+        private String sourceText; // 来源段落/摘要文本
         private String sourceType;
         private String sourceName;
         private Integer sortOrder;

+ 42 - 0
backend/lingyue-project/src/main/java/com/lingyue/project/rule/service/RuleService.java

@@ -102,6 +102,12 @@ public class RuleService {
                     if (StringUtils.hasText(input.getFixedValue())) {
                         propertyService.setEdgeProperty(edgeId, "fixed_value", input.getFixedValue());
                     }
+                    if (StringUtils.hasText(input.getEntryPath())) {
+                        propertyService.setEdgeProperty(edgeId, "entry_path", input.getEntryPath());
+                    }
+                    if (StringUtils.hasText(input.getSourceText())) {
+                        propertyService.setEdgeProperty(edgeId, "source_text", input.getSourceText());
+                    }
                     sortOrder++;
                 }
             }
@@ -137,6 +143,40 @@ public class RuleService {
             propertyService.setNodeProperty(ruleId, "description", dto.getDescription());
         }
 
+        // Update inputs if provided
+        if (dto.getInputs() != null) {
+            // Delete existing INPUT_FROM edges
+            edgeService.deleteByTypeAndFrom(Constants.EDGE_INPUT_FROM, ruleId);
+            
+            // Create new INPUT_FROM edges
+            int sortOrder = 0;
+            for (RuleCreateDTO.RuleInputDTO input : dto.getInputs()) {
+                if (input.getSourceNodeId() != null) {
+                    Long edgeId = edgeService.createEdge(
+                            Constants.EDGE_INPUT_FROM, ruleId, input.getSourceNodeId(), sortOrder);
+                    if (StringUtils.hasText(input.getInputKey())) {
+                        propertyService.setEdgeProperty(edgeId, "input_key", input.getInputKey());
+                    }
+                    if (StringUtils.hasText(input.getInputName())) {
+                        propertyService.setEdgeProperty(edgeId, "input_name", input.getInputName());
+                    }
+                    if (StringUtils.hasText(input.getInputType())) {
+                        propertyService.setEdgeProperty(edgeId, "input_type", input.getInputType());
+                    }
+                    if (StringUtils.hasText(input.getFixedValue())) {
+                        propertyService.setEdgeProperty(edgeId, "fixed_value", input.getFixedValue());
+                    }
+                    if (StringUtils.hasText(input.getEntryPath())) {
+                        propertyService.setEdgeProperty(edgeId, "entry_path", input.getEntryPath());
+                    }
+                    if (StringUtils.hasText(input.getSourceText())) {
+                        propertyService.setEdgeProperty(edgeId, "source_text", input.getSourceText());
+                    }
+                    sortOrder++;
+                }
+            }
+        }
+
         VRule vr = ruleViewMapper.selectById(ruleId);
         return toRuleVO(vr);
     }
@@ -227,6 +267,8 @@ public class RuleService {
         vo.setInputName(vi.getInputName());
         vo.setInputType(vi.getInputType());
         vo.setFixedValue(vi.getFixedValue());
+        vo.setEntryPath(vi.getEntryPath());
+        vo.setSourceText(vi.getSourceText());
         vo.setSourceType(vi.getSourceType());
         vo.setSourceName(vi.getSourceName());
         vo.setSortOrder(vi.getSortOrder());

+ 2 - 0
backend/lingyue-project/src/main/java/com/lingyue/project/rule/viewmapper/VRuleInput.java

@@ -17,6 +17,8 @@ public class VRuleInput implements Serializable {
     private String inputName;
     private String inputType;
     private String fixedValue;
+    private String entryPath;  // ZIP内文件路径
+    private String sourceText; // 来源段落/摘要文本
     private String sourceType;
     private String sourceName;
 }