66 lines
2.4 KiB
Java
66 lines
2.4 KiB
Java
|
package com.changhu.enums.handler;
|
||
|
|
||
|
import cn.binarywang.wx.miniapp.api.WxMaService;
|
||
|
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
|
||
|
import cn.dev33.satoken.stp.SaTokenInfo;
|
||
|
import cn.hutool.extra.spring.SpringUtil;
|
||
|
import com.alibaba.fastjson2.JSONObject;
|
||
|
import com.baomidou.mybatisplus.extension.toolkit.Db;
|
||
|
import com.changhu.common.annotation.UserType;
|
||
|
import com.changhu.common.enums.ResultCode;
|
||
|
import com.changhu.common.exception.MessageException;
|
||
|
import com.changhu.common.pojo.vo.TokenInfo;
|
||
|
import com.changhu.common.utils.UserUtil;
|
||
|
import com.changhu.common.utils.ValidatorUtil;
|
||
|
import com.changhu.module.miniProgram.pojo.entity.MiniProgramUser;
|
||
|
import com.changhu.pojo.params.MiniProgramUserLoginParams;
|
||
|
import me.chanjar.weixin.common.error.WxErrorException;
|
||
|
|
||
|
/**
|
||
|
* @author 20252
|
||
|
* @createTime 2024/9/10 上午10:00
|
||
|
* @desc MiniProgramUserLogin...
|
||
|
*/
|
||
|
public class MiniProgramUserLogin extends AbstractLoginHandler {
|
||
|
|
||
|
public static final MiniProgramUserLogin instance = new MiniProgramUserLogin();
|
||
|
|
||
|
private MiniProgramUserLogin() {
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public TokenInfo login(JSONObject jsonObject) {
|
||
|
MiniProgramUserLoginParams loginParams = jsonObject.to(MiniProgramUserLoginParams.class);
|
||
|
ValidatorUtil.manual(loginParams);
|
||
|
String code = loginParams.getCode();
|
||
|
|
||
|
String openId;
|
||
|
final WxMaService wxMaService = SpringUtil.getBean(WxMaService.class);
|
||
|
|
||
|
try {
|
||
|
WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(code);
|
||
|
openId = sessionInfo.getOpenid();
|
||
|
} catch (WxErrorException e) {
|
||
|
throw new MessageException(e.getMessage());
|
||
|
}
|
||
|
|
||
|
MiniProgramUser miniProgramUser = Db.lambdaQuery(MiniProgramUser.class)
|
||
|
.eq(MiniProgramUser::getOpenId, openId)
|
||
|
.oneOpt()
|
||
|
.orElseThrow(() -> new MessageException(ResultCode.USER_NOT_FOUND));
|
||
|
|
||
|
UserType userType = switch (miniProgramUser.getIdentity()) {
|
||
|
case POLICE -> UserType.MINI_PROGRAM_POLICE;
|
||
|
case PROJECT_MANAGER -> UserType.MINI_PROGRAM_PROJECT_MANAGE;
|
||
|
};
|
||
|
|
||
|
//登录
|
||
|
SaTokenInfo saTokenInfo = UserUtil.loginAndTokenInfo(
|
||
|
miniProgramUser.getSnowFlakeId(),
|
||
|
userType,
|
||
|
miniProgramUser.getUnitId());
|
||
|
//返回token
|
||
|
return new TokenInfo(saTokenInfo.getTokenName(), saTokenInfo.getTokenValue());
|
||
|
}
|
||
|
}
|