| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package top.husj.husj_wx.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import jakarta.annotation.PostConstruct;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.catalina.core.ApplicationContext;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Lazy;
- import org.springframework.stereotype.Service;
- import org.springframework.web.client.RestTemplate;
- import top.husj.husj_wx.dao.UserMapper;
- import top.husj.husj_wx.entity.model.User;
- import top.husj.husj_wx.service.UserService;
- import top.husj.husj_wx.utils.AccessTokenUtil;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Set;
- import java.util.stream.Collectors;
- @Service
- @Slf4j
- public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService{
- @Autowired
- private RestTemplate restTemplate;
- @Autowired
- @Lazy
- private UserService proxy;
- @Override
- public List<User> listByOpenIds(List<String> openIds) {
- return lambdaQuery().in(User::getOpenId, openIds).list();
- }
- @Override
- public void saveByOpenIds(List<String> openIds) {
- if (openIds.isEmpty())
- return;
- List<User> users = listByOpenIds(openIds);
- Set<String> dbOpenIdSet = users.stream().map(User::getOpenId).collect(Collectors.toSet());
- if (users.size() < openIds.size()) {
- ArrayList<User> userList = new ArrayList<>();
- openIds.stream().filter(e -> !dbOpenIdSet.contains(e)).forEach(openId -> {
- User user = getUserByOpenId(openId, false);
- if (user != null) {
- userList.add(user);
- }
- });
- proxy.saveBatch(userList);
- }
- }
- @Override
- public User getUserByOpenId(String openId, Boolean searchDb) {
- User user = null;
- if (searchDb) {
- user = lambdaQuery().eq(User::getOpenId, openId).one();
- }
- if (user != null)
- return user;
- log.info("用户不存在,正在从微信服务器获取用户信息...");
- String url = String.format("https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s&lang=zh_CN",
- AccessTokenUtil.getAccessToken(), openId);
- String response = restTemplate.getForObject(url, String.class);
- if (response == null)
- return null;
- JSONObject jsonObject = JSONObject.parseObject(response);
- String name = jsonObject.getString("nickname");
- user = new User();
- user.setOpenId(openId);
- user.setName(name);
- return user;
- }
- @Override
- public IPage<User> searchUsers(int page, int size, String name) {
- com.baomidou.mybatisplus.extension.plugins.pagination.Page<User> pageParam =
- new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page, size);
-
- if (name != null && !name.trim().isEmpty()) {
- return lambdaQuery()
- .like(User::getName, name.trim())
- .page(pageParam);
- } else {
- return lambdaQuery().page(pageParam);
- }
- }
- }
|