diff --git a/src/main/java/com/supervision/police/domain/AttributeGwzs.java b/src/main/java/com/supervision/police/domain/AttributeGwzs.java
new file mode 100644
index 0000000..158862e
--- /dev/null
+++ b/src/main/java/com/supervision/police/domain/AttributeGwzs.java
@@ -0,0 +1,82 @@
+package com.supervision.police.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 
+ * @TableName attribute_gwzs
+ */
+@TableName(value ="attribute_gwzs")
+@Data
+public class AttributeGwzs implements Serializable {
+    /**
+     * 
+     */
+    private String id;
+
+    /**
+     * 证据id
+     */
+    private String evidenceId;
+
+    /**
+     * 项目名称
+     */
+    @Schema(description = "项目名称", type = "1")
+    private String projectName;
+
+    /**
+     * 项目状态
+     */
+    @Schema(description = "项目状态", type = "1")
+    private String projectStatus;
+
+    /**
+     * 发布单位
+     */
+    @Schema(description = "发布单位", type = "1")
+    private String publishingUnit;
+
+    /**
+     * 结论
+     */
+    @Schema(description = "结论", type = "1")
+    private String conclusion;
+
+    /**
+     * 发文时间
+     */
+    @Schema(description = "发文时间", type = "3")
+    private String publicationTime;
+
+    /**
+     * 
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 
+     */
+    private String createUserId;
+
+    /**
+     * 
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 
+     */
+    private String updateUserId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/supervision/police/domain/AttributeMmht.java b/src/main/java/com/supervision/police/domain/AttributeMmht.java
index 28f466b..36e4268 100644
--- a/src/main/java/com/supervision/police/domain/AttributeMmht.java
+++ b/src/main/java/com/supervision/police/domain/AttributeMmht.java
@@ -1,9 +1,7 @@
 package com.supervision.police.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
+
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
@@ -114,6 +112,7 @@ public class AttributeMmht implements Serializable {
     /**
      * 
      */
+    @TableField(fill = FieldFill.INSERT)
     private LocalDateTime createTime;
 
     /**
@@ -124,6 +123,7 @@ public class AttributeMmht implements Serializable {
     /**
      * 
      */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
 
     /**
diff --git a/src/main/java/com/supervision/police/domain/AttributeXmht.java b/src/main/java/com/supervision/police/domain/AttributeXmht.java
new file mode 100644
index 0000000..2cd4d09
--- /dev/null
+++ b/src/main/java/com/supervision/police/domain/AttributeXmht.java
@@ -0,0 +1,100 @@
+package com.supervision.police.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 
+ * @TableName attribute_xmht
+ */
+@TableName(value ="attribute_xmht")
+@Data
+public class AttributeXmht implements Serializable {
+    /**
+     * 主键
+     */
+    private String id;
+
+    /**
+     * 证据id
+     */
+    private String evidenceId;
+
+    /**
+     * 项目名称
+     */
+    @Schema(description = "项目名称", type = "1")
+    private String projectName;
+
+    /**
+     * 甲方
+     */
+    @Schema(description = "甲方", type = "1")
+    private String partA;
+
+    /**
+     * 乙方
+     */
+    @Schema(description = "乙方", type = "1")
+    private String partB;
+
+    /**
+     * 项目范围
+     */
+    @Schema(description = "项目范围", type = "1")
+    private String scope;
+
+    /**
+     * 项目开始时间
+     */
+    @Schema(description = "项目开始时间", type = "3")
+    private String projectStartTime;
+
+    /**
+     * 项目结束时间
+     */
+    @Schema(description = "项目结束时间", type = "3")
+    private String projectEndTime;
+
+    /**
+     * 签订日期
+     */
+    @Schema(description = "签订日期", type = "3")
+    private String signingTime;
+
+    /**
+     * 项目状态
+     */
+    @Schema(description = "项目状态", type = "1")
+    private String projectStatus;
+
+    /**
+     * 
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 
+     */
+    private String createUserId;
+
+    /**
+     * 
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 
+     */
+    private String updateUserId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/supervision/police/domain/AttributeYhls.java b/src/main/java/com/supervision/police/domain/AttributeYhls.java
index 6e16ecb..d06e589 100644
--- a/src/main/java/com/supervision/police/domain/AttributeYhls.java
+++ b/src/main/java/com/supervision/police/domain/AttributeYhls.java
@@ -1,9 +1,7 @@
 package com.supervision.police.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
+
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
@@ -66,6 +64,7 @@ public class AttributeYhls implements Serializable {
     /**
      * 
      */
+    @TableField(fill = FieldFill.INSERT)
     private LocalDateTime createTime;
 
     /**
@@ -76,6 +75,7 @@ public class AttributeYhls implements Serializable {
     /**
      * 
      */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
 
     /**
diff --git a/src/main/java/com/supervision/police/domain/AttributeZfpz.java b/src/main/java/com/supervision/police/domain/AttributeZfpz.java
index 8f3e7d0..4d3dc0e 100644
--- a/src/main/java/com/supervision/police/domain/AttributeZfpz.java
+++ b/src/main/java/com/supervision/police/domain/AttributeZfpz.java
@@ -1,9 +1,7 @@
 package com.supervision.police.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
+
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
@@ -60,6 +58,7 @@ public class AttributeZfpz implements Serializable {
     /**
      * 创建时间
      */
+    @TableField(fill = FieldFill.INSERT)
     private LocalDateTime createTime;
 
     /**
@@ -70,6 +69,7 @@ public class AttributeZfpz implements Serializable {
     /**
      * 
      */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
 
     /**
diff --git a/src/main/java/com/supervision/police/mapper/AttributeGwzsMapper.java b/src/main/java/com/supervision/police/mapper/AttributeGwzsMapper.java
new file mode 100644
index 0000000..02ee832
--- /dev/null
+++ b/src/main/java/com/supervision/police/mapper/AttributeGwzsMapper.java
@@ -0,0 +1,18 @@
+package com.supervision.police.mapper;
+
+import com.supervision.police.domain.AttributeGwzs;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 针对表【attribute_gwzs】的数据库操作Mapper
+* @createDate 2024-11-21 10:09:13
+* @Entity com.supervision.police.domain.AttributeGwzs
+*/
+public interface AttributeGwzsMapper extends BaseMapper<AttributeGwzs> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/supervision/police/mapper/AttributeXmhtMapper.java b/src/main/java/com/supervision/police/mapper/AttributeXmhtMapper.java
new file mode 100644
index 0000000..f8bf309
--- /dev/null
+++ b/src/main/java/com/supervision/police/mapper/AttributeXmhtMapper.java
@@ -0,0 +1,18 @@
+package com.supervision.police.mapper;
+
+import com.supervision.police.domain.AttributeXmht;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 针对表【attribute_xmht】的数据库操作Mapper
+* @createDate 2024-11-21 10:09:13
+* @Entity com.supervision.police.domain.AttributeXmht
+*/
+public interface AttributeXmhtMapper extends BaseMapper<AttributeXmht> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/supervision/police/mapper/CasePersonMapper.java b/src/main/java/com/supervision/police/mapper/CasePersonMapper.java
index 04d66e8..e5e044b 100644
--- a/src/main/java/com/supervision/police/mapper/CasePersonMapper.java
+++ b/src/main/java/com/supervision/police/mapper/CasePersonMapper.java
@@ -3,6 +3,8 @@ package com.supervision.police.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.supervision.police.domain.CasePerson;
 
+import java.util.List;
+
 /**
  * 案件人物表(CasePerson)表数据库访问层
  *
@@ -11,5 +13,6 @@ import com.supervision.police.domain.CasePerson;
  */
 public interface CasePersonMapper extends BaseMapper<CasePerson> {
 
+    List<CasePerson> listByEvidenceId(String evidenceId);
 }
 
diff --git a/src/main/java/com/supervision/police/service/AttributeGwzsService.java b/src/main/java/com/supervision/police/service/AttributeGwzsService.java
new file mode 100644
index 0000000..af3344c
--- /dev/null
+++ b/src/main/java/com/supervision/police/service/AttributeGwzsService.java
@@ -0,0 +1,13 @@
+package com.supervision.police.service;
+
+import com.supervision.police.domain.AttributeGwzs;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Administrator
+* @description 针对表【attribute_gwzs】的数据库操作Service
+* @createDate 2024-11-21 10:09:13
+*/
+public interface AttributeGwzsService extends IService<AttributeGwzs> {
+
+}
diff --git a/src/main/java/com/supervision/police/service/AttributeXmhtService.java b/src/main/java/com/supervision/police/service/AttributeXmhtService.java
new file mode 100644
index 0000000..c7c6a55
--- /dev/null
+++ b/src/main/java/com/supervision/police/service/AttributeXmhtService.java
@@ -0,0 +1,13 @@
+package com.supervision.police.service;
+
+import com.supervision.police.domain.AttributeXmht;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Administrator
+* @description 针对表【attribute_xmht】的数据库操作Service
+* @createDate 2024-11-21 10:09:13
+*/
+public interface AttributeXmhtService extends IService<AttributeXmht> {
+
+}
diff --git a/src/main/java/com/supervision/police/service/CaseEvidenceService.java b/src/main/java/com/supervision/police/service/CaseEvidenceService.java
index e866bb7..7c7749a 100644
--- a/src/main/java/com/supervision/police/service/CaseEvidenceService.java
+++ b/src/main/java/com/supervision/police/service/CaseEvidenceService.java
@@ -161,4 +161,6 @@ public interface CaseEvidenceService  extends IService<CaseEvidence> {
 
 
     void updateEvidenceAppendProcessingNewTransaction(String evidenceId, String status,String appendProcessing);
+
+    void redoExtractAttributes(String caseId, List<CaseEvidence> caseEvidences);
 }
diff --git a/src/main/java/com/supervision/police/service/CasePersonService.java b/src/main/java/com/supervision/police/service/CasePersonService.java
index f57d843..087d594 100644
--- a/src/main/java/com/supervision/police/service/CasePersonService.java
+++ b/src/main/java/com/supervision/police/service/CasePersonService.java
@@ -3,6 +3,8 @@ package com.supervision.police.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.supervision.police.domain.CasePerson;
 
+import java.util.List;
+
 public interface CasePersonService extends IService<CasePerson> {
 
 
@@ -14,4 +16,7 @@ public interface CasePersonService extends IService<CasePerson> {
      * @return 插入结果 true 成功 false 失败
      */
     boolean saveCaseActor(String caseId,String caseActorName,String caseActorIdCard);
+
+
+    List<CasePerson> listByEvidenceId(String evidenceId);
 }
diff --git a/src/main/java/com/supervision/police/service/impl/AttributeGwzsServiceImpl.java b/src/main/java/com/supervision/police/service/impl/AttributeGwzsServiceImpl.java
new file mode 100644
index 0000000..575cb6d
--- /dev/null
+++ b/src/main/java/com/supervision/police/service/impl/AttributeGwzsServiceImpl.java
@@ -0,0 +1,22 @@
+package com.supervision.police.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.supervision.police.domain.AttributeGwzs;
+import com.supervision.police.service.AttributeGwzsService;
+import com.supervision.police.mapper.AttributeGwzsMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 针对表【attribute_gwzs】的数据库操作Service实现
+* @createDate 2024-11-21 10:09:13
+*/
+@Service
+public class AttributeGwzsServiceImpl extends ServiceImpl<AttributeGwzsMapper, AttributeGwzs>
+    implements AttributeGwzsService{
+
+}
+
+
+
+
diff --git a/src/main/java/com/supervision/police/service/impl/AttributeXmhtServiceImpl.java b/src/main/java/com/supervision/police/service/impl/AttributeXmhtServiceImpl.java
new file mode 100644
index 0000000..4f4efcf
--- /dev/null
+++ b/src/main/java/com/supervision/police/service/impl/AttributeXmhtServiceImpl.java
@@ -0,0 +1,22 @@
+package com.supervision.police.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.supervision.police.domain.AttributeXmht;
+import com.supervision.police.service.AttributeXmhtService;
+import com.supervision.police.mapper.AttributeXmhtMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 针对表【attribute_xmht】的数据库操作Service实现
+* @createDate 2024-11-21 10:09:13
+*/
+@Service
+public class AttributeXmhtServiceImpl extends ServiceImpl<AttributeXmhtMapper, AttributeXmht>
+    implements AttributeXmhtService{
+
+}
+
+
+
+
diff --git a/src/main/java/com/supervision/police/service/impl/CaseEvidencePropertyServiceImpl.java b/src/main/java/com/supervision/police/service/impl/CaseEvidencePropertyServiceImpl.java
index 7d55358..2523abe 100644
--- a/src/main/java/com/supervision/police/service/impl/CaseEvidencePropertyServiceImpl.java
+++ b/src/main/java/com/supervision/police/service/impl/CaseEvidencePropertyServiceImpl.java
@@ -9,8 +9,10 @@ import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.supervision.police.domain.CasePerson;
 import com.supervision.police.dto.NotePromptExtractAttributesDto;
 import com.supervision.police.service.CaseEvidencePropertyService;
+import com.supervision.police.service.CasePersonService;
 import com.supervision.police.service.ComDictionaryService;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.annotation.PostConstruct;
@@ -32,23 +34,27 @@ public class CaseEvidencePropertyServiceImpl implements CaseEvidencePropertyServ
     private final ApplicationContext applicationContext;
 
     private final ComDictionaryService comDictionaryService;
+
+    private final CasePersonService casePersonService;
     private final Map<String, IService<?>> evidencePropertyServiceMap = new HashMap<>();
     private final Map<String, BeanDesc> beanDescMap = new HashMap<>();
 
     @Override
     public List<NotePromptExtractAttributesDto> findExtractAttributes(String categoryId) {
         if (StrUtil.isEmpty(categoryId)){
-            return new ArrayList<>();
+            return new ArrayList<>(1);
         }
 
         String beanName = getEntityNameIfExist(categoryId);
         if (StrUtil.isEmpty(beanName)){
-            return new ArrayList<>();
+            return new ArrayList<>(1);
         }
 
         BeanDesc beanDesc = beanDescMap.get(beanName);
-        Assert.notNull(beanDesc, "字典表evidence_property_bean中不存在"+beanName+"对应的属性");
 
+        if (beanDesc == null){
+            return new ArrayList<>(1);
+        }
         return beanDesc.getProps().stream()
                 .filter(prop -> null != prop.getField().getAnnotation(Schema.class)).map(prop -> {
                     NotePromptExtractAttributesDto attributesDto = new NotePromptExtractAttributesDto();
@@ -81,6 +87,8 @@ public class CaseEvidencePropertyServiceImpl implements CaseEvidencePropertyServ
             log.warn("保存证据属性时,属性为空,不保存任何数据,证据id:{}", evidenceId);
             return;
         }
+        extendPerson(entityJson, evidenceId);
+
         iService.save(JSONUtil.toBean(entityJson, iService.getEntityClass()));
     }
 
@@ -101,9 +109,12 @@ public class CaseEvidencePropertyServiceImpl implements CaseEvidencePropertyServ
 
         JSONObject entityJson = mapToEntityJson(entityName, attributes);
         if (entityJson.isEmpty()){
+            log.warn("保存证据属性时,属性为空,不保存任何数据,证据id:{}", evidenceId);
             return;
         }
 
+        extendPerson(entityJson, evidenceId);
+
         iService.update(entityJson, new QueryWrapper<>().eq("evidence_id", evidenceId));
 
     }
@@ -162,6 +173,31 @@ public class CaseEvidencePropertyServiceImpl implements CaseEvidencePropertyServ
 
 
 
+    private void extendPerson(JSONObject entityJson, String evidenceId){
+
+        List<String> partKey = entityJson.keySet().stream().filter(k -> k.startsWith("part")).toList();
+        if (partKey.isEmpty()){
+            return;
+        }
+        List<CasePerson> casePersonList = casePersonService.listByEvidenceId(evidenceId);
+        if (CollUtil.isEmpty(casePersonList)){
+            return;
+        }
+
+        for (String key : partKey) {
+            String partName = entityJson.getStr(key);
+            if (StrUtil.isEmpty(partName)){
+                continue;
+            }
+            for (CasePerson casePerson : casePersonList) {
+                if (StrUtil.equals(casePerson.getName(),partName)){
+                    entityJson.set(key+"Id", casePerson.getId());
+                    break;
+                }
+            }
+        }
+    }
+
     @PostConstruct
     public void init(){
 
diff --git a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java
index 42010f0..586f19f 100644
--- a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java
+++ b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java
@@ -905,6 +905,8 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
 
         List<CaseEvidence> caseEvidenceList = this.lambdaQuery().eq(CaseEvidence::getCaseId, caseId).list();
 
+        this.redoExtractAttributes(caseId, caseEvidenceList);
+
         EvidenceDirectoryDTO rootDirectory = new EvidenceDirectoryDTO(evidenceDirectoryDTOS);
 
         // 强行翻译
@@ -928,6 +930,32 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
         return evidenceDirectoryDTOS;
     }
 
+    public void redoExtractAttributes(String caseId, List<CaseEvidence> caseEvidences) {
+
+        EvidenceDirectoryDTO rootDirectory = new EvidenceDirectoryDTO(evidenceDirectoryService.listDirectoryTree(caseId));
+        Map<String, List<String>> categoryMapEvidence = new HashMap<>();
+        for (CaseEvidence caseEvidence : caseEvidences) {
+            EvidenceDirectoryDTO directory = rootDirectory.findDirectory(caseEvidence.getDirectoryId());
+            if (null != directory && StrUtil.isNotEmpty(directory.getCategoryId())){
+                List<String> evidenceIds = categoryMapEvidence.getOrDefault(directory.getCategoryId(), new ArrayList<>());
+                evidenceIds.add(caseEvidence.getId());
+                categoryMapEvidence.put(directory.getCategoryId(), evidenceIds);
+            }
+        }
+
+        Map<String, List<NotePromptExtractAttributesDto>> map = new HashMap<>();
+        for (Map.Entry<String, List<String>> entry : categoryMapEvidence.entrySet()) {
+            map.putAll(caseEvidencePropertyService.listEvidenceProperty(entry.getKey(), entry.getValue()));
+        }
+        for (CaseEvidence caseEvidence : caseEvidences) {
+            List<NotePromptExtractAttributesDto> attributesDtos = map.get(caseEvidence.getId());
+            // 兼容老数据
+            if (CollUtil.isNotEmpty(attributesDtos)){
+                caseEvidence.setProperty(attributesDtos);
+            }
+        }
+    }
+
     /**
      * 重新构建证据属性数据
      * @param rootDirectory 根目录
diff --git a/src/main/java/com/supervision/police/service/impl/CasePersonServiceImpl.java b/src/main/java/com/supervision/police/service/impl/CasePersonServiceImpl.java
index dce463a..81bec7f 100644
--- a/src/main/java/com/supervision/police/service/impl/CasePersonServiceImpl.java
+++ b/src/main/java/com/supervision/police/service/impl/CasePersonServiceImpl.java
@@ -10,6 +10,9 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Slf4j
 @Service
 @RequiredArgsConstructor
@@ -46,4 +49,13 @@ public class CasePersonServiceImpl extends ServiceImpl<CasePersonMapper, CasePer
         return save;
 
     }
+
+    @Override
+    public List<CasePerson> listByEvidenceId(String evidenceId) {
+        if (StrUtil.isEmpty(evidenceId)){
+            return new ArrayList<>(1);
+        }
+
+        return super.getBaseMapper().listByEvidenceId(evidenceId);
+    }
 }
diff --git a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java
index bc14bd2..bb4b51d 100644
--- a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java
+++ b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java
@@ -94,6 +94,8 @@ public class ModelServiceImpl implements ModelService {
 
     private final EvidenceCategoryService evidenceCategoryService;
 
+    private final CaseEvidencePropertyService caseEvidencePropertyService;
+
     @Override
     @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
     public R<?> analyseCase(AnalyseCaseDTO analyseCaseDTO) {
@@ -207,12 +209,20 @@ public class ModelServiceImpl implements ModelService {
             log.error("未找到提示词信息:【{}】", TYPE_STRUCTURAL_REASONING);
             return R.fail("未找到提示词信息");
         }
+        // 查询提示词对应的属性
+        for (NotePrompt notePrompt : notePrompts) {
+            notePrompt.setExtractAttributes(caseEvidencePropertyService.findExtractAttributes(notePrompt.getEvidenceCategoryId()));
+        }
+
         List<EvidenceDirectory> evidenceDirectories = evidenceDirectoryService.list(new LambdaQueryWrapper<EvidenceDirectory>().eq(EvidenceDirectory::getCaseId, caseId));
         if (evidenceDirectories.isEmpty()) {
             log.error("未找到证据目录信息:【{}】", caseId);
             return R.fail("未找到证据目录信息");
         }
         List<CaseEvidence> caseEvidences = caseEvidenceService.list(new LambdaQueryWrapper<CaseEvidence>().eq(CaseEvidence::getCaseId, caseId));
+        caseEvidenceService.redoExtractAttributes(caseId, caseEvidences);
+
+
         List<ModelIndexAtomicRelation> modelIndexAtomicRelations = modelIndexAtomicRelationService.list();
         if (modelIndexAtomicRelations.isEmpty()) {
             log.error("未找到指标原子关系信息");
@@ -317,6 +327,8 @@ public class ModelServiceImpl implements ModelService {
         return R.ok();
     }
 
+
+
     private void removeAtomicResultWithNoReference(String modelIndexId, List<ModelIndexAtomicRelation> modelIndexAtomicRelations,
                                                    List<ModelAtomicResult> modelAtomicResultList) {
         List<String> atomicIds = modelIndexAtomicRelations.stream()
diff --git a/src/main/java/com/supervision/police/service/impl/NotePromptServiceImpl.java b/src/main/java/com/supervision/police/service/impl/NotePromptServiceImpl.java
index fb9ad24..8433770 100644
--- a/src/main/java/com/supervision/police/service/impl/NotePromptServiceImpl.java
+++ b/src/main/java/com/supervision/police/service/impl/NotePromptServiceImpl.java
@@ -15,6 +15,7 @@ import com.supervision.minio.service.MinioService;
 import com.supervision.police.domain.*;
 import com.supervision.police.dto.LLMExtractDto;
 import com.supervision.police.dto.NotePromptDTO;
+import com.supervision.police.dto.NotePromptExtractAttributesDto;
 import com.supervision.police.mapper.NotePromptMapper;
 import com.supervision.police.service.*;
 import com.supervision.thread.TripleExtractTask;
@@ -63,6 +64,8 @@ public class NotePromptServiceImpl extends ServiceImpl<NotePromptMapper, NotePro
     @Autowired
     private EvidenceCategoryService evidenceCategoryService;
 
+    private final CaseEvidencePropertyService caseEvidencePropertyService;
+
     @Override
     public List<NotePrompt> listPromptBySplitId(String recordSplitId) {
 
@@ -116,7 +119,14 @@ public class NotePromptServiceImpl extends ServiceImpl<NotePromptMapper, NotePro
 
     @Override
     public IPage<NotePromptDTO> listPrompt(NotePromptDTO notePromptDTO) {
-        return notePromptMapper.selectNotePromptWithMatchNum(new Page<>(notePromptDTO.getPage(), notePromptDTO.getSize()), notePromptDTO);
+        Page<NotePromptDTO> notePromptDTOPage = notePromptMapper.selectNotePromptWithMatchNum(new Page<>(notePromptDTO.getPage(), notePromptDTO.getSize()), notePromptDTO);
+        for (NotePromptDTO record : notePromptDTOPage.getRecords()) {
+            if (StrUtil.isEmpty(record.getEvidenceCategoryId())){
+                continue;
+            }
+            record.setExtractAttributes(caseEvidencePropertyService.findExtractAttributes(record.getEvidenceCategoryId()));
+        }
+        return notePromptDTOPage;
     }
 
     @Override
@@ -186,6 +196,11 @@ public class NotePromptServiceImpl extends ServiceImpl<NotePromptMapper, NotePro
     @Override
     public NotePromptDTO getById(String id) {
         NotePrompt notePrompt = super.getById(id);
+
+        if (null != notePrompt && StrUtil.isNotEmpty(notePrompt.getEvidenceCategoryId())){
+            notePrompt.setExtractAttributes(caseEvidencePropertyService.findExtractAttributes(notePrompt.getEvidenceCategoryId()));
+        }
+
         NotePromptDTO notePromptDTO = new NotePromptDTO();
         BeanUtils.copyProperties(notePrompt, notePromptDTO);
 
diff --git a/src/main/resources/mapper/AttributeGwzsMapper.xml b/src/main/resources/mapper/AttributeGwzsMapper.xml
new file mode 100644
index 0000000..7966a32
--- /dev/null
+++ b/src/main/resources/mapper/AttributeGwzsMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.supervision.police.mapper.AttributeGwzsMapper">
+
+    <resultMap id="BaseResultMap" type="com.supervision.police.domain.AttributeGwzs">
+            <result property="id" column="id" jdbcType="VARCHAR"/>
+            <result property="evidenceId" column="evidence_id" jdbcType="VARCHAR"/>
+            <result property="projectName" column="project_name" jdbcType="VARCHAR"/>
+            <result property="projectStatus" column="project_status" jdbcType="VARCHAR"/>
+            <result property="publishingUnit" column="publishing_unit" jdbcType="VARCHAR"/>
+            <result property="conclusion" column="conclusion" jdbcType="VARCHAR"/>
+            <result property="publicationTime" column="publication_time" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+            <result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,evidence_id,project_name,
+        project_status,publishing_unit,conclusion,
+        publication_time,create_time,create_user_id,
+        update_time,update_user_id
+    </sql>
+</mapper>
diff --git a/src/main/resources/mapper/AttributeXmhtMapper.xml b/src/main/resources/mapper/AttributeXmhtMapper.xml
new file mode 100644
index 0000000..475f23e
--- /dev/null
+++ b/src/main/resources/mapper/AttributeXmhtMapper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.supervision.police.mapper.AttributeXmhtMapper">
+
+    <resultMap id="BaseResultMap" type="com.supervision.police.domain.AttributeXmht">
+            <result property="id" column="id" jdbcType="VARCHAR"/>
+            <result property="evidenceId" column="evidence_id" jdbcType="VARCHAR"/>
+            <result property="projectName" column="project_name" jdbcType="VARCHAR"/>
+            <result property="partA" column="part_a" jdbcType="VARCHAR"/>
+            <result property="partB" column="part_b" jdbcType="VARCHAR"/>
+            <result property="scope" column="scope" jdbcType="VARCHAR"/>
+            <result property="projectStartTime" column="project_start_time" jdbcType="VARCHAR"/>
+            <result property="projectEndTime" column="project_end_time" jdbcType="VARCHAR"/>
+            <result property="signingTime" column="signing_time" jdbcType="VARCHAR"/>
+            <result property="projectStatus" column="project_status" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+            <result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,evidence_id,project_name,
+        part_a,part_b,scope,
+        project_start_time,project_end_time,signing_time,
+        project_status,create_time,create_user_id,
+        update_time,update_user_id
+    </sql>
+</mapper>
diff --git a/src/main/resources/mapper/CasePersonMapper.xml b/src/main/resources/mapper/CasePersonMapper.xml
index 455aa78..836f782 100644
--- a/src/main/resources/mapper/CasePersonMapper.xml
+++ b/src/main/resources/mapper/CasePersonMapper.xml
@@ -2,4 +2,10 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.supervision.police.mapper.CasePersonMapper">
 
+    <select id="listByEvidenceId" resultType="com.supervision.police.domain.CasePerson">
+        select cp.*
+        from case_evidence ce
+                 join case_person cp on ce.case_id = cp.case_id
+        where ce.id = #{evidenceId}
+    </select>
 </mapper>
\ No newline at end of file