package com.changhu.enums.handler; import cn.dev33.satoken.stp.SaTokenInfo; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.extension.toolkit.Db; import com.changhu.common.annotation.UserType; 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.RsaUtil; import com.changhu.common.utils.UserUtil; import com.changhu.common.utils.ValidatorUtil; import com.changhu.module.management.pojo.entity.ManagementPoliceUnitUser; import com.changhu.module.management.pojo.entity.PoliceUnit; import com.changhu.pojo.params.ManagementPoliceUnitLoginParams; import com.changhu.support.mybatisplus.pojo.entity.BaseEntity; /** * @author 20252 * @createTime 2024/9/2 下午4:52 * @desc ManagementPoliceUnitLogin... */ public class ManagementPoliceUnitLogin extends AbstractLoginHandler { public static final ManagementPoliceUnitLogin instance = new ManagementPoliceUnitLogin(); private ManagementPoliceUnitLogin() { } @Override public TokenInfo login(JSONObject jsonObject) { ManagementPoliceUnitLoginParams managementPoliceUnitLoginParams = jsonObject.to(ManagementPoliceUnitLoginParams.class); ValidatorUtil.manual(managementPoliceUnitLoginParams); String accountOrTelephone = managementPoliceUnitLoginParams.getAccountOrTelephone(); String password = RsaUtil.decrypt(managementPoliceUnitLoginParams.getPassword()); //查看 账号/手机号 是否存在 ManagementPoliceUnitUser managementPoliceUnitUser = Db.lambdaQuery(ManagementPoliceUnitUser.class) .eq(ManagementPoliceUnitUser::getAccount, accountOrTelephone) .or() .eq(ManagementPoliceUnitUser::getTelephone, accountOrTelephone) .oneOpt() .orElseThrow(() -> new MessageException(ResultCode.USER_NOT_FOUND)); //判断用户是否禁用 if (managementPoliceUnitUser.getIsEnable().equals(IsEnable.FALSE)) { throw new MessageException(ResultCode.USER_IS_DISABLE); } //判断单位是否禁用 IsEnable unitEnable = Db.lambdaQuery(PoliceUnit.class) .eq(BaseEntity::getSnowFlakeId, managementPoliceUnitUser.getPoliceUnitId()) .oneOpt() .map(PoliceUnit::getIsEnable) .orElseThrow(() -> new MessageException("单位不存在")); if (unitEnable.equals(IsEnable.FALSE)) { throw new MessageException("单位被禁用"); } //判断密码是否正确 if (!UserUtil.verifyPassWord(password, managementPoliceUnitUser.getSalt(), managementPoliceUnitUser.getPassword())) { throw new MessageException(ResultCode.PASSWORD_ERROR); } //登录 SaTokenInfo saTokenInfo = UserUtil.loginAndTokenInfo( managementPoliceUnitUser.getSnowFlakeId(), UserType.MANAGEMENT_POLICE, managementPoliceUnitUser.getPoliceUnitId() ); //返回token return new TokenInfo(saTokenInfo.getTokenName(), saTokenInfo.getTokenValue()); } }