Browse Source

das mapper

master
tangmingyou 4 years ago
parent
commit
11300ed86e
  1. 12
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/LogicTables.java
  2. 8
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java
  3. 3
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroup.java
  4. 3
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroupMessage.java
  5. 3
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroupUser.java
  6. 3
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImMessage.java
  7. 2
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/FriendDas.java
  8. 2
      im-das-api/im-das-user-api/src/main/resources/META-INF/spring.factories
  9. 21
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/amqp/Receiver.java
  10. 16
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/amqp/Sender.java
  11. 14
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImGroupMapper.java
  12. 14
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImGroupMessageMapper.java
  13. 14
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImMessageMapper.java
  14. 17
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/FriendDasImpl.java
  15. 5
      im-das/im-das-user/src/main/resources/mapper/ImGroupMapper.xml
  16. 5
      im-das/im-das-user/src/main/resources/mapper/ImGroupMessageMapper.xml
  17. 5
      im-das/im-das-user/src/main/resources/mapper/ImMessageMapper.xml
  18. 10
      im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/ChatServiceImpl.java
  19. 4
      im-service/im-router/pom.xml
  20. 12
      im-service/im-router/src/main/java/net/sopod/soim/router/service/UserRouteServiceImpl.java

12
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/LogicTables.java

@ -8,8 +8,20 @@ package net.sopod.soim.das.user.api.config;
*/ */
public interface LogicTables { public interface LogicTables {
Integer STATUS_DEL = 0;
Integer STATUS_NORMAL = 1;
String IM_USER = "im_user"; String IM_USER = "im_user";
String IM_FRIEND = "im_friend"; String IM_FRIEND = "im_friend";
String IM_MESSAGE = "im_message";
String IM_GROUP = "im_group";
String IM_GROUP_USER = "im_group_user";
String IM_GROUP_MESSAGE = "im_group_message";
} }

