LoginServiceImpl.java 2.08 KB
package com.infoloop.tianting.service.impl;

import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.infoloop.tianting.clientcustomerservice.GetClientCustomerByIdRpcRequest;
import com.infoloop.tianting.clientcustomerservice.SingleClientCustomerRpcResponse;
import com.infoloop.tianting.constant.CommonConstants;
import com.infoloop.tianting.exception.ClientEndExceptions;
import com.infoloop.tianting.exception.ErrorCodeEnum;
import com.infoloop.tianting.model.dto.PermissionDTO.LoginDto;
import com.infoloop.tianting.service.ClientCustomerService;
import com.infoloop.tianting.service.LoginService;
import com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class LoginServiceImpl implements LoginService {

  private final ClientCustomerServiceRpcClient clientCustomerServiceRpcClient;

  @Override
  public SaTokenInfo login(LoginDto loginDto) {
    if (loginDto.isShouldLoginWithOpenId()) {
      return StpUtil.getTokenInfo();
    }
    else {
      final SingleClientCustomerRpcResponse customer;
      if (loginDto.isShouldLoginWithHisCustomerId()){
        customer = clientCustomerServiceRpcClient.getClientCustomerByHISCustomerId(loginDto.getHisCustomerId()).getResponse();
      } else {
        customer = clientCustomerServiceRpcClient.getClientCustomerById(loginDto.getCustomerId()).getResponse();
      }

      if (customer.getId() == 0) {
        throw ClientEndExceptions.AuthenticationFailure.build(ErrorCodeEnum.UNAUTHORIZED.name());
      }
      StpUtil.login(customer.getId(), SaLoginModel.create()
          .setExtra(CommonConstants.ENTERPRISE_ID, customer.getEnterpriseId())
          .setExtra(CommonConstants.LOGIN_SOURCE, loginDto.getLoginSourceEnum().getValue())
          .build());
      return StpUtil.getTokenInfo();
    }
    }

}