From 3eb26775fc3789256d8c554f5bfdda9bf5162d7e Mon Sep 17 00:00:00 2001 From: "YAS\\29473" <2947326429@qq.com> Date: Wed, 10 Sep 2025 16:57:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E5=90=84=E4=B8=AA=E5=B8=A7=E7=B1=BB?= =?UTF-8?q?=E4=B8=AD=E6=B7=BB=E5=8A=A0mq=E6=B6=88=E6=81=AF=E5=8F=91?= =?UTF-8?q?=E9=80=81(=E9=83=A8=E5=88=86=E6=B7=BB=E5=8A=A0=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E6=B5=8B=E8=AF=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/service/WccServiceImpl.java | 78 --- jsowell-common/pom.xml | 8 +- .../common/config/mq/TopicRabbitConfig.java | 87 +++ .../RemoteStartChargingRequestHandler.java | 32 ++ .../TransactionRecordsRequestHandler.java | 27 + .../UploadRealTimeMonitorHandler.java | 25 + .../ykc/UploadRealTimeMonitorStrategy.java | 2 + .../com/jsowell/pile/rpc/WccServiceImpl.java | 504 ++++++++++++++++++ 8 files changed, 683 insertions(+), 80 deletions(-) delete mode 100644 jsowell-admin/src/main/java/com/jsowell/service/WccServiceImpl.java create mode 100644 jsowell-common/src/main/java/com/jsowell/common/config/mq/TopicRabbitConfig.java create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/rpc/WccServiceImpl.java diff --git a/jsowell-admin/src/main/java/com/jsowell/service/WccServiceImpl.java b/jsowell-admin/src/main/java/com/jsowell/service/WccServiceImpl.java deleted file mode 100644 index c6da139b9..000000000 --- a/jsowell-admin/src/main/java/com/jsowell/service/WccServiceImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.jsowell.service; - -import com.jsowell.common.dto.RealTimeMonitorData; -import com.jsowell.common.dto.TransactionRecordsData; -import com.jsowell.common.service.WccService; -import com.jsowell.common.vo.BillingTemplateVO; -import com.jsowell.common.vo.PileInfoVO; -import org.apache.dubbo.config.annotation.DubboService; - -@DubboService -public class WccServiceImpl implements WccService { - @Override - public String sayHello(String name) { - return "hello " + name + " from wcc-server"; - } - - /** - * 查询充电桩详情 - * - * @param pileCode - */ - @Override - public PileInfoVO getPileDetail(String pileCode) { - return null; - } - - /** - * 查询计费模板 - * - * @param pileCode - */ - @Override - public BillingTemplateVO getBillingTemplate(String pileCode) { - return null; - } - - /** - * 启动充电callback - * - * @param pileCode - * @param result - */ - @Override - public void startChargeCallback(String pileCode, String result) { - - } - - /** - * 停止充电callback - * - * @param pileCode - * @param result - */ - @Override - public void stopChargeCallback(String pileCode, String result) { - - } - - /** - * 接收交易记录接口 - * - * @param transactionRecordsData - */ - @Override - public void receiveTradeRecord(TransactionRecordsData transactionRecordsData) { - - } - - /** - * 接收实时监测数据接口 - * - * @param realTimeMonitorData - */ - @Override - public void receiveRealTimeData(RealTimeMonitorData realTimeMonitorData) { - - } -} diff --git a/jsowell-common/pom.xml b/jsowell-common/pom.xml index 5aa9af263..f7021fba3 100644 --- a/jsowell-common/pom.xml +++ b/jsowell-common/pom.xml @@ -59,7 +59,7 @@ commons-net 3.5 - + com.fasterxml.jackson.core @@ -240,6 +240,10 @@ + + com.jsowell + charge-common-api + @@ -267,4 +271,4 @@ - \ No newline at end of file + diff --git a/jsowell-common/src/main/java/com/jsowell/common/config/mq/TopicRabbitConfig.java b/jsowell-common/src/main/java/com/jsowell/common/config/mq/TopicRabbitConfig.java new file mode 100644 index 000000000..7bbef21fa --- /dev/null +++ b/jsowell-common/src/main/java/com/jsowell/common/config/mq/TopicRabbitConfig.java @@ -0,0 +1,87 @@ +package com.jsowell.common.config.mq; + +import com.jsowell.common.constant.mq.ThirdPartyRabbitConstants; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.TopicExchange; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class TopicRabbitConfig { + + /** + * 定义交换机 + */ + @Bean + public TopicExchange wccThirdpartyExchange() { + return new TopicExchange(ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME, true, false); + } + + /** + * 定义队列 + */ + @Bean + public Queue realtimeDataPushQueue() { + return new Queue(ThirdPartyRabbitConstants.QUEUE_REALTIME_DATA_PUSH, true); + } + + @Bean + public Queue alarmPushQueue() { + return new Queue(ThirdPartyRabbitConstants.QUEUE_ALARM_PUSH, true); + } + + @Bean + public Queue chargeResultPushQueue() { + return new Queue(ThirdPartyRabbitConstants.QUEUE_CHARGE_RESULT_PUSH, true); + } + + @Bean + public Queue startupChargingFailedPushQueue() { + return new Queue(ThirdPartyRabbitConstants.QUEUE_STARTUP_CHARGING_FAILED_PUSH, true); + } + + @Bean + public Queue chargeOrderPushQueue() { + return new Queue(ThirdPartyRabbitConstants.QUEUE_CHARGE_ORDER_PUSH, true); + } + + /** + * 队列绑定到交换机 + */ + @Bean + public Binding bindRealtimeDataPush(Queue realtimeDataPushQueue, TopicExchange wccThirdpartyExchange) { + return BindingBuilder.bind(realtimeDataPushQueue) + .to(wccThirdpartyExchange) + .with("wcc.realtimeDataPush.#"); + } + + @Bean + public Binding bindAlarmPush(Queue alarmPushQueue, TopicExchange wccThirdpartyExchange) { + return BindingBuilder.bind(alarmPushQueue) + .to(wccThirdpartyExchange) + .with("wcc.alarmPush.#"); + } + + @Bean + public Binding bindChargeResultPush(Queue chargeResultPushQueue, TopicExchange wccThirdpartyExchange) { + return BindingBuilder.bind(chargeResultPushQueue) + .to(wccThirdpartyExchange) + .with("wcc.chargeResultPush.#"); + } + + @Bean + public Binding bindStartupChargingFailedPush(Queue startupChargingFailedPushQueue, TopicExchange wccThirdpartyExchange) { + return BindingBuilder.bind(startupChargingFailedPushQueue) + .to(wccThirdpartyExchange) + .with("wcc.startupChargingFailedPush.#"); + } + + @Bean + public Binding bindChargeOrderPush(Queue chargeOrderPushQueue, TopicExchange wccThirdpartyExchange) { + return BindingBuilder.bind(chargeOrderPushQueue) + .to(wccThirdpartyExchange) + .with("wcc.chargeOrderPush.#"); + } +} diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/RemoteStartChargingRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/RemoteStartChargingRequestHandler.java index 0809c77c9..84164030f 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/RemoteStartChargingRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/RemoteStartChargingRequestHandler.java @@ -1,6 +1,7 @@ package com.jsowell.netty.handler.yunkuaichong; import com.jsowell.common.constant.Constants; +import com.jsowell.common.constant.mq.ThirdPartyRabbitConstants; import com.jsowell.common.core.domain.ykc.YKCDataProtocol; import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; import com.jsowell.common.enums.ykc.ChargingFailedReasonEnum; @@ -14,6 +15,7 @@ import com.jsowell.pile.service.OrderBasicInfoService; import com.jsowell.thirdparty.common.CommonService; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; @@ -40,6 +42,9 @@ public class RemoteStartChargingRequestHandler extends AbstractYkcHandler { // 引入第三方平台任务线程池 private ThreadPoolTaskExecutor thirdpartyTaskExecutor = SpringUtils.getBean("thirdpartyTaskExecutor"); + @Autowired + private RabbitTemplate rabbitTemplate; + @Override public void afterPropertiesSet() throws Exception { YKCOperateFactory.register(type, this); @@ -125,6 +130,33 @@ public class RemoteStartChargingRequestHandler extends AbstractYkcHandler { } } }, thirdpartyTaskExecutor); + + // TODO 测试mq + // 异步发送mq + CompletableFuture.runAsync(() -> { + OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode); + if (orderInfo == null) { + return; + } + try { + // 推送启动充电结果 + Thread.sleep(1000); + rabbitTemplate.convertAndSend(ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME,ThirdPartyRabbitConstants.QUEUE_CHARGE_RESULT_PUSH, orderInfo); + } catch (Exception e) { + e.printStackTrace(); + } + // 启动失败, 推送第三方订单信息 + if (StringUtils.equals(startResult, Constants.DOUBLE_ZERO)) { + try { + Thread.sleep(1000); + //充电订单信息推送,订单信息推送,停止充电结果推送,充电账单推送 + rabbitTemplate.convertAndSend(ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME,ThirdPartyRabbitConstants.QUEUE_STARTUP_CHARGING_FAILED_PUSH, orderInfo); + } catch (Exception e) { + log.error("统一推送第三方平台订单信息error, ", e); + } + } + }, thirdpartyTaskExecutor); + return null; } } diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java index 8b1fe8311..775970279 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/TransactionRecordsRequestHandler.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON; import com.google.common.primitives.Bytes; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; +import com.jsowell.common.constant.mq.ThirdPartyRabbitConstants; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.common.core.domain.ykc.YKCDataProtocol; import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; @@ -27,6 +28,7 @@ import com.jsowell.thirdparty.common.CommonService; import com.jsowell.thirdparty.platform.service.impl.ChargeAlgorithmService; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; @@ -84,6 +86,10 @@ public class TransactionRecordsRequestHandler extends AbstractYkcHandler { @Autowired private PersonalChargingRecordService personalChargingRecordService; + @Autowired + private RabbitTemplate rabbitTemplate; + + // public static void main(String[] args) { // // BigDecimal totalElectricity = new BigDecimal("23.73"); @@ -695,6 +701,27 @@ public class TransactionRecordsRequestHandler extends AbstractYkcHandler { } }, thirdpartyTaskExecutor); + + // TODO 测试mq + // 异步推送充电订单算法平台 + CompletableFuture.runAsync(() -> { + try { + String result = chargeAlgorithmService.pushOrderInfo(finalOrderBasicInfo.getOrderCode()); + log.info("异步推送充电订单算法平台 result:{}", result); + } catch (Exception e) { + log.error("异步推送充电订单算法平台 error, ", e); + } + }, thirdpartyTaskExecutor); + + + CompletableFuture.runAsync(() -> { + try { + rabbitTemplate.convertAndSend(ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME,ThirdPartyRabbitConstants.QUEUE_CHARGE_ORDER_PUSH, finalOrderBasicInfo); + } catch (Exception e) { + log.error("推送第三方平台订单信息error, ", e); + } + }, thirdpartyTaskExecutor); + } else { // 平台没有查到订单 orderBasicInfoService.saveAbnormalOrder(data); diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/UploadRealTimeMonitorHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/UploadRealTimeMonitorHandler.java index 973b3b085..008933a52 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/UploadRealTimeMonitorHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/yunkuaichong/UploadRealTimeMonitorHandler.java @@ -2,6 +2,7 @@ package com.jsowell.netty.handler.yunkuaichong; import com.jsowell.common.constant.CacheConstants; import com.jsowell.common.constant.Constants; +import com.jsowell.common.constant.mq.ThirdPartyRabbitConstants; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; import com.jsowell.common.core.domain.ykc.YKCDataProtocol; import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; @@ -21,6 +22,7 @@ import com.jsowell.pile.service.PileBasicInfoService; import com.jsowell.thirdparty.common.CommonService; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; @@ -66,6 +68,9 @@ public class UploadRealTimeMonitorHandler extends AbstractYkcHandler { @Autowired private RedisCache redisCache; + @Autowired + private RabbitTemplate rabbitTemplate; + @Override public byte[] supplyProcess(YKCDataProtocol ykcDataProtocol, ChannelHandlerContext channel) { @@ -377,6 +382,26 @@ public class UploadRealTimeMonitorHandler extends AbstractYkcHandler { }, thirdpartyTaskExecutor); } + // TODO 测试mq + // 向mq中发送实时数据消息,给第三方服务消费 + CompletableFuture.runAsync(() -> { + try { + rabbitTemplate.convertAndSend(ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME,ThirdPartyRabbitConstants.QUEUE_REALTIME_DATA_PUSH, realTimeMonitorData); + } catch (Exception e){ + log.error("向mq中发送实时数据消息供第三方服务消费 error, ", e); + } + if (StringUtils.equals(connectorStatus,Constants.ONE)){ + // 故障 + // 异步推送第三方平台告警信息 + try { + rabbitTemplate.convertAndSend(ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME,ThirdPartyRabbitConstants.QUEUE_ALARM_PUSH, realTimeMonitorData.getPutGunType()); + } catch (Exception e) { + log.error("统一推送第三方平台告警信息 error, ", e); + } + } + }, executor); + + return null; } diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/strategy/ykc/UploadRealTimeMonitorStrategy.java b/jsowell-netty/src/main/java/com/jsowell/netty/strategy/ykc/UploadRealTimeMonitorStrategy.java index 35fb69b56..154bb6bcd 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/strategy/ykc/UploadRealTimeMonitorStrategy.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/strategy/ykc/UploadRealTimeMonitorStrategy.java @@ -371,6 +371,8 @@ public class UploadRealTimeMonitorStrategy implements AbstractYkcStrategy { }, executor); } + // TODO 测试 + return null; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/rpc/WccServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/rpc/WccServiceImpl.java new file mode 100644 index 000000000..7f654db36 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/rpc/WccServiceImpl.java @@ -0,0 +1,504 @@ +package com.jsowell.pile.rpc; + +import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; +import com.jsowell.common.dto.JCTRealTimeMonitorData; +import com.jsowell.common.dto.thirdparty.JCTQueryOrderDTO; +import com.jsowell.common.dto.thirdparty.JCTQueryStartChargeDTO; +import com.jsowell.common.dto.thirdparty.JCTQueryStationInfoDTO; +import com.jsowell.common.dto.thirdparty.JCTStartChargingCommand; +import com.jsowell.common.service.WccService; +import com.jsowell.common.vo.thirdParty.*; +import com.jsowell.pile.domain.*; +import com.jsowell.pile.domain.ykcCommond.StartChargingCommand; +import com.jsowell.pile.dto.QueryOrderDTO; +import com.jsowell.pile.dto.QueryStartChargeDTO; +import com.jsowell.pile.dto.QueryStationInfoDTO; +import com.jsowell.pile.service.*; +import com.jsowell.pile.vo.ThirdPartySecretInfoVO; +import com.jsowell.pile.vo.base.ConnectorInfoVO; +import com.jsowell.pile.vo.base.MerchantInfoVO; +import com.jsowell.pile.vo.base.ThirdPartyStationInfoVO; +import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO; +import com.jsowell.pile.vo.uniapp.customer.BillingPriceVO; +import com.jsowell.pile.vo.web.PileConnectorInfoVO; +import com.jsowell.pile.vo.web.PileModelInfoVO; +import com.jsowell.pile.vo.web.PileStationVO; +import com.jsowell.thirdparty.service.ThirdpartySecretInfoService; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +@DubboService(group = "thirdparty" , version = "1.0.0") +@Slf4j +public class WccServiceImpl implements WccService { + + @Autowired + private PileBasicInfoService pileBasicInfoService; + + @Autowired + private ThirdpartySecretInfoService thirdpartySecretInfoService; + + @Autowired + private OrderBasicInfoService orderBasicInfoService; + + @Autowired + private PileStationInfoService pileStationInfoService; + + @Autowired + private PileMerchantInfoService pileMerchantInfoService; + + @Autowired + private PileConnectorInfoService pileConnectorInfoService; + + @Autowired + private YKCPushCommandService ykCPushCommandService; + + @Autowired + private PileBillingTemplateService pileBillingTemplateService; + + @Autowired + private PileRemoteService pileRemoteService; + + @Autowired + private PileModelInfoService pileModelInfoService; + + /** + * 测试接口 + * @param name + * @return + */ + @Override + public String sayHello(String name) { + return "hello " + name + " from wcc-server"; + } + +// /** +// * 查询充电桩详情 +// * +// * @param pileCode +// */ +// @Override +// public PileInfoVO getPileDetail(String pileCode) { +// return null; +// } +// +// /** +// * 查询计费模板 +// * +// * @param pileCode +// */ +// @Override +// public BillingTemplateVO getBillingTemplate(String pileCode) { +// return null; +// } +// +// /** +// * 启动充电callback +// * +// * @param pileCode +// * @param result +// */ +// @Override +// public void startChargeCallback(String pileCode, String result) { +// +// } +// +// /** +// * 停止充电callback +// * +// * @param pileCode +// * @param result +// */ +// @Override +// public void stopChargeCallback(String pileCode, String result) { +// +// } +// +// /** +// * 接收交易记录接口 +// * +// * @param transactionRecordsData +// */ +// @Override +// public void receiveTradeRecord(TransactionRecordsData transactionRecordsData) { +// +// } +// +// /** +// * 接收实时监测数据接口 +// * +// * @param realTimeMonitorData +// */ +// @Override +// public void receiveRealTimeData(JCTRealTimeMonitorData realTimeMonitorData) { +// +// } + + /** + * 查询充电桩基本信息 + * @param pileSn + * @return + */ + @Override + public JCTPileBasicInfo selectPileBasicInfoBySN(String pileSn) { + PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn); + if (pileBasicInfo == null) { + return null; + } + JCTPileBasicInfo build = JCTPileBasicInfo.builder() + .sn(pileBasicInfo.getSn()) + .name(pileBasicInfo.getName()) + .businessType(pileBasicInfo.getBusinessType()) + .secretKey(pileBasicInfo.getSecretKey()) + .softwareProtocol(pileBasicInfo.getSoftwareProtocol()) + .productionDate(pileBasicInfo.getProductionDate()) + .licenceId(pileBasicInfo.getLicenceId()) + .modelId(pileBasicInfo.getModelId()) + .simId(pileBasicInfo.getSimId()) + .iccId(pileBasicInfo.getIccId()) + .merchantId(pileBasicInfo.getMerchantId()) + .stationId(pileBasicInfo.getStationId()) + .faultReason(pileBasicInfo.getFaultReason()) + .createTime(pileBasicInfo.getCreateTime()) + .build(); + + return build; + } + + /** + * 查询第三方平台配置信息列表 + * @param stationId + * @return + */ + @Override + public List queryStationToPlatformList(String stationId) { + List thirdPartySecretInfoVOS = thirdpartySecretInfoService.queryStationToPlatformList(stationId); + if (thirdPartySecretInfoVOS == null || thirdPartySecretInfoVOS.isEmpty()) { + return Collections.emptyList(); + } + for (ThirdPartySecretInfoVO thirdPartySecretInfoVO : thirdPartySecretInfoVOS) { + JCTThirdPartySecretInfoVO build = JCTThirdPartySecretInfoVO.builder() + .ourOperatorId(thirdPartySecretInfoVO.getOurOperatorId()) + .ourOperatorSecret(thirdPartySecretInfoVO.getOurOperatorSecret()) + .ourDataSecret(thirdPartySecretInfoVO.getOurDataSecret()) + .ourDataSecretIv(thirdPartySecretInfoVO.getOurDataSecretIv()) + .ourSigSecret(thirdPartySecretInfoVO.getOurSigSecret()) + .ourPrivateSecret(thirdPartySecretInfoVO.getOurPrivateSecret()) + .ourPublicSecret(thirdPartySecretInfoVO.getOurPublicSecret()) + .platformName(thirdPartySecretInfoVO.getPlatformName()) + .platformType(thirdPartySecretInfoVO.getPlatformType()) + .theirOperatorId(thirdPartySecretInfoVO.getTheirOperatorId()) + .theirOperatorSecret(thirdPartySecretInfoVO.getTheirOperatorSecret()) + .theirDataSecret(thirdPartySecretInfoVO.getTheirDataSecret()) + .theirDataSecretIv(thirdPartySecretInfoVO.getTheirDataSecretIv()) + .theirSigSecret(thirdPartySecretInfoVO.getTheirSigSecret()) + .theirUrlPrefix(thirdPartySecretInfoVO.getTheirUrlPrefix()) + .theirPublicSecret(thirdPartySecretInfoVO.getTheirPublicSecret()) + .theirPrivateSecret(thirdPartySecretInfoVO.getTheirPrivateSecret()) + .build(); + return Collections.singletonList(build); + } + return Collections.emptyList(); + } + + /** + * 根据交易流水号查询订单信息 + * @param transactionCode + * @return + */ + @Override + public JCTOrderBasicInfo getOrderInfoByTransactionCode(String transactionCode) { + OrderBasicInfo orderInfoByTransactionCode = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode); + if (orderInfoByTransactionCode == null) { + return null; + } + JCTOrderBasicInfo jctOrderBasicInfo = new JCTOrderBasicInfo(); + BeanUtils.copyProperties(orderInfoByTransactionCode, jctOrderBasicInfo); + return jctOrderBasicInfo; + } + + /** + * 根据充电桩枪口号查询充电站信息 + * + * @param pileConnectorCode + * @return + */ + @Override + public JCTPileStationVO getStationInfoByPileConnectorCode(String pileConnectorCode) { + PileStationVO stationInfoByPileConnectorCode = pileStationInfoService.getStationInfoByPileConnectorCode(pileConnectorCode); + if (stationInfoByPileConnectorCode == null) { + return null; + } + JCTPileStationVO jctPileStationVO = new JCTPileStationVO(); + BeanUtils.copyProperties(stationInfoByPileConnectorCode, jctPileStationVO); + return jctPileStationVO; + } + + @Override + public JCTThirdPartySecretInfoVO queryByOperatorId(String operatorId) { + ThirdPartySecretInfoVO thirdPartySecretInfoVO = thirdpartySecretInfoService.queryByOperatorId(operatorId); + if (thirdPartySecretInfoVO == null) { + return null; + } + JCTThirdPartySecretInfoVO jctThirdPartySecretInfoVO = new JCTThirdPartySecretInfoVO(); + BeanUtils.copyProperties(thirdPartySecretInfoVO, jctThirdPartySecretInfoVO); + return jctThirdPartySecretInfoVO; + } + + @Override + public JCTPileStationInfo selectPileStationInfoById(Long id) { + PileStationInfo pileStationInfo = pileStationInfoService.selectPileStationInfoById(id); + if (pileStationInfo == null) { + return null; + } + JCTPileStationInfo jctPileStationInfo = new JCTPileStationInfo(); + BeanUtils.copyProperties(pileStationInfo, jctPileStationInfo); + return jctPileStationInfo; + } + + @Override + public JCTMerchantInfoVO getMerchantInfoVO(String merchantId) { + MerchantInfoVO merchantInfoVO = pileMerchantInfoService.getMerchantInfoVO(merchantId); + if (merchantInfoVO == null) { + return null; + } + JCTMerchantInfoVO jctMerchantInfoVO = new JCTMerchantInfoVO(); + BeanUtils.copyProperties(merchantInfoVO, jctMerchantInfoVO); + return jctMerchantInfoVO; + } + + @Override + public List selectStationInfosByThirdParty(JCTQueryStationInfoDTO queryStationInfoDTO) { + if (queryStationInfoDTO == null) { + return Collections.emptyList(); + } + QueryStationInfoDTO dto = new QueryStationInfoDTO(); + BeanUtils.copyProperties(queryStationInfoDTO, dto); + List thirdPartyStationInfoVOS = pileStationInfoService.selectStationInfosByThirdParty(dto); + if (thirdPartyStationInfoVOS == null || thirdPartyStationInfoVOS.isEmpty()) { + return Collections.emptyList(); + } + List jctThirdPartyStationInfoVOS = new ArrayList<>(); + for (ThirdPartyStationInfoVO thirdPartyStationInfoVO : thirdPartyStationInfoVOS) { + JCTThirdPartyStationInfoVO jctThirdPartyStationInfoVO = new JCTThirdPartyStationInfoVO(); + BeanUtils.copyProperties(thirdPartyStationInfoVO, jctThirdPartyStationInfoVO); + jctThirdPartyStationInfoVOS.add(jctThirdPartyStationInfoVO); + } + return jctThirdPartyStationInfoVOS; + } + + @Override + public JCTThirdPartySecretInfoVO queryByThirdPlatformType(String thirdPlatformType) { + ThirdPartySecretInfoVO thirdPartySecretInfoVO = thirdpartySecretInfoService.queryByThirdPlatformType(thirdPlatformType); + if (thirdPartySecretInfoVO == null) { + return null; + } + JCTThirdPartySecretInfoVO jctThirdPartySecretInfoVO = new JCTThirdPartySecretInfoVO(); + BeanUtils.copyProperties(thirdPartySecretInfoVO, jctThirdPartySecretInfoVO); + return jctThirdPartySecretInfoVO; + } + + @Override + public List getAccumulativeInfoForLianLian(JCTQueryStationInfoDTO queryStationInfoDTO) { + if (queryStationInfoDTO == null){ + return Collections.emptyList(); + } + QueryStationInfoDTO dto = new QueryStationInfoDTO(); + BeanUtils.copyProperties(queryStationInfoDTO, dto); + List accumulativeInfoForLianLian = orderBasicInfoService.getAccumulativeInfoForLianLian(dto); + if (accumulativeInfoForLianLian == null || accumulativeInfoForLianLian.isEmpty()) { + return Collections.emptyList(); + } + List jctAccumulativeInfoVOS = new ArrayList<>(); + for (AccumulativeInfoVO accumulativeInfoVO : accumulativeInfoForLianLian) { + JCTAccumulativeInfoVO jctAccumulativeInfoVO = new JCTAccumulativeInfoVO(); + BeanUtils.copyProperties(accumulativeInfoVO, jctAccumulativeInfoVO); + jctAccumulativeInfoVOS.add(jctAccumulativeInfoVO); + } + return jctAccumulativeInfoVOS; + } + + @Override + public List getConnectorListForLianLian(Long stationId) { + List connectorListForLianLian = pileConnectorInfoService.getConnectorListForLianLian(stationId); + if (connectorListForLianLian == null || connectorListForLianLian.isEmpty()) { + return Collections.emptyList(); + } + List jctConnectorInfoVOS = new ArrayList<>(); + for (ConnectorInfoVO connectorInfoVO : connectorListForLianLian) { + JCTConnectorInfoVO jctConnectorInfoVO = new JCTConnectorInfoVO(); + BeanUtils.copyProperties(connectorInfoVO, jctConnectorInfoVO); + jctConnectorInfoVOS.add(jctConnectorInfoVO); + } + return jctConnectorInfoVOS; + } + + @Override + public JCTOrderBasicInfo queryChargingByPileConnectorCode(String pileConnectorCode) { + OrderBasicInfo orderBasicInfo = orderBasicInfoService.queryChargingByPileConnectorCode(pileConnectorCode); + if (orderBasicInfo == null) { + return null; + } + JCTOrderBasicInfo jctOrderBasicInfo = new JCTOrderBasicInfo(); + BeanUtils.copyProperties(orderBasicInfo, jctOrderBasicInfo); + return jctOrderBasicInfo; + } + + @Override + public List getChargingRealTimeData(String transactionCode) { + if (transactionCode == null) { + return Collections.emptyList(); + } + List chargingRealTimeData = orderBasicInfoService.getChargingRealTimeData(transactionCode); + if (chargingRealTimeData == null || chargingRealTimeData.isEmpty()) { + return Collections.emptyList(); + } + List jctRealTimeMonitorDatas = new ArrayList<>(); + for (RealTimeMonitorData realTimeMonitorData : chargingRealTimeData) { + JCTRealTimeMonitorData jctRealTimeMonitorData = new JCTRealTimeMonitorData(); + BeanUtils.copyProperties(realTimeMonitorData, jctRealTimeMonitorData); + jctRealTimeMonitorDatas.add(jctRealTimeMonitorData); + } + return jctRealTimeMonitorDatas; + } + + @Override + public JCTOrderBasicInfo getOrderInfoByOrderCode(String orderCode) { + OrderBasicInfo orderInfoByOrderCode = orderBasicInfoService.getOrderInfoByOrderCode(orderCode); + if (orderInfoByOrderCode == null) { + return null; + } + JCTOrderBasicInfo jctOrderBasicInfo = new JCTOrderBasicInfo(); + BeanUtils.copyProperties(orderInfoByOrderCode, jctOrderBasicInfo); + return jctOrderBasicInfo; + } + + @Override + public JCTOrderDetail getOrderDetailByOrderCode(String orderCode) { + OrderDetail orderDetailByOrderCode = orderBasicInfoService.getOrderDetailByOrderCode(orderCode); + if (orderDetailByOrderCode == null) { + return null; + } + JCTOrderDetail jctOrderDetail = new JCTOrderDetail(); + BeanUtils.copyProperties(orderDetailByOrderCode, jctOrderDetail); + return jctOrderDetail; + } + + @Override + public JCTPileConnectorInfoVO getPileConnectorInfoByConnectorCode(String pileConnectorCode) { + PileConnectorInfoVO info = pileConnectorInfoService.getPileConnectorInfoByConnectorCode(pileConnectorCode); + if (info == null) { + return null; + } + JCTPileConnectorInfoVO jctPileConnectorInfoVO = new JCTPileConnectorInfoVO(); + BeanUtils.copyProperties(info, jctPileConnectorInfoVO); + return jctPileConnectorInfoVO; + } + + @Override + public Map generateOrderForThirdParty(JCTQueryStartChargeDTO dto) { + if (dto == null){ + return Collections.emptyMap(); + } + QueryStartChargeDTO queryStartChargeDTO = new QueryStartChargeDTO(); + BeanUtils.copyProperties(dto, queryStartChargeDTO); + return orderBasicInfoService.generateOrderForThirdParty(queryStartChargeDTO); + } + + @Override + public void pushStartChargingCommand(JCTStartChargingCommand command) { + if (command == null){ + return; + } + StartChargingCommand startChargingCommand = new StartChargingCommand(); + BeanUtils.copyProperties(command, startChargingCommand); + try { + ykCPushCommandService.pushStartChargingCommand(startChargingCommand); + }catch (Exception e){ + log.error("第三方服务发送启动充电失败", e); + } + + } + + @Override + public List queryBillingPrice(String s) { + List billingPriceVOS = pileBillingTemplateService.queryBillingPrice(s); + if (billingPriceVOS == null || billingPriceVOS.isEmpty()) { + return Collections.emptyList(); + } + List jctBillingPriceVOS = new ArrayList<>(); + for (BillingPriceVO billingPriceVO : billingPriceVOS) { + JCTBillingPriceVO jctBillingPriceVO = new JCTBillingPriceVO(); + BeanUtils.copyProperties(billingPriceVO, jctBillingPriceVO); + jctBillingPriceVOS.add(jctBillingPriceVO); + } + return jctBillingPriceVOS; + } + + @Override + public void remoteStopCharging(String pileSn , String connectorCode , String transactionCode) { + try { + pileRemoteService.remoteStopCharging(pileSn, connectorCode, transactionCode); + }catch (Exception e){ + log.error("第三方服务远程停止充电失败", e); + } + } + + @Override + public List getPileListByStationId(String pileSn) { + List pileListByStationId = pileBasicInfoService.getPileListByStationId(pileSn); + if (pileListByStationId == null || pileListByStationId.isEmpty()) { + return Collections.emptyList(); + } + List jctPileBasicInfos = new ArrayList<>(); + for (PileBasicInfo pileBasicInfo : pileListByStationId) { + JCTPileBasicInfo jctPileBasicInfo = new JCTPileBasicInfo(); + BeanUtils.copyProperties(pileBasicInfo, jctPileBasicInfo); + jctPileBasicInfos.add(jctPileBasicInfo); + } + return jctPileBasicInfos; + } + + @Override + public JCTPileModelInfoVO getPileModelInfoByPileSn(String pileSn) { + PileModelInfoVO pileModelInfoByPileSn = pileModelInfoService.getPileModelInfoByPileSn(pileSn); + if (pileModelInfoByPileSn == null) { + return null; + } + JCTPileModelInfoVO jctPileModelInfoVO = new JCTPileModelInfoVO(); + BeanUtils.copyProperties(pileModelInfoByPileSn, jctPileModelInfoVO); + return jctPileModelInfoVO; + } + + @Override + public List selectPileConnectorInfoList(String sn) { + List selectPileConnectorInfoList = pileConnectorInfoService.selectPileConnectorInfoList(sn); + if (selectPileConnectorInfoList == null || selectPileConnectorInfoList.isEmpty()) { + return Collections.emptyList(); + } + List jctPileConnectorInfos = new ArrayList<>(); + for (PileConnectorInfo pileConnectorInfo : selectPileConnectorInfoList) { + JCTPileConnectorInfo jctPileConnectorInfo = new JCTPileConnectorInfo(); + BeanUtils.copyProperties(pileConnectorInfo, jctPileConnectorInfo); + jctPileConnectorInfos.add(jctPileConnectorInfo); + } + return jctPileConnectorInfos; + } + + @Override + public List tempGetOrderCodes(JCTQueryOrderDTO dto) { + if (dto == null){ + return Collections.emptyList(); + } + QueryOrderDTO queryOrderDTO = new QueryOrderDTO(); + BeanUtils.copyProperties(dto, queryOrderDTO); + return orderBasicInfoService.tempGetOrderCodes(queryOrderDTO); + } + +}