tycoding 1 год назад
Родитель
Сommit
287a249f3f

+ 22 - 0
langchat-aigc/src/main/java/cn/tycoding/langchat/aigc/entity/AigcConversation.java

@@ -1,6 +1,7 @@
 package cn.tycoding.langchat.aigc.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -44,5 +45,26 @@ public class AigcConversation implements Serializable {
      */
     private Date createTime;
 
+    /**
+     * 用户名
+     */
+    @TableField(exist = false)
+    private String username;
+
+    /**
+     * 对话次数
+     */
+    @TableField(exist = false)
+    private Integer chatTotal;
+    /**
+     * Token消耗量
+     */
+    @TableField(exist = false)
+    private String tokenUsed;
+    /**
+     * 最后一次对话时间
+     */
+    @TableField(exist = false)
+    private Date endTime;
 }
 

+ 5 - 0
langchat-aigc/src/main/java/cn/tycoding/langchat/aigc/entity/AigcUser.java

@@ -52,6 +52,11 @@ public class AigcUser implements Serializable {
      */
     private String avatar;
 
+    /**
+     * 会话次数
+     */
+    private Integer chatLimit;
+
     /**
      * 状态 0锁定 1有效
      */

+ 29 - 3
langchat-aigc/src/main/java/cn/tycoding/langchat/aigc/service/impl/AigcMessageServiceImpl.java

@@ -3,8 +3,10 @@ package cn.tycoding.langchat.aigc.service.impl;
 import cn.hutool.core.util.StrUtil;
 import cn.tycoding.langchat.aigc.entity.AigcConversation;
 import cn.tycoding.langchat.aigc.entity.AigcMessage;
+import cn.tycoding.langchat.aigc.entity.AigcUser;
 import cn.tycoding.langchat.aigc.mapper.AigcConversationMapper;
 import cn.tycoding.langchat.aigc.mapper.AigcMessageMapper;
+import cn.tycoding.langchat.aigc.mapper.AigcUserMapper;
 import cn.tycoding.langchat.aigc.service.AigcMessageService;
 import cn.tycoding.langchat.common.constant.RoleEnum;
 import cn.tycoding.langchat.common.utils.QueryPage;
@@ -17,6 +19,9 @@ import org.springframework.stereotype.Service;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @author tycoding
@@ -26,8 +31,8 @@ import java.util.List;
 @RequiredArgsConstructor
 public class AigcMessageServiceImpl extends ServiceImpl<AigcMessageMapper, AigcMessage> implements
         AigcMessageService {
-
     private final AigcConversationMapper aigcConversationMapper;
+    private final AigcUserMapper aigcUserMapper;
 
     @Override
     public List<AigcConversation> conversations() {
@@ -39,11 +44,32 @@ public class AigcMessageServiceImpl extends ServiceImpl<AigcMessageMapper, AigcM
 
     @Override
     public IPage<AigcConversation> conversationPages(AigcConversation data, QueryPage queryPage) {
-        //TODO 只获取当前用户下的会话
         Page<AigcConversation> page = new Page<>(queryPage.getPage(), queryPage.getLimit());
-        return aigcConversationMapper.selectPage(page, Wrappers.<AigcConversation>lambdaQuery()
+        Page<AigcConversation> iPage = aigcConversationMapper.selectPage(page, Wrappers.<AigcConversation>lambdaQuery()
                 .like(!StrUtil.isBlank(data.getTitle()), AigcConversation::getTitle, data.getTitle())
                 .orderByDesc(AigcConversation::getCreateTime));
+
+        if (!iPage.getRecords().isEmpty()) {
+            Map<String, List<AigcUser>> map = aigcUserMapper.selectList(Wrappers.lambdaQuery()).stream().collect(Collectors.groupingBy(AigcUser::getId));
+            Set<String> ids = iPage.getRecords().stream().map(AigcConversation::getId).collect(Collectors.toSet());
+            List<AigcMessage> messages = baseMapper.selectList(Wrappers.<AigcMessage>lambdaQuery()
+                    .in(AigcMessage::getConversationId, ids)
+                    .orderByDesc(AigcMessage::getCreateTime));
+
+            iPage.getRecords().forEach(i -> {
+                List<AigcUser> list = map.get(i.getUserId());
+                if (list != null && !list.isEmpty()) {
+                    i.setUsername(list.get(0).getUsername());
+                }
+
+                List<AigcMessage> messageList = messages.stream().filter(m -> m.getConversationId() != null && m.getConversationId().equals(i.getId())).toList();
+                if (!messageList.isEmpty()) {
+                    i.setChatTotal(messageList.size());
+                    i.setEndTime(messageList.get(0).getCreateTime());
+                }
+            });
+        }
+        return iPage;
     }
 
     @Override

+ 17 - 5
langchat-ui/src/views/aigc/message/columns.ts

@@ -3,8 +3,8 @@ import { FormSchema } from '@/components/Form';
 
 export const columns: BasicColumn[] = [
   {
-    title: '用名',
-    key: 'appName',
+    title: '用名',
+    key: 'username',
     align: 'center',
   },
   {
@@ -13,15 +13,27 @@ export const columns: BasicColumn[] = [
     align: 'center',
   },
   {
-    title: '对话模型',
-    key: 'chatModel',
+    title: '对话次数',
+    key: 'chatTotal',
+    align: 'center',
+    width: 180,
+  },
+  {
+    title: 'Token消耗量',
+    key: 'tokenUsed',
+    align: 'center',
+    width: 180,
+  },
+  {
+    title: '最后一次对话时间',
+    key: 'endTime',
     align: 'center',
     width: 180,
   },
   {
     title: '创建时间',
     key: 'createTime',
-    width: 160,
+    width: 180,
     align: 'center',
   },
 ];

+ 10 - 0
langchat-ui/src/views/aigc/user/columns.ts

@@ -14,6 +14,16 @@ export const columns: BasicColumn[] = [
     key: 'nickname',
     align: 'center',
   },
+  {
+    title: '会话次数',
+    key: 'chatLimit',
+    align: 'center',
+  },
+  {
+    title: 'Token消耗量',
+    key: 'tokenUsed',
+    align: 'center',
+  },
   {
     title: '账号状态',
     key: 'status',