From c81e1267ee71da9bbf345ab2788deb3a65dbcd8c Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期一, 02 九月 2024 16:39:35 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 299 +++++++++++- ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderAppealVO.java | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java | 109 ++++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java | 1 ruoyi-service/ruoyi-integration/pom.xml | 7 ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java | 1 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java | 7 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java | 36 + ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java | 28 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java | 104 ++-- ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java | 4 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java | 11 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 23 + ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java | 2 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java | 109 ++++ ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java | 31 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ChargingOrderListInfoVO.java | 70 +++ ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 10 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java | 4 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java | 11 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java | 23 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml | 1 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java | 34 + ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml | 7 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/OnlineMessageListener.java | 15 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 39 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java | 16 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java | 11 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PingMessageListener.java | 15 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderAppealServiceImpl.java | 9 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java | 5 /dev/null | 124 ----- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java | 35 + ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java | 2 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java | 7 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TAccountingStrategy.java | 4 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java | 16 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java | 17 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java | 26 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java | 86 +++ ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java | 1 43 files changed, 1,115 insertions(+), 253 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java index bb60f76..71dc82f 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java @@ -35,7 +35,7 @@ @Override public R<TAppUser> getUserById(Long id) { - return R.fail("根据id查询用户失败:"+throwable.getMessage()); + throw new RuntimeException("根据id查询用户失败:"+throwable.getMessage()); } @Override diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java index f22b61a..ebd90f7 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java @@ -26,7 +26,12 @@ @Override public R<TAppUserVipDetail> getAppUserVipDetail(GetAppUserVipDetail getAppUserVipDetail) { - return R.fail("获取用户当前有效的VIP明细调用失败:" + throwable.getMessage()); + throw new RuntimeException("获取用户当前有效的VIP明细调用失败:" + throwable.getMessage()); + } + + @Override + public void updateAppUserVipDetail(TAppUserVipDetail appUserVipDetail) { + throw new RuntimeException(throwable.getMessage()); } }; } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java index 37f0dbb..2470569 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java @@ -7,6 +7,7 @@ import com.ruoyi.common.core.domain.R; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; /** * @author zhibing.pu @@ -24,4 +25,10 @@ R<TAppUserVipDetail> getAppUserVipDetail(GetAppUserVipDetail getAppUserVipDetail); + /** + * 修改会员明细 + * @param appUserVipDetail + */ + @PostMapping("/appUserVipDetail/updateAppUserVipDetail") + void updateAppUserVipDetail(@RequestBody TAppUserVipDetail appUserVipDetail); } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java new file mode 100644 index 0000000..cdc9f16 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java @@ -0,0 +1,31 @@ +package com.ruoyi.chargingPile.api.factory; + +import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.common.core.domain.R; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * @author zhibing.pu + * @Date 2024/8/28 18:33 + */ +@Component +public class AccountingStrategyDetailFallbackFactory implements FallbackFactory<AccountingStrategyDetailClient> { + private static final Logger log = LoggerFactory.getLogger(AccountingStrategyDetailFallbackFactory.class); + + + @Override + public AccountingStrategyDetailClient create(Throwable throwable) { + log.error("计费策略调用失败:{}", throwable.getMessage()); + return new AccountingStrategyDetailClient(){ + + @Override + public R<TAccountingStrategyDetail> getNowData(Integer accountingStrategyId) { + return R.fail("获取当前有效的计费策略明细失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java index 3c9c594..f5a89cc 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java @@ -35,7 +35,7 @@ @Override public R<TChargingGun> getChargingGunById(Integer id) { - return R.fail("根据id获取充电枪失败:" + throwable.getMessage()); + throw new RuntimeException("根据id获取充电枪失败:" + throwable.getMessage()); } @Override diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java new file mode 100644 index 0000000..b63175e --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java @@ -0,0 +1,26 @@ +package com.ruoyi.chargingPile.api.feignClient; + +import com.ruoyi.chargingPile.api.factory.AccountingStrategyDetailFallbackFactory; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author zhibing.pu + * @Date 2024/8/28 18:33 + */ +@FeignClient(contextId = "AccountingStrategyDetailClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = AccountingStrategyDetailFallbackFactory.class) +public interface AccountingStrategyDetailClient { + + + /** + * 获取当前有效的计费策略明细 + * @param accountingStrategyId + * @return + */ + @PostMapping("/t-accounting-strategy-detail/getNowData") + R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId); +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TAccountingStrategy.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TAccountingStrategy.java index 37f71b0..c9c09f2 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TAccountingStrategy.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TAccountingStrategy.java @@ -85,6 +85,8 @@ @TableField("two_audit_time") private LocalDateTime twoAuditTime; - + @ApiModelProperty(value = "父级id 上一次已审核通过的id 为空则代表是新增,或者本次数据状态审核中或已拒绝") + @TableField("parent_id") + private Integer parentId; } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index e5e3ae5..f015cf5 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,4 +1,5 @@ com.ruoyi.chargingPile.api.factory.ChargingPileFallbackFactory com.ruoyi.chargingPile.api.factory.SiteFallbackFactory com.ruoyi.chargingPile.api.factory.ParkingLotFallbackFactory -com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory \ No newline at end of file +com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory +com.ruoyi.chargingPile.api.factory.AccountingStrategyDetailFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java new file mode 100644 index 0000000..e0c2990 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java @@ -0,0 +1,34 @@ +package com.ruoyi.integration.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.feignClient.PlatformStartChargingReplyClient; +import com.ruoyi.integration.api.model.PlatformStartChargingReply; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/31 15:16 + */ +@Component +public class PlatformStartChargingReplyFallbackFactory implements FallbackFactory<PlatformStartChargingReplyClient> { + + private static final Logger log = LoggerFactory.getLogger(PlatformStartChargingReplyFallbackFactory.class); + + + @Override + public PlatformStartChargingReplyClient create(Throwable throwable) { + log.error("远程启机应答调用失败:{}", throwable.getMessage()); + return new PlatformStartChargingReplyClient(){ + + @Override + public R<List<PlatformStartChargingReply>> getPlatformStartChargingReply(String code) { + return R.fail("根据订单编号查询远程启机应答结果失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java index 863530b..8b9c02b 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java @@ -28,6 +28,7 @@ @Override public void platformStartCharging(PlatformStartCharging platformStartCharging) { + throw new RuntimeException("远程启机失败" + throwable.getMessage()); } }; } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java new file mode 100644 index 0000000..e3856e6 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java @@ -0,0 +1,28 @@ +package com.ruoyi.integration.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.factory.PlatformStartChargingReplyFallbackFactory; +import com.ruoyi.integration.api.model.PlatformStartChargingReply; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/31 15:16 + */ +@FeignClient(contextId = "PlatformStartChargingReplyClient", value = ServiceNameConstants.INTEGRATION_SERVICE, fallbackFactory = PlatformStartChargingReplyFallbackFactory.class) +public interface PlatformStartChargingReplyClient { + + + /** + * 根据订单编号查询远程启机应答结果 + * @param code + * @return + */ + @PostMapping("/platformStartChargingReply/getPlatformStartChargingReply") + R<List<PlatformStartChargingReply>> getPlatformStartChargingReply(@RequestParam("code") String code); +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java index 0657802..c2c27be 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java @@ -2,7 +2,6 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.integration.api.factory.SendMessageFallbackFactory; -import com.ruoyi.integration.api.model.EndCharge; import com.ruoyi.integration.api.model.PlatformStartCharging; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java index bfbc261..0669156 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java @@ -3,7 +3,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; -import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import java.math.BigDecimal; @@ -17,7 +16,6 @@ @Accessors(chain = true) public class UploadRealTimeMonitoringData extends BaseModel { - @Id private String transaction_serial_number; // 交易流水号 private String charging_pile_code; // 桩编码 private String charging_gun_code; // 抢号 @@ -45,6 +43,8 @@ private BigDecimal period_service_price;// @ApiModelProperty("时段服务费") + private BigDecimal period_charging_degree;// @ApiModelProperty("时段充电度数") + } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 5d5cc8f..6cc32c5 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,4 +1,5 @@ com.ruoyi.integration.api.factory.IntegrationFallbackFactory com.ruoyi.integration.api.factory.UploadRealTimeMonitoringDataFallbackFactory com.ruoyi.integration.api.factory.ChargingHandshakeFallbackFactory -com.ruoyi.integration.api.factory.SendMessageFallbackFactory \ No newline at end of file +com.ruoyi.integration.api.factory.SendMessageFallbackFactory +com.ruoyi.integration.api.factory.PlatformStartChargingReplyFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java index 4f1db3a..8738bb2 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java @@ -6,6 +6,7 @@ import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.query.TChargingCountQuery; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -63,6 +64,10 @@ public R<Long> getCar() { return R.fail("获取用户最近使用车辆充电的车辆id:" + throwable.getMessage()); } + + @Override + public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) { + } }; } } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java index 8576cd9..96340a0 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java @@ -7,6 +7,7 @@ import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.query.TChargingCountQuery; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -60,4 +61,13 @@ */ @GetMapping(value = "/t-charging-order/getCar") public R<Long> getCar(); + + + /** + * 处理充电订单实时监控数据相关的业务逻辑 + * @param query + * @return + */ + @PostMapping(value = "/t-charging-order/chargeMonitoring") + void chargeMonitoring(@RequestBody UploadRealTimeMonitoringDataQuery query); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java index 2dacfee..10018dc 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java @@ -122,6 +122,10 @@ @ApiModelProperty(value = "充值支付第三方流水号") @TableField("recharge_serial_number") private String rechargeSerialNumber; + + @ApiModelProperty(value = "剩余金额(用于前端展示)") + @TableField("residual_amount") + private BigDecimal residualAmount; @ApiModelProperty(value = "订单金额(总金额)") @TableField("order_amount") @@ -182,11 +186,4 @@ @TableField("pay_time") private LocalDateTime payTime; - @ApiModelProperty(value = "累计服务费") - @TableField("service_charge") - private BigDecimal serviceCharge; - - @ApiModelProperty(value = "累计电费") - @TableField("electrovalence") - private BigDecimal electrovalence; } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java new file mode 100644 index 0000000..33b0426 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java @@ -0,0 +1,36 @@ +package com.ruoyi.order.api.query; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 上传实时监测数据 + **/ + +@Data +public class UploadRealTimeMonitoringDataQuery { + private String transaction_serial_number; // 交易流水号 + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 + private Integer charging_gun_status; // 状态(0:离线,1:故障,2:空闲,3:充电) + private Integer homing_status; // 枪是否归位(0:否,1:是,2:未知) + private Integer insertion_status; // 是否插枪(0:否,1:是) + private BigDecimal output_voltage; // 输出电压,精确到小数点后一位;待机置零 + private BigDecimal output_current; // 输出电流,精确到小数点后一位;待机置零 + private Integer gun_line_temperature; // 枪线温度,整形,偏移量-50;待机置零 + private String gun_line_code; // 枪线编码,没有置零 + private Integer soc; // SOC待机置零;交流桩置零 + private Integer battery_temperature; // 电池组最高温度,整形,偏移量-50 ºC;待机置零;交流桩置零 + private Integer cumulative_charging_time; // 累计充电时间,单位:min;待机置零 + private Integer time_remaining; // 剩余时间,单位:min;待机置零、交流桩置零 + private BigDecimal charging_degree; // 充电度数,精确到小数点后四位;待机置零 + private BigDecimal loss_of_charging_degree; // 计损充电度数,精确到小数点后四位;待机置零,未设置计损比例时等于充电度数 + private BigDecimal paid_amount; // 已充金额,精确到小数点后四位;待机置零(电费+服务费)*计损充电度数 + private Integer hardware_fault; // 硬件故障(1:急停按钮动作故障;2:无可用整流模块;3:出风口温度过高;4:交流防雷故障;5:交直流模块 DC20 通信中断;6:绝缘检测模块 FC08 通信中断;7:电度表通信中断;8:读卡器通信中断;9:RC10 通信中断;10:风扇调速板故障;11:直流熔断器故障;12:高压接触器故障;13:门打开) + private Date create_time; + +} + + diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderAppealVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderAppealVO.java index 7bec166..b991d8e 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderAppealVO.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderAppealVO.java @@ -35,5 +35,7 @@ private String gunName; @ApiModelProperty(value = "枪号") private String gunNumber; + @ApiModelProperty(value = "结束方式(0=异常终止,1=主动终止,2=满电终止,3=费用不足终止)") + private Integer endMode; } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java index 42de42e..690629f 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java @@ -56,6 +56,15 @@ } return R.ok(list); } - + + + /** + * 修改会员明细 + * @param appUserVipDetail + */ + @PostMapping("/updateAppUserVipDetail") + public void updateAppUserVipDetail(@RequestBody TAppUserVipDetail appUserVipDetail){ + appUserVipDetailService.updateById(appUserVipDetail); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java index 58e94fb..b0b15f2 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java @@ -16,6 +16,7 @@ import com.ruoyi.chargingPile.service.TChargingPileService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.SteategyPassDto; +import com.ruoyi.common.core.enums.AuditStateEnum; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.domain.BaseDelete; import com.ruoyi.common.core.web.page.PageInfo; @@ -40,6 +41,7 @@ import java.time.LocalTime; import java.util.Arrays; import java.util.List; +import java.util.Objects; import static com.ruoyi.common.core.context.SecurityContextHolder.getUserId; @@ -115,7 +117,6 @@ // 添加明细 dto.getAccountingStrategyDetails().forEach(detail -> detail.setAccountingStrategyId(dto.getId())); accountingStrategyDetailService.saveBatch(dto.getAccountingStrategyDetails()); - // TODO 硬件 同步策略到充电桩 return AjaxResult.ok(dto.getId()); } @@ -125,19 +126,52 @@ @Log(title = "修改计费策略", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-计费策略", "管理后台-站点管理"},value = "修改计费策略") @PostMapping(value = "/update") - public AjaxResult<Boolean> update(@RequestBody TAccountingStrategyDTO dto) { + public AjaxResult<String> update(@RequestBody TAccountingStrategyDTO dto) { Boolean flag = accountingStrategyDetailService.isStrategy24Hour(dto.getAccountingStrategyDetails()); if(flag){ return AjaxResult.error("计费模板时间设置有误差"); } - // 删除计费策略明细信息 - accountingStrategyDetailService.remove(Wrappers.lambdaQuery(TAccountingStrategyDetail.class) - .eq(TAccountingStrategyDetail::getAccountingStrategyId, dto.getId())); - accountingStrategyService.updateById(dto); - // 添加明细 - dto.getAccountingStrategyDetails().forEach(detail -> detail.setAccountingStrategyId(dto.getId())); - // TODO 硬件 同步策略到充电桩 - return AjaxResult.ok(accountingStrategyDetailService.saveBatch(dto.getAccountingStrategyDetails())); + // 判断修改的计费策略是否为已通过 + if(dto.getAuditStatus() == 3 || dto.getAuditStatus() == 4){ + // 查询是否有下级审核中的策略 + TAccountingStrategy children = accountingStrategyService.getOne(Wrappers.lambdaQuery(TAccountingStrategy.class) + .eq(TAccountingStrategy::getParentId, dto.getId()) + .ne(TAccountingStrategy::getAuditStatus, Arrays.asList(3,4))); + if(Objects.nonNull(children)){ + // 删除计费策略明细信息 + accountingStrategyDetailService.remove(Wrappers.lambdaQuery(TAccountingStrategyDetail.class) + .eq(TAccountingStrategyDetail::getAccountingStrategyId, children.getId())); + dto.setAuditStatus(1); + accountingStrategyService.updateById(dto); + // 添加明细 + dto.getAccountingStrategyDetails().forEach(detail -> detail.setAccountingStrategyId(dto.getId())); + accountingStrategyDetailService.saveBatch(dto.getAccountingStrategyDetails()); + }else { + Long userId = SecurityUtils.getLoginUser().getUserid(); + dto.setUserId(userId); + dto.setAuditStatus(1); + dto.setId(null); + dto.setParentId(dto.getId()); + accountingStrategyService.save(dto); + // 添加明细 + List<TAccountingStrategyDetail> accountingStrategyDetails = dto.getAccountingStrategyDetails(); + accountingStrategyDetails.forEach(detail -> { + detail.setAccountingStrategyId(dto.getId()); + detail.setId(null); + }); + accountingStrategyDetailService.saveBatch(accountingStrategyDetails); + } + }else { + // 删除计费策略明细信息 + accountingStrategyDetailService.remove(Wrappers.lambdaQuery(TAccountingStrategyDetail.class) + .eq(TAccountingStrategyDetail::getAccountingStrategyId, dto.getId())); + dto.setAuditStatus(1); + accountingStrategyService.updateById(dto); + // 添加明细 + dto.getAccountingStrategyDetails().forEach(detail -> detail.setAccountingStrategyId(dto.getId())); + accountingStrategyDetailService.saveBatch(dto.getAccountingStrategyDetails()); + } + return AjaxResult.success(); } /** @@ -162,12 +196,61 @@ } /** + * 查看计费策略详情-修改后 + */ + @ApiOperation(tags = {"后台-计费策略", "管理后台-站点管理"},value = "查看计费策略详情修改后children的数据") + @GetMapping(value = "/getDetailChildrenById") + public AjaxResult<TAccountingStrategyVO> getDetailChildrenById(@RequestParam("id") Integer id) { + TAccountingStrategyVO accountingStrategyVO = new TAccountingStrategyVO(); + // 先查询children对象 + TAccountingStrategy children = accountingStrategyService.getOne(Wrappers.lambdaQuery(TAccountingStrategy.class) + .eq(TAccountingStrategy::getParentId, id) + .orderByDesc(TAccountingStrategy::getCreateTime) + .last("LIMIT 1")); + if(Objects.nonNull(children)){ + BeanUtils.copyProperties(children,accountingStrategyVO); + // 查询用户信息 + if(null != children.getFirstUserId()){ + String firstUserName = sysUserClient.getSysUser(children.getFirstUserId()).getData().getNickName(); + accountingStrategyVO.setFirstUserName(firstUserName); + } + if(null != children.getTwoUserId()){ + String twoUserName = sysUserClient.getSysUser(children.getTwoUserId()).getData().getNickName(); + accountingStrategyVO.setTwoUserName(twoUserName); + } + accountingStrategyVO.setAccountingStrategyDetailList(accountingStrategyDetailService.list(Wrappers.lambdaQuery(TAccountingStrategyDetail.class) + .eq(TAccountingStrategyDetail::getAccountingStrategyId, children.getId()))); + }else { + TAccountingStrategy accountingStrategy = accountingStrategyService.getById(id); + BeanUtils.copyProperties(accountingStrategy,accountingStrategyVO); + // 查询用户信息 + if(null != accountingStrategy.getFirstUserId()){ + String firstUserName = sysUserClient.getSysUser(accountingStrategy.getFirstUserId()).getData().getNickName(); + accountingStrategyVO.setFirstUserName(firstUserName); + } + if(null != accountingStrategy.getTwoUserId()){ + String twoUserName = sysUserClient.getSysUser(accountingStrategy.getTwoUserId()).getData().getNickName(); + accountingStrategyVO.setTwoUserName(twoUserName); + } + accountingStrategyVO.setAccountingStrategyDetailList(accountingStrategyDetailService.list(Wrappers.lambdaQuery(TAccountingStrategyDetail.class) + .eq(TAccountingStrategyDetail::getAccountingStrategyId, id))); + } + return AjaxResult.ok(accountingStrategyVO); + } + + /** * 删除计费策略 */ @Log(title = "删除计费策略", businessType = BusinessType.DELETE,operatorType = OperatorType.MANAGE) @ApiOperation(tags = {"后台-计费策略"},value = "删除计费策略") @DeleteMapping(value = "/deleteById") public AjaxResult<Boolean> deleteById(@RequestParam("id") Integer id) { + // 判断策略是否在使用 + long count = siteService.count(Wrappers.lambdaQuery(Site.class) + .eq(Site::getAccountingStrategyId, id)); + if(count>0){ + return AjaxResult.error("该计费策略正在使用中,无法删除"); + } // 刪除计费策略明细信息 accountingStrategyDetailService.remove(Wrappers.lambdaQuery(TAccountingStrategyDetail.class) .eq(TAccountingStrategyDetail::getAccountingStrategyId, id)); @@ -182,6 +265,12 @@ @DeleteMapping(value = "/deleteByIds") public AjaxResult<Boolean> deleteByIds(@RequestParam String ids) { String[] split = ids.split(","); + // 判断策略是否在使用 + long count = siteService.count(Wrappers.lambdaQuery(Site.class) + .in(Site::getAccountingStrategyId, Arrays.asList(split))); + if(count>0){ + return AjaxResult.error("该计费策略正在使用中,无法删除"); + } // 刪除计费策略明细信息 accountingStrategyDetailService.remove(Wrappers.lambdaQuery(TAccountingStrategyDetail.class) .in(TAccountingStrategyDetail::getAccountingStrategyId, Arrays.asList(split))); diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java index ffc0dfa..5234673 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java @@ -1,23 +1,23 @@ package com.ruoyi.chargingPile.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TAccountingStrategy; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.chargingPile.api.vo.StrategyPriceVO; import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO; import com.ruoyi.chargingPile.service.ISiteService; import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService; import com.ruoyi.chargingPile.service.TAccountingStrategyService; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Objects; @@ -77,6 +77,19 @@ public AjaxResult<StrategyPriceVO> queryPrice(@RequestParam("siteId") Integer siteId) { return AjaxResult.ok(accountingStrategyDetailService.queryPrice(siteId)); } - + + + /** + * 获取当前有效的计费模板 + * @param accountingStrategyId + * @return + */ + @PostMapping("/getNowData") + public R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId){ + TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(new LambdaQueryWrapper<TAccountingStrategyDetail>() + .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId) + .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); + return R.ok(one); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml index 852f794..521ac63 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml @@ -18,15 +18,16 @@ <result column="two_audit_time" property="twoAuditTime" /> <result column="create_time" property="createTime" /> <result column="del_flag" property="delFlag" /> + <result column="parent_id" property="parentId" /> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, site_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag + id, site_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag,parent_id </sql> <select id="pageList" resultType="com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO"> SELECT - id, site_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag,user_id + id, site_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag,user_id,parent_id FROM t_accounting_strategy <where> <if test="query.name != null and query.name != ''"> @@ -45,7 +46,7 @@ <select id="getPlatformAccountingStrategy" resultType="com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO"> SELECT - id, site_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag + id, site_id, `name`, description, discount,first_user_id,two_user_id,first_remark,two_remark,audit_status,first_audit_time,two_audit_time, create_time, del_flag,parent_id FROM t_accounting_strategy where del_flag = 0 and site_id is not null order by create_time desc </select> </mapper> diff --git a/ruoyi-service/ruoyi-integration/pom.xml b/ruoyi-service/ruoyi-integration/pom.xml index 0ee4a2f..4c146a8 100644 --- a/ruoyi-service/ruoyi-integration/pom.xml +++ b/ruoyi-service/ruoyi-integration/pom.xml @@ -164,8 +164,11 @@ <artifactId>huaweicloud-sdk-bundle</artifactId> <version>3.1.87</version> </dependency> - - + + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-api-order</artifactId> + </dependency> </dependencies> <build> diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java new file mode 100644 index 0000000..b5224d7 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java @@ -0,0 +1,35 @@ +package com.ruoyi.integration.controller; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.model.PlatformStartChargingReply; +import com.ruoyi.integration.mongodb.service.PlatformStartChargingReplyService; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/31 15:09 + */ +@RestController +@RequestMapping("/platformStartChargingReply") +public class PlatformStartChargingReplyController { + + @Resource + private PlatformStartChargingReplyService platformStartChargingReplyService; + + /** + * 根据订单编号查询远程启机应答结果 + * @param code + * @return + */ + @PostMapping("/getPlatformStartChargingReply") + public R<List<PlatformStartChargingReply>> getPlatformStartChargingReply(@RequestParam("code") String code){ + List<PlatformStartChargingReply> platformStartChargingReply = platformStartChargingReplyService.getPlatformStartChargingReply(code); + return R.ok(platformStartChargingReply); + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java new file mode 100644 index 0000000..9088d1e --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java @@ -0,0 +1,109 @@ +package com.ruoyi.integration.iotda.constant; + + +/** + * @author xiaochen + * @Date 2024/8/22 15:28 + */ +public class SendTagConstant { + /** + * 充电桩登录认证 + */ + public static final String ONLINE ="online"; + /** + * 充电桩心跳包 + */ + public static final String PING ="ping"; + /** + * 计费模型验证请求 + */ + public static final String BILLING_MODE_VERIFY ="billing_mode_verify"; + /** + * 充电桩计费模型请求 + */ + public static final String ACQUISITION_BILLING_MODE ="acquisition_billing_mode"; + /** + * 上传实时监测数据 + */ + public static final String UPLOAD_REAL_TIME_MONITORING_DATA ="upload_real_time_monitoring_data"; + /** + * 充电握手 + */ + public static final String CHARGING_HANDSHAKE ="charging_handshake"; + /** + * 充电阶段BMS中止 + */ + public static final String BMS_ABORT ="bms_abort"; + /** + * 充电阶段充电机中止 + */ + public static final String MOTOR_ABORT ="motor_abort"; + /** + * 充电过程BMS需求、充电机输出 + */ + public static final String BMS_DEMAND_AND_CHARGER_EXPORTATION ="bms_demand_and_charger_exportation"; + /** + * 充电过程BMS信息 + */ + public static final String BMS_INFORMATION ="bms_information"; + /** + * 充电桩主动申请启动充电 + */ + public static final String CHARGING_PILE_STARTS_CHARGING ="charging_pile_starts_charging"; + /** + * 远程启机命令回复 + */ + public static final String PLATFORM_START_CHARGING_REPLY ="platform_start_charging_reply"; + /** + * 远程停机命令回复 + */ + public static final String PLATFORM_STOP_CHARGING_REPLY ="platform_stop_charging_reply"; + /** + * 交易记录 + */ + public static final String TRANSACTION_RECORD ="transaction_record"; + /** + * 余额更新应答 + */ + public static final String UPDATE_BALANCE_REPLY ="update_balance_reply"; + /** + * 卡数据同步应答 + */ + public static final String SYNCHRONIZE_OFFLINE_CARD_REPLY ="synchronize_offline_card_reply"; + /** + * 离线卡数据清除应答 + */ + public static final String CLEAR_OFFLINE_CARD_REPLY ="clear_offline_card_reply"; + /** + * 离线卡数据查询应答 + */ + public static final String QUERY_OFFLINE_CARD_REPLY ="query_offline_card_reply"; + /** + * 充电桩工作参数设置应答 + */ + public static final String WORKING_PARAMETER_SETTING_REPLY ="working_parameter_setting_reply"; + /** + * 对时设置应答 + */ + public static final String TIMING_SETTING_REPLY ="timing_setting_reply"; + /** + * 计费模型应答 + */ + public static final String SETUP_BILLING_MODEL_REPLY ="setup_billing_model_reply"; + /** + * 地锁数据上送(充电桩上送) + */ + public static final String GROUND_LOCK_REAL_TIME_DATA ="ground_lock_real_time_data"; + /** + * 充电桩返回数据(上行) + */ + public static final String CHARGING_PILE_RETURNS_GROUND_LOCK_DATA ="charging_pile_returns_ground_lock_data"; + /** + * 远程重启应答 + */ + public static final String PLATFORM_RESTART_REPLY ="platform_restart_reply"; + /** + * 远程更新应答 + */ + public final static String PLATFORM_REMOTE_UPDATE_REPLY ="platform_remote_update_reply"; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/SendTagMenu.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/SendTagMenu.java deleted file mode 100644 index d4e01ed..0000000 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/SendTagMenu.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.ruoyi.integration.iotda.enums; - - -/** - * @author xiaochen - * @Date 2024/8/22 15:28 - */ -public enum SendTagMenu { - /** - * 充电桩登录认证 - */ - ONLINE ("online"), - /** - * 充电桩心跳包 - */ - PING ("ping"), - /** - * 计费模型验证请求 - */ - BILLING_MODE_VERIFY ("billing_mode_verify"), - /** - * 充电桩计费模型请求 - */ - ACQUISITION_BILLING_MODE ("acquisition_billing_mode"), - /** - * 上传实时监测数据 - */ - UPLOAD_REAL_TIME_MONITORING_DATA ("upload_real_time_monitoring_data"), - /** - * 充电握手 - */ - CHARGING_HANDSHAKE ("charging_handshake"), - /** - * 充电阶段BMS中止 - */ - BMS_ABORT ("bms_abort"), - /** - * 充电阶段充电机中止 - */ - MOTOR_ABORT ("motor_abort"), - /** - * 充电过程BMS需求、充电机输出 - */ - BMS_DEMAND_AND_CHARGER_EXPORTATION ("bms_demand_and_charger_exportation"), - /** - * 充电过程BMS信息 - */ - BMS_INFORMATION ("bms_information"), - /** - * 充电桩主动申请启动充电 - */ - CHARGING_PILE_STARTS_CHARGING ("charging_pile_starts_charging"), - /** - * 远程启机命令回复 - */ - PLATFORM_START_CHARGING_REPLY ("platform_start_charging_reply"), - /** - * 远程停机命令回复 - */ - PLATFORM_STOP_CHARGING_REPLY ("platform_stop_charging_reply"), - /** - * 交易记录 - */ - TRANSACTION_RECORD ("transaction_record"), - /** - * 余额更新应答 - */ - UPDATE_BALANCE_REPLY ("update_balance_reply"), - /** - * 卡数据同步应答 - */ - SYNCHRONIZE_OFFLINE_CARD_REPLY ("synchronize_offline_card_reply"), - /** - * 离线卡数据清除应答 - */ - CLEAR_OFFLINE_CARD_REPLY ("clear_offline_card_reply"), - /** - * 离线卡数据查询应答 - */ - QUERY_OFFLINE_CARD_REPLY ("query_offline_card_reply"), - /** - * 充电桩工作参数设置应答 - */ - WORKING_PARAMETER_SETTING_REPLY ("working_parameter_setting_reply"), - /** - * 对时设置应答 - */ - TIMING_SETTING_REPLY ("timing_setting_reply"), - /** - * 计费模型应答 - */ - SETUP_BILLING_MODEL_REPLY ("setup_billing_model_reply"), - /** - * 地锁数据上送(充电桩上送) - */ - GROUND_LOCK_REAL_TIME_DATA ("ground_lock_real_time_data"), - /** - * 充电桩返回数据(上行) - */ - CHARGING_PILE_RETURNS_GROUND_LOCK_DATA ("charging_pile_returns_ground_lock_data"), - /** - * 远程重启应答 - */ - PLATFORM_RESTART_REPLY ("platform_restart_reply"), - /** - * 远程更新应答 - */ - PLATFORM_REMOTE_UPDATE_REPLY ("platform_remote_update_reply"), - ; - private String value; - - - SendTagMenu(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } -} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java index acf6897..3640b42 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java @@ -2,7 +2,11 @@ import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.integration.iotda.constant.SendTagConstant; +import com.ruoyi.integration.rocket.produce.EnhanceProduce; import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.client.producer.SendResult; +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.RestController; @@ -16,6 +20,8 @@ @RestController public class IotMessageListener { + @Autowired + private EnhanceProduce enhanceProduce; /** * 设备消息监听 @@ -27,9 +33,85 @@ public AjaxResult<String> message(@RequestBody JSONObject jsonObject) throws IOException { log.info("接收到消息中转:{}",jsonObject); JSONObject content = jsonObject.getJSONObject("content"); - if (content.getString("name").equals("device_status_change")){ - //设备状态改变 + String service_id = content.getString("service_id"); + log.info("服务id:{}",service_id); + SendResult sendResult; + // 设备消息下发 + switch (service_id){ + case SendTagConstant.ONLINE: + sendResult = enhanceProduce.onlineMessage(content); + break; + case SendTagConstant.PING: + sendResult = enhanceProduce.pingMessage(content); + break; + case SendTagConstant.BILLING_MODE_VERIFY: + sendResult = enhanceProduce.billingModeVerifyMessage(content); + break; + case SendTagConstant.ACQUISITION_BILLING_MODE: + sendResult = enhanceProduce.acquisitionBillingModeMessage(content); + break; + case SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA: + sendResult = enhanceProduce.uploadRealTimeMonitoringDataMessage(content); + break; + case SendTagConstant.CHARGING_HANDSHAKE: + sendResult = enhanceProduce.chargingHandshakeMessage(content); + break; + case SendTagConstant.BMS_ABORT: + sendResult = enhanceProduce.bmsAbortMessage(content); + break; + case SendTagConstant.MOTOR_ABORT: + sendResult = enhanceProduce.motorAbortMessage(content); + break; + case SendTagConstant.BMS_DEMAND_AND_CHARGER_EXPORTATION: + sendResult = enhanceProduce.bmsDemandAndChargerExportationMessage(content); + break; + case SendTagConstant.BMS_INFORMATION: + sendResult = enhanceProduce.bmsInformationMessage(content); + break; + case SendTagConstant.CHARGING_PILE_STARTS_CHARGING: + sendResult = enhanceProduce.chargingPileStartsChargingMessage(content); + break; + case SendTagConstant.PLATFORM_START_CHARGING_REPLY: + sendResult = enhanceProduce.platformStartChargingReplyMessage(content); + break; + case SendTagConstant.PLATFORM_STOP_CHARGING_REPLY: + sendResult = enhanceProduce.platformStopChargingReplyMessage(content); + break; + case SendTagConstant.TRANSACTION_RECORD: + sendResult = enhanceProduce.transactionRecordMessage(content); + break; + case SendTagConstant.UPDATE_BALANCE_REPLY: + sendResult = enhanceProduce.updateBalanceReplyMessage(content); + break; + case SendTagConstant.SYNCHRONIZE_OFFLINE_CARD_REPLY: + sendResult = enhanceProduce.synchronizeOfflineCardReplyMessage(content); + break; + case SendTagConstant.CLEAR_OFFLINE_CARD_REPLY: + sendResult = enhanceProduce.clearOfflineCardReplyMessage(content); + break; + case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY: + sendResult = enhanceProduce.workingParameterSettingReplyMessage(content); + break; + case SendTagConstant.TIMING_SETTING_REPLY: + sendResult = enhanceProduce.timingSettingReplyMessage(content); + break; + case SendTagConstant.SETUP_BILLING_MODEL_REPLY: + sendResult = enhanceProduce.setupBillingModelReplyMessage(content); + break; + case SendTagConstant.GROUND_LOCK_REAL_TIME_DATA: + sendResult = enhanceProduce.groundLockRealTimeDataMessage(content); + break; + case SendTagConstant.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA: + sendResult = enhanceProduce.chargingPileReturnsGroundLockDataMessage(content); + break; + case SendTagConstant.PLATFORM_RESTART_REPLY: + sendResult = enhanceProduce.platformRestartReplyMessage(content); + break; + default: + sendResult = enhanceProduce.platformRemoteUpdateReplyMessage(content); + break; } + log.info("rocketmq消息下发结果:{}",sendResult); return AjaxResult.success(); } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java index da31586..c07b517 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java @@ -2,6 +2,17 @@ import com.ruoyi.integration.api.model.PlatformStartChargingReply; import com.ruoyi.integration.mongodb.base.BaseService; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; public interface PlatformStartChargingReplyService extends BaseService<PlatformStartChargingReply> { + + /** + * 根据订单编号查询远程启机应答数据 + * @param code + * @return + */ + List<PlatformStartChargingReply> getPlatformStartChargingReply(String code); + } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java index fcbe760..78fa5c2 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java @@ -5,6 +5,8 @@ import com.ruoyi.integration.mongodb.service.PlatformStartChargingReplyService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import java.util.List; @@ -29,4 +31,18 @@ public List<PlatformStartChargingReply> findAll() { return mongoTemplate.findAll(PlatformStartChargingReply.class); } + + + /** + * 根据订单编号查询远程启机应答数据 + * @param code + * @return + */ + @Override + public List<PlatformStartChargingReply> getPlatformStartChargingReply(String code) { + Query query = new Query(); + query.addCriteria(Criteria.where("transaction_serial_number").is(code)); + List<PlatformStartChargingReply> platformStartChargingReplies = mongoTemplate.find(query, PlatformStartChargingReply.class); + return platformStartChargingReplies; + } } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/OnlineMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/OnlineMessageListener.java index 7ad85d9..6d3b5c1 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/OnlineMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/OnlineMessageListener.java @@ -1,6 +1,10 @@ package com.ruoyi.integration.rocket.listener; import com.ruoyi.integration.api.model.Online; +import com.ruoyi.integration.api.model.OnlineReply; +import com.ruoyi.integration.iotda.enums.ServiceIdMenu; +import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce; +import com.ruoyi.integration.iotda.utils.tools.MessageUtil; import com.ruoyi.integration.mongodb.service.OnlineService; import com.ruoyi.integration.rocket.model.OnlineMessage; import com.ruoyi.integration.rocket.model.OnlineMessage; @@ -24,6 +28,10 @@ @Autowired private OnlineService onlineService; + @Autowired + private MessageUtil messageUtil; + @Autowired + private IotMessageProduce iotMessageProduce; @Override protected void handleMessage(OnlineMessage message) throws Exception { @@ -33,7 +41,12 @@ Online online = new Online(); BeanUtils.copyProperties(message,online); onlineService.create(online); - // 业务处理 + // 业务处理 登录认证应答 + OnlineReply onlineReply = new OnlineReply(); + onlineReply.setCharging_pile_code(message.getCharging_pile_code()); + onlineReply.setOnline_result(0); + String result = iotMessageProduce.sendMessage(onlineReply.getCharging_pile_code(), ServiceIdMenu.ONLINE_REPLY.getKey(), messageUtil.onlineReply(onlineReply)); + log.info("充电桩登录认证-返回结果:{}",result); } @Override diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PingMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PingMessageListener.java index 5a562a6..f44ef06 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PingMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PingMessageListener.java @@ -2,6 +2,10 @@ import com.ruoyi.integration.api.model.Online; import com.ruoyi.integration.api.model.Ping; +import com.ruoyi.integration.api.model.Pong; +import com.ruoyi.integration.iotda.enums.ServiceIdMenu; +import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce; +import com.ruoyi.integration.iotda.utils.tools.MessageUtil; import com.ruoyi.integration.mongodb.service.OnlineService; import com.ruoyi.integration.mongodb.service.PingService; import com.ruoyi.integration.rocket.model.PingMessage; @@ -25,7 +29,10 @@ @Autowired private PingService pingService; - + @Autowired + private MessageUtil messageUtil; + @Autowired + private IotMessageProduce iotMessageProduce; @Override protected void handleMessage(PingMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 @@ -35,6 +42,12 @@ BeanUtils.copyProperties(message,ping); pingService.create(ping); // 业务处理 + Pong pong = new Pong(); + pong.setCharging_pile_code(message.getCharging_pile_code()); + pong.setCharging_gun_code(message.getCharging_gun_code()); + pong.setCharging_gun_status(0); + String result = iotMessageProduce.sendMessage(pong.getCharging_pile_code(), ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong)); + log.info("充电桩心跳包-返回结果:{}",result); } @Override diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java index 31a7501..f28993e 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java @@ -5,12 +5,16 @@ import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService; import com.ruoyi.integration.rocket.model.UploadRealTimeMonitoringDataMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; +import com.ruoyi.order.api.feignClient.ChargingOrderClient; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; + +import javax.annotation.Resource; @Slf4j @Component @@ -24,6 +28,15 @@ @Autowired private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService; + + @Resource + private ChargingOrderClient chargingOrderClient; + + + + + + @Override protected void handleMessage(UploadRealTimeMonitoringDataMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 @@ -33,6 +46,9 @@ BeanUtils.copyProperties(message,uploadRealTimeMonitoringData); uploadRealTimeMonitoringDataService.create(uploadRealTimeMonitoringData); // 业务处理 + UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery(); + BeanUtils.copyProperties(uploadRealTimeMonitoringData, query); + chargingOrderClient.chargeMonitoring(query); } @Override diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduceController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java similarity index 68% rename from ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduceController.java rename to ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java index eb4f3e2..5586e13 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduceController.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java @@ -2,22 +2,22 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.ruoyi.integration.iotda.enums.SendTagMenu; +import com.ruoyi.integration.iotda.constant.SendTagConstant; import com.ruoyi.integration.rocket.model.*; import com.ruoyi.integration.rocket.util.RocketMQEnhanceTemplate; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.client.producer.SendResult; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.UUID; -@RestController -@RequestMapping("enhance") @Slf4j -public class EnhanceProduceController { +@Component +public class EnhanceProduce { //注入增强后的模板,可以自动实现环境隔离,日志记录 @Setter(onMethod_ = @Autowired) @@ -33,8 +33,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.ONLINE.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.ONLINE.getValue(), message); + message.setSource(SendTagConstant.ONLINE); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.ONLINE, message); } /** @@ -45,8 +45,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.PING.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.PING.getValue(), message); + message.setSource(SendTagConstant.PING); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.PING, message); } /** @@ -57,8 +57,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.BILLING_MODE_VERIFY.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.BILLING_MODE_VERIFY.getValue(), message); + message.setSource(SendTagConstant.BILLING_MODE_VERIFY); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.BILLING_MODE_VERIFY, message); } /** @@ -69,8 +69,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.ACQUISITION_BILLING_MODE.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.ACQUISITION_BILLING_MODE.getValue(), message); + message.setSource(SendTagConstant.ACQUISITION_BILLING_MODE); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.ACQUISITION_BILLING_MODE, message); } /** @@ -81,8 +81,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.UPLOAD_REAL_TIME_MONITORING_DATA.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.UPLOAD_REAL_TIME_MONITORING_DATA.getValue(), message); + message.setSource(SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA, message); } /** @@ -93,8 +93,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.CHARGING_HANDSHAKE.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.CHARGING_HANDSHAKE.getValue(), message); + message.setSource(SendTagConstant.CHARGING_HANDSHAKE); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.CHARGING_HANDSHAKE, message); } /** @@ -105,8 +105,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.BMS_ABORT.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.BMS_ABORT.getValue(), message); + message.setSource(SendTagConstant.BMS_ABORT); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.BMS_ABORT, message); } /** @@ -117,8 +117,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.MOTOR_ABORT.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.MOTOR_ABORT.getValue(), message); + message.setSource(SendTagConstant.MOTOR_ABORT); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.MOTOR_ABORT, message); } /** @@ -129,8 +129,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.BMS_DEMAND_AND_CHARGER_EXPORTATION.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.BMS_DEMAND_AND_CHARGER_EXPORTATION.getValue(), message); + message.setSource(SendTagConstant.BMS_DEMAND_AND_CHARGER_EXPORTATION); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.BMS_DEMAND_AND_CHARGER_EXPORTATION, message); } /** @@ -141,8 +141,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.BMS_INFORMATION.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.BMS_INFORMATION.getValue(), message); + message.setSource(SendTagConstant.BMS_INFORMATION); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.BMS_INFORMATION, message); } /** @@ -153,8 +153,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.CHARGING_PILE_STARTS_CHARGING.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.CHARGING_PILE_STARTS_CHARGING.getValue(), message); + message.setSource(SendTagConstant.CHARGING_PILE_STARTS_CHARGING); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.CHARGING_PILE_STARTS_CHARGING, message); } /** @@ -165,8 +165,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.PLATFORM_START_CHARGING_REPLY.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.PLATFORM_START_CHARGING_REPLY.getValue(), message); + message.setSource(SendTagConstant.PLATFORM_START_CHARGING_REPLY); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.PLATFORM_START_CHARGING_REPLY, message); } /** @@ -177,8 +177,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.PLATFORM_STOP_CHARGING_REPLY.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.PLATFORM_STOP_CHARGING_REPLY.getValue(), message); + message.setSource(SendTagConstant.PLATFORM_STOP_CHARGING_REPLY); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.PLATFORM_STOP_CHARGING_REPLY, message); } /** @@ -189,8 +189,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.TRANSACTION_RECORD.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.TRANSACTION_RECORD.getValue(), message); + message.setSource(SendTagConstant.TRANSACTION_RECORD); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.TRANSACTION_RECORD, message); } /** @@ -201,8 +201,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.UPDATE_BALANCE_REPLY.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.UPDATE_BALANCE_REPLY.getValue(), message); + message.setSource(SendTagConstant.UPDATE_BALANCE_REPLY); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.UPDATE_BALANCE_REPLY, message); } /** @@ -213,8 +213,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.SYNCHRONIZE_OFFLINE_CARD_REPLY.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.SYNCHRONIZE_OFFLINE_CARD_REPLY.getValue(), message); + message.setSource(SendTagConstant.SYNCHRONIZE_OFFLINE_CARD_REPLY); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.SYNCHRONIZE_OFFLINE_CARD_REPLY, message); } /** @@ -225,8 +225,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.CLEAR_OFFLINE_CARD_REPLY.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.CLEAR_OFFLINE_CARD_REPLY.getValue(), message); + message.setSource(SendTagConstant.CLEAR_OFFLINE_CARD_REPLY); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.CLEAR_OFFLINE_CARD_REPLY, message); } /** @@ -237,8 +237,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.WORKING_PARAMETER_SETTING_REPLY.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.WORKING_PARAMETER_SETTING_REPLY.getValue(), message); + message.setSource(SendTagConstant.WORKING_PARAMETER_SETTING_REPLY); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.WORKING_PARAMETER_SETTING_REPLY, message); } /** @@ -249,8 +249,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.TIMING_SETTING_REPLY.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.TIMING_SETTING_REPLY.getValue(), message); + message.setSource(SendTagConstant.TIMING_SETTING_REPLY); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.TIMING_SETTING_REPLY, message); } /** @@ -261,8 +261,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.SETUP_BILLING_MODEL_REPLY.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.SETUP_BILLING_MODEL_REPLY.getValue(), message); + message.setSource(SendTagConstant.SETUP_BILLING_MODEL_REPLY); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.SETUP_BILLING_MODEL_REPLY, message); } /** @@ -273,8 +273,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.GROUND_LOCK_REAL_TIME_DATA.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.GROUND_LOCK_REAL_TIME_DATA.getValue(), message); + message.setSource(SendTagConstant.GROUND_LOCK_REAL_TIME_DATA); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.GROUND_LOCK_REAL_TIME_DATA, message); } /** @@ -285,8 +285,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA.getValue(), message); + message.setSource(SendTagConstant.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA, message); } /** @@ -297,8 +297,8 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.PLATFORM_RESTART_REPLY.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.PLATFORM_RESTART_REPLY.getValue(), message); + message.setSource(SendTagConstant.PLATFORM_RESTART_REPLY); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.PLATFORM_RESTART_REPLY, message); } /** @@ -309,7 +309,7 @@ // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagMenu.PLATFORM_REMOTE_UPDATE_REPLY.getValue()); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagMenu.PLATFORM_REMOTE_UPDATE_REPLY.getValue(), message); + message.setSource(SendTagConstant.PLATFORM_REMOTE_UPDATE_REPLY); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.PLATFORM_REMOTE_UPDATE_REPLY, message); } } \ No newline at end of file diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java index eba02aa..0b3a52f 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java @@ -7,29 +7,21 @@ import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; -import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; -import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; -import com.ruoyi.order.api.model.TVipOrder; -import com.ruoyi.order.api.query.VipShoppingOrderQuery; +import com.ruoyi.order.vo.ChargingOrderListInfoVO; import com.ruoyi.order.api.vo.ChargingOrderTimeVO; import com.ruoyi.order.dto.ChargingListQuery; -import com.ruoyi.order.dto.PayOrderDto; -import com.ruoyi.order.dto.PayOrderQueryDto; import com.ruoyi.order.service.*; import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.util.Arrays; -import java.util.List; /** * <p> @@ -93,5 +85,12 @@ ChargingOrderTimeVO res = chargingOrderService.chargingList(dto); return AjaxResult.success(res); } + @ResponseBody + @GetMapping(value = "/chargingInfo") + @ApiOperation(value = "充电时段统计列表-查看详情", tags = {"管理后台-财务结算"}) + public AjaxResult<ChargingOrderListInfoVO> chargingInfo(String uid) { + ChargingOrderListInfoVO res = chargingOrderService.chargingInfo(uid); + return AjaxResult.success(res); + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java index d7df288..ca25338 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java @@ -30,6 +30,7 @@ import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.BasePage; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.ChargingOrderAndUploadRealTimeMonitoringDataDto; @@ -37,6 +38,7 @@ import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.ChargingOrderQuery; import com.ruoyi.order.api.query.TChargingCountQuery; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingOrderInfoVO; import com.ruoyi.order.api.vo.ChargingOrderVO; import com.ruoyi.order.api.vo.TCharingOrderVO; @@ -51,6 +53,7 @@ import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; import com.ruoyi.payment.api.vo.AliQueryOrder; +import com.ruoyi.payment.api.vo.WxRefundNotifyResp; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -102,6 +105,7 @@ private AliPaymentClient aliPaymentClient; @Resource private TShoppingOrderService shoppingOrderService; + @Resource private AppUserClient appUserClient; @@ -332,6 +336,7 @@ return R.ok(count); } + //订单详情 @PostMapping(value = "/detail") public R<TChargingOrder> detail(@RequestParam("orderId") Long orderId) { @@ -444,6 +449,27 @@ e.printStackTrace(); } } + + + /** + * 远程启动失败后退款回调 + * @param request + */ + @ResponseBody + @PostMapping(value = "/chargingOrderALICallback") + public void chargingOrderStartupFailureWxRefund(HttpServletRequest request){ + WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData(); + if(null != data){ + String out_refund_no = data.getOut_refund_no(); + String refund_id = data.getRefund_id(); + String tradeState = data.getTradeState(); + String success_time = data.getSuccess_time(); + chargingOrderService.chargingOrderStartupFailureWxRefund(out_refund_no, refund_id, tradeState, success_time); + } + } + + + @ResponseBody @@ -600,6 +626,19 @@ return AjaxResult.success(res); } + + + + + /** + * 处理充电订单实时监控数据相关的业务逻辑 + * @param query + */ + @PostMapping("/chargeMonitoring") + public void chargeMonitoring(@RequestBody UploadRealTimeMonitoringDataQuery query){ + chargingOrderService.chargeMonitoring(query); + } + diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java index 3620ddf..4ed552c 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java @@ -17,4 +17,8 @@ private Boolean insulationTesting; @ApiModelProperty("电子锁锁止") private Boolean electronicLockLock; + @ApiModelProperty("启动成功(1=启动中,2=启动成功,3=启动失败,退款)") + private Integer startupSuccess; + @ApiModelProperty("失败原因(0:无,1:设备编号不匹配,2:枪已在充电,3:设备故障,4:设备离线,5:未插枪桩在收到启充命令后,检测到未插枪则发送 0x33 报文回复充电失败。若在 60 秒(以收到 0x34 时间开始计算)内检测到枪重新连接,则补送 0x33 成功报文;超时或者离线等其他异常,桩不启充、不补发 0x33 报文)") + private Integer failureCause; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java index 23d19a3..ff03857 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java @@ -10,10 +10,12 @@ import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TChargingOrderRefund; import com.ruoyi.order.api.query.ChargingOrderQuery; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingOrderTimeVO; import com.ruoyi.order.api.vo.ChargingOrderVO; import com.ruoyi.order.api.vo.TCharingOrderVO; import com.ruoyi.order.dto.*; +import com.ruoyi.order.vo.ChargingOrderListInfoVO; import org.springframework.web.bind.annotation.RequestBody; import java.math.BigDecimal; @@ -76,6 +78,18 @@ /** + * 充电启动失败后的退款回调处理 + * @param out_refund_no + * @param refund_id + * @param tradeState + * @param success_time + * @return + */ + AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time); + + + + /** * 获取充电中的详情 * @param id * @return @@ -115,4 +129,13 @@ List<Map<String, BigDecimal>> getYearData(List<Long> chargingOrderIds); ChargingOrderTimeVO chargingList(ChargingListQuery dto); + + ChargingOrderListInfoVO chargingInfo(String uid); + + + /** + * 处理充电订单实时监控数据相关的业务逻辑 + * @param query + */ + void chargeMonitoring(UploadRealTimeMonitoringDataQuery query); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index dbb8223..b992b12 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -11,10 +11,12 @@ import com.ruoyi.account.api.model.TAppUserCar; import com.ruoyi.account.api.model.TAppUserVipDetail; import com.ruoyi.account.api.vo.GetAppUserVipDetail; +import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.model.Site; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.common.core.domain.R; @@ -26,16 +28,16 @@ import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.integration.api.feignClient.ChargingHandshakeClient; +import com.ruoyi.integration.api.feignClient.PlatformStartChargingReplyClient; import com.ruoyi.integration.api.feignClient.SendMessageClient; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.ChargingHandshake; import com.ruoyi.integration.api.model.PlatformStartCharging; +import com.ruoyi.integration.api.model.PlatformStartChargingReply; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; -import com.ruoyi.order.api.model.TChargingOrder; -import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy; -import com.ruoyi.order.api.model.TChargingOrderRefund; -import com.ruoyi.order.api.model.TOrderEvaluate; +import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.ChargingOrderQuery; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingOrderListVO; import com.ruoyi.order.api.vo.ChargingOrderTimeVO; import com.ruoyi.order.api.vo.ChargingOrderVO; @@ -43,10 +45,17 @@ import com.ruoyi.order.dto.*; import com.ruoyi.order.mapper.TChargingOrderMapper; import com.ruoyi.order.service.TChargingOrderAccountingStrategyService; +import com.ruoyi.order.service.TChargingOrderRefundService; import com.ruoyi.order.service.TChargingOrderService; import com.ruoyi.order.service.TOrderEvaluateService; +import com.ruoyi.other.api.domain.TCoupon; +import com.ruoyi.other.api.domain.TGoods; +import com.ruoyi.order.vo.ChargingOrderListInfoVO; import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; +import com.ruoyi.payment.api.model.RefundReq; +import com.ruoyi.payment.api.model.RefundResp; +import com.ruoyi.payment.api.model.WxPaymentRefundModel; import com.ruoyi.payment.api.vo.*; import io.seata.spring.annotation.GlobalTransactional; import io.swagger.annotations.ApiModelProperty; @@ -63,6 +72,7 @@ import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; +import java.util.concurrent.*; import java.util.stream.Collectors; /** @@ -104,7 +114,7 @@ private AliPaymentClient aliPaymentClient; - + @Resource private AppUserVipDetailClient appUserVipDetailClient; @@ -124,8 +134,21 @@ @Resource private TOrderEvaluateService orderEvaluateService; - - + + @Resource + private AccountingStrategyDetailClient accountingStrategyDetailClient; + + @Resource + private PlatformStartChargingReplyClient platformStartChargingReplyClient; + + @Resource + private TChargingOrderRefundService chargingOrderRefundService; + + //计数器 + private Map<String, Integer> counter_map = new HashMap<>(); + + + /** * 获取小程序充电记录列表数据 @@ -425,6 +448,7 @@ * @return */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public AjaxResult chargingOrderCallback(Integer paymentType, String out_trade_no, String transaction_id, String attach) { TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, out_trade_no)); if(chargingOrder.getRechargePaymentStatus() == 2){ @@ -432,37 +456,191 @@ } chargingOrder.setRechargePaymentStatus(2); chargingOrder.setRechargeSerialNumber(transaction_id); + chargingOrder.setStatus(2); this.updateById(chargingOrder); + //添加安全检测数据到缓存中,每步安全检测完成后需要更新缓存数据 PreChargeCheck preChargeCheck = new PreChargeCheck(); preChargeCheck.setElectronicLockLock(false); preChargeCheck.setInsulationTesting(false); preChargeCheck.setSecureConnectionDetection(false); + preChargeCheck.setStartupSuccess(1); String key = "AQJC_" + chargingOrder.getChargingGunId(); redisService.setCacheObject(key, preChargeCheck); //根据当前充值的金额和计费模板算出充电的金额 BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); //计算充电金额,会员需要将折扣金额加入到充电总金额中 + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + TAccountingStrategyDetail strategyDetail = accountingStrategyDetailClient.getNowData(chargingGun.getAccountingStrategyId()).getData(); + //总单价 + BigDecimal totalUnitPrice = strategyDetail.getServiceCharge().add(strategyDetail.getElectrovalence()); + //计算能充电的度数 + BigDecimal degrees = rechargeAmount.divide(totalUnitPrice); + //计算电费金额和服务费 + BigDecimal serviceCharge = strategyDetail.getServiceCharge().multiply(degrees); + BigDecimal electrovalence = strategyDetail.getElectrovalence().multiply(degrees); -// TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); -// if(){ -// appUser.getVipId() -// } -// -// -// //调用远程启动充电消息 -// PlatformStartCharging platformStartCharging = new PlatformStartCharging(); -// platformStartCharging.setTransaction_serial_number(chargingOrder.getCode()); -// platformStartCharging.setCharging_pile_code(); -// platformStartCharging.setCharging_gun_code(); -// platformStartCharging.setCard_number(); -// platformStartCharging.setAccount_balance() -// sendMessageClient.platformStartCharging(platformStartCharging); + //再处理会员折扣 + BigDecimal discount = BigDecimal.ZERO; + TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); + if(null != appUser.getVipId()){ + GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); + getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId()); + getAppUserVipDetail.setVipId(appUser.getVipId()); + TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData(); + if(data.getChargeNum() > 0){ + discount = serviceCharge.multiply(data.getDiscount().divide(new BigDecimal(10))); + data.setChargeNum(data.getChargeNum() - 1); + appUserVipDetailClient.updateAppUserVipDetail(data); + } + } + electrovalence = electrovalence.add(discount); + + + TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData(); + //调用远程启动充电消息 + PlatformStartCharging platformStartCharging = new PlatformStartCharging(); + platformStartCharging.setTransaction_serial_number(chargingOrder.getCode()); + platformStartCharging.setCharging_pile_code(chargingPile.getCode()); + platformStartCharging.setCharging_gun_code(chargingGun.getCode()); + //使用订单id作为逻辑卡号 + platformStartCharging.setCard_number(chargingOrder.getId().toString()); + platformStartCharging.setAccount_balance(electrovalence); + sendMessageClient.platformStartCharging(platformStartCharging); + //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 + String code = chargingOrder.getCode(); + //执行5分钟的定时任务检测 + ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + scheduler.scheduleAtFixedRate(()->{ + List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData(); + if(data.size() != 0){ + PlatformStartChargingReply platformStartChargingReply = data.get(1); + Integer startup_result = platformStartChargingReply.getStartup_result(); + Integer failure_cause = platformStartChargingReply.getFailure_cause(); + Integer counter = counter_map.get(code); + PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); + //状态为5的时候,硬件会间隔60秒后再次检测,依然未插枪,则不启动充电 + //因这里是间隔5秒执行检测,所以累计次数在30次以上 + if(failure_cause == 5 && null == counter || counter < 35){ + counter++; + counter_map.put(code, counter); + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(failure_cause); + redisService.setCacheObject(key, preChargeCheck1); + return; + } + //清除计时器中的无效数据 + counter_map.remove(code); + //开始处理退款 + TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); + if(0 == startup_result){ + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(failure_cause); + //启动失败后取消订单,退款操作 + refund(code); + order.setStatus(5); + order.setEndMode(0); + }else{ + preChargeCheck1.setStartupSuccess(2); + order.setStatus(3); + order.setStartTime(LocalDateTime.now()); + } + this.updateById(order); + redisService.setCacheObject(key, preChargeCheck1); + //提前结束定时任务 + scheduler.shutdown(); + } + }, 5, 300, TimeUnit.SECONDS); return AjaxResult.success(); } + /** + * 启动失败后的退款,取消订单 + * @param code + */ + public void refund(String code){ + TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); + if(chargingOrder.getStatus() == 2){ + Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); + BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); + //构建退款明细 + TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); + chargingOrderRefund.setChargingOrderId(chargingOrder.getId()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Math.random() * 1000)); + chargingOrderRefund.setRefundAmount(rechargeAmount); + chargingOrderRefund.setRefundStatus(1); + chargingOrderRefund.setPayType(rechargePaymentType); + chargingOrderRefund.setRefundStatus(1); + chargingOrderRefund.setCode(code); + chargingOrderRefund.setRefundTitle("充电失败"); + chargingOrderRefund.setRefundContent("充电失败"); + chargingOrderRefund.setRefundReason("充电失败"); + chargingOrderRefund.setRefundRemark("全额退款"); + chargingOrderRefund.setRefundTotalAmount(rechargeAmount); + chargingOrderRefund.setPayAmount(rechargeAmount); + if(1 == rechargePaymentType){ + WxPaymentRefundModel model = new WxPaymentRefundModel(); + model.setOut_trade_no(chargingOrder.getCode()); + model.setOut_refund_no(chargingOrderRefund.getRefundCode()); + model.setReason("充电失败,取消充电订单"); + model.setNotify_url("http://127.0.0.1:9000/order/t-charging-order/chargingOrderStartupFailureWxRefund"); + WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); + amount.setRefund(rechargeAmount.multiply(new BigDecimal(100)).intValue()); + amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); + amount.setCurrency("CNY"); + model.setAmount(amount); + R<String> orderR = wxPaymentClient.refundOrderR(model); + if(200 == orderR.getCode()){ + chargingOrderRefundService.save(chargingOrderRefund); + } + } + if(2 == rechargePaymentType){ + RefundReq dto = new RefundReq(); + dto.setOutTradeNo(chargingOrder.getCode()); + dto.setOutRequestNo(chargingOrderRefund.getCode()); + dto.setRefundAmount(rechargeAmount.toString()); + dto.setRefundReason("充电失败,取消充电订单"); + RefundResp resp = aliPaymentClient.refund(dto).getData(); + if(null != resp){ + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); + AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date())); + if(success.isSuccess()){ + chargingOrderRefundService.save(chargingOrderRefund); + } + } + } + + } + } + + + /** + * 启动失败后微信退款的回调处理 + * @param out_refund_no + * @param refund_id + * @param tradeState + * @param success_time + * @return + */ + public AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time){ + if("SUCCESS".equals(tradeState)){ + TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getRefundCode, out_refund_no)); + one.setRefundSerialNumber(refund_id); + one.setRefundStatus(2); + one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE"))); + chargingOrderRefundService.updateById(one); + } + return AjaxResult.success(); + } + + + + /** * 获取充电中的详情 * @param id @@ -484,6 +662,7 @@ chargingDetails.setName(site.getName() + "-" + chargingPile.getName()); chargingDetails.setCode(one.getCode()); chargingDetails.setStatus(one.getStatus()); + chargingDetails.setChargingCost(one.getResidualAmount()); UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData(); if(null != data){ chargingDetails.setChargeCurrent(data.getOutput_current()); @@ -494,7 +673,6 @@ chargingDetails.setRemainingChargeTime(data.getTime_remaining()); chargingDetails.setChargedDegrees(data.getCharging_degree()); chargingDetails.setChargedTime(data.getCumulative_charging_time()); - chargingDetails.setChargingCost(data.getPaid_amount()); } ChargingHandshake chargingHandshake = chargingHandshakeClient.getDataByOrderCode(one.getCode()).getData(); if(null != chargingHandshake && null != data && null != one.getAppUserCarId()){ @@ -591,8 +769,8 @@ BigDecimal electronicMoney1 = new BigDecimal("0"); // 单个订单累计服务费 BigDecimal serviceMoney1 = new BigDecimal("0"); - // todo 调用第三方获取充电时长 秒 - + UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData(); + chargingOrderVO.setChargingSecond(data5.getTime_remaining()*60L); // 总收入 if (chargingOrderVO.getRefundStatus() !=null && chargingOrderVO.getRefundStatus() == 2){ income = income.add(chargingOrderVO.getPaymentAmount().subtract(chargingOrderVO.getRefundAmount())); @@ -704,6 +882,7 @@ return this.baseMapper.getYearData(chargingOrderIds); } + @Override public ChargingOrderTimeVO chargingList(ChargingListQuery dto) { String startTime1 = null; @@ -727,6 +906,7 @@ PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2); for (ChargingOrderListVO chargingOrderListVO : list) { + chargingOrderListVO.setUid(chargingOrderListVO.getId()+""); List<Integer> integers = new ArrayList<>(); integers.add(chargingOrderListVO.getSiteId()); List<Site> data = siteClient.getSiteByIds(integers).getData(); @@ -738,7 +918,21 @@ if (data2 != null && data1 != null) { chargingOrderListVO.setTerminalName(data2.getName() + "-" + data1.getName()); } - // todo 充电时长 调用第三方获取 + // 获取充电时间 + UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderListVO.getCode()).getData(); + if (data5!=null){ + if (data5.getTime_remaining()!=null){ + chargingOrderListVO.setChargingSecond(data5.getTime_remaining()*60L); + + } + } + // 获取开始SOC 结束soc + List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrderListVO.getCode()).getData(); + if (!data6.isEmpty()){ + // 第一条数据soc为开始 最后一条数据soc为结束soc + chargingOrderListVO.setStartSoc(data6.get(0).getSoc().toString()); + chargingOrderListVO.setEndSoc(data6.get(data6.size()-1).getSoc().toString()); + } TAppUser data3 = appUserClient.getUserById(chargingOrderListVO.getAppUserId()).getData(); List<Long> carId = new ArrayList<>(); if (chargingOrderListVO.getAppUserCarId() != null) { @@ -865,4 +1059,59 @@ chargingOrderTimeVO.setList(pageInfo); return chargingOrderTimeVO; } + + @Override + public ChargingOrderListInfoVO chargingInfo(String uid) { + TChargingOrder chargingOrder= this.getById(uid); + + ChargingOrderListInfoVO chargingOrderListInfoVO = new ChargingOrderListInfoVO(); + chargingOrderListInfoVO.setCode(chargingOrder.getCode()); + List<Site> data = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData(); + if (!data.isEmpty()){ + chargingOrderListInfoVO.setSiteName(data.get(0).getName()); + chargingOrderListInfoVO.setSiteAddress(data.get(0).getAddress()); + } + TChargingGun data1 = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + TChargingPile data2 = chargingPileClient.getChargingPileById(data1.getChargingPileId()).getData(); + + if (data1!=null){ + chargingOrderListInfoVO.setGunCode(data1.getCode()); + chargingOrderListInfoVO.setTerminalName(data2.getName()+data1.getName()); + } + chargingOrderListInfoVO.setEndMode(chargingOrder.getEndMode()); + // todo 周一完善 +// chargingOrderListInfoVO.setStartSoc(); +// chargingOrderListInfoVO.setEndSoc(); +// chargingOrderListInfoVO.setChargingCapacity(); +// chargingOrderListInfoVO.setSiteId(); +// chargingOrderListInfoVO.setChargingPileId(); +// chargingOrderListInfoVO.setAppUserId(); +// chargingOrderListInfoVO.setAppUserCarId(); +// chargingOrderListInfoVO.setChargingGunId(); +// chargingOrderListInfoVO.setOrderType(); +// chargingOrderListInfoVO.setChargingSecond(); +// chargingOrderListInfoVO.setLicensePlate(); +// chargingOrderListInfoVO.setPhone(); +// chargingOrderListInfoVO.setPaymentAmount(); +// chargingOrderListInfoVO.setElectrovalence(); +// chargingOrderListInfoVO.setServiceCharge(); +// chargingOrderListInfoVO.setStartTime(); +// chargingOrderListInfoVO.setEndTime(); +// chargingOrderListInfoVO.setId(); +// chargingOrderListInfoVO.setUid(); +// chargingOrderListInfoVO.setList(); + + + return null; + } + + + /** + * 处理充电订单实时监控数据相关的业务逻辑 + * @param query + */ + @Override + public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) { + // todo 需完善 + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderAppealServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderAppealServiceImpl.java index 6c8d89c..b48a88e 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderAppealServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderAppealServiceImpl.java @@ -57,13 +57,14 @@ if (item.getOrderType() == 1) { TChargingOrder tChargingOrder = chargingOrders.stream().filter(chargingOrder -> chargingOrder.getId().equals(item.getOrderId())).findFirst().orElse(null); if(Objects.nonNull(tChargingOrder)){ - item.setChargingOrder(chargingOrders.stream().filter(chargingOrder -> chargingOrder.getId().equals(item.getOrderId())).findFirst().orElse(null)); + item.setChargingOrder(tChargingOrder); SiteNameVO siteNameVO = chargingGunClient.getAllInfoById(tChargingOrder.getChargingGunId()).getData(); item.setGunName(siteNameVO.getGunName()); item.setGunNumber(siteNameVO.getGunNumber()); item.setPileName(siteNameVO.getPileName()); item.setPileNumber(siteNameVO.getPileNumber()); item.setSiteName(siteNameVO.getSiteName()); + item.setEndMode(tChargingOrder.getEndMode()); } }else if (item.getOrderType() == 2) { TShoppingOrder tShoppingOrder = shoppingOrders.stream().filter(shoppingOrder -> shoppingOrder.getId().equals(item.getOrderId())).findFirst().orElse(null); @@ -82,7 +83,11 @@ BeanUtils.copyProperties(orderAppeal,orderAppealVO); // 查询申诉详情 if (orderAppeal.getOrderType() == 1) { - orderAppealVO.setChargingOrder(chargingOrderMapper.selectById(orderAppeal.getOrderId())); + TChargingOrder tChargingOrder = chargingOrderMapper.selectById(orderAppeal.getOrderId()); + orderAppealVO.setChargingOrder(tChargingOrder); + if(Objects.nonNull(tChargingOrder)){ + orderAppealVO.setEndMode(tChargingOrder.getEndMode()); + } }else if (orderAppeal.getOrderType() == 2) { TShoppingOrder tShoppingOrder = shoppingOrderMapper.selectById(orderAppeal.getOrderId()); setGoodsInfo(orderAppealVO,tShoppingOrder); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java index 5802610..1ea0979 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java @@ -406,6 +406,7 @@ public AjaxResult cancelShoppingOrderWxRefund(String out_refund_no, String refund_id, String refund_status, String success_time) { if("SUCCESS".equals(refund_status)){ TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper<TShoppingOrderRefund>().eq(TShoppingOrderRefund::getRefundCode, out_refund_no)); + one.setRefundStatus(2); one.setRefundSerialNumber(refund_id); one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE"))); shoppingOrderRefundService.updateById(one); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ChargingOrderListInfoVO.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ChargingOrderListInfoVO.java new file mode 100644 index 0000000..1611e8c --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ChargingOrderListInfoVO.java @@ -0,0 +1,70 @@ +package com.ruoyi.order.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "ChargingOrderListInfoVO对象",description = "充电时段统计列表查看详情VO") +public class ChargingOrderListInfoVO { + @ApiModelProperty(value = "订单编号") + private String code; + @ApiModelProperty(value = "电站名称") + private String siteName; + @ApiModelProperty(value = "电站地址") + private String siteAddress; + @ApiModelProperty(value = "终端编号") + private String gunCode; + @ApiModelProperty(value = "充电终端名称 桩+枪") + private String terminalName; + @ApiModelProperty(value = "结束原因 (0=异常终止,1=主动终止,2=满电终止,3=费用不足终止)") + private Integer endMode; + @ApiModelProperty(value = "开始soc") + private String startSoc; + @ApiModelProperty(value = "结束soc") + private String endSoc; + @ApiModelProperty(value = "充电电流 度") + private BigDecimal chargingCapacity; + @ApiModelProperty(value = "电站id") + private Integer siteId; + @ApiModelProperty(value = "充电桩id") + private Integer chargingPileId; + @ApiModelProperty(value = "用户id") + private Long appUserId; + @ApiModelProperty(value = "用户车辆id") + private Long appUserCarId; + @ApiModelProperty(value = "充电枪id") + private Integer chargingGunId; + @ApiModelProperty(value = "订单类型(1=充电订单(小程序),2=充电订单(刷卡))") + private String orderType; + @ApiModelProperty(value = "充电时间 秒") + private Long chargingSecond; + @ApiModelProperty(value = "车牌号") + private String licensePlate; + @ApiModelProperty(value = "客户手机号") + private String phone; + @ApiModelProperty(value = "充电到账金额") + private BigDecimal paymentAmount; + @ApiModelProperty(value = "累计电费") + private BigDecimal electrovalence; + @ApiModelProperty(value = "累计服务费") + private BigDecimal serviceCharge; + @ApiModelProperty(value = "开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime startTime; + @ApiModelProperty(value = "结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime endTime; + @ApiModelProperty(value = "订单id") + private Long id; + @ApiModelProperty(value = "订单uid") + private String uid; + @ApiModelProperty(value = "充电信息") + List<UploadRealTimeMonitoringData> list; +} diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml index 151b6c1..ae55626 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml @@ -24,6 +24,7 @@ <result column="recharge_payment_type" property="rechargePaymentType" /> <result column="recharge_payment_status" property="rechargePaymentStatus" /> <result column="recharge_serial_number" property="rechargeSerialNumber" /> + <result column="residual_amount" property="residualAmount" /> <result column="order_amount" property="orderAmount" /> <result column="app_coupon_id" property="appCouponId" /> <result column="coupon_discount_amount" property="couponDiscountAmount" /> -- Gitblit v1.7.1