AdminAuthServiceImpl.java 3.02 KB
package com.diligrp.rider.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.diligrp.rider.common.exception.BizException;
import com.diligrp.rider.config.JwtUtil;
import com.diligrp.rider.dto.AdminLoginDTO;
import com.diligrp.rider.entity.AdminUser;
import com.diligrp.rider.entity.Substation;
import com.diligrp.rider.mapper.AdminUserMapper;
import com.diligrp.rider.mapper.SubstationMapper;
import com.diligrp.rider.vo.AdminLoginVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.nio.charset.StandardCharsets;

@Service
@RequiredArgsConstructor
public class AdminAuthServiceImpl {

    private final AdminUserMapper adminUserMapper;
    private final SubstationMapper substationMapper;
    private final JwtUtil jwtUtil;

    /**
     * 统一登录入口
     * role=admin:超级管理员登录(admin_user表)
     * role=substation:分站管理员登录(substation表)
     */
    public AdminLoginVO login(AdminLoginDTO dto) {
        if ("admin".equals(dto.getRole())) {
            return loginAdmin(dto.getAccount(), dto.getPass());
        }
        return loginSubstation(dto.getAccount(), dto.getPass());
    }

    private AdminLoginVO loginAdmin(String account, String pass) {
        AdminUser user = adminUserMapper.selectOne(new LambdaQueryWrapper<AdminUser>()
                .eq(AdminUser::getUserLogin, account).last("LIMIT 1"));
        if (user == null) throw new BizException("账号不存在");
        if (!encryptPass(pass).equals(user.getUserPass())) throw new BizException("密码错误");
        if (user.getUserStatus() == null || user.getUserStatus() == 0) throw new BizException("账号已被禁用");

        AdminLoginVO vo = new AdminLoginVO();
        vo.setId(user.getId());
        vo.setUserLogin(user.getUserLogin());
        vo.setUserNickname(user.getUserNickname());
        vo.setRole("admin");
        vo.setToken(jwtUtil.generateAdminToken(user.getId(), "admin"));
        return vo;
    }

    private AdminLoginVO loginSubstation(String account, String pass) {
        Substation sub = substationMapper.selectOne(new LambdaQueryWrapper<Substation>()
                .eq(Substation::getUserLogin, account).last("LIMIT 1"));
        if (sub == null) throw new BizException("账号不存在");
        if (!encryptPass(pass).equals(sub.getUserPass())) throw new BizException("密码错误");
        if (sub.getUserStatus() == null || sub.getUserStatus() == 0) throw new BizException("账号已被禁用");

        AdminLoginVO vo = new AdminLoginVO();
        vo.setId(sub.getId());
        vo.setUserLogin(sub.getUserLogin());
        vo.setUserNickname(sub.getUserNickname());
        vo.setRole("substation");
        vo.setCityId(sub.getCityId());
        vo.setToken(jwtUtil.generateAdminToken(sub.getId(), "substation"));
        return vo;
    }

    private String encryptPass(String pass) {
        return DigestUtils.md5DigestAsHex(pass.getBytes(StandardCharsets.UTF_8));
    }
}