package com.fzzy.gateway.hx2023.service; import com.alibaba.fastjson2.JSONObject; import com.fzzy.api.data.PushProtocol; import com.fzzy.api.view.repository.ApiLogRep; import com.fzzy.gateway.api.GatewayRemoteService; import com.fzzy.gateway.data.BaseResp; import com.fzzy.gateway.entity.GatewayConf; import com.fzzy.gateway.hx2023.data.CloudResp; import com.fzzy.gateway.hx2023.util.OpenApiSignatureUtils; import com.fzzy.gateway.service.GatewayConfService; import com.fzzy.gateway.util.GatewayHttpUtil; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; @Slf4j @Data @Component public class HxGatewayRemoteServiceImpl2 implements GatewayRemoteService { String charset = "utf-8"; @Resource private ApiLogRep apiLogRep; @Resource private GatewayConfService gatewayConfService; @Override public String getProtocol() { //return PushProtocol.GATEWAY_SC_2023.getCode(); return "GATEWAY_SC_2023-暂停使用"; } @Override public void init(GatewayConf gatewayConf) { try { if (StringUtils.isEmpty(gatewayConf.getApiUrl())) { return; } //获取公私钥接口 Map params = new HashMap<>(); params.put("appId", gatewayConf.getGatewayId()); String url = gatewayConf.getApiUrl() + "reserver/api/key/apply"; String jsonStr = GatewayHttpUtil.doGet(url, params); log.info("---获取公私钥接口-返回---{}", jsonStr); CloudResp respKey = JSONObject.parseObject(jsonStr, CloudResp.class); if (BaseResp.CODE_200 == respKey.getCode()) { JSONObject object = respKey.getData(); String pubKey = (String) object.get("pubKey"); String priKey = (String) object.get("priKey"); gatewayConf.setPublicKey(pubKey); gatewayConf.setPrivateKey(priKey); } //获取 AccessToken 接口 String sign = getSign(params, gatewayConf); params.put("sign", sign); url = gatewayConf.getApiUrl() + "reserver/api/token/apply"; jsonStr = GatewayHttpUtil.doGet(url, params); log.info("---获取AccessToken接口-返回---{}", jsonStr); CloudResp respToken = JSONObject.parseObject(jsonStr, CloudResp.class); if (BaseResp.CODE_200 == respToken.getCode()) { JSONObject object = respKey.getData(); if (null != object) { String token = (String) object.get("token"); gatewayConf.setAccessToken(token); } } //更新缓存 updateAuthToken(gatewayConf); } catch (Exception e) { log.error("------初始化失败-----{}", e); } } @Override public void heartbeat(GatewayConf gatewayConf) { log.info("------------定时心跳执行---------{}", gatewayConf.getKqmc()); try { if (StringUtils.isEmpty(gatewayConf.getApiUrl())) { return; } gatewayConf = getCacheConf(gatewayConf.getKqdm()); //网关心跳接口 Map params = new HashMap<>(); params.put("token", gatewayConf.getAccessToken()); params.put("gatewayId", gatewayConf.getGatewayId()); params.put("gatewayIp", gatewayConf.getGatewayIp()); params.put("gatewayMac", gatewayConf.getGatewayMac()); params.put("heartbeat", "1"); params.put("timestamp", System.currentTimeMillis() + ""); //获取签名信息 String sign = getSign(params, gatewayConf); params.put("sign", sign); String url = gatewayConf.getApiUrl() + "reserver/api/iot/equipment/heartbeat"; String jsonStr = GatewayHttpUtil.doGet(url, params); log.info("---网关心跳接口-返回---{}", jsonStr); } catch (Exception e) { log.error("------网关心跳接口--执行失败-----{}", e); } } @Override public void pushInfo(GatewayConf gatewayConf) { try { if (StringUtils.isEmpty(gatewayConf.getApiUrl())) { return; } gatewayConf = getCacheConf(gatewayConf.getKqdm()); //网关心跳接口 Map params = new HashMap<>(); params.put("token", gatewayConf.getAccessToken()); params.put("gatewayId", gatewayConf.getGatewayId()); params.put("gatewayIp", gatewayConf.getGatewayIp()); params.put("gatewayMac", gatewayConf.getGatewayMac()); params.put("gatewayCPU", gatewayConf.getGatewayCPU()); params.put("gatewayMem", gatewayConf.getGatewayMem()); params.put("gatewayHardDisk", gatewayConf.getGatewayHardDisk()); params.put("timestamp", System.currentTimeMillis() + ""); String sign = getSign(params, gatewayConf); params.put("sign", sign); String url = gatewayConf.getApiUrl() + "reserver/api/iot/equipment/heartbeat"; String jsonStr = GatewayHttpUtil.doGet(url, params); log.info("---推送网关信息-返回---{}", jsonStr); } catch (Exception e) { log.error("------推送网关信息--执行失败-----{}", e); } } @Override public void pushDeviceStatus(GatewayConf gatewayConf) { } public String getSign(Map parames, GatewayConf gatewayConf) throws Exception { //参数调整 String signContent = OpenApiSignatureUtils.getSignContent(parames); log.debug("------待加密信息-----{}", signContent); //MD5加密 String md5sign = OpenApiSignatureUtils.getMd5Content(signContent, charset); //RSA加密 String singValue = OpenApiSignatureUtils.doSignByHex(gatewayConf.getGatewayId(), md5sign, charset, gatewayConf.getPublicKey(), gatewayConf.getPrivateKey()); log.debug("------RSA加密签名-----{}", singValue); return singValue; } /** * @param kqdm * @return */ public GatewayConf getCacheConf(String kqdm) { return gatewayConfService.getCacheConf(kqdm); } private void updateAuthToken(GatewayConf conf) { gatewayConfService.updateCache(conf); } }