From 28678fb4dfc3f84accf0995ce5257a8f22fb6b1d Mon Sep 17 00:00:00 2001 From: oneao Date: Mon, 29 Dec 2025 22:15:40 +0800 Subject: [PATCH] u --- .../cn/link56/im/mapper/ImFriendMapper.java | 5 +- .../cn/link56/im/mapper/ImGroupMapper.java | 15 + .../cn/link56/im/model/po/ImGroupUser.java | 4 +- .../cn/link56/im/model/vo/QueryFriendVO.java | 2 - .../cn/link56/im/model/vo/QueryGroupVO.java | 6 +- .../cn/link56/im/service/ImFriendService.java | 2 +- .../cn/link56/im/service/ImGroupService.java | 9 +- .../cn/link56/im/mapper/ImFriendMapper.xml | 41 ++- .../cn/link56/im/mapper/ImGroupMapper.xml | 41 ++- .../src/request/api/im/index.ts | 6 +- .../link56-frontend-new/src/router/index.ts | 2 +- .../link56-frontend-new/src/types/im/index.ts | 21 ++ .../src/views/im/index.vue | 340 +++++++++++++----- 13 files changed, 358 insertions(+), 136 deletions(-) diff --git a/code/link56/link56-backend/src/main/java/cn/link56/im/mapper/ImFriendMapper.java b/code/link56/link56-backend/src/main/java/cn/link56/im/mapper/ImFriendMapper.java index 47bff3b7..5bbd22a1 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/im/mapper/ImFriendMapper.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/im/mapper/ImFriendMapper.java @@ -19,5 +19,8 @@ public interface ImFriendMapper extends BaseMapper { @Param("id") Long id ); - Long selectFriendTotal(@Param("userId") Long userId); + Long selectFriendTotal( + @Param("userId") Long userId, + @Param("name") String name + ); } diff --git a/code/link56/link56-backend/src/main/java/cn/link56/im/mapper/ImGroupMapper.java b/code/link56/link56-backend/src/main/java/cn/link56/im/mapper/ImGroupMapper.java index 1340785c..0ce3e71d 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/im/mapper/ImGroupMapper.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/im/mapper/ImGroupMapper.java @@ -1,9 +1,24 @@ package cn.link56.im.mapper; import cn.link56.im.model.po.ImGroup; +import cn.link56.im.model.vo.QueryFriendVO; +import cn.link56.im.model.vo.QueryGroupVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; @Mapper public interface ImGroupMapper extends BaseMapper { + List selectGroup( + @Param("offset") int offset, + @Param("limit") int limit, + @Param("userId") Long userId, + @Param("name") String name, + @Param("id") Long id + ); + + Long selectGroupTotal(@Param("userId") Long userId, + @Param("name") String name); } diff --git a/code/link56/link56-backend/src/main/java/cn/link56/im/model/po/ImGroupUser.java b/code/link56/link56-backend/src/main/java/cn/link56/im/model/po/ImGroupUser.java index b579247f..86b777ec 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/im/model/po/ImGroupUser.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/im/model/po/ImGroupUser.java @@ -22,8 +22,8 @@ public class ImGroupUser { @TableField("b_join_time") private Date joinTime; - @TableField("b_last_active_time") - private Date lastActiveTime; + @TableField("b_last_message_id") + private Integer lastMessageId; @TableField("b_unread_count") private Integer unreadCount; diff --git a/code/link56/link56-backend/src/main/java/cn/link56/im/model/vo/QueryFriendVO.java b/code/link56/link56-backend/src/main/java/cn/link56/im/model/vo/QueryFriendVO.java index 36dc8e4e..b82dfee7 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/im/model/vo/QueryFriendVO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/im/model/vo/QueryFriendVO.java @@ -10,8 +10,6 @@ import java.util.Date; @AllArgsConstructor @NoArgsConstructor public class QueryFriendVO { - private Long id; - private Long friendId; private String friendName; private String friendAvatar; diff --git a/code/link56/link56-backend/src/main/java/cn/link56/im/model/vo/QueryGroupVO.java b/code/link56/link56-backend/src/main/java/cn/link56/im/model/vo/QueryGroupVO.java index a40bcb83..bdde8b4f 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/im/model/vo/QueryGroupVO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/im/model/vo/QueryGroupVO.java @@ -8,9 +8,9 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class QueryGroupVO { - private Long id; - private String name; - private String avatar; + private Long groupId; + private String groupName; + private String groupAvatar; private Integer unreadCount; diff --git a/code/link56/link56-backend/src/main/java/cn/link56/im/service/ImFriendService.java b/code/link56/link56-backend/src/main/java/cn/link56/im/service/ImFriendService.java index 61b0acdb..53e6da2b 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/im/service/ImFriendService.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/im/service/ImFriendService.java @@ -63,7 +63,7 @@ public class ImFriendService extends ServiceImpl { item.setIsOnline(SessionManager.isOnline(friendId)); }); // 查询总数 - Long total = imFriendMapper.selectFriendTotal(userId); + Long total = imFriendMapper.selectFriendTotal(userId,name); BasePageVO basePageVO = new BasePageVO<>(); basePageVO.setRecords(queryFriendVOS); diff --git a/code/link56/link56-backend/src/main/java/cn/link56/im/service/ImGroupService.java b/code/link56/link56-backend/src/main/java/cn/link56/im/service/ImGroupService.java index aa5d46d0..4432f717 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/im/service/ImGroupService.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/im/service/ImGroupService.java @@ -1,14 +1,17 @@ package cn.link56.im.service; import cn.link56.common.BasePageVO; +import cn.link56.common.context.UserContext; import cn.link56.im.mapper.ImGroupMapper; import cn.link56.im.model.dto.QueryGroupDTO; import cn.link56.im.model.po.ImGroup; +import cn.link56.im.model.vo.QueryFriendVO; import cn.link56.im.model.vo.QueryGroupVO; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; @Service public class ImGroupService extends ServiceImpl{ @@ -16,13 +19,17 @@ public class ImGroupService extends ServiceImpl{ private ImGroupMapper imGroupMapper; public BasePageVO queryGroup(QueryGroupDTO dto) { + Long userId = UserContext.getUserId(); + String name = dto.getName(); Long id = dto.getId(); int offset = (dto.getCurrentPage() - 1) * dto.getPageSize() + 1; int limit = dto.getCurrentPage() * dto.getPageSize(); + List queryFriendVOS = imGroupMapper.selectGroup(offset, limit, userId, name, id); + Long total = imGroupMapper.selectGroupTotal(userId, name); - return new BasePageVO<>(); + return new BasePageVO<>(total,queryFriendVOS); } } diff --git a/code/link56/link56-backend/src/main/resources/cn/link56/im/mapper/ImFriendMapper.xml b/code/link56/link56-backend/src/main/resources/cn/link56/im/mapper/ImFriendMapper.xml index 4101bbe3..d5f146e3 100644 --- a/code/link56/link56-backend/src/main/resources/cn/link56/im/mapper/ImFriendMapper.xml +++ b/code/link56/link56-backend/src/main/resources/cn/link56/im/mapper/ImFriendMapper.xml @@ -9,34 +9,41 @@ SELECT * FROM ( SELECT - f.b_id AS id, - f.b_friend_id AS friendId, - u.b_name AS friendName, - u.b_avatar AS friendAvatar, - f.b_unread_count AS unreadCount, - m.b_id AS lastMessageId, - m.b_send_time AS lastMessageTime, - m.b_type AS lastMessageType, - m.b_content AS lastMessageContent, - ROW_NUMBER() OVER ( - ORDER BY - - CASE WHEN f.b_id = #{id} THEN 0 ELSE 1 END, - - m.b_send_time DESC - ) AS rn + f.b_id AS id, + f.b_friend_id AS friendId, + u.b_name AS friendName, + u.b_avatar AS friendAvatar, + f.b_unread_count AS unreadCount, + m.b_id AS lastMessageId, + m.b_send_time AS lastMessageTime, + m.b_type AS lastMessageType, + m.b_content AS lastMessageContent, + ROW_NUMBER() OVER ( + ORDER BY + + CASE WHEN f.b_id = #{id} THEN 0 ELSE 1 END, + + m.b_send_time DESC + ) AS rn FROM b_im_friend f LEFT JOIN b_company_user u ON f.b_friend_id = u.b_id LEFT JOIN b_im_private_message m ON f.b_last_message_id = m.b_id WHERE f.b_user_id = #{userId} - ) AS t + + AND u.b_name LIKE '%' + #{name} + '%' + + ) t WHERE t.rn BETWEEN #{offset} AND #{limit} diff --git a/code/link56/link56-backend/src/main/resources/cn/link56/im/mapper/ImGroupMapper.xml b/code/link56/link56-backend/src/main/resources/cn/link56/im/mapper/ImGroupMapper.xml index 16044e20..ec61e3ca 100644 --- a/code/link56/link56-backend/src/main/resources/cn/link56/im/mapper/ImGroupMapper.xml +++ b/code/link56/link56-backend/src/main/resources/cn/link56/im/mapper/ImGroupMapper.xml @@ -9,35 +9,48 @@ SELECT * FROM ( SELECT - g.b_id AS id, - g.b_name AS name, - g.b_avatar AS avatar, + g.b_id AS groupId, + g.b_name AS groupName, + g.b_avatar AS groupAvatar, gu.b_unread_count AS unreadCount, + m.b_id AS lastMessageId, m.b_send_time AS lastMessageTime, m.b_type AS lastMessageType, m.b_content AS lastMessageContent, - ROW_NUMBER() OVER ( - ORDER BY + + u.b_id AS lastMessageSenderId, + u.b_name AS lastMessageSenderName, + u.b_avatar AS lastMessageSenderAvatar, + + ROW_NUMBER() OVER ( + ORDER BY CASE WHEN g.b_id = #{id} THEN 0 ELSE 1 END, - m.b_send_time DESC - ) AS rn - FROM b_im_group g - INNER JOIN b_im_group_user gu ON g.b_id = gu.b_group_id - LEFT JOIN b_im_group_message m ON gu.b_last_message_id = m.b_id - WHERE gu.b_user_id = #{userId} - ) AS t + m.b_send_time DESC + ) AS rn + FROM b_im_group g + INNER JOIN b_im_group_user gu ON g.b_id = gu.b_group_id + LEFT JOIN b_im_group_message m ON gu.b_last_message_id = m.b_id + LEFT JOIN b_company_user u ON m.b_sender_id = u.b_id + WHERE gu.b_user_id = #{userId} + + AND g.b_name LIKE '%' + #{name} + '%' + + ) t WHERE t.rn BETWEEN #{offset} AND #{limit} + - diff --git a/code/link56/link56-frontend-new/src/request/api/im/index.ts b/code/link56/link56-frontend-new/src/request/api/im/index.ts index 20830737..5ff3fe65 100644 --- a/code/link56/link56-frontend-new/src/request/api/im/index.ts +++ b/code/link56/link56-frontend-new/src/request/api/im/index.ts @@ -1,4 +1,4 @@ -import type { CreateFriendParams, ImFriend, QueryFriendParams } from '@/types/im' +import type { CreateFriendParams, ImFriend, ImGroup, QueryFriendParams, QueryGroupParams } from '@/types/im' import { httpPostJson } from '@/request/utils' export function createFriendApi(params: CreateFriendParams) { @@ -8,3 +8,7 @@ export function createFriendApi(params: CreateFriendParams) { export function queryFriendApi(params: QueryFriendParams) { return httpPostJson>('/im/friend/query', params) } + +export function queryGroupApi(params: QueryGroupParams) { + return httpPostJson>('/im/group/query', params) +} diff --git a/code/link56/link56-frontend-new/src/router/index.ts b/code/link56/link56-frontend-new/src/router/index.ts index 9a9a14d7..b8613f77 100644 --- a/code/link56/link56-frontend-new/src/router/index.ts +++ b/code/link56/link56-frontend-new/src/router/index.ts @@ -40,7 +40,7 @@ const router = createRouter({ component: () => import('@/views/company/detail.vue'), }, { - path: '/im', + path: '/im/:type?/:id?', component: () => import('@/views/im/index.vue'), }, { diff --git a/code/link56/link56-frontend-new/src/types/im/index.ts b/code/link56/link56-frontend-new/src/types/im/index.ts index 21091134..79209afc 100644 --- a/code/link56/link56-frontend-new/src/types/im/index.ts +++ b/code/link56/link56-frontend-new/src/types/im/index.ts @@ -62,3 +62,24 @@ export interface ImFriend { isOnline: boolean } + +export interface QueryGroupParams { + currentPage: number + pageSize: number + + name: string + id: number | null +} + +export interface ImGroup { + groupId: number + groupName: string + groupAvatar: string + + unreadCount: number + + lastMessageId: number + lastMessageTime: number + lastMessageType: number + lastMessageContent: string +} diff --git a/code/link56/link56-frontend-new/src/views/im/index.vue b/code/link56/link56-frontend-new/src/views/im/index.vue index e10356b9..0d47c49f 100644 --- a/code/link56/link56-frontend-new/src/views/im/index.vue +++ b/code/link56/link56-frontend-new/src/views/im/index.vue @@ -1,10 +1,9 @@