Commit df551751 by giaogiao

查询用户加入的所有会话 与每个会话的未读条数 成员

parent 03595a6f
package io.geekidea.springbootplus.test;
import com.wecloud.im.mapper.ImConversationMapper;
import com.wecloud.im.vo.MyConversationListVo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
/**
* imConversation 单元测试
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class ImConversationTest {
@Autowired
private ImConversationMapper imConversationMapper;
@Test
public void listConversation() {
List<MyConversationListVo> myImConversationList = imConversationMapper.getMyImConversationList(1394579719625773056L);
}
}
......@@ -3,6 +3,7 @@ package com.wecloud.im.controller;
import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.vo.MyConversationListVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.geekidea.springbootplus.framework.log.annotation.OperationLog;
......@@ -16,6 +17,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 会话表 控制器
*
......@@ -42,6 +45,16 @@ public class ImConversationController extends BaseController {
return imConversation;
}
/**
* 查询用户加入的所有会话 与每个会话的未读条数 成员
*/
@PostMapping("/getList")
@ApiOperation(value = "查询用户加入的所有会话 与每个会话的未读条数 成员")
public ApiResult<List<MyConversationListVo>> getImConversationPageList() throws Exception {
List<MyConversationListVo> conversationList = imConversationService.getMyImConversationList();
return ApiResult.ok(conversationList);
}
// /**
// * 添加会话表
// */
......
......@@ -6,10 +6,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.param.ImConversationPageParam;
import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.vo.MyConversationListVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.io.Serializable;
import java.util.List;
/**
* 会话表 Mapper 接口
......@@ -37,4 +39,12 @@ public interface ImConversationMapper extends BaseMapper<ImConversation> {
*/
IPage<ImConversationQueryVo> getImConversationPageList(@Param("page") Page page, @Param("param") ImConversationPageParam imConversationPageParam);
/**
* 查询用户加入的所有会话 与每个会话的未读条数 成员
*
* @param clientId
* @return
*/
List<MyConversationListVo> getMyImConversationList(@Param("clientId") Long clientId);
}
......@@ -59,4 +59,7 @@ public interface ImClientService extends BaseService<ImClient> {
*/
Paging<ImClientQueryVo> getImClientPageList(ImClientPageParam imClientPageParam) throws Exception;
ImClient getClient();
}
......@@ -4,10 +4,13 @@ import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.param.ImConversationPageParam;
import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.vo.MyConversationListVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import java.util.List;
/**
* 会话表 服务类
*
......@@ -64,4 +67,13 @@ public interface ImConversationService extends BaseService<ImConversation> {
*/
Paging<ImConversationQueryVo> getImConversationPageList(ImConversationPageParam imConversationPageParam) throws Exception;
/**
* 查询用户加入的所有会话 与每个会话的未读条数
*
* @return
* @throws Exception
*/
List<MyConversationListVo> getMyImConversationList() throws Exception;
}
package com.wecloud.im.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.mapper.ImClientMapper;
import com.wecloud.im.param.ImClientPageParam;
import com.wecloud.im.param.ImClientQueryVo;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -28,6 +33,8 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Autowired
private ImClientMapper imClientMapper;
@Autowired
private ImApplicationService imApplicationService;
@Transactional(rollbackFor = Exception.class)
@Override
......@@ -59,4 +66,20 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
return new Paging<ImClientQueryVo>(iPage);
}
@Override
public ImClient getClient() {
JwtToken curentJwtToken = JwtUtil.getCurentJwtToken();
// 根据appKey查询appid
ImApplication imApplication = imApplicationService.getOne(
new QueryWrapper<ImApplication>().lambda().eq(ImApplication::getAppKey, curentJwtToken.getAppKey())
);
ImClient client = this.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, imApplication.getId())
.eq(ImClient::getClientId, curentJwtToken.getClientId()));
return client;
}
}
......@@ -16,6 +16,7 @@ import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.vo.MyConversationListVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
......@@ -29,6 +30,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
* 会话表 服务实现类
......@@ -48,6 +50,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Autowired
private ImConversationService imConversationService;
@Autowired
private ImClientService imClientService;
......@@ -142,4 +145,13 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
return new Paging<ImConversationQueryVo>(iPage);
}
@Override
public List<MyConversationListVo> getMyImConversationList() throws Exception {
ImClient client = imClientService.getClient();
return imConversationMapper.getMyImConversationList(client.getId());
}
}
......@@ -53,7 +53,6 @@ public class ImConcreteReceiveStrategy extends AbstractReceiveStrategy {
@Autowired
private ImApplicationService imApplicationService;
@Autowired
private ImConversationMembersService imConversationMembersService;
......
......@@ -28,24 +28,22 @@ public class MyConversationListVo implements Serializable {
@ApiModelProperty("创建时间")
private Date createTime;
@ApiModelProperty("修改时间")
private Date updateTime;
@ApiModelProperty("对话中最后一条消息的发送或接收时间")
private Date lastMessage;
@ApiModelProperty("应用appid")
private Long fkAppid;
@ApiModelProperty("创建者客户端id")
private Long creator;
private String creator;
@ApiModelProperty("可选 对话的名字,可为群组命名。")
private String name;
@ApiModelProperty("可选 自定义属性,供开发者扩展使用。")
private String attributes;
private Object attributes;
@ApiModelProperty("可选 对话类型标志,是否是系统对话,后面会说明。")
private Boolean system;
@ApiModelProperty("未读消息条数")
private Long msgNotReadCount;
@ApiModelProperty("成员")
private String members;
}
\ No newline at end of file
package com.wecloud.im.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* <pre>
* 会话表 查询结果对象
* </pre>
*
* @author wei
* @date 2021-05-07
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "MyConversationMemberVo")
public class MyConversationMembersVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("加入时间")
private Date joinTime;
@ApiModelProperty("客户端id")
private String clientId;
@ApiModelProperty("名字")
private String name;
}
\ No newline at end of file
......@@ -20,5 +20,29 @@
<include refid="Base_Column_List"/>
from im_conversation
</select>
<select id="getMyImConversationList" resultType="com.wecloud.im.vo.MyConversationListVo">
SELECT imConversation.id,
imConversation.create_time,
imConversation.`name`,
imConversation.attributes,
imConversation.system,
im_client.client_id AS creator,
(SELECT COUNT(im_inbox.id)
FROM im_inbox
WHERE im_inbox.fk_conversation_id = imConversation.id
AND im_inbox.receiver = #{clientId}) AS msg_not_read_count,
(
SELECT GROUP_CONCAT(im_client.client_id)
FROM im_conversation_members AS im_conversation_members
INNER JOIN im_client AS im_client ON im_client.id = im_conversation_members.fk_client_id
WHERE im_conversation_members.fk_conversation_id = imConversation.id
) AS members
FROM im_conversation_members AS imConversationMembers
INNER JOIN im_conversation AS imConversation
ON imConversation.id = imConversationMembers.fk_conversation_id
INNER JOIN im_client AS im_client ON im_client.id = imConversation.creator
WHERE imConversationMembers.fk_client_id = #{clientId}
GROUP BY imConversation.id
</select>
</mapper>
......@@ -23,10 +23,12 @@ import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import io.geekidea.springbootplus.config.constant.CommonConstant;
import io.geekidea.springbootplus.config.properties.JwtProperties;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import io.geekidea.springbootplus.framework.util.UUIDUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.stereotype.Component;
import java.time.Duration;
......@@ -51,6 +53,18 @@ public class JwtUtil {
log.info(JSON.toJSONString(JwtUtil.jwtProperties));
}
/**
* 获取当前JwtToken
*
* @return
*/
public static JwtToken getCurentJwtToken() {
JwtToken jwtToken = (JwtToken) SecurityUtils.getSubject().getPrincipal();
return jwtToken;
}
/**
* 生成JWT Token
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment