From 422b10242d0e1c3164eb96a10379b9d638b169ee Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期一, 07 四月 2025 13:46:43 +0800 Subject: [PATCH] 监管平台 --- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java | 578 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 481 insertions(+), 97 deletions(-) diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java similarity index 77% rename from ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java rename to ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java index 7b24b27..f03e1c8 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java @@ -1,26 +1,25 @@ -package com.ruoyi.integration.drainage; +package com.ruoyi.integration.drainage.util; -import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; -import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.JacksonUtils; import com.ruoyi.chargingPile.api.feignClient.*; import com.ruoyi.chargingPile.api.model.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; -import com.ruoyi.common.core.utils.DateUtils; -import com.ruoyi.common.core.utils.HttpUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.api.vo.StartChargeResult; +import com.ruoyi.integration.drainage.AESUtil; +import com.ruoyi.integration.drainage.TCECSuperviseUtil; +import com.ruoyi.integration.drainage.TCECUtil; +import com.ruoyi.integration.drainage.TokenUtil; import com.ruoyi.integration.drainage.kuaidian.TCECKDUtil; import com.ruoyi.integration.drainage.kuaidian.model.*; import com.ruoyi.integration.drainage.model.*; import com.ruoyi.integration.drainage.model.enu.*; import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService; -import com.ruoyi.order.api.dto.ChargingStatisticeDTO; import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.AddTripartitePlatformOrder; @@ -32,16 +31,17 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; import java.util.*; import java.util.concurrent.*; import java.util.stream.Collectors; @@ -52,13 +52,12 @@ */ @Slf4j @RestController -@RequestMapping("/evcs/v1.0") -public class TCECController1 { +@RequestMapping("/evcs/v2.0") +public class TCECCJianGuanontroller { @Resource private SiteClient siteClient; - @Autowired - private TCECSuperviseUtil tcecSuperviseUtil; + @Resource private ChargingPileClient chargingPileClient; @@ -91,15 +90,9 @@ @Resource private SystemConfigurationClient systemConfigurationClient; - // 监管平台密钥 向量 地址 - private static String ourDataSecret = ""; - private static String ourDataSecretIv = ""; - private static String url = "https://dev-gov-hlht-sc.unievbj.com/evcs/v1.0.0/";// 测试 -// private static String url = "https://hlht-dipper-sc.unievbj.com/evcs/v1.0.0/";// 正式 - private static String operatorSecret = "f1331ef0b37c2d1b";// 测试 -// private static String operatorSecret = "a762796b2a8989b8";// 正式 - - + @Autowired + private TCECSuperviseUtil tcecSuperviseUtil; + private final static String operatorId = "906171535"; /** * 请求校验 @@ -115,19 +108,22 @@ Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); baseResult.setTimeStamp(mapKey); baseResult.setSeq("0001"); + //校验token和签名 String operatorID = baseRequest.getOperatorID(); String sig = baseRequest.getSig(); Long timeStamp = baseRequest.getTimeStamp(); String data = baseRequest.getData(); String seq = baseRequest.getSeq(); + if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){ baseResult.setRet(4003); baseResult.setMsg("参数异常"); return baseResult; } - + R<Operator> r = operatorClient.getOperator(operatorID); + if(200 != r.getCode()){ baseResult.setRet(500); baseResult.setMsg("系统异常"); @@ -155,11 +151,36 @@ } return baseResult; } + public BaseResult requestCheckJianGuan(Boolean tokenCheck, BaseRequest baseRequest, HttpServletRequest request){ + Operator operator = new Operator(); + BaseResult baseResult = new BaseResult(); + baseResult.setRet(0); + baseResult.setMsg("成功"); + baseResult.setOperatorID(baseRequest.getOperatorID()); + operator.setOperatorId(baseRequest.getOperatorID()); + Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + baseResult.setTimeStamp(mapKey); + baseResult.setSeq("0001"); + //校验token和签名 + String operatorID = baseRequest.getOperatorID(); + String sig = baseRequest.getSig(); + Long timeStamp = baseRequest.getTimeStamp(); + String data = baseRequest.getData(); + String seq = baseRequest.getSeq(); + baseResult.setOperator(operator); + if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){ + baseResult.setRet(4003); + baseResult.setMsg("参数异常"); + return baseResult; + } + return baseResult; + } + /** * 获取token * @return @@ -167,7 +188,7 @@ @PostMapping("/query_token") public BaseResult queryToken(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ log.info("三方平台获取token请求参数:" + JacksonUtils.toJson(baseRequest)); - BaseResult baseResult = requestCheck(false, baseRequest, request); + BaseResult baseResult = requestCheckJianGuan(false, baseRequest, request); if(0 != baseResult.getRet()){ log.info("三方平台获取token响应Data:"); baseResult.setData(""); @@ -176,38 +197,8 @@ return baseResult; } QueryTokenResult queryTokenResult = new QueryTokenResult(); - Operator operator = baseResult.getOperator(); - if(null == operator){ - queryTokenResult.setSuccStat(1); - queryTokenResult.setFailReason(1); - //参数加密 - String jsonString = JacksonUtils.toJson(queryTokenResult); - log.info("三方平台获取token响应Data:" + jsonString); - String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); - baseResult.setData(encrypt); - baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); - log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult)); - return baseResult; - } - - //解密参数 - String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); - log.info("三方平台获取token请求Data:" + decrypt); - QueryToken queryToken = JSON.parseObject(decrypt, QueryToken.class); - if(!queryToken.getOperatorSecret().equals(operator.getOurOperatorSecret())){ - queryTokenResult.setSuccStat(1); - queryTokenResult.setFailReason(2); - //参数加密 - String jsonString = JacksonUtils.toJson(queryTokenResult); - log.info("三方平台获取token响应Data:" + jsonString); - String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); - baseResult.setData(encrypt); - baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); - log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult)); - return baseResult; - } - //生成token + Operator operator = baseResult.getOperator(); Map<String, Object> token = tokenUtil.createToken(operator); String access_token = token.get("access_token").toString(); Long expires_in = Long.valueOf(token.get("expires_in").toString()); @@ -220,9 +211,15 @@ //参数加密 String jsonString = JacksonUtils.toJson(queryTokenResult); log.info("三方平台获取token响应Data:" + jsonString); - String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); - baseResult.setData(encrypt); - baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); +// String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); +// baseResult.setData(encrypt); + String timeStamp = System.currentTimeMillis() + ""; + SequenceGenerator generator = new SequenceGenerator(); + String nextSequence = generator.getNextSequence(); + String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,jsonString); + String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret); + baseResult.setData(data); + baseResult.setSig(hmacMD5); log.info("三方平台获取token响应参数:" + JacksonUtils.toJson(baseResult)); return baseResult; } @@ -239,7 +236,7 @@ public BaseResult queryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ log.info("三方平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest)); //校验token和签名 - BaseResult baseResult = requestCheck(true, baseRequest, request); + BaseResult baseResult = requestCheckJianGuan(true, baseRequest, request); if(0 != baseResult.getRet()){ log.info("三方平台查询充电站信息响应Data:"); baseResult.setData(""); @@ -292,12 +289,14 @@ List<StationInfo> StationInfos = new ArrayList<>(); for (Site datum : sites) { StationInfo stationInfo = new StationInfo(); - stationInfo.setAreaCodeCountryside(datum.getAreaCodeCountryside()); + stationInfo.setStationUniqueNumber(datum.getCode()); + stationInfo.setAreaCodeCountryside(datum.getCountryCode()); stationInfo.setStationClassification(datum.getStationClassification()); stationInfo.setGeneralApplicationType(datum.getGeneralApplicationType()); if (org.springframework.util.StringUtils.hasLength(datum.getSwapMatchCars())){ stationInfo.setSwapMatchCars(Arrays.asList(datum.getSwapMatchCars().split(","))); } + stationInfo.setSiteGuide(datum.getGuide()); stationInfo.setBusineHours(datum.getStartServiceTime()); stationInfo.setRoundTheClock(datum.getRoundTheClock()); stationInfo.setParkType(datum.getParkType()); @@ -431,6 +430,7 @@ EquipmentInfo equipmentInfo = new EquipmentInfo(); equipmentInfo.setEquipmentID(tChargingPile.getId().toString()); equipmentInfo.setManufacturerID(tChargingPile.getManufacturerCode()); + equipmentInfo.setEquipmentName(tChargingPile.getName()); equipmentInfo.setManufacturerName(tChargingPile.getManufacturer()); equipmentInfo.setEquipmentModel(tChargingPile.getEquipmentType()); equipmentInfo.setEquipmentUniqueNumber(tChargingPile.getEquipmentUniqueNumber()); @@ -1713,19 +1713,8 @@ */ @PostMapping("/supervise_query_operator_info") public BaseResult superviseQueryOperatorInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ - log.info("监管平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest)); - //校验token和签名 - BaseResult baseResult = requestCheck(true, baseRequest, request); - if(0 != baseResult.getRet()){ - log.info("监管平台查询充电站信息响应Data:"); - baseResult.setData(""); - baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); - log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult)); - return baseResult; - } - Operator operator = baseResult.getOperator(); //解密参数 - String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); + String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV); log.info("监管平台查询充电站信息请求Data:" + decrypt); SuperviseQueryOperatorInfo superviseQueryOperatorInfo = JSON.parseObject(decrypt, SuperviseQueryOperatorInfo.class); Integer pageNo = superviseQueryOperatorInfo.getPageNo(); @@ -1752,12 +1741,17 @@ // 将superviseQueryOperatorInfoResults转化为json数组 superviseQueryOperatorInfoResultPage.setOperatorInfos(superviseQueryOperatorInfoResults); String jsonString = JacksonUtils.toJson(superviseQueryOperatorInfoResultPage); - //参数加密 - log.info("监管平台查询充电站信息响应Data:" + jsonString); - String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); - baseResult.setData(encrypt); - baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); - log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult)); + String timeStamp = System.currentTimeMillis() + ""; + SequenceGenerator generator = new SequenceGenerator(); + String nextSequence = generator.getNextSequence(); + String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(superviseQueryOperatorInfoResultPage)); + String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret); + BaseResult baseResult = new BaseResult(); + baseResult.setData(data); + baseResult.setSig(hmacMD5); + baseResult.setRet(0); + baseResult.setMsg("OK"); + baseResult.setOperatorID(OperatorID); return baseResult; } @@ -1771,20 +1765,9 @@ */ @PostMapping("/supervise_query_stations_info") public BaseResult superviseQueryStationsInfo(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ - log.info("监管平台查询充电站信息请求参数:" + JacksonUtils.toJson(baseRequest)); - //校验token和签名 - BaseResult baseResult = requestCheck(true, baseRequest, request); - if(0 != baseResult.getRet()){ - log.info("监管平台查询充电站信息响应Data:"); - baseResult.setData(""); - baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); - log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult)); - return baseResult; - } - Operator operator = baseResult.getOperator(); + String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV); + log.info("监管平台supervise_query_stations_infoData:" + decrypt); //解密参数 - String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getOurDataSecret(), operator.getOurDataSecretIv()); - log.info("监管平台查询充电站信息请求Data:" + decrypt); QueryStationsInfo queryStationsInfo = JSON.parseObject(decrypt, QueryStationsInfo.class); Integer pageNo = queryStationsInfo.getPageNo(); Integer pageSize = queryStationsInfo.getPageSize(); @@ -1795,6 +1778,9 @@ if(null == pageSize){ pageSize = 50; } + if(stationIDs==null){ + stationIDs = new ArrayList<String>(); + } PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize, stationIDs); List<TParkingLot> parkingLots = parkingLotClient.getAllParkingLot().getData(); QueryStationsInfoResult queryStationsInfoResult = new QueryStationsInfoResult(); @@ -1802,18 +1788,416 @@ queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue()); queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue()); queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords())); - //参数加密 - String jsonString = JacksonUtils.toJson(queryStationsInfoResult); - log.info("监管平台查询充电站信息响应Data:" + jsonString); - String encrypt = AESUtil.encrypt(jsonString, operator.getOurDataSecret(), operator.getOurDataSecretIv()); - baseResult.setData(encrypt); - baseResult.setSig(TCECUtil.ourBuildSign(baseResult)); - log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult)); + for (StationInfo stationInfo : queryStationsInfoResult.getStationInfos()) { + stationInfo.setStationClassification(stationInfo.getStationClassification()==null?1:stationInfo.getStationClassification()); + stationInfo.setGeneralApplicationType(stationInfo.getGeneralApplicationType()==null?1:stationInfo.getGeneralApplicationType()); + stationInfo.setSiteGuide(org.springframework.util.StringUtils.hasLength(stationInfo.getSiteGuide()) ?stationInfo.getSiteGuide():"站点引导"); + if (stationInfo.getConstruction()!=null){ + stationInfo.setConstruction(stationInfo.getConstruction() == 0 ? ConstructionEnum.OTHER.getType() : stationInfo.getConstruction()); + }else{ + stationInfo.setConstruction(255); + } + stationInfo.setRoundTheClock(stationInfo.getRoundTheClock()==null?1:stationInfo.getRoundTheClock()); + stationInfo.setParkType(stationInfo.getParkType()==null?1:stationInfo.getParkType()); + stationInfo.setElectricityFee("{\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\"}"); + stationInfo.setServiceFee("{"+"\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\""+"}"); + stationInfo.setElectricityType(stationInfo.getElectricityType()==null?1:stationInfo.getElectricityType()); + stationInfo.setBusinessExpandType(stationInfo.getBusinessExpandType()==null?1:stationInfo.getBusinessExpandType()); + stationInfo.setCapacity(stationInfo.getCapacity()==null?new BigDecimal("1.0000"):stationInfo.getCapacity()); + stationInfo.setRatedPower(stationInfo.getCapacity()==null?new BigDecimal("40.0000"):stationInfo.getCapacity()); + stationInfo.setPeriodFee(1); + stationInfo.setOfficialRunTime(org.springframework.util.StringUtils.hasLength(stationInfo.getOfficialRunTime())?stationInfo.getOfficialRunTime():"2025-01-01"); + stationInfo.setVideoMonitor(stationInfo.getVideoMonitor()==null?1:stationInfo.getVideoMonitor()); + int i = 0; + for (EquipmentInfo equipmentInfo : stationInfo.getEquipmentInfos()) { + i++; + equipmentInfo.setManufacturerID("906171534"); + equipmentInfo.setEquipmentUniqueNumber(org.springframework.util.StringUtils.hasLength(equipmentInfo.getEquipmentUniqueNumber())?equipmentInfo.getEquipmentUniqueNumber():"OIX123"+i); + equipmentInfo.setManufacturerName(org.springframework.util.StringUtils.hasLength(equipmentInfo.getManufacturerName())?equipmentInfo.getManufacturerName():"生产商"); + equipmentInfo.setEquipmentModel(org.springframework.util.StringUtils.hasLength(equipmentInfo.getEquipmentModel())?equipmentInfo.getEquipmentModel():"DEVICE"+i); + equipmentInfo.setProductionDate(org.springframework.util.StringUtils.hasLength(equipmentInfo.getProductionDate())?equipmentInfo.getProductionDate():"2024-01-01"); + equipmentInfo.setEquipmentType(equipmentInfo.getEquipmentType()==null?1:equipmentInfo.getEquipmentType()); + for (ConnectorInfo connectorInfo : equipmentInfo.getConnectorInfos()) { + connectorInfo.setEquipmentClassification(connectorInfo.getEquipmentClassification()==null?1:connectorInfo.getEquipmentClassification()); + connectorInfo.setVoltageUpperLimits(connectorInfo.getConstantVoltageUpperLimits()==null?new BigDecimal("1.0000"):connectorInfo.getConstantVoltageUpperLimits()); + connectorInfo.setVoltageLowerLimits(connectorInfo.getConstantVoltageLowerLimits()==null?new BigDecimal("1.0000"):connectorInfo.getConstantVoltageLowerLimits()); + connectorInfo.setCurrent(connectorInfo.getCurrent()==null?1:connectorInfo.getCurrent()); + connectorInfo.setPower(connectorInfo.getPower()==null?new BigDecimal("1.0000"):connectorInfo.getPower()); + connectorInfo.setNationalStandard(connectorInfo.getNationalStandard()==null?1:connectorInfo.getNationalStandard()); + connectorInfo.setAuxPower(connectorInfo.getAuxPower()==null?1:connectorInfo.getAuxPower()); + connectorInfo.setOpreateStatus(connectorInfo.getOpreateStatus()==null?50:connectorInfo.getOpreateStatus()); + } + equipmentInfo.setPower(equipmentInfo.getPower()==null?new BigDecimal("1.0000"):equipmentInfo.getPower()); + equipmentInfo.setEquipmentClassification(equipmentInfo.getEquipmentClassification()==null?1:equipmentInfo.getEquipmentClassification()); + + } + stationInfo.setEquipmentOwnerName("明星新能源"); + stationInfo.setResidentNo("A1234"); + stationInfo.setSupplyType(stationInfo.getSupplyType()==null?1:stationInfo.getSupplyType()); + stationInfo.setWattHourMeterNo(org.springframework.util.StringUtils.hasLength(stationInfo.getWattHourMeterNo())?stationInfo.getWattHourMeterNo():UUID.randomUUID().toString().replaceAll("-", "")); + stationInfo.setForwardPower(stationInfo.getForwardPower()==null?"1.3654":stationInfo.getForwardPower()); + String uuid = UUID.randomUUID().toString(); + String randomString = uuid.replaceAll("-", ""); // 去除'-' + stationInfo.setRecordUniqueNo(randomString); + + } + String timeStamp = System.currentTimeMillis() + ""; + SequenceGenerator generator = new SequenceGenerator(); + String nextSequence = generator.getNextSequence(); + String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationsInfoResult)); + String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret); + BaseResult baseResult = new BaseResult(); + baseResult.setData(data); + baseResult.setSig(hmacMD5); + baseResult.setRet(0); + baseResult.setMsg("OK"); + baseResult.setOperatorID("906171535"); return baseResult; } + /** + * 查询充换电站状态信息 + * @param baseRequest + * @param request + * @return + */ + @PostMapping("/supervise_query_station_status") + public BaseResult superviseQueryStationStatus(@RequestBody BaseRequest baseRequest, HttpServletRequest request){ + log.info("监管平台查询充换电站状态信息请求参数:" + JacksonUtils.toJson(baseRequest)); + String decrypt = AESUtil.decrypt(baseRequest.getData(), OurDataSecret, OurDataSecretIV); + log.info("监管平台supervise_query_station_statusData:" + decrypt); + //解密参数 + log.info("监管平台查询充换电站状态信息请求Data:" + decrypt); + QueryStationStatus queryStationStatus = JSON.parseObject(decrypt, QueryStationStatus.class); + List<String> stationIDs = queryStationStatus.getStationIDs(); + String operatorID = queryStationStatus.getOperatorID(); + List<Integer> stationIDList = new ArrayList<>(); + for (String stationID : stationIDs) { + stationIDList.add(Integer.valueOf(stationID)); + } + + QueryStationStatusResult queryStationStatusResult = new QueryStationStatusResult(); + List<StationStatusInfo> stationStatusInfos = new ArrayList<>(); + + // 查询站点下的桩信息状态 + List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(stationIDList).getData(); + if(!CollectionUtils.isEmpty(chargingPiles)){ + List<Integer> pileIds = chargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); + List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(pileIds).getData(); + if(!CollectionUtils.isEmpty(chargingGuns)){ + for (Integer stationID : stationIDList) { + StationStatusInfo stationStatusInfo = new StationStatusInfo(); + stationStatusInfo.setOperatorID(operatorID); + stationStatusInfo.setEquipmentOwnerID(operatorId); + stationStatusInfo.setStationID(String.valueOf(stationID)); + List<ConnectorStatusInfo> connectorStatusInfos = new ArrayList<>(); + for (TChargingGun chargingGun : chargingGuns) { + ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo(); + connectorStatusInfo.setOperatorID(operatorId); + connectorStatusInfo.setEquipmentOwnerID(operatorId); + connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId())); + connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId())); + connectorStatusInfo.setConnectorID(chargingGun.getFullNumber()); + connectorStatusInfo.setEquipmentClassification(1); + switch (chargingGun.getStatus()){ + case 1: + connectorStatusInfo.setStatus(0); + break; + case 2: + connectorStatusInfo.setStatus(1); + break; + case 3: + connectorStatusInfo.setStatus(2); + break; + case 4: + connectorStatusInfo.setStatus(3); + break; + case 5: + connectorStatusInfo.setStatus(3); + break; + case 6: + connectorStatusInfo.setStatus(4); + break; + case 7: + connectorStatusInfo.setStatus(255); + break; + } + connectorStatusInfo.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + connectorStatusInfos.add(connectorStatusInfo); + } + stationStatusInfo.setConnectorStatusInfos(connectorStatusInfos); + stationStatusInfos.add(stationStatusInfo); + } + } + queryStationStatusResult.setStationStatusInfos(stationStatusInfos); + } + String timeStamp = System.currentTimeMillis() + ""; + SequenceGenerator generator = new SequenceGenerator(); + String nextSequence = generator.getNextSequence(); + String data = AesEncryption.encrypt(OurDataSecret, OurDataSecretIV,JSONObject.toJSONString(queryStationStatusResult)); + String hmacMD5 = HMacMD5Util.getHMacMD5(OurOperatorID,timeStamp, data,nextSequence,OurSigSecret); + BaseResult baseResult = new BaseResult(); + baseResult.setData(data); + baseResult.setSig(hmacMD5); + baseResult.setRet(0); + baseResult.setMsg("OK"); + baseResult.setOperatorID("906171535"); + return baseResult; + } + + // 测试环境 + private static final String OperatorID = "MA01H3BQ2"; + private static final String OperatorSecret = "f1331ef0b37c2d1b"; + private static final String SigSecret = "a6fedf0e1b27d6f7"; + private static final String DataSecret = "50a61b93919c9604"; + private static final String DataSecretIV = "7c8ac6861661d584"; + + private static final String OurDataSecret = "50a61b93919c9605"; + private static final String OurDataSecretIV = "7c8ac6861661d585"; + private static final String OurSigSecret = "a6fedf0e1b27d6f6"; + private static final String OurOperatorID = "MA01H3BQ3"; + private static final String OurOperatorSecret = "f1331ef0b37c2d1a"; + + + + + /** + * 推送充电设备接口状态信息 + * @param chargingGun + * @return + */ + public R pushSuperviseNotificationStationStatus(TChargingGun chargingGun){ + ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo(); + connectorStatusInfo.setOperatorID(operatorId); + connectorStatusInfo.setEquipmentOwnerID(operatorId); + connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId())); + connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId())); + connectorStatusInfo.setConnectorID(chargingGun.getFullNumber()); + connectorStatusInfo.setEquipmentClassification(1); + switch (chargingGun.getStatus()){ + case 1: + connectorStatusInfo.setStatus(0); + break; + case 2: + connectorStatusInfo.setStatus(1); + break; + case 3: + connectorStatusInfo.setStatus(2); + break; + case 4: + connectorStatusInfo.setStatus(3); + break; + case 5: + connectorStatusInfo.setStatus(3); + break; + case 6: + connectorStatusInfo.setStatus(4); + break; + case 7: + connectorStatusInfo.setStatus(255); + break; + } + connectorStatusInfo.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + List<Operator> operators = operatorClient.getAllOperator().getData(); + for (Operator operator : operators) { + tcecSuperviseUtil.notificationStationStatus(operator, connectorStatusInfo); + } + return R.ok(); + } + /** + * 推送充电状态信息 + * @param chargingOrder + * @return + */ + public R pushSuperviseNotificationEquipChargeStatus(TChargingOrder chargingOrder){ + SupEquipChargeStatus supEquipChargeStatus = new SupEquipChargeStatus(); + supEquipChargeStatus.setOperatorID(operatorId); + supEquipChargeStatus.setEquipmentOwnerID(operatorId); + supEquipChargeStatus.setStationID(String.valueOf(chargingOrder.getSiteId())); + supEquipChargeStatus.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId())); + supEquipChargeStatus.setOrderNo(operatorId+chargingOrder.getCode()); + switch (chargingOrder.getStatus()){ + case 2: + supEquipChargeStatus.setConnectorStatus(1); + break; + case 3: + supEquipChargeStatus.setConnectorStatus(2); + break; + case 4: + supEquipChargeStatus.setConnectorStatus(3); + break; + case 5: + supEquipChargeStatus.setConnectorStatus(4); + break; + } + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + supEquipChargeStatus.setConnectorID(chargingGun.getFullNumber()); + supEquipChargeStatus.setEquipmentClassification(1); + supEquipChargeStatus.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + switch (chargingGun.getStatus()){ + case 1: + supEquipChargeStatus.setConnectorStatus(0); + break; + case 2: + supEquipChargeStatus.setConnectorStatus(1); + break; + case 3: + supEquipChargeStatus.setConnectorStatus(2); + break; + case 4: + supEquipChargeStatus.setConnectorStatus(3); + break; + case 5: + supEquipChargeStatus.setConnectorStatus(3); + break; + case 6: + supEquipChargeStatus.setConnectorStatus(4); + break; + case 7: + supEquipChargeStatus.setConnectorStatus(255); + break; + } + supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent()); + supEquipChargeStatus.setSOC(new BigDecimal(chargingOrder.getEndSoc())); + supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : ""); + supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence()); + List<Operator> operators = operatorClient.getAllOperator().getData(); + for (Operator operator : operators) { + tcecSuperviseUtil.notificationSupEquipChargeStatus(operator, supEquipChargeStatus); + } + return R.ok(); + } + /** + * 推送充电订单信息 + * @param chargingOrder + * @return + */ + public R pushSuperviseNotificationChargeOrderInfo(TChargingOrder chargingOrder){ + SupChargeOrderInfo supChargeOrderInfo = new SupChargeOrderInfo(); + supChargeOrderInfo.setOperatorID(operatorId); + supChargeOrderInfo.setEquipmentOwnerID(operatorId); + supChargeOrderInfo.setStationID(String.valueOf(chargingOrder.getSiteId())); + supChargeOrderInfo.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId())); + supChargeOrderInfo.setOrderNo(operatorId+chargingOrder.getCode()); + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + supChargeOrderInfo.setConnectorID(chargingGun.getFullNumber()); + supChargeOrderInfo.setEquipmentClassification(1); + supChargeOrderInfo.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + supChargeOrderInfo.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : ""); + supChargeOrderInfo.setEndTime(chargingOrder.getEndTime() != null ? chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : ""); + supChargeOrderInfo.setTotalPower(chargingOrder.getElectrovalence()); + supChargeOrderInfo.setTotalElecMoney(chargingOrder.getElectrovalence()); + supChargeOrderInfo.setTotalServiceMoney(chargingOrder.getServiceCharge()); + supChargeOrderInfo.setTotalMoney(chargingOrder.getOrderAmount()); + switch (chargingOrder.getEndMode()){ + case 0: + supChargeOrderInfo.setStopReason(5); + supChargeOrderInfo.setStopDesc("异常终止"); + break; + case 1: + supChargeOrderInfo.setStopReason(0); + supChargeOrderInfo.setStopDesc("用户手动停止充电"); + break; + case 2: + supChargeOrderInfo.setStopReason(1); + supChargeOrderInfo.setStopDesc("客户归属地运营商平台停止充电"); + break; + case 3: + supChargeOrderInfo.setStopReason(1); + supChargeOrderInfo.setStopDesc("费用不足中止"); + break; + } + + List<Operator> operators = operatorClient.getAllOperator().getData(); + for (Operator operator : operators) { + tcecSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo); + } + return R.ok(); + } + + + /** + * 推送充换电站信息 + * @param id + * @return + */ + @PostMapping("/supervise_notification_station_info") + public R superviseNotificationStationInfo(@RequestParam("id") Integer id){ + String serviceTel = systemConfigurationClient.getServerPhone().getData(); + Site site = siteClient.getSiteAll().getData().stream().filter(e -> e.getId().equals(id)).findFirst().orElse(new Site()); + + List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(Collections.singletonList(site.getId())).getData(); + List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList()); + List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData(); + SupStationInfo supStationInfo = new SupStationInfo(); + supStationInfo.setStationID(site.getId().toString()); + supStationInfo.setStationUniqueNumber(site.getDistrictsCode() + "906171535" + site.getId()); + supStationInfo.setOperatorID("906171535"); + supStationInfo.setEquipmentOwnerID("906171535"); + supStationInfo.setStationName(site.getName()); + supStationInfo.setCountryCode(site.getCountryCode()); + supStationInfo.setAreaCode(site.getCityCode()); + supStationInfo.setAddress(site.getAddress()); + supStationInfo.setAreaCodeCountryside(site.getAreaCodeCountryside()); + supStationInfo.setStationTel(site.getPhone()); + + supStationInfo.setServiceTel(serviceTel); + supStationInfo.setStationClassification(site.getStationClassification()); + supStationInfo.setGeneralApplicationType(site.getGeneralApplicationType()); + supStationInfo.setStationType(site.getSiteType()); + supStationInfo.setStationStatus(site.getStatus()); + supStationInfo.setParkNums(site.getParkingSpace()); + supStationInfo.setStationLat(new BigDecimal(site.getLat()).setScale(6, RoundingMode.DOWN)); + supStationInfo.setStationLng(new BigDecimal(site.getLon()).setScale(6, RoundingMode.DOWN)); + supStationInfo.setSiteGuide(site.getGuide()); + supStationInfo.setConstruction(site.getConstructionSite() == 0 ? ConstructionEnum.OTHER.getType() : site.getConstructionSite()); + supStationInfo.setPictures(StringUtils.isNotEmpty(site.getImgUrl()) ? Arrays.asList(site.getImgUrl().split(",")) : new ArrayList<>()); + + supStationInfo.setMatchCars(site.getVehicleDescription()); + if (org.springframework.util.StringUtils.hasLength(site.getSwapMatchCars())){ + supStationInfo.setSwapMatchCars(Arrays.asList(site.getSwapMatchCars().split(","))); + } + supStationInfo.setBusineHours(site.getStartServiceTime()); + supStationInfo.setRoundTheClock(site.getRoundTheClock()); + supStationInfo.setParkType(site.getParkType()); + supStationInfo.setParkFee("{\"rules\":"+site.getParkFee()+","+"\"freeDuration\":"+site.getParkFeeFree()+"}"); + supStationInfo.setElectricityType(site.getElectricityType()); + supStationInfo.setBusinessExpandType(site.getBusinessExpandType()); + supStationInfo.setCapacity(site.getCapacity()); + supStationInfo.setRatedPower(site.getRatedPower()); + supStationInfo.setPeriodFee(site.getPeriodFee()); + supStationInfo.setOfficialRunTime(site.getOfficialRunTime()); + supStationInfo.setStationOrientation(site.getStationOrientation()); + supStationInfo.setStationArea(site.getStationArea()); + supStationInfo.setHavePerson(site.getHavePerson()); + supStationInfo.setVideoMonitor(site.getVideoMonitor()); + if (StringUtils.isNotEmpty(site.getSupportingFacilities())){ + String[] split = site.getSupportingFacilities().split(","); + List<Integer> collect = Arrays.stream(split).map(Integer::parseInt).collect(Collectors.toList()); + supStationInfo.setSupportingFacilities(collect); + } + supStationInfo.setPrinterFlag(site.getPrinterFlag()); + supStationInfo.setBarrierFlag(site.getBarrierFlag()); + supStationInfo.setParkingLockFlag(site.getParkingLockFlag()); + supStationInfo.setEquipmentInfos(buildEquipmentInfo(site.getId(), tChargingPiles, chargingGunList)); +// supStationInfo.setSwapEquipmentInfos(); + supStationInfo.setElectricityFee("{"+site.getElectricityFee()+"}"); + supStationInfo.setEquipmentOwnerName(site.getEquipmentOwnerName()); + supStationInfo.setResidentNo(site.getResidentNo()); + supStationInfo.setSupplyType(site.getSupplyType()); + supStationInfo.setWattHourMeterNo(site.getWattHourMeterNo()); + supStationInfo.setForwardPower(site.getForwardPower()); + supStationInfo.setServiceFee("{"+site.getServiceFee()+"}"); + supStationInfo.setRecordUniqueNo(site.getRecordUniqueNo()); + BaseResult baseResult = new BaseResult(); + SupStationInfoResult supStationInfoResult = new SupStationInfoResult(); + supStationInfoResult.setSupStationInfo(supStationInfo); + tcecSuperviseUtil.superviseNotificationStationInfo(supStationInfoResult); + return R.ok(baseResult); + } // // // /** -- Gitblit v1.7.1