Kaynağa Gözat

feat:ai回复高频问题内容展示

caoliqin 3 gün önce
ebeveyn
işleme
6a76312fc5

+ 16 - 7
fs-company/src/main/java/com/fs/company/controller/fastGpt/FastgptChatQuestionStatisticsController.java

@@ -1,6 +1,8 @@
 package com.fs.company.controller.fastGpt;
 
 import java.util.List;
+
+import com.fs.fastGpt.domain.FastgptChatQuestion;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -15,14 +17,12 @@ import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.enums.BusinessType;
-import com.fs.fastGpt.domain.FastgptChatQuestion;
 import com.fs.fastGpt.domain.FastgptChatQuestionStatistics;
 import com.fs.fastGpt.service.IFastgptChatQuestionService;
 import com.fs.fastGpt.service.IFastgptChatQuestionStatisticsService;
 import com.fs.fastGpt.vo.FastgptChatQuestionDetailVO;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.common.core.page.TableDataInfo;
-import com.fs.common.BeanCopyUtils;
 
 /**
  * 高频聊天问题统计Controller
@@ -118,9 +118,8 @@ public class FastgptChatQuestionStatisticsController extends BaseController
         startPage();
         FastgptChatQuestion q = new FastgptChatQuestion();
         q.setQuestionStatisticsId(questionStatisticsId);
-        List<FastgptChatQuestion> list = fastgptChatQuestionService.selectFastgptChatQuestionList(q);
-        List<FastgptChatQuestionDetailVO> voList = BeanCopyUtils.copyList(list, FastgptChatQuestionDetailVO.class);
-        return getDataTable(voList);
+        List<FastgptChatQuestionDetailVO> list = fastgptChatQuestionService.selectFastgptChatQuestionDetailVOList(q);
+        return getDataTable(list);
     }
 
     /**
@@ -131,9 +130,19 @@ public class FastgptChatQuestionStatisticsController extends BaseController
     @PutMapping("/question/reply")
     public AjaxResult saveOrUpdateQuestionReply(@RequestBody FastgptChatQuestionDetailVO param)
     {
-        FastgptChatQuestion q = new FastgptChatQuestion();
+        com.fs.fastGpt.domain.FastgptChatQuestion q = new com.fs.fastGpt.domain.FastgptChatQuestion();
         q.setId(param.getId());
         q.setCompanyUserContent(param.getCompanyUserContent());
-        return toAjax(fastgptChatQuestionService.updateFastgptChatQuestion(q));
+        int rows = fastgptChatQuestionService.updateFastgptChatQuestion(q);
+
+        // 同步更新统计表:标记为已解决
+        if (param.getQuestionStatisticsId() != null) {
+            FastgptChatQuestionStatistics statistics = new FastgptChatQuestionStatistics();
+            statistics.setId(param.getQuestionStatisticsId());
+            statistics.setIsResolve(1);
+            rows += fastgptChatQuestionStatisticsService.updateFastgptChatQuestionStatistics(statistics);
+        }
+
+        return toAjax(rows);
     }
 }

+ 15 - 7
fs-service/src/main/java/com/fs/fastGpt/mapper/FastgptChatQuestionMapper.java

@@ -3,18 +3,19 @@ package com.fs.fastGpt.mapper;
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.fastGpt.domain.FastgptChatQuestion;
+import com.fs.fastGpt.vo.FastgptChatQuestionDetailVO;
 import org.apache.ibatis.annotations.Param;
 
 /**
  * 聊天问题收集Mapper接口
- * 
+ *
  * @author fs
  * @date 2026-04-20
  */
 public interface FastgptChatQuestionMapper extends BaseMapper<FastgptChatQuestion>{
     /**
      * 查询聊天问题收集
-     * 
+     *
      * @param id 聊天问题收集主键
      * @return 聊天问题收集
      */
@@ -22,15 +23,22 @@ public interface FastgptChatQuestionMapper extends BaseMapper<FastgptChatQuestio
 
     /**
      * 查询聊天问题收集列表
-     * 
+     *
      * @param fastgptChatQuestion 聊天问题收集
      * @return 聊天问题收集集合
      */
     List<FastgptChatQuestion> selectFastgptChatQuestionList(FastgptChatQuestion fastgptChatQuestion);
 
+    /**
+     * 查询聊天问题明细
+     * @param fastgptChatQuestion 入参
+     * @return vo
+     */
+    List<FastgptChatQuestionDetailVO> selectFastgptChatQuestionDetailVOList(FastgptChatQuestion fastgptChatQuestion);
+
     /**
      * 新增聊天问题收集
-     * 
+     *
      * @param fastgptChatQuestion 聊天问题收集
      * @return 结果
      */
@@ -38,7 +46,7 @@ public interface FastgptChatQuestionMapper extends BaseMapper<FastgptChatQuestio
 
     /**
      * 修改聊天问题收集
-     * 
+     *
      * @param fastgptChatQuestion 聊天问题收集
      * @return 结果
      */
@@ -46,7 +54,7 @@ public interface FastgptChatQuestionMapper extends BaseMapper<FastgptChatQuestio
 
     /**
      * 删除聊天问题收集
-     * 
+     *
      * @param id 聊天问题收集主键
      * @return 结果
      */
@@ -54,7 +62,7 @@ public interface FastgptChatQuestionMapper extends BaseMapper<FastgptChatQuestio
 
     /**
      * 批量删除聊天问题收集
-     * 
+     *
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */

+ 15 - 7
fs-service/src/main/java/com/fs/fastGpt/service/IFastgptChatQuestionService.java

@@ -3,17 +3,18 @@ package com.fs.fastGpt.service;
 import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.fastGpt.domain.FastgptChatQuestion;
+import com.fs.fastGpt.vo.FastgptChatQuestionDetailVO;
 
 /**
  * 聊天问题收集Service接口
- * 
+ *
  * @author fs
  * @date 2026-04-20
  */
 public interface IFastgptChatQuestionService extends IService<FastgptChatQuestion>{
     /**
      * 查询聊天问题收集
-     * 
+     *
      * @param id 聊天问题收集主键
      * @return 聊天问题收集
      */
@@ -21,15 +22,22 @@ public interface IFastgptChatQuestionService extends IService<FastgptChatQuestio
 
     /**
      * 查询聊天问题收集列表
-     * 
+     *
      * @param fastgptChatQuestion 聊天问题收集
      * @return 聊天问题收集集合
      */
     List<FastgptChatQuestion> selectFastgptChatQuestionList(FastgptChatQuestion fastgptChatQuestion);
 
+    /**
+     * 查询聊天问题明细
+     * @param fastgptChatQuestion 参数
+     * @return vo
+     */
+    List<FastgptChatQuestionDetailVO> selectFastgptChatQuestionDetailVOList(FastgptChatQuestion fastgptChatQuestion);
+
     /**
      * 新增聊天问题收集
-     * 
+     *
      * @param fastgptChatQuestion 聊天问题收集
      * @return 结果
      */
@@ -37,7 +45,7 @@ public interface IFastgptChatQuestionService extends IService<FastgptChatQuestio
 
     /**
      * 修改聊天问题收集
-     * 
+     *
      * @param fastgptChatQuestion 聊天问题收集
      * @return 结果
      */
@@ -45,7 +53,7 @@ public interface IFastgptChatQuestionService extends IService<FastgptChatQuestio
 
     /**
      * 批量删除聊天问题收集
-     * 
+     *
      * @param ids 需要删除的聊天问题收集主键集合
      * @return 结果
      */
@@ -53,7 +61,7 @@ public interface IFastgptChatQuestionService extends IService<FastgptChatQuestio
 
     /**
      * 删除聊天问题收集信息
-     * 
+     *
      * @param id 聊天问题收集主键
      * @return 结果
      */

+ 15 - 8
fs-service/src/main/java/com/fs/fastGpt/service/impl/FastgptChatQuestionServiceImpl.java

@@ -3,15 +3,15 @@ package com.fs.fastGpt.service.impl;
 import java.util.List;
 import com.fs.common.utils.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.fastGpt.mapper.FastgptChatQuestionMapper;
 import com.fs.fastGpt.domain.FastgptChatQuestion;
 import com.fs.fastGpt.service.IFastgptChatQuestionService;
+import com.fs.fastGpt.vo.FastgptChatQuestionDetailVO;
 
 /**
  * 聊天问题收集Service业务层处理
- * 
+ *
  * @author fs
  * @date 2026-04-20
  */
@@ -20,7 +20,7 @@ public class FastgptChatQuestionServiceImpl extends ServiceImpl<FastgptChatQuest
 
     /**
      * 查询聊天问题收集
-     * 
+     *
      * @param id 聊天问题收集主键
      * @return 聊天问题收集
      */
@@ -32,7 +32,7 @@ public class FastgptChatQuestionServiceImpl extends ServiceImpl<FastgptChatQuest
 
     /**
      * 查询聊天问题收集列表
-     * 
+     *
      * @param fastgptChatQuestion 聊天问题收集
      * @return 聊天问题收集
      */
@@ -42,9 +42,15 @@ public class FastgptChatQuestionServiceImpl extends ServiceImpl<FastgptChatQuest
         return baseMapper.selectFastgptChatQuestionList(fastgptChatQuestion);
     }
 
+    @Override
+    public List<FastgptChatQuestionDetailVO> selectFastgptChatQuestionDetailVOList(FastgptChatQuestion fastgptChatQuestion)
+    {
+        return baseMapper.selectFastgptChatQuestionDetailVOList(fastgptChatQuestion);
+    }
+
     /**
      * 新增聊天问题收集
-     * 
+     *
      * @param fastgptChatQuestion 聊天问题收集
      * @return 结果
      */
@@ -57,19 +63,20 @@ public class FastgptChatQuestionServiceImpl extends ServiceImpl<FastgptChatQuest
 
     /**
      * 修改聊天问题收集
-     * 
+     *
      * @param fastgptChatQuestion 聊天问题收集
      * @return 结果
      */
     @Override
     public int updateFastgptChatQuestion(FastgptChatQuestion fastgptChatQuestion)
     {
+        fastgptChatQuestion.setUpdateTime(DateUtils.getNowDate());
         return baseMapper.updateFastgptChatQuestion(fastgptChatQuestion);
     }
 
     /**
      * 批量删除聊天问题收集
-     * 
+     *
      * @param ids 需要删除的聊天问题收集主键
      * @return 结果
      */
@@ -81,7 +88,7 @@ public class FastgptChatQuestionServiceImpl extends ServiceImpl<FastgptChatQuest
 
     /**
      * 删除聊天问题收集信息
-     * 
+     *
      * @param id 聊天问题收集主键
      * @return 结果
      */

+ 13 - 1
fs-service/src/main/java/com/fs/fastGpt/vo/FastgptChatQuestionDetailVO.java

@@ -5,7 +5,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 /**
- * 高频聊天问题明细 VO(对应 fastgpt_chat_question 全字段返回)
+ * 高频聊天问题明细 VO
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -29,9 +29,15 @@ public class FastgptChatQuestionDetailVO extends BaseEntity {
     /** 公司ID */
     private Long companyId;
 
+    /** 公司名称 */
+    private String companyName;
+
     /** 销售ID */
     private Long companyUserId;
 
+    /** 销售昵称 */
+    private String companyUserNickName;
+
     /** 角色ID */
     private Long roleId;
 
@@ -49,5 +55,11 @@ public class FastgptChatQuestionDetailVO extends BaseEntity {
 
     /** 高频问题统计id,关联高频聊天问题统计表 */
     private Long questionStatisticsId;
+
+    /** 外部联系人ID */
+    private Long externalContactId;
+
+    /** 外部联系人名称 */
+    private String externalContactName;
 }
 

+ 36 - 1
fs-service/src/main/resources/mapper/fastGpt/FastgptChatQuestionMapper.xml

@@ -18,13 +18,45 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="userContent"    column="user_content"    />
         <result property="companyUserContent"    column="company_user_content"    />
         <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
         <result property="questionStatisticsId"    column="question_statistics_id"    />
     </resultMap>
 
     <sql id="selectFastgptChatQuestionVo">
-        select id, session_id, msg_id, ext_id, user_id, company_id, company_user_id, role_id, nick_name, user_type, user_content, company_user_content, create_time, question_statistics_id from fastgpt_chat_question
+        select id, session_id, msg_id, ext_id, user_id, company_id, company_user_id, role_id, nick_name, user_type, user_content, company_user_content, create_time, update_time, question_statistics_id from fastgpt_chat_question
     </sql>
 
+    <select id="selectFastgptChatQuestionDetailVOList" parameterType="FastgptChatQuestion" resultType="com.fs.fastGpt.vo.FastgptChatQuestionDetailVO">
+        select
+            q.id,
+            q.session_id,
+            q.msg_id,
+            q.ext_id,
+            q.user_id,
+            q.company_id,
+            q.company_user_id,
+            q.role_id,
+            q.nick_name,
+            q.user_type,
+            q.user_content,
+            q.company_user_content,
+            q.create_time,
+            q.update_time,
+            q.question_statistics_id,
+            c.company_name,
+            cu.nick_name as company_user_nick_name,
+            ec.id as external_contact_id,
+            ec.name as external_contact_name
+        from fastgpt_chat_question q
+        left join company c on c.company_id = q.company_id
+        left join company_user cu on cu.user_id = q.company_user_id
+        left join qw_external_contact ec on ec.id = q.ext_id
+        <where>
+            <if test="questionStatisticsId != null"> and q.question_statistics_id = #{questionStatisticsId}</if>
+        </where>
+        order by q.create_time desc, q.id desc
+    </select>
+
     <select id="selectFastgptChatQuestionList" parameterType="FastgptChatQuestion" resultMap="FastgptChatQuestionResult">
         <include refid="selectFastgptChatQuestionVo"/>
         <where>
@@ -63,6 +95,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="userContent != null">user_content,</if>
             <if test="companyUserContent != null">company_user_content,</if>
             <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
             <if test="questionStatisticsId != null">question_statistics_id,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -78,6 +111,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="userContent != null">#{userContent},</if>
             <if test="companyUserContent != null">#{companyUserContent},</if>
             <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
             <if test="questionStatisticsId != null">#{questionStatisticsId},</if>
          </trim>
     </insert>
@@ -97,6 +131,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="userContent != null">user_content = #{userContent},</if>
             <if test="companyUserContent != null">company_user_content = #{companyUserContent},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="questionStatisticsId != null">question_statistics_id = #{questionStatisticsId},</if>
         </trim>
         where id = #{id}