Parcourir la source

Merge remote-tracking branch 'origin/master'

YPZ il y a 1 mois
Parent
commit
7eea15da9a

+ 6 - 15
java/storlead-knowledge/storlead-knowledge-biz/src/main/java/com/storlead/knowledge/mapper/AiMessageMapper.java

@@ -1,9 +1,6 @@
 package com.storlead.knowledge.mapper;
 
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.storlead.framework.mybatis.mapper.MyBaseMapper;
 import com.storlead.knowledge.entity.AiMessageEntity;
 import com.storlead.knowledge.pojo.vo.AiMessageWithReviewVO;
@@ -21,17 +18,11 @@ import java.util.List;
  */
 public interface AiMessageMapper extends MyBaseMapper<AiMessageEntity> {
 
-    /**
-     * 分页查询聊天记录(含好评/差评总数),LEFT JOIN ai_message_review 表
-     *
-     * @param page    分页参数
-     * @param wrapper 查询条件(由 MyBatis-Plus 自动构建)
-     * @return 分页结果(含 agree / disagree 字段)
-     */
-    IPage<AiMessageWithReviewVO> pageQueryWithReview(IPage<?> page,
-                                                     @Param(Constants.WRAPPER) Wrapper<AiMessageEntity> wrapper);
 
-    List<AiMessageWithReviewVO> queryList(IPage<?> page, @Param(Constants.WRAPPER) Wrapper<AiMessageEntity> wrapper);
+    List<AiMessageWithReviewVO> queryList(  @Param("page") Page<AiMessageEntity> page,
+                                            @Param("keyword") String keyword,
+                                            @Param("queryField") String queryField);
 
-    Integer getTotal( @Param(Constants.WRAPPER)LambdaQueryWrapper<AiMessageEntity> wrapper);
+    Integer getTotal(  @Param("keyword") String keyword,
+                       @Param("queryField") String queryField);
 }

+ 14 - 15
java/storlead-knowledge/storlead-knowledge-biz/src/main/java/com/storlead/knowledge/service/impl/AiMessageServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
 import com.storlead.knowledge.entity.AiMessageEntity;
+import com.storlead.knowledge.entity.AiMessageReviewEntity;
 import com.storlead.knowledge.mapper.AiMessageMapper;
 import com.storlead.knowledge.pojo.dto.QueryPageDTO;
 import com.storlead.knowledge.pojo.vo.AiMessageWithReviewVO;
@@ -47,22 +48,20 @@ public class AiMessageServiceImpl extends MyBaseServiceImpl<AiMessageMapper, AiM
 
     @Override
     public IPage<AiMessageWithReviewVO> pageQueryWithReview(QueryPageDTO page) {
-        // 构建分页参数
-        Page<AiMessageEntity> pageParam = new Page<>(page.getPageIndex(), page.getPageSize());
+        Page<AiMessageEntity> pageParam =
+                new Page<>(page.getPageIndex(), page.getPageSize());
+
+        String queryField = StringUtils.isNotBlank(page.getQuery()) ? page.getQuery() : null;
+
+        List<AiMessageWithReviewVO> list =
+                baseMapper.queryList(pageParam, page.getKeyword(), queryField);
+
+        Integer total =
+                baseMapper.getTotal(page.getKeyword(), queryField);
+
+        Page<AiMessageWithReviewVO> result =
+                new Page<>(page.getPageIndex(), page.getPageSize());
 
-        // 构建查询条件(与 pageQuery 一致)
-        LambdaQueryWrapper<AiMessageEntity> wrapper = new LambdaQueryWrapper<>();
-        if (StringUtils.isNotBlank(page.getKeyword())) {
-            wrapper.and(w -> w
-                    .like(AiMessageEntity::getQuery, page.getKeyword())
-                    .or()
-                    .like(AiMessageEntity::getAnswer, page.getKeyword())
-            );
-        }
-        List<AiMessageWithReviewVO> list =  baseMapper.queryList(pageParam, wrapper);
-        Integer total = baseMapper.getTotal(wrapper);
-        // 直接调用 Mapper 的 LEFT JOIN 分页查询
-        Page<AiMessageWithReviewVO> result = new Page<>(page.getPageIndex(), page.getPageSize());
         result.setRecords(list);
         result.setTotal(total);
         result.setPages(page.getPageSize());

+ 39 - 26
java/storlead-knowledge/storlead-knowledge-biz/src/main/resources/mapper/AiMessageMapper.xml

@@ -19,38 +19,51 @@
         <result column="agree" property="agree"/>
         <result column="disagree" property="disagree"/>
     </resultMap>
-
-    <!-- 分页查询聊天记录(含评价信息) -->
-    <select id="pageQueryWithReview" resultMap="AiMessageWithReviewMap">
-        SELECT
-            m.*,
-            COALESCE(sum(r.agree, 0)) AS agree,
-            COALESCE(sum(r.disagree, 0)) AS disagree
-        FROM ai_messages m
-        LEFT JOIN ai_messages_review r ON r.ai_message_id = m.id
-        ${ew.customSqlSegment}
-        group by  m.id
-    </select>
-
     <select id="queryList" resultMap="AiMessageWithReviewMap">
         SELECT
-            m.*,
-            IFNULL(sum(r.agree), 0) AS agree,
-            IFNULL(sum(r.disagree), 0) AS disagree
+        m.id,
+        m.query,
+        m.answer,
+        IFNULL(sum(r.agree), 0) AS agree,
+        IFNULL(sum(r.disagree), 0) AS disagree
         FROM ai_messages m
-                 LEFT JOIN ai_messages_review r ON r.ai_message_id = m.id
-            ${ew.customSqlSegment}
-        group by  m.id
+        LEFT JOIN ai_messages_review r ON r.ai_message_id = m.id
+        <where>
+            <if test="keyword != null and keyword != ''">
+                AND (
+                m.query LIKE CONCAT('%', #{keyword}, '%')
+                OR m.answer LIKE CONCAT('%', #{keyword}, '%')
+                )
+            </if>
+        </where>
+        GROUP BY m.id
+        <if test="queryField != null and queryField != ''">
+            HAVING ${queryField} > 0
+        </if>
     </select>
 
-
-    <select id="getTotal"  resultType="java.lang.Integer">
-        SELECT  count(DISTINCT m.id) as total
+    <select id="getTotal" resultType="java.lang.Integer">
+        SELECT COUNT(DISTINCT id)
+        FROM (SELECT
+        m.id,
+        m.query,
+        m.answer,
+        IFNULL(sum(r.agree), 0) AS agree,
+        IFNULL(sum(r.disagree), 0) AS disagree
         FROM ai_messages m
-                 LEFT JOIN ai_messages_review r ON r.ai_message_id = m.id
-            ${ew.customSqlSegment}
-
+        LEFT JOIN ai_messages_review r ON r.ai_message_id = m.id
+        <where>
+            <if test="keyword != null and keyword != ''">
+                AND (
+                m.query LIKE CONCAT('%', #{keyword}, '%')
+                OR m.answer LIKE CONCAT('%', #{keyword}, '%')
+                )
+            </if>
+        </where>
+        GROUP BY m.id
+        <if test="queryField != null and queryField != ''">
+            HAVING ${queryField} > 0
+        </if>) total
     </select>
 
-
 </mapper>