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

82 lines
3.0 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.core.lang.Dict;
import cn.hutool.core.lang.func.LambdaUtil;
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.db.enums.CheckStatus;
import com.changhu.common.db.enums.IsEnable;
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));
if (CheckStatus.unChecked.equals(miniProgramUser.getCheckStatus())) {
throw new MessageException("该账号还未审核");
}
if (IsEnable.FALSE.equals(miniProgramUser.getIsEnable())) {
throw new MessageException(ResultCode.USER_IS_DISABLE);
}
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(),
Dict.of(LambdaUtil.getFieldName(MiniProgramUser::getIdentity), miniProgramUser.getIdentity())
);
}
}