Commit 8bd38a6d by giaogiao

修改包结构;

消息修改为已读状态;
已接收同时修改为已读状态;
添加读取时间; 0未接收; 1已接收;接收时间 ; 0未读; 1已读;0未接收; 1已接收;
优化事务处理;
parent e997ccd7
package io.geekidea.springbootplus.test; package io.geekidea.springbootplus.test;
import cn.hutool.core.lang.Snowflake; import cn.hutool.core.lang.Snowflake;
import com.wecloud.im.app_ws.utils.RSAGenerator;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.ws.utils.RSAGenerator;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
......
...@@ -3,7 +3,7 @@ package io.geekidea.springbootplus.test; ...@@ -3,7 +3,7 @@ package io.geekidea.springbootplus.test;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.databind.json.JsonMapper;
import com.wecloud.im.app_ws.model.request.ReceiveModel; import com.wecloud.im.ws.model.request.ReceiveModel;
public class JsonTest { public class JsonTest {
......
...@@ -3,11 +3,11 @@ package io.geekidea.springbootplus.test; ...@@ -3,11 +3,11 @@ package io.geekidea.springbootplus.test;
import cn.hutool.core.lang.Snowflake; import cn.hutool.core.lang.Snowflake;
import cn.hutool.crypto.digest.MD5; import cn.hutool.crypto.digest.MD5;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.app_ws.utils.RedisUtils;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.ws.utils.RedisUtils;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil; import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
......
...@@ -4,7 +4,7 @@ import cn.hutool.crypto.digest.MD5; ...@@ -4,7 +4,7 @@ import cn.hutool.crypto.digest.MD5;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.databind.json.JsonMapper;
import com.wecloud.im.app_ws.model.request.ReceiveModel; import com.wecloud.im.ws.model.request.ReceiveModel;
import java.util.Date; import java.util.Date;
......
package com.wecloud.im.app_ws.model.request;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Description 拉取所有房间离线消息
* @Author hewei hwei1233@163.com
* @Date 2020-01-03
*/
@Data
public class RequestOfflineMsgModel implements Serializable {
/**
* 优先权,需要优先拉取的房间id
* 如为空,可不传
*/
private List<Long> priority;
/**
* 身份公钥
*/
private String identityKey;
}
package com.wecloud.im.controller; package com.wecloud.im.controller;
import com.wecloud.im.app_ws.utils.RSAGenerator;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.param.ImApplicationPageParam; import com.wecloud.im.param.ImApplicationPageParam;
import com.wecloud.im.param.ImApplicationQueryVo; import com.wecloud.im.param.ImApplicationQueryVo;
import com.wecloud.im.param.add.ImApplicationAdd; import com.wecloud.im.param.add.ImApplicationAdd;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.ws.utils.RSAGenerator;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
......
package com.wecloud.im.controller; package com.wecloud.im.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.app_ws.service.MangerChannelService;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.param.add.ImClientDeviceInfoAdd; import com.wecloud.im.param.add.ImClientDeviceInfoAdd;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.vo.ImOnlineStatusVo; import com.wecloud.im.vo.ImOnlineStatusVo;
import com.wecloud.im.ws.service.MangerChannelService;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.geekidea.springbootplus.framework.core.validator.groups.Add; import io.geekidea.springbootplus.framework.core.validator.groups.Add;
......
package com.wecloud.im.controller; package com.wecloud.im.controller;
import com.wecloud.im.param.ImMsgReceivedUpdate; import com.wecloud.im.param.ImMsgReadStatusUpdate;
import com.wecloud.im.param.ImMsgReceivedStatusUpdate;
import com.wecloud.im.service.ImInboxService; import com.wecloud.im.service.ImInboxService;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
...@@ -28,15 +29,22 @@ public class ImInboxController extends BaseController { ...@@ -28,15 +29,22 @@ public class ImInboxController extends BaseController {
@Autowired @Autowired
private ImInboxService imInboxService; private ImInboxService imInboxService;
/** /**
* 消息修改为已接收状态 * 消息修改为已接收状态
*/ */
@PostMapping("/msgReceivedUpdate") @PostMapping("/msgReceivedUpdate")
@ApiOperation(value = "消息修改为已接收状态") @ApiOperation(value = "消息修改为已接收状态")
public ApiResult<Boolean> updateImMsgReceived(@RequestBody ImMsgReceivedUpdate imMsgReceivedUpdate) throws Exception { public ApiResult<Boolean> updateImMsgReceived(@RequestBody ImMsgReceivedStatusUpdate imMsgReceivedUpdate) throws Exception {
imInboxService.updateImMsgReceived(imMsgReceivedUpdate); return imInboxService.updateImMsgReceived(imMsgReceivedUpdate);
return ApiResult.ok(); }
/**
* 消息修改为已读状态
*/
@PostMapping("/msgReadUpdate")
@ApiOperation(value = "消息修改为已读状态")
public ApiResult<Boolean> updateInMsgReadUpdate(@RequestBody ImMsgReadStatusUpdate imMsgReadStatusUpdate) throws Exception {
return imInboxService.updateImMsgRead(imMsgReadStatusUpdate);
} }
// //
......
...@@ -38,8 +38,11 @@ public class ImInbox extends BaseEntity { ...@@ -38,8 +38,11 @@ public class ImInbox extends BaseEntity {
@ApiModelProperty("修改时间") @ApiModelProperty("修改时间")
private Date updateTime; private Date updateTime;
@ApiModelProperty("读取时间")
private Date readTime;
@ApiModelProperty("接收时间") @ApiModelProperty("接收时间")
private Date receiverDate; private Date receiverTime;
@NotNull(message = "应用appid不能为空") @NotNull(message = "应用appid不能为空")
@ApiModelProperty("应用appid") @ApiModelProperty("应用appid")
...@@ -54,8 +57,12 @@ public class ImInbox extends BaseEntity { ...@@ -54,8 +57,12 @@ public class ImInbox extends BaseEntity {
private Long fkMsgId; private Long fkMsgId;
@ApiModelProperty("0未读; 1已读") @ApiModelProperty("0未读; 1已读")
private Integer readMsg; private Integer readMsgStatus;
@ApiModelProperty("0未接收; 1已接收")
private Integer receiverMsgStatus;
@NotNull(message = "会话id不能为空")
@ApiModelProperty("会话id") @ApiModelProperty("会话id")
private Long fkConversationId; private Long fkConversationId;
......
...@@ -40,4 +40,6 @@ public interface ImInboxMapper extends BaseMapper<ImInbox> { ...@@ -40,4 +40,6 @@ public interface ImInboxMapper extends BaseMapper<ImInbox> {
Long updateImMsgReceivedByIds(@Param("clientId") Long clientId, @Param("msgIds") List<Long> msgIds); Long updateImMsgReceivedByIds(@Param("clientId") Long clientId, @Param("msgIds") List<Long> msgIds);
Long updateImMsgReadByIds(@Param("clientId") Long clientId, @Param("msgIds") List<Long> msgIds);
} }
package com.wecloud.im.netty.core; package com.wecloud.im.netty.core;
import com.wecloud.im.app_ws.model.WsConstants; import com.wecloud.im.ws.model.WsConstants;
import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline; import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.SocketChannel;
......
package com.wecloud.im.netty.core; package com.wecloud.im.netty.core;
import cn.hutool.core.thread.ThreadFactoryBuilder; import cn.hutool.core.thread.ThreadFactoryBuilder;
import com.wecloud.im.app_ws.model.WsConstants; import com.wecloud.im.ws.model.WsConstants;
import com.wecloud.im.app_ws.receive.ReadWsData; import com.wecloud.im.ws.receive.ReadWsData;
import com.wecloud.im.app_ws.service.MangerChannelService; import com.wecloud.im.ws.service.MangerChannelService;
import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.SimpleChannelInboundHandler;
......
...@@ -4,10 +4,10 @@ package com.wecloud.im.netty.handler; ...@@ -4,10 +4,10 @@ package com.wecloud.im.netty.handler;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.interfaces.DecodedJWT; import com.auth0.jwt.interfaces.DecodedJWT;
import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.databind.json.JsonMapper;
import com.wecloud.im.app_ws.model.WsConstants;
import com.wecloud.im.app_ws.service.MangerChannelService;
import com.wecloud.im.app_ws.utils.FullHttpRequestUtils;
import com.wecloud.im.netty.core.WsReadHandler; import com.wecloud.im.netty.core.WsReadHandler;
import com.wecloud.im.ws.model.WsConstants;
import com.wecloud.im.ws.service.MangerChannelService;
import com.wecloud.im.ws.utils.FullHttpRequestUtils;
import io.geekidea.springbootplus.config.constant.CommonConstant; import io.geekidea.springbootplus.config.constant.CommonConstant;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
......
...@@ -31,8 +31,11 @@ public class ImInboxQueryVo implements Serializable { ...@@ -31,8 +31,11 @@ public class ImInboxQueryVo implements Serializable {
@ApiModelProperty("修改时间") @ApiModelProperty("修改时间")
private Date updateTime; private Date updateTime;
@ApiModelProperty("读取时间")
private Date readTime;
@ApiModelProperty("接收时间") @ApiModelProperty("接收时间")
private Date receiverDate; private Date receiverTime;
@ApiModelProperty("应用appid") @ApiModelProperty("应用appid")
private Long fkAppid; private Long fkAppid;
...@@ -44,8 +47,12 @@ public class ImInboxQueryVo implements Serializable { ...@@ -44,8 +47,12 @@ public class ImInboxQueryVo implements Serializable {
private Long fkMsgId; private Long fkMsgId;
@ApiModelProperty("0未读; 1已读") @ApiModelProperty("0未读; 1已读")
private Boolean read; private Integer readMsgStatus;
@ApiModelProperty("0未接收; 1已接收")
private Integer receiverMsgStatus;
@ApiModelProperty("会话id") @ApiModelProperty("会话id")
private Long fkConversationId; private Long fkConversationId;
} }
\ No newline at end of file
...@@ -18,8 +18,8 @@ import java.util.List; ...@@ -18,8 +18,8 @@ import java.util.List;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ApiModel(value = "ImMsgReceivedUpdate") @ApiModel(value = "ImMsgReadStatusUpdate")
public class ImMsgReceivedUpdate extends BaseEntity { public class ImMsgReadStatusUpdate extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty("消息id数组,可以传入单个或多个, 如接收离线消息列表时可以批量修改 则传入多个") @ApiModelProperty("消息id数组,可以传入单个或多个, 如接收离线消息列表时可以批量修改 则传入多个")
......
package com.wecloud.im.param;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.List;
/**
* ImMsgReadUpdate
*
* @author wei
* @since 2021-05-07
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "ImMsgReceivedStatusUpdate")
public class ImMsgReceivedStatusUpdate extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("消息id数组,可以传入单个或多个, 如接收离线消息列表时可以批量修改 则传入多个")
private List<Long> msgIds;
@ApiModelProperty("是否同时修改为已读状态")
private Boolean readStatus;
}
...@@ -3,7 +3,8 @@ package com.wecloud.im.service; ...@@ -3,7 +3,8 @@ package com.wecloud.im.service;
import com.wecloud.im.entity.ImInbox; import com.wecloud.im.entity.ImInbox;
import com.wecloud.im.param.ImInboxPageParam; import com.wecloud.im.param.ImInboxPageParam;
import com.wecloud.im.param.ImInboxQueryVo; import com.wecloud.im.param.ImInboxQueryVo;
import com.wecloud.im.param.ImMsgReceivedUpdate; import com.wecloud.im.param.ImMsgReadStatusUpdate;
import com.wecloud.im.param.ImMsgReceivedStatusUpdate;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.BaseService; import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
...@@ -68,6 +69,8 @@ public interface ImInboxService extends BaseService<ImInbox> { ...@@ -68,6 +69,8 @@ public interface ImInboxService extends BaseService<ImInbox> {
* @param imMsgReceivedUpdate * @param imMsgReceivedUpdate
* @return * @return
*/ */
ApiResult<Boolean> updateImMsgReceived(ImMsgReceivedUpdate imMsgReceivedUpdate); ApiResult<Boolean> updateImMsgReceived(ImMsgReceivedStatusUpdate imMsgReceivedUpdate);
ApiResult<Boolean> updateImMsgRead(ImMsgReadStatusUpdate imMsgReadStatusUpdate);
} }
...@@ -2,8 +2,6 @@ package com.wecloud.im.service; ...@@ -2,8 +2,6 @@ package com.wecloud.im.service;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.param.ImHistoryMessagePageParam; import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.ImMessagePageParam;
import com.wecloud.im.param.ImMessageQueryVo;
import com.wecloud.im.param.add.ImMsgUpdate; import com.wecloud.im.param.add.ImMsgUpdate;
import com.wecloud.im.vo.ImMessageOfflineListVo; import com.wecloud.im.vo.ImMessageOfflineListVo;
import com.wecloud.im.vo.OfflineMsgDto; import com.wecloud.im.vo.OfflineMsgDto;
...@@ -47,41 +45,41 @@ public interface ImMessageService extends BaseService<ImMessage> { ...@@ -47,41 +45,41 @@ public interface ImMessageService extends BaseService<ImMessage> {
*/ */
boolean saveImMessage(ImMessage imMessage) throws Exception; boolean saveImMessage(ImMessage imMessage) throws Exception;
/** // /**
* 修改 // * 修改
* // *
* @param imMessage // * @param imMessage
* @return // * @return
* @throws Exception // * @throws Exception
*/ // */
boolean updateImMessage(ImMessage imMessage) throws Exception; // boolean updateImMessage(ImMessage imMessage) throws Exception;
//
/** // /**
* 删除 // * 删除
* // *
* @param id // * @param id
* @return // * @return
* @throws Exception // * @throws Exception
*/ // */
boolean deleteImMessage(Long id) throws Exception; // boolean deleteImMessage(Long id) throws Exception;
//
/** // /**
* 根据ID获取查询对象 // * 根据ID获取查询对象
* // *
* @param id // * @param id
* @return // * @return
* @throws Exception // * @throws Exception
*/ // */
ImMessageQueryVo getImMessageById(Long id) throws Exception; // ImMessageQueryVo getImMessageById(Long id) throws Exception;
//
/** // /**
* 获取分页对象 // * 获取分页对象
* // *
* @param imMessagePageParam // * @param imMessagePageParam
* @return // * @return
* @throws Exception // * @throws Exception
*/ // */
Paging<ImMessageQueryVo> getImMessagePageList(ImMessagePageParam imMessagePageParam) throws Exception; // Paging<ImMessageQueryVo> getImMessagePageList(ImMessagePageParam imMessagePageParam) throws Exception;
/** /**
* 查询某个会话历史消息分页列表 * 查询某个会话历史消息分页列表
......
...@@ -19,6 +19,7 @@ import io.geekidea.springbootplus.framework.shiro.util.JwtUtil; ...@@ -19,6 +19,7 @@ import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.Duration; import java.time.Duration;
...@@ -54,6 +55,7 @@ public class ImClientLoginServiceImpl implements ImClientLoginService { ...@@ -54,6 +55,7 @@ public class ImClientLoginServiceImpl implements ImClientLoginService {
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<TokenVo> verifySign(ImTokenVerify imTokenVerify) { public ApiResult<TokenVo> verifySign(ImTokenVerify imTokenVerify) {
// 根据appKey从数据库查询密钥 // 根据appKey从数据库查询密钥
......
...@@ -45,6 +45,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -45,6 +45,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public boolean addDeviceInfo(ImClientDeviceInfoAdd imClientDevice) { public boolean addDeviceInfo(ImClientDeviceInfoAdd imClientDevice) {
ImClient client = getClient(); ImClient client = getClient();
......
...@@ -72,6 +72,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap ...@@ -72,6 +72,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<ImConversationCreateVo> createImConversation(ImConversationCreate imConversationCreate) { public ApiResult<ImConversationCreateVo> createImConversation(ImConversationCreate imConversationCreate) {
ImClient client = imClientService.getClient(); ImClient client = imClientService.getClient();
......
...@@ -8,7 +8,8 @@ import com.wecloud.im.entity.ImInbox; ...@@ -8,7 +8,8 @@ import com.wecloud.im.entity.ImInbox;
import com.wecloud.im.mapper.ImInboxMapper; import com.wecloud.im.mapper.ImInboxMapper;
import com.wecloud.im.param.ImInboxPageParam; import com.wecloud.im.param.ImInboxPageParam;
import com.wecloud.im.param.ImInboxQueryVo; import com.wecloud.im.param.ImInboxQueryVo;
import com.wecloud.im.param.ImMsgReceivedUpdate; import com.wecloud.im.param.ImMsgReadStatusUpdate;
import com.wecloud.im.param.ImMsgReceivedStatusUpdate;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImInboxService; import com.wecloud.im.service.ImInboxService;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
...@@ -66,12 +67,29 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox> ...@@ -66,12 +67,29 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
} }
@Override @Override
public ApiResult<Boolean> updateImMsgReceived(ImMsgReceivedUpdate imMsgReceivedUpdate) { @Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> updateImMsgReceived(ImMsgReceivedStatusUpdate imMsgReceivedUpdate) {
ImClient client = imClientService.getClient(); ImClient client = imClientService.getClient();
Long aLong = imInboxMapper.updateImMsgReceivedByIds(client.getId(), imMsgReceivedUpdate.getMsgIds()); Long aLong = imInboxMapper.updateImMsgReceivedByIds(client.getId(), imMsgReceivedUpdate.getMsgIds());
// 是否同时修改为已读状态
if (imMsgReceivedUpdate.getReadStatus()) {
imInboxMapper.updateImMsgReadByIds(client.getId(), imMsgReceivedUpdate.getMsgIds());
}
return ApiResult.ok(); return ApiResult.ok();
} }
@Override
public ApiResult<Boolean> updateImMsgRead(ImMsgReadStatusUpdate imMsgReadStatusUpdate) {
ImClient client = imClientService.getClient();
Long aLong = imInboxMapper.updateImMsgReadByIds(client.getId(), imMsgReadStatusUpdate.getMsgIds());
return ApiResult.ok();
}
} }
...@@ -10,8 +10,6 @@ import com.wecloud.im.entity.ImConversation; ...@@ -10,8 +10,6 @@ import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.mapper.ImMessageMapper; import com.wecloud.im.mapper.ImMessageMapper;
import com.wecloud.im.param.ImHistoryMessagePageParam; import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.ImMessagePageParam;
import com.wecloud.im.param.ImMessageQueryVo;
import com.wecloud.im.param.add.ImMsgUpdate; import com.wecloud.im.param.add.ImMsgUpdate;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationService; import com.wecloud.im.service.ImConversationService;
...@@ -51,6 +49,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -51,6 +49,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
private ImConversationService imConversationService; private ImConversationService imConversationService;
@Override @Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> updateMsgWithdrawById(Long msgId) { public ApiResult<Boolean> updateMsgWithdrawById(Long msgId) {
ImClient client = imClientService.getClient(); ImClient client = imClientService.getClient();
...@@ -79,6 +78,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -79,6 +78,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public ApiResult<Boolean> updateMsgById(ImMsgUpdate imMsgUpdate) { public ApiResult<Boolean> updateMsgById(ImMsgUpdate imMsgUpdate) {
ImClient client = imClientService.getClient(); ImClient client = imClientService.getClient();
...@@ -116,30 +116,30 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -116,30 +116,30 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
public boolean saveImMessage(ImMessage imMessage) throws Exception { public boolean saveImMessage(ImMessage imMessage) throws Exception {
return super.save(imMessage); return super.save(imMessage);
} }
//
@Transactional(rollbackFor = Exception.class) // @Transactional(rollbackFor = Exception.class)
@Override // @Override
public boolean updateImMessage(ImMessage imMessage) throws Exception { // public boolean updateImMessage(ImMessage imMessage) throws Exception {
return super.updateById(imMessage); // return super.updateById(imMessage);
} // }
//
@Transactional(rollbackFor = Exception.class) // @Transactional(rollbackFor = Exception.class)
@Override // @Override
public boolean deleteImMessage(Long id) throws Exception { // public boolean deleteImMessage(Long id) throws Exception {
return super.removeById(id); // return super.removeById(id);
} // }
//
@Override // @Override
public ImMessageQueryVo getImMessageById(Long id) throws Exception { // public ImMessageQueryVo getImMessageById(Long id) throws Exception {
return imMessageMapper.getImMessageById(id); // return imMessageMapper.getImMessageById(id);
} // }
//
@Override // @Override
public Paging<ImMessageQueryVo> getImMessagePageList(ImMessagePageParam imMessagePageParam) throws Exception { // public Paging<ImMessageQueryVo> getImMessagePageList(ImMessagePageParam imMessagePageParam) throws Exception {
Page<ImMessageQueryVo> page = new PageInfo<>(imMessagePageParam, OrderItem.desc(getLambdaColumn(ImMessage::getCreateTime))); // Page<ImMessageQueryVo> page = new PageInfo<>(imMessagePageParam, OrderItem.desc(getLambdaColumn(ImMessage::getCreateTime)));
IPage<ImMessageQueryVo> iPage = imMessageMapper.getImMessagePageList(page, imMessagePageParam); // IPage<ImMessageQueryVo> iPage = imMessageMapper.getImMessagePageList(page, imMessagePageParam);
return new Paging<ImMessageQueryVo>(iPage); // return new Paging<ImMessageQueryVo>(iPage);
} // }
@Override @Override
public Paging<OfflineMsgDto> getHistoryMsgConversationId(ImHistoryMessagePageParam imHistoryMessagePageParam) throws Exception { public Paging<OfflineMsgDto> getHistoryMsgConversationId(ImHistoryMessagePageParam imHistoryMessagePageParam) throws Exception {
......
package com.wecloud.im.app_ws.annotation; package com.wecloud.im.ws.annotation;
import com.wecloud.im.app_ws.enums.WsRequestCmdEnum; import com.wecloud.im.ws.enums.WsRequestCmdEnum;
import java.lang.annotation.Documented; import java.lang.annotation.Documented;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
......
package com.wecloud.im.app_ws.cache; package com.wecloud.im.ws.cache;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
......
package com.wecloud.im.app_ws.enums; package com.wecloud.im.ws.enums;
/** /**
* @Description ws请求类型 * @Description ws请求类型
......
package com.wecloud.im.app_ws.enums; package com.wecloud.im.ws.enums;
/** /**
* @Description ws响应类型 * @Description ws响应类型
......
package com.wecloud.im.app_ws.model; package com.wecloud.im.ws.model;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
......
package com.wecloud.im.app_ws.model; package com.wecloud.im.ws.model;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
......
package com.wecloud.im.app_ws.model; package com.wecloud.im.ws.model;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
......
package com.wecloud.im.app_ws.model; package com.wecloud.im.ws.model;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
......
package com.wecloud.im.app_ws.model.request; package com.wecloud.im.ws.model.request;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
......
package com.wecloud.im.app_ws.receive; package com.wecloud.im.ws.receive;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.databind.json.JsonMapper;
import com.wecloud.im.app_ws.enums.WsRequestCmdEnum; import com.wecloud.im.ws.enums.WsRequestCmdEnum;
import com.wecloud.im.app_ws.model.request.ReceiveModel; import com.wecloud.im.ws.model.request.ReceiveModel;
import com.wecloud.im.app_ws.service.MangerChannelService; import com.wecloud.im.ws.service.MangerChannelService;
import com.wecloud.im.app_ws.service.WriteDataService; import com.wecloud.im.ws.service.WriteDataService;
import com.wecloud.im.app_ws.strategy.AbstractReceiveStrategy; import com.wecloud.im.ws.strategy.AbstractReceiveStrategy;
import com.wecloud.im.app_ws.strategy.ReceiveStrategyContext; import com.wecloud.im.ws.strategy.ReceiveStrategyContext;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
......
package com.wecloud.im.app_ws.sender; package com.wecloud.im.ws.sender;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
......
package com.wecloud.im.app_ws.sender; package com.wecloud.im.ws.sender;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
......
package com.wecloud.im.app_ws.service; package com.wecloud.im.ws.service;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.channel.socket.nio.NioSocketChannel;
......
package com.wecloud.im.app_ws.service; package com.wecloud.im.ws.service;
import com.wecloud.im.app_ws.model.ResponseModel; import com.wecloud.im.ws.model.ResponseModel;
import com.wecloud.im.app_ws.model.request.ReceiveModel; import com.wecloud.im.ws.model.request.ReceiveModel;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
/** /**
......
package com.wecloud.im.app_ws.service.impl; package com.wecloud.im.ws.service.impl;
import com.wecloud.im.app_ws.cache.UserCache; import com.wecloud.im.ws.cache.UserCache;
import com.wecloud.im.app_ws.service.MangerChannelService; import com.wecloud.im.ws.service.MangerChannelService;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelFutureListener;
......
package com.wecloud.im.app_ws.service.impl; package com.wecloud.im.ws.service.impl;
import cn.hutool.core.thread.ThreadFactoryBuilder; import cn.hutool.core.thread.ThreadFactoryBuilder;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.databind.json.JsonMapper;
import com.wecloud.im.app_ws.model.ResponseModel; import com.wecloud.im.ws.model.ResponseModel;
import com.wecloud.im.app_ws.model.WsConstants; import com.wecloud.im.ws.model.WsConstants;
import com.wecloud.im.app_ws.model.request.ReceiveModel; import com.wecloud.im.ws.model.request.ReceiveModel;
import com.wecloud.im.app_ws.service.MangerChannelService; import com.wecloud.im.ws.service.MangerChannelService;
import com.wecloud.im.app_ws.service.WriteDataService; import com.wecloud.im.ws.service.WriteDataService;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
......
package com.wecloud.im.app_ws.strategy; package com.wecloud.im.ws.strategy;
import com.wecloud.im.app_ws.model.request.ReceiveModel; import com.wecloud.im.ws.model.request.ReceiveModel;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
/** /**
......
package com.wecloud.im.app_ws.strategy; package com.wecloud.im.ws.strategy;
import com.wecloud.im.app_ws.enums.WsRequestCmdEnum; import com.wecloud.im.ws.enums.WsRequestCmdEnum;
import com.wecloud.im.app_ws.utils.SpringBeanUtils; import com.wecloud.im.ws.utils.SpringBeanUtils;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.Map; import java.util.Map;
......
package com.wecloud.im.app_ws.strategy; package com.wecloud.im.ws.strategy;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.wecloud.im.app_ws.annotation.ReceiveTypeAnnotation; import com.wecloud.im.ws.annotation.ReceiveTypeAnnotation;
import com.wecloud.im.app_ws.enums.WsRequestCmdEnum; import com.wecloud.im.ws.enums.WsRequestCmdEnum;
import com.wecloud.im.app_ws.utils.ClassScanner; import com.wecloud.im.ws.utils.ClassScanner;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
...@@ -25,7 +25,7 @@ import java.util.Set; ...@@ -25,7 +25,7 @@ import java.util.Set;
public class ReceiveStrategyProcessor implements BeanFactoryPostProcessor { public class ReceiveStrategyProcessor implements BeanFactoryPostProcessor {
// 扫码注解的包路径 // 扫码注解的包路径
private static final String STRATEGY_PACK = "com.wecloud.im.tillo.app_ws.strategy.concrete"; private static final String STRATEGY_PACK = "com.wecloud.im.ws.strategy.concrete";
@Override @Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
......
package com.wecloud.im.app_ws.strategy.concrete; package com.wecloud.im.ws.strategy.concrete;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.databind.json.JsonMapper;
import com.wecloud.im.app_ws.annotation.ReceiveTypeAnnotation;
import com.wecloud.im.app_ws.enums.WsRequestCmdEnum;
import com.wecloud.im.app_ws.model.ResponseModel;
import com.wecloud.im.app_ws.model.request.ReceiveModel;
import com.wecloud.im.app_ws.sender.PushTask;
import com.wecloud.im.app_ws.service.MangerChannelService;
import com.wecloud.im.app_ws.service.WriteDataService;
import com.wecloud.im.app_ws.strategy.AbstractReceiveStrategy;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImConversationMembers; import com.wecloud.im.entity.ImConversationMembers;
...@@ -23,6 +15,14 @@ import com.wecloud.im.service.ImClientService; ...@@ -23,6 +15,14 @@ import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImInboxService; import com.wecloud.im.service.ImInboxService;
import com.wecloud.im.service.ImMessageService; import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.ws.annotation.ReceiveTypeAnnotation;
import com.wecloud.im.ws.enums.WsRequestCmdEnum;
import com.wecloud.im.ws.model.ResponseModel;
import com.wecloud.im.ws.model.request.ReceiveModel;
import com.wecloud.im.ws.sender.PushTask;
import com.wecloud.im.ws.service.MangerChannelService;
import com.wecloud.im.ws.service.WriteDataService;
import com.wecloud.im.ws.strategy.AbstractReceiveStrategy;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.shiro.util.SnowflakeUtil; import io.geekidea.springbootplus.framework.shiro.util.SnowflakeUtil;
...@@ -188,7 +188,8 @@ public class ImConcreteReceiveStrategy extends AbstractReceiveStrategy { ...@@ -188,7 +188,8 @@ public class ImConcreteReceiveStrategy extends AbstractReceiveStrategy {
imInbox.setFkAppid(imApplication.getId()); imInbox.setFkAppid(imApplication.getId());
imInbox.setReceiver(conversationMembers.getFkClientId()); imInbox.setReceiver(conversationMembers.getFkClientId());
imInbox.setFkMsgId(messageId); imInbox.setFkMsgId(messageId);
imInbox.setReadMsg(0); imInbox.setReadMsgStatus(0);
imInbox.setReceiverMsgStatus(0);
imInbox.setFkConversationId(toConversationId); imInbox.setFkConversationId(toConversationId);
imInboxService.save(imInbox); imInboxService.save(imInbox);
......
package com.wecloud.im.app_ws.utils; package com.wecloud.im.ws.utils;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.BeanDefinitionStoreException; import org.springframework.beans.factory.BeanDefinitionStoreException;
......
package com.wecloud.im.app_ws.utils; package com.wecloud.im.ws.utils;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import java.security.Key; import java.security.Key;
......
package com.wecloud.im.app_ws.utils; package com.wecloud.im.ws.utils;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelFutureListener;
......
package com.wecloud.im.app_ws.utils; package com.wecloud.im.ws.utils;
import java.util.UUID; import java.util.UUID;
......
package com.wecloud.im.app_ws.utils; package com.wecloud.im.ws.utils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisCallback;
......
package com.wecloud.im.app_ws.utils; package com.wecloud.im.ws.utils;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
......
...@@ -5,13 +5,13 @@ ...@@ -5,13 +5,13 @@
<!-- 通用查询结果列 --> <!-- 通用查询结果列 -->
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id id
, create_time, update_time, receiver_date, fk_appid, receiver, fk_msg_id, read_msg, fk_conversation_id , create_time, update_time, read_time, receiver_time, fk_appid, receiver, fk_msg_id, read_msg_status, receiver_msg_status, fk_conversation_id
</sql> </sql>
<update id="updateImMsgReceivedByIds"> <update id="updateImMsgReceivedByIds">
UPDATE im_inbox UPDATE im_inbox
SET `im_inbox`.`update_time` = NOW(), SET `im_inbox`.`update_time` = NOW(),
`im_inbox`.`read_msg` = 1, `im_inbox`.`receiver_msg_status` = 1,
`im_inbox`.`receiver_date` = NOW() `im_inbox`.`receiver_time` = NOW()
WHERE WHERE
im_inbox.receiver = #{clientId} im_inbox.receiver = #{clientId}
AND im_inbox.fk_msg_id IN AND im_inbox.fk_msg_id IN
...@@ -20,6 +20,18 @@ ...@@ -20,6 +20,18 @@
</foreach> </foreach>
</update> </update>
<update id="updateImMsgReadByIds">
UPDATE im_inbox
SET `im_inbox`.`update_time` = NOW(),
`im_inbox`.`read_msg_status` = 1,
`im_inbox`.`receiver_time` = NOW()
WHERE
im_inbox.receiver = #{clientId}
AND im_inbox.fk_msg_id IN
<foreach collection="msgIds" item="deptId" index="i" open="(" close=")" separator=",">
#{deptId}
</foreach>
</update>
<select id="getImInboxById" resultType="com.wecloud.im.param.ImInboxQueryVo"> <select id="getImInboxById" resultType="com.wecloud.im.param.ImInboxQueryVo">
select select
......
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