From 2061ac049d6da7a31b2220b9a866f8a8639f5fec Mon Sep 17 00:00:00 2001
From: "DESKTOP-DDTUS3E\\yaxin" <daixiaoyi0622@gmail.com>
Date: Tue, 15 Oct 2024 14:37:18 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E7=A4=BA=E8=AF=8D=E6=96=B0=E5=A2=9E?=
 =?UTF-8?q?=E3=80=81=E4=BF=AE=E6=94=B9=E3=80=81=E5=88=86=E9=A1=B5=E5=88=97?=
 =?UTF-8?q?=E8=A1=A8=E6=94=B9=E9=80=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../common/constant/NotePromptConstants.java  |  25 +++
 .../police/controller/PromptController.java   |  20 +--
 .../supervision/police/dto/NotePromptDTO.java |  11 ++
 .../police/mapper/NotePromptMapper.java       |   5 +-
 .../police/service/NotePromptService.java     |   4 +-
 .../impl/ModelRecordTypeServiceImpl.java      | 162 +++++++++---------
 .../service/impl/NotePromptServiceImpl.java   |  21 ++-
 .../resources/mapper/NotePromptMapper.xml     |  16 ++
 8 files changed, 162 insertions(+), 102 deletions(-)
 create mode 100644 src/main/java/com/supervision/common/constant/NotePromptConstants.java
 create mode 100644 src/main/java/com/supervision/police/dto/NotePromptDTO.java

diff --git a/src/main/java/com/supervision/common/constant/NotePromptConstants.java b/src/main/java/com/supervision/common/constant/NotePromptConstants.java
new file mode 100644
index 0000000..b32a614
--- /dev/null
+++ b/src/main/java/com/supervision/common/constant/NotePromptConstants.java
@@ -0,0 +1,25 @@
+package com.supervision.common.constant;
+
+public class NotePromptConstants {
+    /**
+     * 案件类型-工程类合同诈骗
+     */
+    public static final String CASE_TYPE_ENGINEERING_CONTRACT_FRAUD = "1";
+
+    /**
+     * 提示词类型-结构化推理
+     */
+    public static final String TYPE_STRUCTURAL_REASONING = "1";
+
+    /**
+     * 提示词类型-图谱推理
+     */
+    public static final String TYPE_GRAPH_REASONING = "2";
+
+    /**
+     * 提示词类型-分类
+     */
+    public static final String TYPE_CLASSIFICATION = "3";
+
+
+}
diff --git a/src/main/java/com/supervision/police/controller/PromptController.java b/src/main/java/com/supervision/police/controller/PromptController.java
index 599a8a4..abcac03 100644
--- a/src/main/java/com/supervision/police/controller/PromptController.java
+++ b/src/main/java/com/supervision/police/controller/PromptController.java
@@ -1,7 +1,9 @@
 package com.supervision.police.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.supervision.common.domain.R;
 import com.supervision.police.domain.NotePrompt;
+import com.supervision.police.dto.NotePromptDTO;
 import com.supervision.police.service.NotePromptService;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.v3.oas.annotations.Operation;
@@ -9,8 +11,6 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-
 @RestController
 @Slf4j
 @RequestMapping("/prompt")
@@ -24,18 +24,16 @@ public class PromptController {
 
     /**
      * 查询提示词
-     * @param caseType 案件类型 默认为1
-     * @param type 提示词类型 3:三年元组提示词,4:大模型提示词
+     *
+     * @param notePrompt 提示词对象
      * @return
      */
-    @GetMapping("/list")
+    @PostMapping("/list")
     @Operation(summary = "查询提示词列表")
-    public R<List<NotePrompt>> listPrompt(@RequestParam(name = "caseType",defaultValue = "1") String caseType,@RequestParam("type") String type) {
-        NotePrompt notePrompt = new NotePrompt();
-        notePrompt.setId("04ac794c-6457-11ef-a77c-0242ac11000d");
-        notePrompt.setCaseType(caseType);
-        notePrompt.setType(type);
-        List<NotePrompt> notePrompts = promptService.listPrompt(notePrompt);
+    public R<IPage<NotePromptDTO>> listPrompt(@RequestBody NotePrompt notePrompt,
+                                           @RequestParam(required = false, defaultValue = "1") Integer page,
+                                           @RequestParam(required = false, defaultValue = "20") Integer size) {
+        IPage<NotePromptDTO> notePrompts = promptService.listPrompt(page, size, notePrompt);
         return R.ok(notePrompts);
     }
 }
diff --git a/src/main/java/com/supervision/police/dto/NotePromptDTO.java b/src/main/java/com/supervision/police/dto/NotePromptDTO.java
new file mode 100644
index 0000000..9b51081
--- /dev/null
+++ b/src/main/java/com/supervision/police/dto/NotePromptDTO.java
@@ -0,0 +1,11 @@
+package com.supervision.police.dto;
+
+import com.supervision.police.domain.NotePrompt;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class NotePromptDTO extends NotePrompt {
+    private Integer matchNum;
+}
diff --git a/src/main/java/com/supervision/police/mapper/NotePromptMapper.java b/src/main/java/com/supervision/police/mapper/NotePromptMapper.java
index 5288516..904b89b 100644
--- a/src/main/java/com/supervision/police/mapper/NotePromptMapper.java
+++ b/src/main/java/com/supervision/police/mapper/NotePromptMapper.java
@@ -1,12 +1,13 @@
 package com.supervision.police.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.supervision.police.domain.NotePrompt;
+import com.supervision.police.dto.NotePromptDTO;
 import org.apache.ibatis.annotations.Param;
 
-import java.util.List;
-
 public interface NotePromptMapper extends BaseMapper<NotePrompt> {
 
+    Page<NotePromptDTO> selectNotePromptWithMatchNum(Page<NotePromptDTO> page, @Param("notePrompt") NotePrompt notePrompt);
 
 }
diff --git a/src/main/java/com/supervision/police/service/NotePromptService.java b/src/main/java/com/supervision/police/service/NotePromptService.java
index 0101d4d..8522fb3 100644
--- a/src/main/java/com/supervision/police/service/NotePromptService.java
+++ b/src/main/java/com/supervision/police/service/NotePromptService.java
@@ -1,7 +1,9 @@
 package com.supervision.police.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.supervision.police.domain.NotePrompt;
+import com.supervision.police.dto.NotePromptDTO;
 
 import java.util.List;
 
@@ -10,5 +12,5 @@ public interface NotePromptService extends IService<NotePrompt> {
     List<NotePrompt> listPromptBySplitId(String recordSplitId);
 
 
-    List<NotePrompt> listPrompt(NotePrompt notePrompt);
+    IPage<NotePromptDTO> listPrompt(int page, int size, NotePrompt notePrompt);
 }
diff --git a/src/main/java/com/supervision/police/service/impl/ModelRecordTypeServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelRecordTypeServiceImpl.java
index 7a0ce14..ed06f29 100644
--- a/src/main/java/com/supervision/police/service/impl/ModelRecordTypeServiceImpl.java
+++ b/src/main/java/com/supervision/police/service/impl/ModelRecordTypeServiceImpl.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.supervision.common.constant.NotePromptConstants;
 import com.supervision.common.domain.R;
 import com.supervision.config.BusinessException;
 import com.supervision.neo4j.domain.CaseNode;
@@ -21,14 +22,10 @@ import com.supervision.police.mapper.NoteRecordSplitMapper;
 import com.supervision.police.service.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.ai.chat.ChatResponse;
-import org.springframework.ai.chat.messages.UserMessage;
-import org.springframework.ai.chat.prompt.Prompt;
 import org.springframework.ai.ollama.OllamaChatClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.StopWatch;
 
 import java.util.*;
 import java.util.function.Function;
@@ -154,95 +151,99 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
     @Override
     @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class)
     public R<?> addOrUpdPrompt(NotePrompt prompt) {
-        List<String> typeList = prompt.getTypeList();
-        if (CollUtil.isEmpty(typeList)) {
-            throw new RuntimeException("类型信息不能为空");
-        }
-        boolean save;
-        if (StringUtils.isEmpty(prompt.getId())) {
-            // 新增的时候,校验是否已经存在相同的三元组关系,如果已经存在了相同的三元组关系,不允许添加
-            checkHasSameTriple(prompt.getStartEntityType(), prompt.getRelType(), prompt.getEndEntityType(), null);
-            save = notePromptService.save(prompt);
-            // 新增prompt绑定的分类信息
-            for (String typeId : typeList) {
-                NotePromptTypeRel rel = new NotePromptTypeRel();
-                rel.setPromptId(prompt.getId());
-                rel.setTypeId(typeId);
-                notePromptTypeRelService.save(rel);
+        String type = prompt.getType();
+        if (NotePromptConstants.TYPE_GRAPH_REASONING.equals(type)) {
+            List<String> typeList = prompt.getTypeList();
+            if (CollUtil.isEmpty(typeList)) {
+                throw new RuntimeException("类型信息不能为空");
             }
-        } else {
-            checkHasSameTriple(prompt.getStartEntityType(), prompt.getRelType(), prompt.getEndEntityType(), prompt.getId());
-            save = notePromptService.updateById(prompt);
-            // 更新prompt绑定的分类信息
-            // 首先查询已经有的,如果都存在,就不变,如果数据库有,前端没有,就删除,如果前端有,数据库没有,就新增
-            List<NotePromptTypeRel> existDatabaseRelList = notePromptTypeRelService.lambdaQuery().eq(NotePromptTypeRel::getPromptId, prompt.getId()).list();
-
-            if (CollUtil.isNotEmpty(existDatabaseRelList)) {
-                Set<String> existTypeList = existDatabaseRelList.stream().map(NotePromptTypeRel::getTypeId).collect(Collectors.toSet());
-                Set<String> frontRelIdList = new HashSet<>(typeList);
-                // 删除(数据库有,前端没有的)
-                List<String> deleteIdList = existTypeList.stream().filter(id -> !frontRelIdList.contains(id)).collect(Collectors.toList());
-                if (CollUtil.isNotEmpty(deleteIdList)) {
-                    notePromptTypeRelService.lambdaUpdate().in(NotePromptTypeRel::getTypeId, deleteIdList).eq(NotePromptTypeRel::getPromptId, prompt.getId()).remove();
-                }
-                // 新增(前端有数据库没有的)
-                frontRelIdList.stream().filter(id -> !existTypeList.contains(id)).forEach(e -> {
-                    NotePromptTypeRel rel = new NotePromptTypeRel();
-                    rel.setPromptId(prompt.getId());
-                    rel.setTypeId(e);
-                    notePromptTypeRelService.save(rel);
-                });
-            } else {
-                // 如果数据库里面没查到,直接新增,一般不会走这一步
+            boolean save;
+            if (StringUtils.isEmpty(prompt.getId())) {
+                // 新增的时候,校验是否已经存在相同的三元组关系,如果已经存在了相同的三元组关系,不允许添加
+                checkHasSameTriple(prompt.getStartEntityType(), prompt.getRelType(), prompt.getEndEntityType(), null);
+                save = notePromptService.save(prompt);
+                // 新增prompt绑定的分类信息
                 for (String typeId : typeList) {
                     NotePromptTypeRel rel = new NotePromptTypeRel();
                     rel.setPromptId(prompt.getId());
                     rel.setTypeId(typeId);
                     notePromptTypeRelService.save(rel);
                 }
+            } else {
+                checkHasSameTriple(prompt.getStartEntityType(), prompt.getRelType(), prompt.getEndEntityType(), prompt.getId());
+                save = notePromptService.updateById(prompt);
+                // 更新prompt绑定的分类信息
+                // 首先查询已经有的,如果都存在,就不变,如果数据库有,前端没有,就删除,如果前端有,数据库没有,就新增
+                List<NotePromptTypeRel> existDatabaseRelList = notePromptTypeRelService.lambdaQuery().eq(NotePromptTypeRel::getPromptId, prompt.getId()).list();
+
+                if (CollUtil.isNotEmpty(existDatabaseRelList)) {
+                    Set<String> existTypeList = existDatabaseRelList.stream().map(NotePromptTypeRel::getTypeId).collect(Collectors.toSet());
+                    Set<String> frontRelIdList = new HashSet<>(typeList);
+                    // 删除(数据库有,前端没有的)
+                    List<String> deleteIdList = existTypeList.stream().filter(id -> !frontRelIdList.contains(id)).collect(Collectors.toList());
+                    if (CollUtil.isNotEmpty(deleteIdList)) {
+                        notePromptTypeRelService.lambdaUpdate().in(NotePromptTypeRel::getTypeId, deleteIdList).eq(NotePromptTypeRel::getPromptId, prompt.getId()).remove();
+                    }
+                    // 新增(前端有数据库没有的)
+                    frontRelIdList.stream().filter(id -> !existTypeList.contains(id)).forEach(e -> {
+                        NotePromptTypeRel rel = new NotePromptTypeRel();
+                        rel.setPromptId(prompt.getId());
+                        rel.setTypeId(e);
+                        notePromptTypeRelService.save(rel);
+                    });
+                } else {
+                    // 如果数据库里面没查到,直接新增,一般不会走这一步
+                    for (String typeId : typeList) {
+                        NotePromptTypeRel rel = new NotePromptTypeRel();
+                        rel.setPromptId(prompt.getId());
+                        rel.setTypeId(typeId);
+                        notePromptTypeRelService.save(rel);
+                    }
+                }
             }
-        }
 
 
-        // 更新类型字段
-        List<TripleInfoDTO> tripleList = prompt.getTripleList();
-        for (TripleInfoDTO dto : tripleList) {
-            if ("头节点".equals(dto.getType())) {
-                notePromptService.lambdaUpdate().set(NotePrompt::getStartEntityTemplate, dto.getTemplateName())
-                        .set(NotePrompt::getStartEntityType, dto.getValue())
-                        .eq(NotePrompt::getId, prompt.getId()).update();
-            } else if ("关系".equals(dto.getType())) {
-                notePromptService.lambdaUpdate().set(NotePrompt::getRelTemplate, dto.getTemplateName())
-                        .set(NotePrompt::getRelType, dto.getValue())
-                        .eq(NotePrompt::getId, prompt.getId()).update();
-            } else if ("尾节点".equals(dto.getType())) {
-                notePromptService.lambdaUpdate().set(NotePrompt::getEndEntityTemplate, dto.getTemplateName())
-                        .set(NotePrompt::getEndEntityType, dto.getValue())
-                        .eq(NotePrompt::getId, prompt.getId()).update();
+            // 更新类型字段
+            List<TripleInfoDTO> tripleList = prompt.getTripleList();
+            for (TripleInfoDTO dto : tripleList) {
+                if ("头节点".equals(dto.getType())) {
+                    notePromptService.lambdaUpdate().set(NotePrompt::getStartEntityTemplate, dto.getTemplateName())
+                            .set(NotePrompt::getStartEntityType, dto.getValue())
+                            .eq(NotePrompt::getId, prompt.getId()).update();
+                } else if ("关系".equals(dto.getType())) {
+                    notePromptService.lambdaUpdate().set(NotePrompt::getRelTemplate, dto.getTemplateName())
+                            .set(NotePrompt::getRelType, dto.getValue())
+                            .eq(NotePrompt::getId, prompt.getId()).update();
+                } else if ("尾节点".equals(dto.getType())) {
+                    notePromptService.lambdaUpdate().set(NotePrompt::getEndEntityTemplate, dto.getTemplateName())
+                            .set(NotePrompt::getEndEntityType, dto.getValue())
+                            .eq(NotePrompt::getId, prompt.getId()).update();
+                }
             }
-        }
 
-        // 获取所有的类型
-        List<ModelRecordType> modelRecordTypes = list();
-        // 根据提示词id获取类型和提示词的关系表
-        List<NotePromptTypeRel> relList = notePromptTypeRelService.list(new QueryWrapper<NotePromptTypeRel>().eq("prompt_id", prompt.getId()));
-        //根据typeId集合过滤出对应的modelRecordType的name
-        List<String> typeNames = modelRecordTypes.stream().filter(e -> relList.stream().map(NotePromptTypeRel::getTypeId).toList().contains(e.getId())).map(ModelRecordType::getRecordType).toList();
-        //根据typeNames模糊匹配查询note_record_split
-        List<NoteRecordSplit> noteRecordSplits = noteRecordSplitService.list().stream()
-                .filter(record -> record != null && record.getRecordType() != null && typeNames.stream().anyMatch(typeName -> Arrays.asList(record.getRecordType().split(",")).contains(typeName)))
-                .toList();
-        //过滤并去重涉及到的的note_record_id
-        Set<String> recordIds = noteRecordSplits.stream().map(NoteRecordSplit::getNoteRecordId).collect(Collectors.toSet());
-        //根据note_record_id更新note_record表的isPromptUpdate字段
-        log.info("开始更新笔录表提示词更新状态【is_prompt_update】,涉及到的笔录有:{}", recordIds);
-        boolean updated = noteRecordService.update(new UpdateWrapper<NoteRecord>().set("is_prompt_update", true).in("id", recordIds));
-
-        if (save && updated) {
-            return R.ok("保存成功");
+            // 获取所有的类型
+            List<ModelRecordType> modelRecordTypes = list();
+            // 根据提示词id获取类型和提示词的关系表
+            List<NotePromptTypeRel> relList = notePromptTypeRelService.list(new QueryWrapper<NotePromptTypeRel>().eq("prompt_id", prompt.getId()));
+            //根据typeId集合过滤出对应的modelRecordType的name
+            List<String> typeNames = modelRecordTypes.stream().filter(e -> relList.stream().map(NotePromptTypeRel::getTypeId).toList().contains(e.getId())).map(ModelRecordType::getRecordType).toList();
+            //根据typeNames模糊匹配查询note_record_split
+            List<NoteRecordSplit> noteRecordSplits = noteRecordSplitService.list().stream()
+                    .filter(record -> record != null && record.getRecordType() != null && typeNames.stream().anyMatch(typeName -> Arrays.asList(record.getRecordType().split(",")).contains(typeName)))
+                    .toList();
+            //过滤并去重涉及到的的note_record_id
+            Set<String> recordIds = noteRecordSplits.stream().map(NoteRecordSplit::getNoteRecordId).collect(Collectors.toSet());
+            //根据note_record_id更新note_record表的isPromptUpdate字段
+            log.info("开始更新笔录表提示词更新状态【is_prompt_update】,涉及到的笔录有:{}", recordIds);
+            boolean updated = noteRecordService.update(new UpdateWrapper<NoteRecord>().set("is_prompt_update", true).in("id", recordIds));
+            if (!save || !updated) {
+                return R.fail("保存失败");
+            }
         } else {
-            return R.fail("保存失败");
+            notePromptService.saveOrUpdate(prompt);
         }
+        return R.ok("保存成功");
+
     }
 
     private void checkHasSameTriple(String startEntityType, String relType, String endEntityType, String promptId) {
@@ -252,6 +253,7 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
             if (StrUtil.isBlank(promptId)) {
                 throw new RuntimeException("该三元组关系已经存在,请勿重复添加");
             } else {
+
                 // 校验list查出来的是不是和promptId相等,如果不想等,也报错
                 if (!list.get(0).getId().equals(promptId)) {
                     throw new RuntimeException("该三元组关系已经存在,请勿重复添加");
@@ -307,7 +309,7 @@ public class ModelRecordTypeServiceImpl extends ServiceImpl<ModelRecordTypeMappe
                 // 更新为1执行中
                 throw new BusinessException("笔录解析任务未完成,请等待");
             }
-        }else {
+        } else {
             throw new BusinessException("请先进行笔录提取");
         }
         // 这里进行查询
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 a62db0c..c740e9b 100644
--- a/src/main/java/com/supervision/police/service/impl/NotePromptServiceImpl.java
+++ b/src/main/java/com/supervision/police/service/impl/NotePromptServiceImpl.java
@@ -2,11 +2,14 @@ package com.supervision.police.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.supervision.police.domain.ModelRecordType;
 import com.supervision.police.domain.NotePrompt;
 import com.supervision.police.domain.NotePromptTypeRel;
 import com.supervision.police.domain.NoteRecordSplit;
+import com.supervision.police.dto.NotePromptDTO;
 import com.supervision.police.mapper.NotePromptMapper;
 import com.supervision.police.service.ModelRecordTypeService;
 import com.supervision.police.service.NotePromptService;
@@ -32,11 +35,14 @@ public class NotePromptServiceImpl extends ServiceImpl<NotePromptMapper, NotePro
 
     @Autowired
     private ModelRecordTypeService modelRecordTypeService;
+    @Autowired
+    private NotePromptMapper notePromptMapper;
 
 
     private final NotePromptTypeRelService notePromptTypeRelService;
+
     @Override
-    public List<NotePrompt> listPromptBySplitId(String recordSplitId){
+    public List<NotePrompt> listPromptBySplitId(String recordSplitId) {
 
         List<NotePrompt> notePromptList = new ArrayList<>();
         // 首先获取所有切分后的笔录
@@ -62,7 +68,7 @@ public class NotePromptServiceImpl extends ServiceImpl<NotePromptMapper, NotePro
         for (String typeName : split) {
             String typeId = allTypeMap.get(typeName);
             if (StrUtil.isBlank(typeId)) {
-                log.info("listPromptBySplitId:笔录片段id:{} typeName:{}未在全局分类中找到数据...", recordSplit.getId(),typeName);
+                log.info("listPromptBySplitId:笔录片段id:{} typeName:{}未在全局分类中找到数据...", recordSplit.getId(), typeName);
                 continue;
             }
 
@@ -70,14 +76,14 @@ public class NotePromptServiceImpl extends ServiceImpl<NotePromptMapper, NotePro
             // 一个提示词可能关联多个类型,要进行拆分操作
             List<NotePromptTypeRel> promptTypeRelList = notePromptTypeRelService.lambdaQuery().eq(NotePromptTypeRel::getTypeId, typeId).select(NotePromptTypeRel::getPromptId).list();
             if (CollUtil.isEmpty(promptTypeRelList)) {
-                log.info("listPromptBySplitId:笔录片段:{}根据typeId:{},typeName:{},未找到对应的提示词信息...", recordSplit.getId(), typeId,typeName);
+                log.info("listPromptBySplitId:笔录片段:{}根据typeId:{},typeName:{},未找到对应的提示词信息...", recordSplit.getId(), typeId, typeName);
                 continue;
             }
 
             List<String> promptIdList = promptTypeRelList.stream().map(NotePromptTypeRel::getPromptId).toList();
             List<NotePrompt> list = super.lambdaQuery().in(NotePrompt::getId, promptIdList).list();
-            if (CollUtil.isEmpty(list)){
-                log.info("listPromptBySplitId:根据 promptIdList:{},未找到对应的提示词信息...",CollUtil.join(promptIdList,","));
+            if (CollUtil.isEmpty(list)) {
+                log.info("listPromptBySplitId:根据 promptIdList:{},未找到对应的提示词信息...", CollUtil.join(promptIdList, ","));
                 continue;
             }
             notePromptList.addAll(list);
@@ -87,8 +93,7 @@ public class NotePromptServiceImpl extends ServiceImpl<NotePromptMapper, NotePro
     }
 
     @Override
-    public List<NotePrompt> listPrompt(NotePrompt notePrompt) {
-
-        return super.lambdaQuery(notePrompt).list();
+    public IPage<NotePromptDTO> listPrompt(int page, int size, NotePrompt notePrompt) {
+        return notePromptMapper.selectNotePromptWithMatchNum(new Page<>(page, size), notePrompt);
     }
 }
diff --git a/src/main/resources/mapper/NotePromptMapper.xml b/src/main/resources/mapper/NotePromptMapper.xml
index 493ecbb..249541a 100644
--- a/src/main/resources/mapper/NotePromptMapper.xml
+++ b/src/main/resources/mapper/NotePromptMapper.xml
@@ -3,4 +3,20 @@
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.supervision.police.mapper.NotePromptMapper">
+    <select id="selectNotePromptWithMatchNum" resultType="com.supervision.police.dto.NotePromptDTO">
+        SELECT
+        np.*,
+        (SELECT COUNT(*) FROM model_atomic_index mai WHERE mai.prompt_id = np.id) AS match_num
+        FROM
+        note_prompt np
+        WHERE 1=1
+        <if test="notePrompt.name != null and notePrompt.name != ''">
+            AND np.name LIKE CONCAT('%', #{notePrompt.name}, '%')
+        </if>
+        <if test="notePrompt.type != null and notePrompt.type != ''">
+            AND np.type = #{notePrompt.type}
+        </if>
+        ORDER BY np.create_time DESC
+    </select>
+
 </mapper>
\ No newline at end of file