diff --git a/jsowell-admin/src/main/java/com/jsowell/thirdparty/nanrui/NRController.java b/jsowell-admin/src/main/java/com/jsowell/thirdparty/nanrui/NRController.java index 740af79cf..97b2f7d79 100644 --- a/jsowell-admin/src/main/java/com/jsowell/thirdparty/nanrui/NRController.java +++ b/jsowell-admin/src/main/java/com/jsowell/thirdparty/nanrui/NRController.java @@ -1,18 +1,29 @@ package com.jsowell.thirdparty.nanrui; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.response.RestApiResponse; +import com.jsowell.common.util.JWTUtils; import com.jsowell.pile.domain.nanrui.NROrderInfo; +import com.jsowell.pile.dto.QueryStartChargeDTO; import com.jsowell.pile.dto.QueryStationInfoDTO; import com.jsowell.pile.dto.nanrui.NRQueryOrderDTO; +import com.jsowell.thirdparty.lianlian.common.CommonResult; +import com.jsowell.thirdparty.lianlian.dto.CommonParamsDTO; +import com.jsowell.thirdparty.lianlian.util.Cryptos; +import com.jsowell.thirdparty.lianlian.util.Encodes; import com.jsowell.thirdparty.nanrui.service.NRService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; @@ -35,18 +46,34 @@ public class NRController extends BaseController { * @param dto */ @RequestMapping("/v1/query_stations_info") - public RestApiResponse query_stations_info(@RequestBody QueryStationInfoDTO dto) { + public CommonResult query_stations_info(HttpServletRequest request, @RequestBody CommonParamsDTO dto) { logger.info("南瑞平台查询充电站信息 params:{}", JSON.toJSONString(dto)); - RestApiResponse response = null; try { - Map map = nrService.query_stations_info(dto); - response = new RestApiResponse<>(map); + // 校验令牌 + String token = request.getHeader("Authorization"); + if (!JWTUtils.checkThirdPartyToken(token)) { + // 校验失败 + return CommonResult.failed("令牌校验错误"); + } + // 校验签名 + Map resultMap = nrService.checkoutSign(dto); + if (resultMap == null) { + // 签名错误 + return CommonResult.failed("签名校验错误"); + } + String operatorSecret = resultMap.get("OperatorSecret"); + String dataString = resultMap.get("Data"); + // 解密data + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), operatorSecret.getBytes(), operatorSecret.getBytes()); + String dataStr = new String(plainText, StandardCharsets.UTF_8); + // 转换成相应对象 + QueryStationInfoDTO queryStationInfoDTO = JSONObject.parseObject(dataStr, QueryStationInfoDTO.class); + Map map = nrService.query_stations_info(queryStationInfoDTO); + return CommonResult.success(0, "请求停止充电成功!", map.get("Data"), map.get("Sig")); } catch (Exception e) { logger.error("南瑞平台查询充电站信息 error", e); - response = new RestApiResponse<>(e); } - logger.info("南瑞平台查询充电站信息 result:{}", response); - return response; + return CommonResult.failed("查询充电站信息异常"); } @@ -55,18 +82,36 @@ public class NRController extends BaseController { * @param dto */ @RequestMapping("/v1/query_station_status") - public RestApiResponse query_station_status(@RequestBody QueryStationInfoDTO dto) { + public CommonResult query_station_status(HttpServletRequest request, @RequestBody CommonParamsDTO dto) { logger.info("南瑞平台查询设备接口状态 params:{}", JSON.toJSONString(dto)); - RestApiResponse response = null; try { - Map map = nrService.query_station_status(dto.getStationIds()); - response = new RestApiResponse<>(map); + // 校验令牌 + String token = request.getHeader("Authorization"); + if (!JWTUtils.checkThirdPartyToken(token)) { + // 校验失败 + return CommonResult.failed("令牌校验错误"); + } + // 校验签名 + Map resultMap = nrService.checkoutSign(dto); + if (resultMap == null) { + // 签名错误 + return CommonResult.failed("签名校验错误"); + } + String operatorSecret = resultMap.get("OperatorSecret"); + String dataString = resultMap.get("Data"); + // 解密data + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), operatorSecret.getBytes(), operatorSecret.getBytes()); + String dataStr = new String(plainText, StandardCharsets.UTF_8); + // 转换成相应对象 + QueryStationInfoDTO queryStationInfoDTO = JSONObject.parseObject(dataStr, QueryStationInfoDTO.class); + queryStationInfoDTO.setOperatorId(dto.getOperatorID()); + Map map = nrService.query_station_status(queryStationInfoDTO); + return CommonResult.success(0, "查询设备接口状态成功!", map.get("Data"), map.get("Sig")); } catch (Exception e) { logger.error("南瑞平台查询设备接口状态 error", e); - response = new RestApiResponse<>(e); + e.printStackTrace(); } - logger.info("南瑞平台查询设备接口状态 result:{}", response); - return response; + return CommonResult.failed("查询设备接口状态异常"); } @@ -75,17 +120,51 @@ public class NRController extends BaseController { * @param dto */ @RequestMapping("/v1/query_order_info") - public RestApiResponse query_order_info(@RequestBody NRQueryOrderDTO dto) { + public CommonResult query_order_info(HttpServletRequest request, @RequestBody CommonParamsDTO dto) { logger.info("南瑞平台查询充电电量信息 params:{}", JSON.toJSONString(dto)); - RestApiResponse response = null; try { - List nrOrderInfos = nrService.query_order_info(dto); - response = new RestApiResponse<>(nrOrderInfos); + // 校验令牌 + String token = request.getHeader("Authorization"); + if (!JWTUtils.checkThirdPartyToken(token)) { + // 校验失败 + return CommonResult.failed("令牌校验错误"); + } + // 校验签名 + Map resultMap = nrService.checkoutSign(dto); + if (resultMap == null) { + // 签名错误 + return CommonResult.failed("签名校验错误"); + } + String operatorSecret = resultMap.get("OperatorSecret"); + String dataString = resultMap.get("Data"); + // 解密data + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), operatorSecret.getBytes(), operatorSecret.getBytes()); + String dataStr = new String(plainText, StandardCharsets.UTF_8); + // 转换成相应对象 + NRQueryOrderDTO nrQueryOrderDTO = JSONObject.parseObject(dataStr, NRQueryOrderDTO.class); + nrQueryOrderDTO.setOperatorId(dto.getOperatorID()); + Map map = nrService.query_order_info(nrQueryOrderDTO); + return CommonResult.success(0, "查询充电电量信息成功!", map.get("Data"), map.get("Sig")); } catch (Exception e) { logger.error("南瑞平台查询充电电量信息 error", e); - response = new RestApiResponse<>(e); } - logger.info("南瑞平台查询充电电量信息 result:{}", response); - return response; + return CommonResult.failed("查询设备接口状态异常"); + } + + /** + * 获取token接口 + * http://localhost:8080/nanrui/v1/query_token + */ + @PostMapping("/v1/query_token") + public CommonResult queryToken(@RequestBody CommonParamsDTO dto) { + logger.info("南瑞平台请求令牌 params:{}", JSONObject.toJSONString(dto)); + try { + Map map = nrService.generateToken(dto); + logger.info("南瑞平台请求令牌 result:{}", JSONObject.toJSONString(map)); + return CommonResult.success(0, "请求令牌成功!", map.get("Data"), map.get("Sig")); + } catch (UnsupportedEncodingException e) { + logger.error("获取token接口 异常"); + return CommonResult.failed("获取token发生异常"); + } } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/nanrui/NRQueryOrderDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/nanrui/NRQueryOrderDTO.java index eda0eaabb..51e46ff8d 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/nanrui/NRQueryOrderDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/nanrui/NRQueryOrderDTO.java @@ -13,6 +13,8 @@ import lombok.Data; @Data public class NRQueryOrderDTO { + private String operatorId; + private String orderCode; /** diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/NRService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/NRService.java index 9a6e0a8cb..ee4251128 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/NRService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/NRService.java @@ -59,7 +59,7 @@ public interface NRService { * @param dto * @return */ - Map query_stations_info(QueryStationInfoDTO dto); + Map query_stations_info(QueryStationInfoDTO dto); /** * 推送告警信息 @@ -82,10 +82,10 @@ public interface NRService { * 查询设备接口状态 * 此接口用于批量查询设备实时状态 * 由充电运营商方实现此接口,省、市两级监管平台调用。 - * @param stationIds + * @param dto * @return */ - Map query_station_status(List stationIds); + Map query_station_status(QueryStationInfoDTO dto); /** @@ -102,5 +102,5 @@ public interface NRService { * @param dto * @return */ - List query_order_info(NRQueryOrderDTO dto); + Map query_order_info(NRQueryOrderDTO dto); } \ No newline at end of file diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java index 1460560b5..1f8a1f9ff 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; @@ -79,6 +80,9 @@ public class NRServiceImpl implements NRService { @Autowired private IThirdPartyStationRelationService thirdPartyStationRelationService; + @Autowired + private IThirdPartyPlatformConfigService thirdPartyPlatformConfigService; + @Autowired private LianLianService lianLianService; @@ -202,7 +206,7 @@ public class NRServiceImpl implements NRService { * @return */ @Override - public Map query_stations_info(QueryStationInfoDTO dto) { + public Map query_stations_info(QueryStationInfoDTO dto) { List resultList = new ArrayList<>(); int pageNo = dto.getPageNo() == null ? 1 : dto.getPageNo(); int pageSize = dto.getPageSize() == null ? 10 : dto.getPageSize(); @@ -213,6 +217,10 @@ public class NRServiceImpl implements NRService { // 未查到数据 return null; } + ThirdPartyPlatformConfig configInfo = thirdPartyPlatformConfigService.getInfoByOperatorId(dto.getOperatorId()); + if (configInfo == null) { + return null; + } PageInfo pageInfo = new PageInfo<>(stationInfos); for (PileStationInfo pileStationInfo : pageInfo.getList()) { // 拼装参数 @@ -273,7 +281,19 @@ public class NRServiceImpl implements NRService { map.put("ItemSize", resultList.size()); map.put("StationInfos", resultList); - return map; + // 加密 + Map resultMap = Maps.newLinkedHashMap(); + // 加密数据 + byte[] encryptText = Cryptos.aesEncrypt(JSONObject.toJSONString(map).getBytes(), + configInfo.getOperatorSecret().getBytes(), configInfo.getDataSecretIv().getBytes()); + String encryptData = Encodes.encodeBase64(encryptText); + + resultMap.put("Data", encryptData); + // 生成sig + String resultSign = GBSignUtils.sign(resultMap, configInfo.getOperatorSecret()); + resultMap.put("Sig", resultSign); + + return resultMap; } @@ -404,22 +424,26 @@ public class NRServiceImpl implements NRService { * 查询设备接口状态 * 此接口用于批量查询设备实时状态 * 由充电运营商方实现此接口,省、市两级监管平台调用。 - * @param stationIds + * @param dto * @return */ @Override - public Map query_station_status(List stationIds) { + public Map query_station_status(QueryStationInfoDTO dto) { + List stationIds = dto.getStationIds(); List resultList = new ArrayList<>(); - + ThirdPartyPlatformConfig configInfo = thirdPartyPlatformConfigService.getInfoByOperatorId(dto.getOperatorId()); + if (configInfo == null) { + return null; + } // 将 stationIdList 转换成 List List stationLongList = stationIds.stream() .map(Long::parseLong) .collect(Collectors.toList()); - QueryConnectorListDTO dto = QueryConnectorListDTO.builder() + QueryConnectorListDTO queryConnectorListDTO = QueryConnectorListDTO.builder() .stationIdList(stationLongList) .build(); - List connectorInfoVOS = pileConnectorInfoService.getConnectorInfoListByParams(dto); + List connectorInfoVOS = pileConnectorInfoService.getConnectorInfoListByParams(queryConnectorListDTO); if (CollectionUtils.isEmpty(connectorInfoVOS)) { return new LinkedHashMap<>(); } @@ -469,7 +493,19 @@ public class NRServiceImpl implements NRService { Map map = new LinkedHashMap<>(); map.put("StationStatusInfos", resultList); - return map; + // 加密 + Map resultMap = Maps.newLinkedHashMap(); + // 加密数据 + byte[] encryptText = Cryptos.aesEncrypt(JSONObject.toJSONString(map).getBytes(), + configInfo.getOperatorSecret().getBytes(), configInfo.getDataSecretIv().getBytes()); + String encryptData = Encodes.encodeBase64(encryptText); + + resultMap.put("Data", encryptData); + // 生成sig + String resultSign = GBSignUtils.sign(resultMap, configInfo.getOperatorSecret()); + resultMap.put("Sig", resultSign); + + return resultMap; } /** @@ -523,17 +559,33 @@ public class NRServiceImpl implements NRService { * @return */ @Override - public List query_order_info(NRQueryOrderDTO dto) { + public Map query_order_info(NRQueryOrderDTO dto) { List resultList = new ArrayList<>(); + ThirdPartyPlatformConfig configInfo = thirdPartyPlatformConfigService.getInfoByOperatorId(dto.getOperatorId()); + if (configInfo == null) { + return null; + } List nrOrderInfos = orderBasicInfoService.getNROrderInfos(dto); if (CollectionUtils.isEmpty(nrOrderInfos)) { - return new ArrayList<>(); + return Maps.newLinkedHashMap(); } for (NROrderInfoVO nrOrderInfoVO : nrOrderInfos) { NROrderInfo nrOrderInfo = formatNROrderInfo(nrOrderInfoVO); resultList.add(nrOrderInfo); } - return resultList; + // 加密 + Map resultMap = Maps.newLinkedHashMap(); + // 加密数据 + byte[] encryptText = Cryptos.aesEncrypt(JSONObject.toJSONString(resultList).getBytes(), + configInfo.getOperatorSecret().getBytes(), configInfo.getDataSecretIv().getBytes()); + String encryptData = Encodes.encodeBase64(encryptText); + + resultMap.put("Data", encryptData); + // 生成sig + String resultSign = GBSignUtils.sign(resultMap, configInfo.getOperatorSecret()); + resultMap.put("Sig", resultSign); + + return resultMap; } /**