package com.yeejoin.amos.boot.module.common.api.core.framework;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.common.api.dto.UserDto;
import com.yeejoin.amos.boot.module.common.api.exception.PermissionException;
import com.yeejoin.amos.boot.module.common.api.service.IOrgUsrService;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ResponseBody;
import org.typroject.tyboot.core.foundation.context.RequestContext;

/**
 * @author DELL
 */
@Aspect
@Component
@ResponseBody
@Order(value = 1)
public class PersonIdentifyAspect {

    @Autowired
    RedisUtils redisUtils;
    @Autowired
    private IOrgUsrService orgUsrService;
    @Value("${logic}")
    Boolean logic;

    @Before(value = "@annotation(com.yeejoin.amos.boot.module.common.api.core.framework.PersonIdentify) && @annotation(permission)")
    public void personIdentity(JoinPoint joinPoint, PersonIdentify permission) throws PermissionException {
        ReginParams reginParam = JSON.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
        if (permission.isNeedIdentity() && reginParam != null) {
            String userId = reginParam.getUserModel().getUserId();
            UserDto userDto = orgUsrService.getUserParentInfo(userId);
            ReginParams.PersonIdentity personIdentity = new ReginParams.PersonIdentity();
            // TODO 没有绑定机场单位的人员，则赋值不存在的bizOrgCode,规避查询出所有数据
            personIdentity.setCompanyId(userDto.getCompanyId());
            personIdentity.setCompanyName(userDto.getCompanyName());
            personIdentity.setPersonSeq(userDto.getPersonSeq());
            personIdentity.setPersonName(userDto.getPersonName());
            personIdentity.setIdentityType(userDto.getIdentityType());
            //电力默认走公司权限
             if (!logic){
                 personIdentity.setBizOrgCode(StringUtils.isEmpty(userDto.getCompanyBizOrgCode()) ? "-1" : userDto.getCompanyBizOrgCode());
             }else{
                 personIdentity.setBizOrgCode(StringUtils.isEmpty(userDto.getBizOrgCode()) ? "-1" : userDto.getBizOrgCode());
             }

            personIdentity.setCompanyBizOrgCode(userDto.getCompanyBizOrgCode());
            reginParam.setPersonIdentity(personIdentity);
            redisUtils.set(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken()), JSON.toJSONString(reginParam));
        }
    }

}
