123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package org.springblade.modules.auth.granter;
- import com.alibaba.fastjson.JSONObject;
- import lombok.AllArgsConstructor;
- import org.springblade.common.cache.CacheNames;
- import org.springblade.common.cache.ParamCache;
- import org.springblade.common.enums.YesOrNoEnum;
- import org.springblade.core.log.exception.ServiceException;
- import org.springblade.core.redis.cache.BladeRedis;
- import org.springblade.core.tool.utils.Func;
- import org.springblade.modules.auth.enums.UserEnum;
- import org.springblade.modules.auth.provider.ITokenGranter;
- import org.springblade.modules.auth.provider.TokenParameter;
- import org.springblade.modules.auth.utils.TokenUtil;
- import org.springblade.modules.platform.service.UserAppService;
- import org.springblade.modules.system.entity.User;
- import org.springblade.modules.system.entity.UserApp;
- import org.springblade.modules.system.entity.UserInfo;
- import org.springblade.modules.system.entity.UserWeChat;
- import org.springblade.modules.system.service.IUserService;
- import org.springblade.modules.system.service.IUserWeChatService;
- import org.springframework.stereotype.Component;
- import javax.annotation.Resource;
- import java.math.BigDecimal;
- import java.time.Duration;
- import java.util.Objects;
- /**
- * Author pangqijun
- * Date 2022/11/21
- * Description 微信TokenGranter
- */
- @Component
- @AllArgsConstructor
- public class WeChatTokenGranter implements ITokenGranter {
- public static final String GRANT_TYPE = "wxAuth";
- public static final Integer FAIL_COUNT = 5;
- public static final String FAIL_COUNT_VALUE = "account.failCount";
- private final IUserService userService;
- private final IUserWeChatService userWeChatService;
- private final BladeRedis bladeRedis;
- @Resource
- private UserAppService userAppService;
- @Override
- public UserInfo grant(TokenParameter tokenParameter) {
- String tenantId = tokenParameter.getArgs().getStr("tenantId");
- String getPhoneNumberCode = tokenParameter.getArgs().getStr("getPhoneNumberCode");
- String code = tokenParameter.getArgs().getStr("code");
- // 获取用户手机号
- String phoneNumber = null;
- if (Objects.nonNull(getPhoneNumberCode)){
- phoneNumber = userWeChatService.getPhoneNumber(getPhoneNumberCode);
- }
- // 获取openId
- JSONObject jsonObject = userWeChatService.getopenId(code);
- String openId = jsonObject.getString("openid");
- String unionId = jsonObject.getString("unionid");
- User user = new User();
- UserWeChat userWeChat = userWeChatService.lambdaQuery().eq(UserWeChat::getOpenId, openId).one();
- if (userWeChat == null){
- if (Objects.isNull(getPhoneNumberCode)){
- throw new ServiceException("该用户没有注册!");
- }
- // User byAccount = userService.getByAccount(phoneNumber);
- User byAccount = userService.getByAccountAndType(phoneNumber,UserEnum.APP.getCategory());
- if (Objects.nonNull(byAccount)){
- throw new ServiceException("您提供的手机号已注册,请更换手机号!");
- }
- //注册用户
- user.setName("微信用户");
- user.setAccount(phoneNumber);
- user.setPhone(phoneNumber);
- user.setRealName("用户" + phoneNumber.substring(7));
- user.setSex(1);
- user.setUserType(UserEnum.APP.getCategory());//app
- userService.save(user);
- UserApp userApp = new UserApp();
- userApp.setUserId(user.getId());
- userApp.setState(YesOrNoEnum.YES.getValue());
- userApp.setNowMoney(new BigDecimal(0));
- userApp.setLivingHall(YesOrNoEnum.NO.getValue());
- userApp.setIsStore(YesOrNoEnum.NO.getValue());
- userAppService.save(userApp);
- userWeChat = new UserWeChat();
- userWeChat.setOpenId(openId);
- userWeChat.setUnionId(unionId);
- userWeChat.setUserId(user.getId());
- }
- user = userService.getById(userWeChat.getUserId());
- userWeChat.setSessionKey(jsonObject.getString("session_key"));
- userWeChatService.saveOrUpdate(userWeChat);
- UserInfo userInfo = userService.userInfo(user.getId(), UserEnum.APP);
- userInfo.setOpenId(openId);
- return userInfo;
- }
- }
|