8
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.sopod.soim.das.user.api.config.LogicTables;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -19,7 +20,7 @@ import java.util.Date;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("im_friend") @TableName(LogicTables.IM_FRIEND)
public class ImFriend implements Serializable { public class ImFriend implements Serializable {
private static final long serialVersionUID = -4703347353944742873L; private static final long serialVersionUID = -4703347353944742873L;
@ -36,7 +37,10 @@ public class ImFriend implements Serializable {
@TableField(value = "fid") @TableField(value = "fid")
private Long fid; private Long fid;
/** 状态:0删除1正常 */ /**
* 状态:0删除1正常
* TODO 2临时好友(群单聊)
**/
@TableField(value = "status") @TableField(value = "status")
private Integer status; private Integer status;

3
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroup.java

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.sopod.soim.das.user.api.config.LogicTables;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -17,7 +18,7 @@ import java.util.Date;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("im_group") @TableName(LogicTables.IM_GROUP)
public class ImGroup implements Serializable { public class ImGroup implements Serializable {
private static final long serialVersionUID = 2081139176340955425L; private static final long serialVersionUID = 2081139176340955425L;

3
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroupMessage.java

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.sopod.soim.das.user.api.config.LogicTables;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -17,7 +18,7 @@ import java.util.Date;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("im_group_message") @TableName(LogicTables.IM_GROUP_MESSAGE)
public class ImGroupMessage implements Serializable { public class ImGroupMessage implements Serializable {
private static final long serialVersionUID = -509462521791459558L; private static final long serialVersionUID = -509462521791459558L;

3
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroupUser.java

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.sopod.soim.das.user.api.config.LogicTables;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -17,7 +18,7 @@ import java.util.Date;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("im_group_user") @TableName(LogicTables.IM_GROUP_USER)
public class ImGroupUser implements Serializable { public class ImGroupUser implements Serializable {
private static final long serialVersionUID = -1236982266782872316L; private static final long serialVersionUID = -1236982266782872316L;

3
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImMessage.java

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import net.sopod.soim.das.user.api.config.LogicTables;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -17,7 +18,7 @@ import java.util.Date;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("im_message") @TableName(LogicTables.IM_MESSAGE)
public class ImMessage implements Serializable { public class ImMessage implements Serializable {
private static final long serialVersionUID = 7374196343496533922L; private static final long serialVersionUID = 7374196343496533922L;

2
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/FriendDas.java

@ -21,6 +21,8 @@ public interface FriendDas {
*/ */
int insert(Long uid, Long fid); int insert(Long uid, Long fid);
Long getFriendId(Long uid, Long fid);
/** /**
* 好友是否存在 * 好友是否存在
* *

2
im-das-api/im-das-user-api/src/main/resources/META-INF/spring.factories

@ -1 +1 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=net.sopod.soim.logic.api.segmentid.config.SegmentIdAutoConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration=net.sopod.soim.das.user.api.config.ChatRabbitMQAutoConfiguration

21
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/amqp/Receiver.java

@ -1,13 +1,14 @@
package net.sopod.soim.das.user.amqp; package net.sopod.soim.das.user.amqp;
import net.sopod.soim.common.util.Jackson; import lombok.AllArgsConstructor;
import net.sopod.soim.das.user.api.model.entity.ImGroupMessage; import net.sopod.soim.das.user.api.model.entity.ImGroupMessage;
import net.sopod.soim.das.user.api.model.entity.ImMessage; import net.sopod.soim.das.user.api.model.entity.ImMessage;
import net.sopod.soim.das.user.api.mq.ChatQueue; import net.sopod.soim.das.user.api.mq.ChatQueue;
import org.springframework.amqp.core.Message; import net.sopod.soim.das.user.dao.ImGroupMessageMapper;
import net.sopod.soim.das.user.dao.ImMessageMapper;
import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Service;
/** /**
* Listener * Listener
@ -16,18 +17,28 @@ import org.springframework.stereotype.Component;
* @author tmy * @author tmy
* @date 2022-05-28 16:26 * @date 2022-05-28 16:26
*/ */
@RabbitListener(queues = {ChatQueue.IM_MESSAGE_PERSISTENT, ChatQueue.IM_GROUP_MESSAGE_PERSISTENT}) @Service
@Component @AllArgsConstructor
@RabbitListener(queues = {
ChatQueue.IM_MESSAGE_PERSISTENT,
ChatQueue.IM_GROUP_MESSAGE_PERSISTENT
})
public class Receiver { public class Receiver {
ImMessageMapper imMessageMapper;
ImGroupMessageMapper imGroupMessageMapper;
@RabbitHandler @RabbitHandler
public void process(ImGroupMessage imGroupMessage) { public void process(ImGroupMessage imGroupMessage) {
System.out.println("receiver2: " + imGroupMessage); System.out.println("receiver2: " + imGroupMessage);
imGroupMessageMapper.insert(imGroupMessage);
} }
@RabbitHandler @RabbitHandler
public void process(ImMessage imMessage) { public void process(ImMessage imMessage) {
System.out.println("receive3: " + imMessage); System.out.println("receive3: " + imMessage);
imMessageMapper.insert(imMessage);
} }
} }

16
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/amqp/Sender.java

@ -1,9 +1,13 @@
package net.sopod.soim.das.user.amqp; package net.sopod.soim.das.user.amqp;
import lombok.AllArgsConstructor;
import net.sopod.soim.common.util.ImClock; import net.sopod.soim.common.util.ImClock;
import net.sopod.soim.das.user.api.config.LogicTables;
import net.sopod.soim.das.user.api.model.entity.ImGroupMessage; import net.sopod.soim.das.user.api.model.entity.ImGroupMessage;
import net.sopod.soim.das.user.api.model.entity.ImMessage; import net.sopod.soim.das.user.api.model.entity.ImMessage;
import net.sopod.soim.das.user.api.mq.ChatQueueType; import net.sopod.soim.das.user.api.mq.ChatQueueType;
import net.sopod.soim.logic.api.segmentid.core.SegmentIdGenerator;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.amqp.core.AmqpTemplate; import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
@ -19,9 +23,12 @@ import java.util.concurrent.TimeUnit;
* @author tmy * @author tmy
* @date 2022-05-28 16:23 * @date 2022-05-28 16:23
*/ */
@Component //@Component
@AllArgsConstructor
public class Sender implements ApplicationListener<ApplicationReadyEvent> { public class Sender implements ApplicationListener<ApplicationReadyEvent> {
private SegmentIdGenerator segmentIdGenerator;
@Override @Override
public void onApplicationEvent(ApplicationReadyEvent event) { public void onApplicationEvent(ApplicationReadyEvent event) {
ConfigurableApplicationContext context = event.getApplicationContext(); ConfigurableApplicationContext context = event.getApplicationContext();
@ -35,8 +42,9 @@ public class Sender implements ApplicationListener<ApplicationReadyEvent> {
System.out.println("send msg...."); System.out.println("send msg....");
String content = "《蒙娜丽莎》的姿势,已经升华为一种神圣的符号,它不仅仅是艺术规律问题,不仅仅是对文艺复兴人文思想粗糙大潮的冲击,而是心灵回归者、觉醒者心中的一个崇高细致理想的显现。《蒙娜丽莎》具有另一种难以说明的象征意义,如佛的坐势、站势、讲道姿势,菩萨的动势,基督的几种象征性姿势:如两手摊开,一手持十字,一手指天,这有某种非世俗的意味,不是做作,而是不得不是如此,是最不自然最自然,最不简单最简单,最轻松最沉甸甸的样式,你无法赞美它,又无法挑剔它,它就是这样,原始的样子,人们只能沉醉其中,而不能有条理地褒贬它。一切欺骗与神秘都集中在《蒙娜丽莎》身上,而令人们产生一种畏惧。《蒙娜丽莎》是一个精力充沛的形象,在该幅作品面前,不能说她是女人肖像,她穿越一切无所不见、又视而不见的空洞目光,想躲避是办不到的,而想迎接那目光同样也是枉然。奇异的前额,广阔得失去了一个平凡人的味道,弥漫在脸上的那种神奇表情,似笑、非笑使人们无法相信这是一张现实的脸,而它的存在,又无法使人们的怀疑进行得彻底。《蒙娜丽莎》的表情,像东方佛教中佛陀的表情一样,是非凡人所能做出来的。“蒙娜丽莎”不是因为了什么而微笑,她只是静静地在那,脸上是自然地出现的一种永恒的、无所谓表情的表情。 [12] 《蒙娜丽莎》的美学意义,主要在于人物形象焕发出的人性的光辉;而在这之前,即使是人的形象,也带有或多或少的宗教气息。 [13] "; String content = "《蒙娜丽莎》的姿势,已经升华为一种神圣的符号,它不仅仅是艺术规律问题,不仅仅是对文艺复兴人文思想粗糙大潮的冲击,而是心灵回归者、觉醒者心中的一个崇高细致理想的显现。《蒙娜丽莎》具有另一种难以说明的象征意义,如佛的坐势、站势、讲道姿势,菩萨的动势,基督的几种象征性姿势:如两手摊开,一手持十字,一手指天,这有某种非世俗的意味,不是做作,而是不得不是如此,是最不自然最自然,最不简单最简单,最轻松最沉甸甸的样式,你无法赞美它,又无法挑剔它,它就是这样,原始的样子,人们只能沉醉其中,而不能有条理地褒贬它。一切欺骗与神秘都集中在《蒙娜丽莎》身上,而令人们产生一种畏惧。《蒙娜丽莎》是一个精力充沛的形象,在该幅作品面前,不能说她是女人肖像,她穿越一切无所不见、又视而不见的空洞目光,想躲避是办不到的,而想迎接那目光同样也是枉然。奇异的前额,广阔得失去了一个平凡人的味道,弥漫在脸上的那种神奇表情,似笑、非笑使人们无法相信这是一张现实的脸,而它的存在,又无法使人们的怀疑进行得彻底。《蒙娜丽莎》的表情,像东方佛教中佛陀的表情一样,是非凡人所能做出来的。“蒙娜丽莎”不是因为了什么而微笑,她只是静静地在那,脸上是自然地出现的一种永恒的、无所谓表情的表情。 [12] 《蒙娜丽莎》的美学意义,主要在于人物形象焕发出的人性的光辉;而在这之前,即使是人的形象,也带有或多或少的宗教气息。 [13] ";
if (i % 2 == 0) { if (i % 2 == 0) {
long id = segmentIdGenerator.nextId(LogicTables.IM_GROUP_MESSAGE);
ImGroupMessage imGroupMessage = new ImGroupMessage() ImGroupMessage imGroupMessage = new ImGroupMessage()
.setId(new Random().nextLong()) .setId(id)
.setGroupId(10010L) .setGroupId(10010L)
.setSender(10086L) .setSender(10086L)
.setCreateTime(ImClock.date()) .setCreateTime(ImClock.date())
@ -44,15 +52,15 @@ public class Sender implements ApplicationListener<ApplicationReadyEvent> {
amqpTemplate.convertAndSend(ChatQueueType.IM_GROUP_MESSAGE.getQueueName(), imGroupMessage); amqpTemplate.convertAndSend(ChatQueueType.IM_GROUP_MESSAGE.getQueueName(), imGroupMessage);
continue; continue;
} }
long id = segmentIdGenerator.nextId(LogicTables.IM_MESSAGE);
ImMessage imMessage = new ImMessage() ImMessage imMessage = new ImMessage()
.setId(new Random().nextLong()) .setId(id)
.setSender(10808L) .setSender(10808L)
.setReceiver(180002L) .setReceiver(180002L)
.setFriendId(101010L) .setFriendId(101010L)
.setContent(content) .setContent(content)
.setCreateTime(ImClock.date()); .setCreateTime(ImClock.date());
amqpTemplate.convertAndSend(ChatQueueType.IM_MESSAGE.getQueueName(), imMessage); amqpTemplate.convertAndSend(ChatQueueType.IM_MESSAGE.getQueueName(), imMessage);
} }
} }

14
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImGroupMapper.java

@ -0,0 +1,14 @@
package net.sopod.soim.das.user.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.sopod.soim.das.user.api.model.entity.ImGroup;
/**
* ImGroupMapper
*
* @author tmy
* @date 2022-05-31 9:59
*/
public interface ImGroupMapper extends BaseMapper<ImGroup> {
}

14
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImGroupMessageMapper.java

@ -0,0 +1,14 @@
package net.sopod.soim.das.user.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.sopod.soim.das.user.api.model.entity.ImGroupMessage;
/**
* ImGroupMessageMapper
*
* @author tmy
* @date 2022-05-31 9:59
*/
public interface ImGroupMessageMapper extends BaseMapper<ImGroupMessage> {
}

14
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImMessageMapper.java

@ -0,0 +1,14 @@
package net.sopod.soim.das.user.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.sopod.soim.das.user.api.model.entity.ImMessage;
/**
* ImMessageMapper
*
* @author tmy
* @date 2022-05-31 9:47
*/
public interface ImMessageMapper extends BaseMapper<ImMessage> {
}

17
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/FriendDasImpl.java

@ -54,19 +54,24 @@ public class FriendDasImpl implements FriendDas {
} }
@Override @Override
public Boolean isExists(Long uid, Long fid) { public Long getFriendId(Long uid, Long fid) {
LambdaQueryWrapper<ImFriend> friendQuery = new QueryWrapper<ImFriend>().lambda() LambdaQueryWrapper<ImFriend> friendQuery = new QueryWrapper<ImFriend>().lambda()
.eq(ImFriend::getUid, uid) .eq(ImFriend::getUid, uid)
.eq(ImFriend::getFid, fid) .eq(ImFriend::getFid, fid)
.eq(ImFriend::getStatus, 1); .eq(ImFriend::getStatus, LogicTables.STATUS_NORMAL);
List<ImFriend> imFriends = friendMapper.selectList(friendQuery); List<ImFriend> imFriends = friendMapper.selectList(friendQuery);
if (Collects.isEmpty(imFriends)) { if (Collects.isEmpty(imFriends)) {
return Boolean.FALSE; return null;
} }
if (imFriends.size() > 1) { if (imFriends.size() > 1) {
logger.warn("重复的好友数据: user={}, friend={}", uid, fid); logger.warn("重复的好友数据: user={}, friend={}", uid, fid);
} }
return Boolean.TRUE; return imFriends.get(0).getId();
}
@Override
public Boolean isExists(Long uid, Long fid) {
return getFriendId(uid, fid) != null;
} }
@Override @Override
@ -74,7 +79,7 @@ public class FriendDasImpl implements FriendDas {
LambdaQueryWrapper<ImFriend> friendQuery = new QueryWrapper<ImFriend>().lambda() LambdaQueryWrapper<ImFriend> friendQuery = new QueryWrapper<ImFriend>().lambda()
.eq(ImFriend::getUid, uid) .eq(ImFriend::getUid, uid)
.eq(ImFriend::getFid, fid) .eq(ImFriend::getFid, fid)
.eq(ImFriend::getStatus, 1); .eq(ImFriend::getStatus, LogicTables.STATUS_NORMAL);
return friendMapper.update(new ImFriend().setStatus(0), friendQuery); return friendMapper.update(new ImFriend().setStatus(0), friendQuery);
} }
@ -86,7 +91,7 @@ public class FriendDasImpl implements FriendDas {
} }
LambdaQueryWrapper<ImUser> userQuery = new QueryWrapper<ImUser>().lambda() LambdaQueryWrapper<ImUser> userQuery = new QueryWrapper<ImUser>().lambda()
.in(ImUser::getId, fids) .in(ImUser::getId, fids)
.eq(ImUser::getStatus, LogicConsts.STATUS_NORMAL); .eq(ImUser::getStatus, LogicTables.STATUS_NORMAL);
return userMapper.selectList(userQuery); return userMapper.selectList(userQuery);
} }

5
im-das/im-das-user/src/main/resources/mapper/ImGroupMapper.xml

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.sopod.soim.das.user.dao.ImGroupMapper">
</mapper>

5
im-das/im-das-user/src/main/resources/mapper/ImGroupMessageMapper.xml

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.sopod.soim.das.user.dao.ImGroupMessageMapper">
</mapper>

5
im-das/im-das-user/src/main/resources/mapper/ImMessageMapper.xml

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="net.sopod.soim.das.user.dao.ImMessageMapper">
</mapper>

10
im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/ChatServiceImpl.java

@ -1,6 +1,7 @@
package net.sopod.soim.logic.user.service; package net.sopod.soim.logic.user.service;
import net.sopod.soim.das.user.api.model.entity.ImUser; import net.sopod.soim.das.user.api.model.entity.ImUser;
import net.sopod.soim.das.user.api.service.FriendDas;
import net.sopod.soim.das.user.api.service.UserDas; import net.sopod.soim.das.user.api.service.UserDas;
import net.sopod.soim.logic.api.user.service.ChatService; import net.sopod.soim.logic.api.user.service.ChatService;
import net.sopod.soim.logic.common.model.TextChat; import net.sopod.soim.logic.common.model.TextChat;
@ -26,6 +27,9 @@ public class ChatServiceImpl implements ChatService {
@DubboReference @DubboReference
private UserDas userDas; private UserDas userDas;
@DubboReference
private FriendDas friendDas;
@Override @Override
public Boolean textChat(TextChat textChat) { public Boolean textChat(TextChat textChat) {
if (textChat.getReceiverUid() == null if (textChat.getReceiverUid() == null
@ -36,6 +40,12 @@ public class ChatServiceImpl implements ChatService {
} }
textChat.setReceiverUid(receiverUser.getId()); textChat.setReceiverUid(receiverUser.getId());
} }
// 查询好友关系
Long friendId = friendDas.getFriendId(textChat.getUid(), textChat.getReceiverUid());
// 不是好友
if (friendId == null) {
return false;
}
// 设置调用 router 为消息接受者地址 // 设置调用 router 为消息接受者地址
RpcContextUtil.setContextUid(textChat.getReceiverUid()); RpcContextUtil.setContextUid(textChat.getReceiverUid());
return userRouteService.routeTextChat(textChat); return userRouteService.routeTextChat(textChat);

4
im-service/im-router/pom.xml

@ -88,6 +88,10 @@
<groupId>org.xerial.snappy</groupId> <groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId> <artifactId>snappy-java</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

12
im-service/im-router/src/main/java/net/sopod/soim/router/service/UserRouteServiceImpl.java

@ -9,6 +9,7 @@ import net.sopod.soim.entry.api.service.OnlineUserService;
import net.sopod.soim.entry.api.service.TextChatService; import net.sopod.soim.entry.api.service.TextChatService;
import net.sopod.soim.logic.common.model.TextChat; import net.sopod.soim.logic.common.model.TextChat;
import net.sopod.soim.logic.common.model.UserInfo; import net.sopod.soim.logic.common.model.UserInfo;
import net.sopod.soim.logic.common.util.RpcContextUtil;
import net.sopod.soim.router.api.model.RegistryRes; import net.sopod.soim.router.api.model.RegistryRes;
import net.sopod.soim.router.cache.RouterUser; import net.sopod.soim.router.cache.RouterUser;
import net.sopod.soim.router.api.service.UserRouteService; import net.sopod.soim.router.api.service.UserRouteService;
@ -45,6 +46,7 @@ public class UserRouteServiceImpl implements UserRouteService {
@DubboReference @DubboReference
private OnlineUserService onlineUserService; private OnlineUserService onlineUserService;
@Override @Override
public RegistryRes registryUserEntry(Long uid, String imEntryAddr) { public RegistryRes registryUserEntry(Long uid, String imEntryAddr) {
ImUser imUser = userDas.getUserById(uid); ImUser imUser = userDas.getUserById(uid);
@ -80,16 +82,12 @@ public class UserRouteServiceImpl implements UserRouteService {
*/ */
@Override @Override
public Boolean routeTextChat(TextChat textChat) { public Boolean routeTextChat(TextChat textChat) {
// 本服务实例没有存储接收者用户信息,查询其他服务 // TODO 消息队列存储
// if (receiverImEntryAddr == null) {
// RpcContext.getServiceContext().setAttachment(DubboConstant.CTX_UID, String.valueOf(receiverUid));
// receiverImEntryAddr = onlineUserService.getImEntryAddrByUid(receiverUid);
// logger.info("other im-router service invoke: {}, {}", receiverUid, receiverImEntryAddr);
// }
RpcContextUtil.setContextUid(textChat.getReceiverUid());
Boolean send = textChatService.sendTextChat(textChat); Boolean send = textChatService.sendTextChat(textChat);
if (!Boolean.TRUE.equals(send)) { if (!Boolean.TRUE.equals(send)) {
// 未送到,消息存储,重发... // TODO 未送到,消息存储,重发...
logger.info("消息未送达: {}: {}", textChat.getReceiverName(), textChat.getMessage()); logger.info("消息未送达: {}: {}", textChat.getReceiverName(), textChat.getMessage());
} }
return Boolean.TRUE; return Boolean.TRUE;

Loading…
Cancel
Save