UserServiceImpl.java 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package top.husj.husj_wx.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import jakarta.annotation.PostConstruct;
  6. import lombok.RequiredArgsConstructor;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.apache.catalina.core.ApplicationContext;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.context.annotation.Lazy;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.web.client.RestTemplate;
  13. import top.husj.husj_wx.dao.UserMapper;
  14. import top.husj.husj_wx.entity.model.User;
  15. import top.husj.husj_wx.service.UserService;
  16. import top.husj.husj_wx.utils.AccessTokenUtil;
  17. import java.util.ArrayList;
  18. import java.util.List;
  19. import java.util.Set;
  20. import java.util.stream.Collectors;
  21. @Service
  22. @Slf4j
  23. public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService{
  24. @Autowired
  25. private RestTemplate restTemplate;
  26. @Autowired
  27. @Lazy
  28. private UserService proxy;
  29. @Override
  30. public List<User> listByOpenIds(List<String> openIds) {
  31. return lambdaQuery().in(User::getOpenId, openIds).list();
  32. }
  33. @Override
  34. public void saveByOpenIds(List<String> openIds) {
  35. if (openIds.isEmpty())
  36. return;
  37. List<User> users = listByOpenIds(openIds);
  38. Set<String> dbOpenIdSet = users.stream().map(User::getOpenId).collect(Collectors.toSet());
  39. if (users.size() < openIds.size()) {
  40. ArrayList<User> userList = new ArrayList<>();
  41. openIds.stream().filter(e -> !dbOpenIdSet.contains(e)).forEach(openId -> {
  42. User user = getUserByOpenId(openId, false);
  43. if (user != null) {
  44. userList.add(user);
  45. }
  46. });
  47. proxy.saveBatch(userList);
  48. }
  49. }
  50. @Override
  51. public User getUserByOpenId(String openId, Boolean searchDb) {
  52. User user = null;
  53. if (searchDb) {
  54. user = lambdaQuery().eq(User::getOpenId, openId).one();
  55. }
  56. if (user != null)
  57. return user;
  58. log.info("用户不存在,正在从微信服务器获取用户信息...");
  59. String url = String.format("https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s&lang=zh_CN",
  60. AccessTokenUtil.getAccessToken(), openId);
  61. String response = restTemplate.getForObject(url, String.class);
  62. if (response == null)
  63. return null;
  64. JSONObject jsonObject = JSONObject.parseObject(response);
  65. String name = jsonObject.getString("nickname");
  66. user = new User();
  67. user.setOpenId(openId);
  68. user.setName(name);
  69. return user;
  70. }
  71. @Override
  72. public IPage<User> searchUsers(int page, int size, String name) {
  73. com.baomidou.mybatisplus.extension.plugins.pagination.Page<User> pageParam =
  74. new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page, size);
  75. if (name != null && !name.trim().isEmpty()) {
  76. return lambdaQuery()
  77. .like(User::getName, name.trim())
  78. .page(pageParam);
  79. } else {
  80. return lambdaQuery().page(pageParam);
  81. }
  82. }
  83. }