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接口和实现类
RecommendUserApi
和RecommendUserApiImpl
编写查询用户缘分值方法
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. }