package com.ruoyi.common.securityContext;

import com.ruoyi.common.exception.ServiceException;
import org.apache.commons.lang3.ObjectUtils;

/**
 * 线程变量，保存超算用户信息
 */
public class CsOrderMemberUserSecurityContext {

    public static ThreadLocal<CsOrderMemberUser> securityHolder = ThreadLocal.withInitial(() -> null);

    /**
     * 设置线程变量超算用户信息
     * @param csUserInfo 超算用户信息
     */
    public static void set(CsOrderMemberUser csUserInfo) {
        securityHolder.set(csUserInfo);
    }

    /**
     * 获取线程变量超算用户信息
     */
    public static CsOrderMemberUser get() {
        return getWithCheck();
    }

    /**
     * 获取线程变量超算用户信息-校验
     */
    public static CsOrderMemberUser getWithCheck() {
        CsOrderMemberUser userInfo = securityHolder.get();
        if (ObjectUtils.isEmpty(userInfo)){
            throw new ServiceException("登陆失效，请重新登录。", 403);
        }else {
            return userInfo;
        }
    }

    /**
     * 清除线程变量超算用户信息
     */
    public static void clear() {
        securityHolder.remove();
    }

    /**
     * 获取超算用户ID
     * @return 结果
     */
    public static String getMemberUserId(){
        return get().getMemberUserId();
    }

    /**
     * 获取超算用户名称
     * @return 结果
     */
    public static String getName(){
        return get().getName();
    }

    /**
     * 获取超算用户手机号
     * @return 结果
     */
    public static String getPhone(){
        return get().getPhone();
    }

    /**
     * 获取超算用户邮箱
     * @return 结果
     */
    public static String getEmail(){
        return get().getEmail();
    }

    /**
     * 获取超算用户工作单位ID
     * @return 结果
     */
    public static Long getCompanyId(){
        return get().getCompanyId();
    }

    /**
     * 获取超算用户部门/院系ID
     * @return 结果
     */
    public static Long getDeptId(){
        return get().getDeptId();
    }
}
