【探花交友】day06—即时通信(三)

简介: 【探花交友】day06—即时通信(三)

4.3、环信用户ID查询用户信息

在好友聊天时,完全基于环信服务器实现。为了更好的页面效果,需要展示出用户的基本信息,这是需要通过环信用户id查询用户。

MessagesController

1. @RestController
2. @RequestMapping("/messages")
3. public class MessagesController {
4. 
5. @Autowired
6. private MessagesService messagesService;
7. 
8. @GetMapping("/userinfo")
9. public ResponseEntity userinfo(String huanxinId) {
10. UserInfoVo vo = messagesService.findUserInfoByHuanxin(huanxinId);
11. return ResponseEntity.ok(vo);
12.     }
13. }

MessagesService

1. @Service
2. public class MessagesService {
3. 
4. @DubboReference
5. private UserApi userApi;
6. 
7. @DubboReference
8. private UserInfoApi userInfoApi;
9. 
10. @DubboReference
11. private FriendApi friendApi;
12. 
13. @Autowired
14. private HuanXinTemplate huanXinTemplate;
15. 
16. /**
17.      * 根据环信id查询用户详情
18.      */
19. public UserInfoVo findUserInfoByHuanxin(String huanxinId) {
20. //1、根据环信id查询用户
21. User user = userApi.findByHuanxin(huanxinId);
22. //2、根据用户id查询用户详情
23. UserInfo userInfo = userInfoApi.findById(user.getId());
24. UserInfoVo vo = new UserInfoVo();
25.         BeanUtils.copyProperties(userInfo,vo); //copy同名同类型的属性
26. if(userInfo.getAge() != null) {
27.             vo.setAge(userInfo.getAge().toString());
28.         }
29. return vo;
30.     }
31. }

4.4、发送消息给客户端

目前已经完成了用户体系的对接,下面我们进行测试发送消息,场景是这样的:

点击“聊一下”,就会给对方发送一条陌生人信息,这个消息由系统发送完成。

我们暂时通过环信的控制台进行发送:

消息内容:

{"userId":106,"huanXinId":"hx106","nickname":"黑马小妹","strangerQuestion":"你喜欢去看蔚蓝的大海还是去爬巍峨的高山?","reply":"我喜欢秋天的落叶,夏天的泉水,冬天的雪地,只要有你一切皆可~"}

可以看到已经接收到了消息。

4.5、数据处理

针对新注册用户已经可以同步到环信服务器,而老数据需要程序员手动处理。

注意:使用测试账号最多支持100个用户

1. @Test
2. public void register() {
3. for (int i = 1; i < 106; i++) {
4. User user = userApi.findById(Long.valueOf(i));
5. if(user != null) {
6. Boolean create = template.createUser("hx" + user.getId(), Constants.INIT_PASSWORD);
7. if (create){
8.                     user.setHxUser("hx" + user.getId());
9.                     user.setHxPassword(Constants.INIT_PASSWORD);
10.                     userApi.update(user);
11.                 }
12.             }
13.         }
14.     }

5、联系人管理

涵盖了系统业务:

  • 查看感兴趣的用户,点击“聊一下”,查看陌生人问题
  • 回答陌生人问题,会给感兴趣的用户发送一条消息(发送的添加好友的请求)
  • 对方获取一条消息(服务端发送)
  • 对方查看消息:如果两个投缘(点击聊一下,双方加为好友)
  • 将好友关系记录到探花的MongoDB数据库中
  • 将好友关系记录到环信
  • 成为好友后,可以查看好友列表
  • 对目标好友发送消息(和服务端无关)

5.1、查看用户详情

在首页可以查看感兴趣人的详细资料。点击“聊一下”,可以查看对方的问题

5.1.1、mock接口

地址:http://192.168.136.160:3000/project/19/interface/api/103

5.1.2、TanhuaController

1. /**
2.  * 查看佳人详情
3.  */
4. @GetMapping("/{id}/personalInfo")
5. public ResponseEntity personalInfo(@PathVariable("id") Long userId) {
6. TodayBest best = tanhuaService.personalInfo(userId);
7. return ResponseEntity.ok(best);
8. }

5.1.3、TanhuaService

1. //查看佳人详情
2. public TodayBest personalInfo(Long userId) {
3. //1、根据用户id查询,用户详情
4. UserInfo userInfo = userInfoApi.findById(userId);
5. //2、根据操作人id和查看的用户id,查询两者的推荐数据
6. RecommendUser user = recommendUserApi.queryByUserId(userId,UserHolder.getUserId());
7. //3、构造返回值
8. return TodayBest.init(userInfo,user);
9. }

5.1.4、API接口和实现类

RecommendUserApiRecommendUserApiImpl编写查询用户缘分值方法

1. @Override
2. public RecommendUser queryByUserId(Long userId, Long toUserId) {
3. Criteria criteria = Criteria.where("toUserId").is(toUserId).and("userId").is(userId);
4. Query query = Query.query(criteria);
5. RecommendUser user = mongoTemplate.findOne(query, RecommendUser.class);
6. if(user == null) {
7.         user = new RecommendUser();
8.         user.setUserId(userId);
9.         user.setToUserId(toUserId);
10. //构建缘分值
11.         user.setScore(95d);
12.     }
13. return user;
14. }

5.2、查看陌生人消息

点击“聊一下”,可以查看对方的问题

5.2.1、mock接口

地址:http://192.168.136.160:3000/project/19/interface/api/124

5.2.2、TanhuaController

1. /**
2.  * 查看陌生人问题
3.  */
4. @GetMapping("/strangerQuestions")
5. public ResponseEntity strangerQuestions(Long userId) {
6. String questions = tanhuaService.strangerQuestions(userId);
7. return ResponseEntity.ok(questions);
8. }

5.2.3、TanhuaService

1. //查看陌生人问题
2. public String strangerQuestions(Long userId) {
3. Question question = questionApi.findByUserId(userId);
4. return question == null ? "你喜欢java编程吗?" : question.getTxt();
5. }
相关文章
|
人工智能 测试技术 API
【探花交友】day02—完善个人信息(二)
【探花交友】day02—完善个人信息(二)
231 0
|
存储 前端开发 API
【探花交友】day02—完善个人信息(三)
【探花交友】day02—完善个人信息(三)
120 0
|
运维 算法 安全
相亲交友/婚恋交友/红娘相亲/社交软件/语音视频聊天平台系统开发指南详细丨源码版
系统设计:设计系统的数据库结构、用户界面、算法等。需要考虑用户友好性、安全性和灵活性。
|
Dubbo NoSQL 应用服务中间件
【探花交友】day06—即时通信(四)
【探花交友】day06—即时通信(四)
181 0
|
JSON 测试技术 API
【探花交友】day06—即时通信(二)
【探花交友】day06—即时通信(二)
118 0
|
消息中间件 NoSQL 前端开发
【探花交友】day06—即时通信(一)
【探花交友】day06—即时通信
180 0
|
NoSQL API Redis
【探花交友】day05—圈子互动(下)
【探花交友】day05—圈子互动(下)
136 0
|
存储 NoSQL 搜索推荐
【探花交友】day05—圈子互动(上)
【探花交友】day05—圈子互动
119 0
|
存储 NoSQL API
【探花交友】day04—圈子功能实现(二)
【探花交友】day04—圈子功能实现(二)
142 0
|
存储 SQL 缓存
【探花交友】day04—圈子功能实现(一)
【探花交友】day04—圈子功能实现
122 0