package com.fzzy.gateway.sc2023.service; import com.fzzy.api.data.AuthToken; import com.fzzy.api.data.PushProtocol; import com.fzzy.api.entity.ApiLog; import com.fzzy.api.utils.ContextUtil; import com.fzzy.api.utils.RedisConst; import com.fzzy.api.utils.RedisUtil; import com.fzzy.api.view.repository.ApiLogRep; import com.fzzy.gateway.api.GatewayRemoteService; import com.fzzy.gateway.data.GatewayResponse; import com.fzzy.gateway.entity.GatewayConf; import com.fzzy.gateway.sc2023.ScConstant; import com.fzzy.push.gb2022.HttpClientUtil; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; @Slf4j @Data @Service public class ScGatewayRemoteServiceImpl implements GatewayRemoteService { @Resource private ApiLogRep apiLogRep; @Resource private RedisUtil redisUtil; @Override public String getProtocol() { return PushProtocol.GATEWAY_SC_2023.getCode(); } @Override public GatewayResponse authorize(GatewayConf conf) { //添加LOG ApiLog apiLog = new ApiLog(); apiLog.setData("鉴权接口"); apiLog.setId(ContextUtil.getUUID()); apiLog.setKqdm(conf.getKqdm()); try { Map map = new HashMap<>(); map.put("username", conf.getUserName()); map.put("username", conf.getPassword()); log.debug("-----------------数据报文----------------{}", map); String url = conf.getApiUrl() + ScConstant.API_URL_AUTH; GatewayResponse responseDto = HttpClientUtil.pushGateway(url, map); apiLog.setStatus(responseDto.getStatus()); apiLog.setResult(responseDto.getMessage()); apiLogRep.save(apiLog); updateAuthToken(responseDto, conf); return responseDto; } catch (Exception e) { apiLog.setStatus(99); apiLog.setResult("失败:" + e.getMessage()); apiLogRep.save(apiLog); log.error(e.getMessage(), e); return new GatewayResponse(99, e.getMessage()); } } /** * @param kqdm * @return */ public AuthToken getAuthToken(String kqdm) { try { String key = RedisConst.buildKey(RedisConst.KYE_TOKEN, kqdm); AuthToken token = (AuthToken) redisUtil.get(key); if (null == token) { log.error("------------------未获取到TOKEN---------------"); return null; } return token; } catch (Exception e) { log.error(e.getMessage(), e); return null; } } private void updateAuthToken(GatewayResponse dto, GatewayConf conf) { String key = RedisConst.buildKey(RedisConst.KYE_TOKEN, conf.getKqdm()); AuthToken token = getAuthToken(conf.getKqdm()); if (null == token) { token = new AuthToken(); token.setKqdm(conf.getKqdm()); } if (null != dto.getResult()) { token.setToken(dto.getResult().getToken()); } redisUtil.set(key, token); } }