policeSecurity/policeSecurityServer/src/main/java/com/changhu/enums/handler/MiniProgramUserLogin.java

66 lines
2.4 KiB
Java
Raw Normal View History

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());
}
}