From bd97f8c5cd9be78abfaaab295319bd7ceef98f11 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期五, 11 十月 2024 14:51:51 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 323 ++++++++-- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java | 1 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java | 9 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BmsDemandAndChargerExportation.java | 4 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java | 6 ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml | 1 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java | 2 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java | 3 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStopChargingReplyVO.java | 19 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 35 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/RuoYiIntegrationApplication.java | 5 ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml | 1 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java | 16 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java | 7 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GetChargingGunByCode.java | 13 ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml | 56 ruoyi-gateway/src/main/resources/bootstrap.yml | 4 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java | 14 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java | 26 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java | 19 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java | 6 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java | 5 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java | 4 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java | 31 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsInformationMessage.java | 4 ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml | 56 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java | 5 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java | 12 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java | 2 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java | 4 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java | 33 ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml | 56 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java | 5 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java | 11 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 27 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BmsInformation.java | 4 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java | 5 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 52 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java | 16 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java | 30 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/GroundLockRealTimeDataMessage.java | 1 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ChargingMessage.java | 44 + ruoyi-auth/src/main/resources/bootstrap.yml | 56 ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml | 56 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java | 4 ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml | 56 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java | 6 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/base/BaseMessage.java | 5 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java | 89 ++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java | 501 ++++++++++++++++ 54 files changed, 1,411 insertions(+), 351 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java index 307344d..f46fc43 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; @@ -63,15 +64,16 @@ @ApiModelProperty(value = "会员开始时间") @TableField("start_time") - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime startTime; @ApiModelProperty(value = "会员结束时间") @TableField("end_time") - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime endTime; @TableField("create_time") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; @ApiModelProperty(value = "已赠送的月份") 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 56d4782..11c4cb6 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 @@ -5,6 +5,7 @@ import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.model.TFaultMessage; +import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; import com.ruoyi.chargingPile.api.vo.SiteNameVO; import com.ruoyi.common.core.domain.R; import org.slf4j.Logger; @@ -45,7 +46,7 @@ } @Override - public R<TChargingGun> getChargingGunByCode(String code) { + public R<TChargingGun> getChargingGunByCode(GetChargingGunByCode code) { return R.fail("根据枪编号获取充电枪失败:" + throwable.getMessage()); } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java index cbb357e..2948838 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java @@ -56,6 +56,12 @@ public R<TChargingPile> getChargingPileById(Integer id) { return R.fail(throwable.getMessage()); } + + @Override + public void updateChargingPileStatus(String code, Integer status) { + log.error("修改充电桩状态失败:" + throwable.getMessage()); + } + }; } } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java index f27cd5d..77548f2 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java @@ -3,6 +3,7 @@ import com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TFaultMessage; +import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; import com.ruoyi.chargingPile.api.vo.SiteNameVO; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; @@ -48,8 +49,8 @@ * @param code * @return */ - @PostMapping("/t-charging-gun/getChargingGunByCode/{code}") - R<TChargingGun> getChargingGunByCode(@PathVariable("code") String code); + @PostMapping("/t-charging-gun/getChargingGunByCode") + R<TChargingGun> getChargingGunByCode(@RequestBody GetChargingGunByCode code); /** * 编辑充电枪 * @param chargingGun diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java index f61dd25..9b19c6f 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java @@ -49,4 +49,13 @@ @PostMapping("/t-charging-pile/getChargingPileById/{id}") R<TChargingPile> getChargingPileById(@PathVariable("id") Integer id); + + + /** + * 修改充电桩状态 + * @param code + * @param status + */ + @PostMapping("/t-charging-pile/updateChargingPileStatus") + void updateChargingPileStatus(@RequestParam("code") String code, @RequestParam("status") Integer status); } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GetChargingGunByCode.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GetChargingGunByCode.java new file mode 100644 index 0000000..82b6e50 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GetChargingGunByCode.java @@ -0,0 +1,13 @@ +package com.ruoyi.chargingPile.api.vo; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/10/8 16:58 + */ +@Data +public class GetChargingGunByCode { + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java index c3d2f73..485fae2 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteInfoVO.java @@ -14,6 +14,8 @@ private String name; @ApiModelProperty(value = "桩id") private Integer chargingPileId; + @ApiModelProperty(value = "站点id") + private Integer siteId; @ApiModelProperty(value = "桩编号") private String number; @ApiModelProperty(value = "充电枪id") diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BmsDemandAndChargerExportation.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BmsDemandAndChargerExportation.java index be2a555..c190e8a 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BmsDemandAndChargerExportation.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BmsDemandAndChargerExportation.java @@ -26,10 +26,10 @@ private BigDecimal bms_current_measurement_value; // BMS 充电电流测量值 private Integer bms_battery_voltage_and_group_number; // BMS 最高单体动力蓄电池电压及组号(1-12 位:最高单体动力蓄电池电压,数据分辨率:0.01 V/位,0 V 偏移量;数据范围:0~24 V;13-16 位:最高单体动力蓄电池电压所在组号,数据分辨率:1/位,0 偏移量;数据范围:0~15) private BigDecimal bms_charged_status; // BMS 当前荷电状态 SOC( %) - private Integer bms_remaining_charging_time; // BMS 估算剩余充电时间 + private BigDecimal bms_remaining_charging_time; // BMS 估算剩余充电时间 private BigDecimal voltage_output_value; // 电桩电压输出值 private BigDecimal current_output_value; // 电桩电流输出值 - private Integer cumulative_charging_time; // 累计充电时间 + private BigDecimal cumulative_charging_time; // 累计充电时间 } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BmsInformation.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BmsInformation.java index ef62154..fbc1221 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BmsInformation.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BmsInformation.java @@ -21,9 +21,9 @@ private String charging_gun_code; // 抢号 private Integer bms_highest_voltage_number; // BMS 最高单体动力蓄电池电压所在编号 private String bms_maximum_battery_temperature; // BMS 最高动力蓄电池温度 - private Integer maximum_temperature_detection_point_number; // 最高温度检测点编号 + private String maximum_temperature_detection_point_number; // 最高温度检测点编号 private String minimum_cell_temperature; // 最低动力蓄电池温度 - private Integer lowest_temperature_detection_pointt_number; // 最低动力蓄电池温度检测点编号 + private String lowest_temperature_detection_pointt_number; // 最低动力蓄电池温度检测点编号 private Integer bms_battery_voltage; // BMS 单体动力蓄电池电压过高 /过低(0:正常,1:过高,10:过低) private Integer bms_battery_charging_status; // BMS 整车动力蓄电池荷电状态SOC 过高/过低(0:正常,1:过高,10:过低) private Integer bms_charging_overcurrent; // BMS 动力蓄电池充电过电流(0:正常,1:过流,10:不可信状态) diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java index dab2854..0b19835 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java @@ -16,4 +16,8 @@ * 充电枪编号 */ private String charging_gun_code; + /** + * 充电结束时间 + */ + private String end_time; } 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 f51d11a..56baedd 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 @@ -9,9 +9,7 @@ import com.ruoyi.order.api.model.TSettlementConfirm; import com.ruoyi.order.api.query.TChargingCountQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; -import com.ruoyi.order.api.vo.ChargingBillVO; -import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; -import com.ruoyi.order.api.vo.SettlementTotalVO; +import com.ruoyi.order.api.vo.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -140,6 +138,21 @@ log.error("购物订单退款回调通知失败:" + throwable.getMessage()); } + + @Override + public void securityDetection(SecurityDetectionVO securityDetection) { + log.error("修改安全检测数据失败:" + throwable.getMessage()); + } + + @Override + public void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message) { + log.error("远程启动充电应答失败:" + throwable.getMessage()); + } + + @Override + public void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply) { + log.error("停止充电应答处理失败:" + throwable.getMessage()); + } }; } } 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 0dc3302..ae33132 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 @@ -11,12 +11,10 @@ import com.ruoyi.order.api.model.TSettlementConfirm; import com.ruoyi.order.api.query.TChargingCountQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; -import com.ruoyi.order.api.vo.ChargingBillVO; -import com.ruoyi.order.api.vo.SettlementTotalVO; +import com.ruoyi.order.api.vo.*; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; @@ -162,10 +160,10 @@ * @param success_time */ @PostMapping("/t-charging-order/chargingOrderStartupFailureWxRefund") - void chargingOrderStartupFailureWxRefund(@RequestParam("out_trade_no") String out_refund_no, - @RequestParam("out_trade_no") String refund_id, - @RequestParam("out_trade_no") String tradeState, - @RequestParam("out_trade_no") String success_time); + void chargingOrderStartupFailureWxRefund(@RequestParam("out_refund_no") String out_refund_no, + @RequestParam("refund_id") String refund_id, + @RequestParam("tradeState") String tradeState, + @RequestParam("success_time") String success_time); /** * 管理后台取消购物订单后退款回调 * @param out_refund_no @@ -178,4 +176,27 @@ @RequestParam("out_trade_no") String refund_id, @RequestParam("out_trade_no") String tradeState, @RequestParam("out_trade_no") String success_time); + + /** + * 修改安全检测数据 + * @param securityDetection + */ + @PostMapping("/t-charging-order/securityDetection") + void securityDetection(@RequestBody SecurityDetectionVO securityDetection); + + + /** + * 远程启动充电应答 + * @param message + */ + @PostMapping("/t-charging-order/startChargeSuccessfully") + void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message); + + + /** + * 停止充电应答处理 + * @param platformStopChargingReply + */ + @PostMapping("/t-charging-order/terminateSuccessfulResponse") + void terminateSuccessfulResponse(@RequestBody PlatformStopChargingReplyVO platformStopChargingReply); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java new file mode 100644 index 0000000..5bb4dbf --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java @@ -0,0 +1,16 @@ +package com.ruoyi.order.api.vo; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/10/8 17:16 + */ +@Data +public class PlatformStartChargingReplyMessageVO { + private String transaction_serial_number; // 交易流水号 + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 + private Integer startup_result; // 启动结果(0:失败,1:成功) + private Integer failure_cause; // "失败原因(0:无,1:设备编号不匹配,2:枪已在充电,3:设备故障,4:设备离线,5:未插枪桩在收到启充命令后,检测到未插枪则发送 0x33 报文回复充电失败。若在 60 秒(以收到 0x34 时间开始计算)内检测到枪重新连接,则补送 0x33 成功报文;超时或者离线等其他异常,桩不启充、不补发 0x33 报文)" +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStopChargingReplyVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStopChargingReplyVO.java new file mode 100644 index 0000000..7b69a0b --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStopChargingReplyVO.java @@ -0,0 +1,19 @@ +package com.ruoyi.order.api.vo; + +import lombok.Data; + +/** + * 远程停机命令回复 + **/ + +@Data +public class PlatformStopChargingReplyVO { + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 + private Integer stop_result; // 停止结果(0:失败,1:成功) + private Integer failure_cause; // 失败原因(0:无,1:设备编号不匹配,2:枪未处于充电状态,3:其他) + + +} + + diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java new file mode 100644 index 0000000..9279fbf --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java @@ -0,0 +1,14 @@ +package com.ruoyi.order.api.vo; + +import lombok.Data; + +@Data +public class SecurityDetectionVO { + private String transaction_serial_number; // 交易流水号 + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 + private Integer secure_connection; // 车枪连接(0=未连接,1=连接) + private Integer nsulation_detection; // 绝缘检测(0=安全,1=不安全) + private Integer electronic_lock_lock; // 电磁锁状态(0=未锁,1=已锁) + +} diff --git a/ruoyi-auth/src/main/resources/bootstrap.yml b/ruoyi-auth/src/main/resources/bootstrap.yml index 20ccecd..866e429 100644 --- a/ruoyi-auth/src/main/resources/bootstrap.yml +++ b/ruoyi-auth/src/main/resources/bootstrap.yml @@ -6,8 +6,8 @@ spring: profiles: # 环境配置 -# active: dev - active: prod + active: dev +# active: prod application: # 应用名称 name: ruoyi-auth @@ -56,52 +56,52 @@ type: nacos nacos: # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# data-id: seata-server.properties -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP data-id: seata-server.properties username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# data-id: seata-server.properties +# username: nacos +# password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# username: nacos +# password: nacos cloud: nacos: discovery: # 开发环境 -# server-addr: 192.168.110.169:8848 # nacos注册中心地址 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 -# group: DEFAULT_GROUP -# application: seata-server #Nacos 中 Seata 名称 -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 # nacos注册中心地址 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 group: DEFAULT_GROUP application: seata-server #Nacos 中 Seata 名称 username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# application: seata-server #Nacos 中 Seata 名称 +# username: nacos +# password: nacos sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台地址 diff --git a/ruoyi-gateway/src/main/resources/bootstrap.yml b/ruoyi-gateway/src/main/resources/bootstrap.yml index 7598ca6..48963f2 100644 --- a/ruoyi-gateway/src/main/resources/bootstrap.yml +++ b/ruoyi-gateway/src/main/resources/bootstrap.yml @@ -12,8 +12,8 @@ allow-bean-definition-overriding: true profiles: # 环境配置 -# active: dev - active: prod + active: dev +# active: prod --- spring: config: diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml index c8f030b..dbd2ab0 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml @@ -11,8 +11,8 @@ allow-bean-definition-overriding: true profiles: # 环境配置 -# active: dev - active: prod + active: dev +# active: prod --- spring: config: @@ -55,52 +55,52 @@ type: nacos nacos: # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# data-id: seata-server.properties -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP data-id: seata-server.properties username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# data-id: seata-server.properties +# username: nacos +# password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# username: nacos +# password: nacos cloud: nacos: discovery: # 开发环境 -# server-addr: 192.168.110.169:8848 # nacos注册中心地址 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 -# group: DEFAULT_GROUP -# application: seata-server #Nacos 中 Seata 名称 -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 # nacos注册中心地址 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 group: DEFAULT_GROUP application: seata-server #Nacos 中 Seata 名称 username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# application: seata-server #Nacos 中 Seata 名称 +# username: nacos +# password: nacos sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台地址 diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java index a0d19f9..88236a3 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java @@ -60,7 +60,7 @@ @Autowired private TAppUserCarService appUserCarService; - @Autowired + @Resource private TokenService tokenService; @Resource private ChargingPileClient chargingPileClient; @@ -109,6 +109,7 @@ TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData(); SiteInfoVO data = chargingPileClient.getSiteInfoByNumber1(chargingPile.getCode().toString()).getData(); data.setChargingGunId(id); + data.setSiteId(chargingGun.getId()); data.setChargeMode(chargingGun.getChargeMode()); List<TAppUserCar> cars = appUserCarService.list(new QueryWrapper<TAppUserCar>() .eq("app_user_id",tokenService.getLoginUserApplet().getUserId()) @@ -117,7 +118,7 @@ Integer data2 = otherClient.getAddCarIntegral().getData(); data.setIntegral(data2); if (!cars.isEmpty()){ - if (data1 == -1){ + if (null == data1 || data1 == -1){ // 没有充电订单 展示最新添加的车辆 data.setLicensePlate(cars.get(0).getLicensePlate()); data.setVehicleBrand(cars.get(0).getVehicleBrand()); diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java index 9293ee1..839c11a 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java @@ -849,7 +849,7 @@ boolean doubleVip = false; if (one!=null){ TVip tVip = JSONObject.parseObject(one.getVipJson(), TVip.class); - if (tVip.getDoubleIntegration()==1){ + if (tVip.getDoubleIntegration()!=null&&tVip.getDoubleIntegration()==1){ doubleVip = true; } } @@ -964,7 +964,7 @@ boolean doubleVip = false; if (one!=null){ TVip tVip = JSONObject.parseObject(one.getVipJson(), TVip.class); - if (tVip.getDoubleIntegration()==1){ + if (tVip.getDoubleIntegration()!=null&&tVip.getDoubleIntegration()==1){ doubleVip = true; } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java index a743b4a..4d5e00f 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java @@ -63,11 +63,15 @@ private WeixinProperties wxConfig; @Autowired private RestTemplate wxRestTemplate; -// /** -// * 上传文件存储在本地的根路径 -// */ -// @Value("${file.path}") -// private String localFilePath; + /** + * 上传文件存储在本地的根路径 + */ + @Value("${file.upload.location}") + private String localFilePath; + + + + @ApiOperation(value = "通过code获得openid,获取用户信息",tags = {"微信小程序登录"}) @PostMapping("/openIdByJsCode") public AjaxResult<Map<String, Object>> openIdByJsCode(@RequestBody AppletUserEncrypteData data) { @@ -99,9 +103,11 @@ public AjaxResult<Map<String, Object>> openIdByJsCode(@RequestBody AppletUserDecodeData appletUserDecodeData) { return AjaxResult.success(appUserService.wxLogin(appletUserDecodeData, null)); } + // public static MultipartFile convertInputStreamToMultipartFile(InputStream inputStream, String fileName, String contentType) throws IOException { // return new MockMultipartFile(fileName, fileName, contentType, inputStream); // } + @ApiOperation(value = "获取微信小程序二维码",tags = {"获取微信小程序二维码"}) @PostMapping("/getQRCode") public AjaxResult getQRCode() { diff --git a/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml index 32d84d4..ce8973a 100644 --- a/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml @@ -12,8 +12,8 @@ allow-circular-references: true profiles: # 环境配置 -# active: dev - active: prod + active: dev +# active: prod --- spring: config: @@ -56,52 +56,52 @@ type: nacos nacos: # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# data-id: seata-server.properties -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP data-id: seata-server.properties username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# data-id: seata-server.properties +# username: nacos +# password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# username: nacos +# password: nacos cloud: nacos: discovery: # 开发环境 -# server-addr: 192.168.110.169:8848 # nacos注册中心地址 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 -# group: DEFAULT_GROUP -# application: seata-server #Nacos 中 Seata 名称 -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 # nacos注册中心地址 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 group: DEFAULT_GROUP application: seata-server #Nacos 中 Seata 名称 username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# application: seata-server #Nacos 中 Seata 名称 +# username: nacos +# password: nacos sentinel: transport: dashboard: 192.168.0.137:8080 # Sentinel控制台地址 diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java index 6855288..765d06c 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java @@ -3,6 +3,7 @@ import cn.hutool.core.img.ImgUtil; import cn.hutool.core.io.FileUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.dto.TChargingGunDTO; @@ -11,6 +12,7 @@ import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.chargingPile.api.model.TFaultMessage; import com.ruoyi.chargingPile.api.query.TChargingGunQuery; +import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; import com.ruoyi.chargingPile.api.vo.GunStatusStatisticsVO; import com.ruoyi.chargingPile.api.vo.SiteNameVO; import com.ruoyi.chargingPile.api.vo.TChargingGunVO; @@ -155,7 +157,7 @@ public void downloadQRCode(@PathVariable Integer id, HttpServletResponse response){ try { TChargingGun chargingGun = chargingGunService.getById(id); - TChargingPile chargingPile = chargingPileService.getById(chargingGun.getId()); + TChargingPile chargingPile = chargingPileService.getById(chargingGun.getChargingPileId()); String code = chargingPile.getCode() + chargingGun.getCode(); String fileName = URLEncoder.encode(code, "UTF-8") + ".jpg"; response.setContentType("application/force-download"); @@ -175,15 +177,15 @@ inputStream.close(); //清楚服务器上的文件 - Process process = null; - try { - process = Runtime.getRuntime().exec("sudo rm -rf " + filePath); - } catch (IOException e) { - throw new RuntimeException(e); - } - if (process != null) { - process.destroy(); - } +// Process process = null; +// try { +// process = Runtime.getRuntime().exec("sudo rm -rf " + filePath); +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// if (process != null) { +// process.destroy(); +// } }catch (Exception e){ e.printStackTrace(); } @@ -254,11 +256,14 @@ * @param code * @return */ - @PostMapping("/getChargingGunByCode/{code}") - public R<TChargingGun> getChargingGunByCode(@PathVariable("code") String code){ + @PostMapping("/getChargingGunByCode") + public R<TChargingGun> getChargingGunByCode(@RequestBody GetChargingGunByCode code){ + TChargingPile chargingPile = chargingPileService.getOne(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getCode, code.getCharging_pile_code()).eq(TChargingPile::getDelFlag, 0)); return R.ok(chargingGunService.getOne(Wrappers.lambdaQuery(TChargingGun.class) - .eq(TChargingGun::getCode, code) - .last("LIMIT 1"))); + .eq(TChargingGun::getChargingPileId, chargingPile.getId()) + .eq(TChargingGun::getCode, code.getCharging_gun_code()) + .eq(TChargingGun::getDelFlag, 0) + .last("LIMIT 1"))); } /** * 根据枪编号获取充电枪 diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java index 11b93a1..5654d26 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java @@ -25,6 +25,7 @@ import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.OperatorType; +import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.other.api.domain.TVip; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -38,7 +39,9 @@ import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * <p> @@ -55,12 +58,9 @@ private final TChargingPileService chargingPileService; private final TChargingGunService chargingGunService; - - @Resource - private TAccountingStrategyService accountingStrategyService; - - @Resource - private TAccountingStrategyDetailService accountingStrategyDetailService; + + @Resource + private RedisService redisService; @Autowired @@ -205,6 +205,23 @@ TChargingPile chargingPile = chargingPileService.getById(id); return R.ok(chargingPile); } - + + + /** + * 更新充电桩状态 + * @param code + * @param status + */ + @ResponseBody + @PostMapping("/updateChargingPileStatus") + public void updateChargingPileStatus(@RequestParam("code") String code, @RequestParam("status") Integer status){ + TChargingPile chargingPile = chargingPileService.getOne(new LambdaQueryWrapper<TChargingPile>() + .eq(TChargingPile::getCode, code).eq(TChargingPile::getDelFlag, 0)); + if(null != chargingPile){ + chargingPile.setStatus(0 == status ? 1 : 3); + chargingPileService.updateById(chargingPile); + redisService.getCacheMap("charging_pile_online").put(code, System.currentTimeMillis()); + } + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java index b1be7ba..a85a941 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java @@ -113,7 +113,7 @@ * @param gunId * @return */ - @PostMapping("/t-fault-message/getFaultMessageByGunId/{gunId}") + @PostMapping("/getFaultMessageByGunId/{gunId}") public R<TFaultMessage> getFaultMessageByGunId(@PathVariable("gunId") Integer gunId){ return R.ok(faultMessageService.getOne(Wrappers.lambdaQuery(TFaultMessage.class) .eq(TFaultMessage::getChargingGunId,gunId) diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java index c25a254..298068c 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java @@ -106,5 +106,11 @@ * @return */ PageInfo<ChargingGunMonitoring> getChargingGunMonitoring(GetChargingGunMonitoring query); + + + /** + * 定时任务修改充电桩状态 + */ + void updateStatus(); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java index 96f1155..e63b804 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java @@ -27,6 +27,7 @@ import com.ruoyi.common.core.utils.StringUtils; 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.utils.SecurityUtils; import com.ruoyi.integration.api.feignClient.IotInterfaceClient; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; @@ -100,6 +101,9 @@ @Resource private IotInterfaceClient iotInterfaceClient; + + @Resource + private RedisService redisService; @@ -544,4 +548,26 @@ } return pageInfo.setRecords(chargingGunMonitoring); } + + + /** + * 定时任务修改充电桩状态 + */ + @Override + public void updateStatus() { + List<TChargingPile> list = this.list(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getDelFlag, 0)); + List<TChargingPile> datas = new ArrayList(); + Map<String, Object> charging_pile_online = redisService.getCacheMap("charging_pile_online"); + for (TChargingPile chargingPile : list) { + Long time = (Long) charging_pile_online.get(chargingPile.getCode()); + if(null != time && System.currentTimeMillis() - time > 60000){ + chargingPile.setStatus(2); + datas.add(chargingPile); + } + } + + if(datas.size() > 0){ + this.updateBatchById(datas); + } + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java new file mode 100644 index 0000000..f544069 --- /dev/null +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java @@ -0,0 +1,30 @@ +package com.ruoyi.chargingPile.util; + + +import com.ruoyi.chargingPile.service.TChargingPileService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + + +/** + * 定时任务工具类 + */ +@Component +public class TaskUtil { + + @Resource + private TChargingPileService chargingPileService;; + + + + + /** + * 每隔一分钟去处理的定时任务 + */ + @Scheduled(fixedRate = 1000 * 60) + public void taskMinute(){ + + } +} diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml index 1aa8faa..7c025cd 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml @@ -12,8 +12,8 @@ allow-circular-references: true profiles: # 环境配置 -# active: dev - active: prod + active: dev +# active: prod --- spring: config: @@ -56,52 +56,52 @@ type: nacos nacos: # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# data-id: seata-server.properties -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP data-id: seata-server.properties username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# data-id: seata-server.properties +# username: nacos +# password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# username: nacos +# password: nacos cloud: nacos: discovery: # 开发环境 -# server-addr: 192.168.110.169:8848 # nacos注册中心地址 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 -# group: DEFAULT_GROUP -# application: seata-server #Nacos 中 Seata 名称 -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 # nacos注册中心地址 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 group: DEFAULT_GROUP application: seata-server #Nacos 中 Seata 名称 username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# application: seata-server #Nacos 中 Seata 名称 +# username: nacos +# password: nacos sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台地址 diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/RuoYiIntegrationApplication.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/RuoYiIntegrationApplication.java index a05ffbf..a6e9f2b 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/RuoYiIntegrationApplication.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/RuoYiIntegrationApplication.java @@ -6,6 +6,10 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.annotation.StreamListener; +import org.springframework.cloud.stream.messaging.Sink; +import org.springframework.cloud.stream.messaging.Source; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -20,6 +24,7 @@ @SpringBootApplication @EnableScheduling//开启定时任务 @EnableTransactionManagement//开启事务 +@EnableBinding({ Source.class, Sink.class }) public class RuoYiIntegrationApplication { public static void main(String[] args) { SpringApplication.run(RuoYiIntegrationApplication.class, args); 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 index 6d92d1a..9b263b9 100644 --- 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 @@ -126,4 +126,5 @@ * 安全监测 */ public final static String SECURITY_DETECTION ="security_detection"; + public static final String CHARGING_MESSAGE ="charging_message"; } 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 bbc01a0..5cffb52 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 @@ -68,12 +68,14 @@ writer.write("服务id:"+service_id+"\n"); writer.close(); SendResult sendResult; + ChargingMessage chargingMessage = new ChargingMessage(); + chargingMessage.setServiceId(service_id); // 设备消息下发 String result; switch (service_id){ case SendTagConstant.ONLINE: OnlineMessage onlineMessage = JSON.parseObject(content.toJSONString(),OnlineMessage.class); - sendResult = enhanceProduce.onlineMessage(onlineMessage); + chargingMessage.setOnlineMessage(onlineMessage); // 响应硬件 // 业务处理 登录认证应答 OnlineReply onlineReply = new OnlineReply(); @@ -86,10 +88,11 @@ timingSettingReplyOnline.setCharging_pile_code(onlineMessage.getCharging_pile_code()); timingSettingReplyOnline.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date())); iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReplyOnline)); + sendResult = enhanceProduce.chargingMessage(chargingMessage); break; case SendTagConstant.PING: PingMessage pingMessage = JSON.parseObject(content.toJSONString(),PingMessage.class); - sendResult = enhanceProduce.pingMessage(pingMessage); + chargingMessage.setPingMessage(pingMessage); // 响应硬件 Pong pong = new Pong(); pong.setCharging_pile_code(pingMessage.getCharging_pile_code()); @@ -97,20 +100,23 @@ pong.setCharging_gun_status(0); result = iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong)); log.info("充电桩心跳包-返回结果:{}",result); + sendResult = enhanceProduce.chargingMessage(chargingMessage); break; case SendTagConstant.END_CHARGE: EndChargeMessage endChargeMessage = JSON.parseObject(content.toJSONString(),EndChargeMessage.class); - sendResult = enhanceProduce.endChargeMessage(endChargeMessage); + chargingMessage.setEndChargeMessage(endChargeMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.ERROR_MESSAGE: ErrorMessageMessage errorMessageMessage = JSON.parseObject(content.toJSONString(),ErrorMessageMessage.class); - sendResult = enhanceProduce.errorMessageMessage(errorMessageMessage); + chargingMessage.setErrorMessageMessage(errorMessageMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.BILLING_MODE_VERIFY: BillingModeVerifyMessage billingModeVerifyMessage = JSON.parseObject(content.toJSONString(),BillingModeVerifyMessage.class); - sendResult = enhanceProduce.billingModeVerifyMessage(billingModeVerifyMessage); + chargingMessage.setBillingModeVerifyMessage(billingModeVerifyMessage); // 响应硬件 BillingModeVerifyReply billingModeVerifyReply = new BillingModeVerifyReply(); if(billingModeVerifyMessage.getBilling_model_code().equals("0")){ @@ -134,10 +140,11 @@ } } iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.BILLING_MODE_VERIFY_REPLY.getKey(),messageUtil.billingModeVerifyReply(billingModeVerifyReply)); + sendResult = enhanceProduce.chargingMessage(chargingMessage); break; case SendTagConstant.ACQUISITION_BILLING_MODE: AcquisitionBillingModeMessage acquisitionBillingModeMessage = JSON.parseObject(content.toJSONString(),AcquisitionBillingModeMessage.class); - sendResult = enhanceProduce.acquisitionBillingModeMessage(acquisitionBillingModeMessage); + chargingMessage.setAcquisitionBillingModeMessage(acquisitionBillingModeMessage); // 响应硬件 计费模型请求应答 1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段 List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(acquisitionBillingModeMessage.getCharging_pile_code().substring(0,14)).getData(); Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails); @@ -151,43 +158,51 @@ acquisitionBillingModeReply.setCharging_pile_code(acquisitionBillingModeMessage.getCharging_pile_code()); acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO); iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply)); + sendResult = enhanceProduce.chargingMessage(chargingMessage); break; case SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA: UploadRealTimeMonitoringDataMessage uploadRealTimeMonitoringDataMessage = JSON.parseObject(content.toJSONString(),UploadRealTimeMonitoringDataMessage.class); - sendResult = enhanceProduce.uploadRealTimeMonitoringDataMessage(uploadRealTimeMonitoringDataMessage); + chargingMessage.setUploadRealTimeMonitoringDataMessage(uploadRealTimeMonitoringDataMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.CHARGING_HANDSHAKE: ChargingHandshakeMessage chargingHandshakeMessage = JSON.parseObject(content.toJSONString(),ChargingHandshakeMessage.class); - sendResult = enhanceProduce.chargingHandshakeMessage(chargingHandshakeMessage); + chargingMessage.setChargingHandshakeMessage(chargingHandshakeMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.PARAMETER_SETTING: ParameterSettingMessage parameterSettingMessage = JSON.parseObject(content.toJSONString(),ParameterSettingMessage.class); - sendResult = enhanceProduce.parameterSettingMessage(parameterSettingMessage); + chargingMessage.setParameterSettingMessage(parameterSettingMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); break; case SendTagConstant.BMS_ABORT: BmsAbortMessage bmsAbortMessage = JSON.parseObject(content.toJSONString(),BmsAbortMessage.class); - sendResult = enhanceProduce.bmsAbortMessage(bmsAbortMessage); + chargingMessage.setBmsAbortMessage(bmsAbortMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.MOTOR_ABORT: MotorAbortMessage motorAbortMessage = JSON.parseObject(content.toJSONString(),MotorAbortMessage.class); - sendResult = enhanceProduce.motorAbortMessage(motorAbortMessage); + chargingMessage.setMotorAbortMessage(motorAbortMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); break; case SendTagConstant.BMS_DEMAND_AND_CHARGER_EXPORTATION: BmsDemandAndChargerExportationMessage bmsDemandAndChargerExportationMessage = JSON.parseObject(content.toJSONString(),BmsDemandAndChargerExportationMessage.class); - sendResult = enhanceProduce.bmsDemandAndChargerExportationMessage(bmsDemandAndChargerExportationMessage); + chargingMessage.setBmsDemandAndChargerExportationMessage(bmsDemandAndChargerExportationMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.BMS_INFORMATION: BmsInformationMessage bmsInformationMessage = JSON.parseObject(content.toJSONString(),BmsInformationMessage.class); - sendResult = enhanceProduce.bmsInformationMessage(bmsInformationMessage); + chargingMessage.setBmsInformationMessage(bmsInformationMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.CHARGING_PILE_STARTS_CHARGING: ChargingPileStartsChargingMessage chargingPileStartsChargingMessage = JSON.parseObject(content.toJSONString(),ChargingPileStartsChargingMessage.class); - sendResult = enhanceProduce.chargingPileStartsChargingMessage(chargingPileStartsChargingMessage); + chargingMessage.setChargingPileStartsChargingMessage(chargingPileStartsChargingMessage); // 响应硬件 PlatformConfirmationCharging platformConfirmationCharging = new PlatformConfirmationCharging(); platformConfirmationCharging.setCharging_pile_code(chargingPileStartsChargingMessage.getCharging_pile_code()); @@ -197,88 +212,104 @@ platformConfirmationCharging.setAuthentication(1); // TODO 若是失败,给出失败原因 iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.PLATFORM_CONFIRMATION_CHARGING.getKey(),messageUtil.platformConfirmationCharging(platformConfirmationCharging)); + sendResult = enhanceProduce.chargingMessage(chargingMessage); break; case SendTagConstant.PLATFORM_START_CHARGING_REPLY: PlatformStartChargingReplyMessage platformStartChargingReplyMessage = JSON.parseObject(content.toJSONString(),PlatformStartChargingReplyMessage.class); - sendResult = enhanceProduce.platformStartChargingReplyMessage(platformStartChargingReplyMessage); + chargingMessage.setPlatformStartChargingReplyMessage(platformStartChargingReplyMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.PLATFORM_STOP_CHARGING_REPLY: PlatformStopChargingReplyMessage platformStopChargingReplyMessage = JSON.parseObject(content.toJSONString(),PlatformStopChargingReplyMessage.class); - sendResult = enhanceProduce.platformStopChargingReplyMessage(platformStopChargingReplyMessage); + chargingMessage.setPlatformStopChargingReplyMessage(platformStopChargingReplyMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.TRANSACTION_RECORD: TransactionRecordMessage transactionRecordMessage = JSON.parseObject(content.toJSONString(),TransactionRecordMessage.class); - sendResult = enhanceProduce.transactionRecordMessage(transactionRecordMessage); + chargingMessage.setTransactionRecordMessage(transactionRecordMessage); // 响应硬件 ConfirmTransactionRecord confirmTransactionRecord = new ConfirmTransactionRecord(); confirmTransactionRecord.setTransaction_serial_number(transactionRecordMessage.getTransaction_serial_number()); confirmTransactionRecord.setConfirm_result(0); iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord)); + sendResult = enhanceProduce.chargingMessage(chargingMessage); break; case SendTagConstant.UPDATE_BALANCE_REPLY: UpdateBalanceReplyMessage updateBalanceReplyMessage = JSON.parseObject(content.toJSONString(),UpdateBalanceReplyMessage.class); - sendResult = enhanceProduce.updateBalanceReplyMessage(updateBalanceReplyMessage); + chargingMessage.setUpdateBalanceReplyMessage(updateBalanceReplyMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.SYNCHRONIZE_OFFLINE_CARD_REPLY: SynchronizeOfflineCardReplyMessage synchronizeOfflineCardReplyMessage = JSON.parseObject(content.toJSONString(),SynchronizeOfflineCardReplyMessage.class); - sendResult = enhanceProduce.synchronizeOfflineCardReplyMessage(synchronizeOfflineCardReplyMessage); + chargingMessage.setSynchronizeOfflineCardReplyMessage(synchronizeOfflineCardReplyMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.CLEAR_OFFLINE_CARD_REPLY: ClearOfflineCardReplyMessage clearOfflineCardReplyMessage = JSON.parseObject(content.toJSONString(),ClearOfflineCardReplyMessage.class); - sendResult = enhanceProduce.clearOfflineCardReplyMessage(clearOfflineCardReplyMessage); + chargingMessage.setClearOfflineCardReplyMessage(clearOfflineCardReplyMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY: WorkingParameterSettingReplyMessage workingParameterSettingReplyMessage = JSON.parseObject(content.toJSONString(),WorkingParameterSettingReplyMessage.class); - sendResult = enhanceProduce.workingParameterSettingReplyMessage(workingParameterSettingReplyMessage); + chargingMessage.setWorkingParameterSettingReplyMessage(workingParameterSettingReplyMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.TIMING_SETTING: TimingSettingMessage timingSettingMessage = JSON.parseObject(content.toJSONString(),TimingSettingMessage.class); - sendResult = enhanceProduce.timingSettingMessage(timingSettingMessage); + chargingMessage.setTimingSettingMessage(timingSettingMessage); // 响应硬件 对时设置应答 TimingSettingReply timingSettingReply = new TimingSettingReply(); timingSettingReply.setCharging_pile_code(timingSettingMessage.getCharging_pile_code()); timingSettingReply.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date())); iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReply)); + sendResult = enhanceProduce.chargingMessage(chargingMessage); break; case SendTagConstant.SETUP_BILLING_MODEL_REPLY: SetupBillingModelReplyMessage setupBillingModelReplyMessage = JSON.parseObject(content.toJSONString(),SetupBillingModelReplyMessage.class); - sendResult = enhanceProduce.setupBillingModelReplyMessage(setupBillingModelReplyMessage); + chargingMessage.setSetupBillingModelReplyMessage(setupBillingModelReplyMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.GROUND_LOCK_REAL_TIME_DATA: GroundLockRealTimeDataMessage groundLockRealTimeDataMessage = JSON.parseObject(content.toJSONString(),GroundLockRealTimeDataMessage.class); - sendResult = enhanceProduce.groundLockRealTimeDataMessage(groundLockRealTimeDataMessage); + chargingMessage.setGroundLockRealTimeDataMessage(groundLockRealTimeDataMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA: ChargingPileReturnsGroundLockDataMessage chargingPileReturnsGroundLockDataMessage = JSON.parseObject(content.toJSONString(),ChargingPileReturnsGroundLockDataMessage.class); - sendResult = enhanceProduce.chargingPileReturnsGroundLockDataMessage(chargingPileReturnsGroundLockDataMessage); + chargingMessage.setChargingPileReturnsGroundLockDataMessage(chargingPileReturnsGroundLockDataMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.PLATFORM_RESTART_REPLY: PlatformRestartReplyMessage platformRestartReplyMessage = JSON.parseObject(content.toJSONString(),PlatformRestartReplyMessage.class); - sendResult = enhanceProduce.platformRestartReplyMessage(platformRestartReplyMessage); + chargingMessage.setPlatformRestartReplyMessage(platformRestartReplyMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.QR_CODE_DELIVERY_REPLY: QrCodeDeliveryReplyMessage qrCodeDeliveryReplyMessage = JSON.parseObject(content.toJSONString(),QrCodeDeliveryReplyMessage.class); - sendResult = enhanceProduce.qrCodeDeliveryReplyMessage(qrCodeDeliveryReplyMessage); + chargingMessage.setQrCodeDeliveryReplyMessage(qrCodeDeliveryReplyMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; case SendTagConstant.SECURITY_DETECTION: SecurityDetectionMessage securityDetectionMessage = JSON.parseObject(content.toJSONString(),SecurityDetectionMessage.class); - sendResult = enhanceProduce.securityDetectionMessage(securityDetectionMessage); + chargingMessage.setSecurityDetectionMessage(securityDetectionMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; default: PlatformRemoteUpdateReplyMessage platformRemoteUpdateReplyMessage = JSON.parseObject(content.toJSONString(),PlatformRemoteUpdateReplyMessage.class); - sendResult = enhanceProduce.platformRemoteUpdateReplyMessage(platformRemoteUpdateReplyMessage); + chargingMessage.setPlatformRemoteUpdateReplyMessage(platformRemoteUpdateReplyMessage); + sendResult = enhanceProduce.chargingMessage(chargingMessage); // 响应硬件 break; } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java index 08535ed..d44e36f 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java @@ -10,6 +10,8 @@ import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; @Service @@ -39,8 +41,9 @@ */ @Override public PlatformStopChargingReply getPlatformStopChargingReply(GetPlatformStopChargingReply query) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List<PlatformStopChargingReply> platformStopChargingReplies = mongoTemplate.find(new Query().addCriteria(Criteria.where("charging_pile_code").is(query.getCharging_pile_code()) - .and("charging_gun_code").is(query.getCharging_gun_code())), PlatformStopChargingReply.class); + .and("charging_gun_code").is(query.getCharging_gun_code()).and("create_time").lte(sdf.format(new Date())).and("create_time").gte(query.getEnd_time())), PlatformStopChargingReply.class); return platformStopChargingReplies.size() > 0 ? platformStopChargingReplies.get(0) : null; } } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/base/BaseMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/base/BaseMessage.java index 6129be7..fa708e9 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/base/BaseMessage.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/base/BaseMessage.java @@ -27,4 +27,9 @@ * 重试次数,用于判断重试次数,超过重试次数发送异常警告 */ protected Integer retryTimes = 0; + + /** + * 服务id + */ + protected String serviceId; } \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java index 19a3046..bb8d506 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java @@ -35,11 +35,6 @@ @Autowired private EndChargeService endChargeService; - @Autowired - private MessageUtil messageUtil; - @Autowired - private IotMessageProduce iotMessageProduce; - @Resource private ChargingOrderClient chargingOrderClient; diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java index d60ef45..a22254f 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java @@ -5,6 +5,8 @@ import com.ruoyi.integration.mongodb.service.PlatformStartChargingReplyService; import com.ruoyi.integration.rocket.model.PlatformStartChargingReplyMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; +import com.ruoyi.order.api.feignClient.ChargingOrderClient; +import com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.MessageModel; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; @@ -12,6 +14,8 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; + +import javax.annotation.Resource; @Slf4j @Component @@ -26,6 +30,11 @@ @Autowired private PlatformStartChargingReplyService platformStartChargingReplyService; + + @Resource + private ChargingOrderClient chargingOrderClient; + + @Override protected void handleMessage(PlatformStartChargingReplyMessage message) throws Exception { @@ -36,6 +45,9 @@ BeanUtils.copyProperties(message,platformStartChargingReply); platformStartChargingReplyService.create(platformStartChargingReply); // 业务处理 + PlatformStartChargingReplyMessageVO message1 = new PlatformStartChargingReplyMessageVO(); + BeanUtils.copyProperties(message, message1); + chargingOrderClient.startChargeSuccessfully(message1); } @Override diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java index fc49297..635ed19 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java @@ -33,10 +33,6 @@ @Autowired private TimingSettingService timingSettingService; - @Autowired - private IotMessageProduce iotMessageProduce; - @Autowired - private MessageUtil messageUtil; @Override protected void handleMessage(TimingSettingMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 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 ce52b46..a08aeb8 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 @@ -6,6 +6,7 @@ import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TFaultMessage; +import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; import com.ruoyi.integration.api.model.Online; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService; @@ -83,8 +84,10 @@ UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery(); BeanUtils.copyProperties(uploadRealTimeMonitoringData, query); chargingOrderClient.chargeMonitoring(query); - - TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(message.getCharging_gun_code()).getData(); + GetChargingGunByCode code = new GetChargingGunByCode(); + code.setCharging_pile_code(message.getCharging_pile_code()); + code.setCharging_gun_code(message.getCharging_gun_code()); + TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData(); if(Objects.nonNull(chargingGun)){ // 存储状态信息 TFaultMessage faultMessage = new TFaultMessage(); diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java index f7ac9d4..5665883 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java @@ -25,10 +25,10 @@ private BigDecimal bms_battery_voltage; // 最高电压 BMS 最高单体动力蓄电池电压及组号(1-12 位:最高单体动力蓄电池电压,数据分辨率:0.01 V/位,0 V 偏移量;数据范围:0~24 V;13-16 位:最高单体动力蓄电池电压所在组号,数据分辨率:1/位,0 偏移量;数据范围:0~15) private Integer bms_group_number; // 所在组号 BMS 最高单体动力蓄电池电压及组号(1-12 位:最高单体动力蓄电池电压,数据分辨率:0.01 V/位,0 V 偏移量;数据范围:0~24 V;13-16 位:最高单体动力蓄电池电压所在组号,数据分辨率:1/位,0 偏移量;数据范围:0~15) private BigDecimal bms_charged_status; // BMS 当前荷电状态 SOC( %) - private Integer bms_remaining_charging_time; // BMS 估算剩余充电时间 + private BigDecimal bms_remaining_charging_time; // BMS 估算剩余充电时间 private BigDecimal voltage_output_value; // 电桩电压输出值 private BigDecimal current_output_value; // 电桩电流输出值 - private Integer cumulative_charging_time; // 累计充电时间 + private BigDecimal cumulative_charging_time; // 累计充电时间 } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsInformationMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsInformationMessage.java index d5281cd..28c31ba 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsInformationMessage.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsInformationMessage.java @@ -17,9 +17,9 @@ private String charging_gun_code; // 抢号 private Integer bms_highest_voltage_number; // BMS 最高单体动力蓄电池电压所在编号 private String bms_maximum_battery_temperature; // BMS 最高动力蓄电池温度 - private Integer maximum_temperature_detection_point_number; // 最高温度检测点编号 + private String maximum_temperature_detection_point_number; // 最高温度检测点编号 private String minimum_cell_temperature; // 最低动力蓄电池温度 - private Integer lowest_temperature_detection_pointt_number; // 最低动力蓄电池温度检测点编号 + private String lowest_temperature_detection_pointt_number; // 最低动力蓄电池温度检测点编号 private Integer bms_battery_voltage; // BMS 单体动力蓄电池电压过高 /过低(0:正常,1:过高,10:过低) private Integer bms_battery_charging_status; // BMS 整车动力蓄电池荷电状态SOC 过高/过低(0:正常,1:过高,10:过低) private Integer bms_charging_overcurrent; // BMS 动力蓄电池充电过电流(0:正常,1:过流,10:不可信状态) diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ChargingMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ChargingMessage.java new file mode 100644 index 0000000..149cd59 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ChargingMessage.java @@ -0,0 +1,44 @@ +package com.ruoyi.integration.rocket.model; + +import com.ruoyi.integration.rocket.base.BaseMessage; +import lombok.Data; +import org.apache.poi.ss.formula.functions.T; + +@Data +public class ChargingMessage extends BaseMessage { + + private AcquisitionBillingModeMessage acquisitionBillingModeMessage; + private BillingModeVerifyMessage billingModeVerifyMessage; + private BmsAbortMessage bmsAbortMessage; + private BmsDemandAndChargerExportationMessage bmsDemandAndChargerExportationMessage; + private BmsInformationMessage bmsInformationMessage; + private ChargingHandshakeMessage chargingHandshakeMessage; + private ChargingMessage chargingMessage; + private ChargingPileReturnsGroundLockDataMessage chargingPileReturnsGroundLockDataMessage; + private ChargingPileStartsChargingMessage chargingPileStartsChargingMessage; + private ClearOfflineCardReplyMessage clearOfflineCardReplyMessage; + private EndChargeMessage endChargeMessage; + private ErrorMessageMessage errorMessageMessage; + private GroundLockRealTimeDataMessage groundLockRealTimeDataMessage; + private MotorAbortMessage motorAbortMessage; + private OnlineMessage onlineMessage; + private ParameterSettingMessage parameterSettingMessage; + private PingMessage pingMessage; + private PlatformRemoteUpdateReplyMessage platformRemoteUpdateReplyMessage; + private PlatformRestartReplyMessage platformRestartReplyMessage; + private PlatformStartChargingReplyMessage platformStartChargingReplyMessage; + private PlatformStopChargingReplyMessage platformStopChargingReplyMessage; + private QrCodeDeliveryMessage qrCodeDeliveryMessage; + private QrCodeDeliveryReplyMessage qrCodeDeliveryReplyMessage; + private QueryOfflineCardReplyMessage queryOfflineCardReplyMessage; + private SecurityDetectionMessage securityDetectionMessage; + private SetupBillingModelReplyMessage setupBillingModelReplyMessage; + private SynchronizeOfflineCardReplyMessage synchronizeOfflineCardReplyMessage; + private TimingSettingMessage timingSettingMessage; + private TimingSettingReplyMessage timingSettingReplyMessage; + private TransactionRecordMessage transactionRecordMessage; + private UpdateBalanceReplyMessage updateBalanceReplyMessage; + private UploadRealTimeMonitoringDataMessage uploadRealTimeMonitoringDataMessage; + private WorkingParameterSettingReplyMessage workingParameterSettingReplyMessage; + +} \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/GroundLockRealTimeDataMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/GroundLockRealTimeDataMessage.java index c2dd9b5..9f7481b 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/GroundLockRealTimeDataMessage.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/GroundLockRealTimeDataMessage.java @@ -1,6 +1,7 @@ package com.ruoyi.integration.rocket.model; import com.ruoyi.integration.rocket.base.BaseMessage; +import lombok.AllArgsConstructor; import lombok.Data; import lombok.experimental.Accessors; import org.springframework.data.mongodb.core.mapping.Document; diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java new file mode 100644 index 0000000..8cc1e62 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java @@ -0,0 +1,501 @@ +package com.ruoyi.integration.rocket.produce; + +import com.alibaba.fastjson.JSON; +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.FaultMessageClient; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.chargingPile.api.model.TChargingGun; +import com.ruoyi.chargingPile.api.model.TFaultMessage; +import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; +import com.ruoyi.integration.api.model.*; +import com.ruoyi.integration.iotda.constant.SendTagConstant; +import com.ruoyi.integration.iotda.enums.ServiceIdMenu; +import com.ruoyi.integration.iotda.utils.tools.CP56Time2aConverter; +import com.ruoyi.integration.mongodb.service.*; +import com.ruoyi.integration.rocket.model.*; +import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; +import com.ruoyi.order.api.feignClient.ChargingOrderClient; +import com.ruoyi.order.api.model.TChargingOrder; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; +import com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO; +import com.ruoyi.order.api.vo.PlatformStopChargingReplyVO; +import com.ruoyi.order.api.vo.SecurityDetectionVO; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.MessageModel; +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.cloud.stream.annotation.StreamListener; +import org.springframework.cloud.stream.messaging.Sink; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.Objects; + +@Slf4j +@Component +@RocketMQMessageListener( + messageModel = MessageModel.CLUSTERING, + consumerGroup = "charge_charging_message", + topic = "charge_charging_message", + selectorExpression = "charging_message", + consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够 +) +public class ChargingMessageListener extends EnhanceMessageHandler<ChargingMessage> implements RocketMQListener<ChargingMessage> { + + @Autowired + private AcquisitionBillingModeService acquisitionBillingModeService; + @Autowired + private BillingModeVerifyService billingModeVerifyService; + @Autowired + private BmsAbortService bmsAbortService; + @Resource + private ChargingOrderClient chargingOrderClient; + @Autowired + private BmsDemandAndChargerExportationService bmsDemandAndChargerExportationService; + @Autowired + private OnlineService onlineService; + @Autowired + private PingService pingService; + @Autowired + private EndChargeService endChargeService; + @Autowired + private ErrorMessageMessageService errorMessageMessageService; + @Autowired + private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService; + @Resource + private AccountingStrategyDetailClient accountingStrategyDetailClient; + @Resource + private ChargingGunClient chargingGunClient; + @Resource + private FaultMessageClient faultMessageClient; + @Autowired + private ChargingHandshakeService chargingHandshakeService; + @Autowired + private ParameterSettingService parameterSettingService; + @Autowired + private MotorAbortService motorAbortService; + @Autowired + private BmsInformationService bmsInformationService; + @Autowired + private ChargingPileStartsChargingService chargingPileStartsChargingService; + @Autowired + private PlatformStartChargingReplyService platformStartChargingReplyService; + @Autowired + private PlatformStopChargingReplyService platformStopChargingReplyService; + @Autowired + private TransactionRecordService transactionRecordService; + @Autowired + private UpdateBalanceReplyService updateBalanceReplyService; + @Autowired + private SynchronizeOfflineCardReplyService synchronizeOfflineCardReplyService; + @Autowired + private ClearOfflineCardReplyService clearOfflineCardReplyService; + @Autowired + private WorkingParameterSettingReplyService workingParameterSettingReplyService; + @Autowired + private TimingSettingService timingSettingService; + @Autowired + private SetupBillingModelReplyService setupBillingModelReplyService; + @Autowired + private GroundLockRealTimeDataService groundLockRealTimeDataService; + @Autowired + private ChargingPileReturnsGroundLockDataService chargingPileReturnsGroundLockDataService; + @Autowired + private PlatformRestartReplyService platformRestartReplyService; + @Autowired + private PlatformRemoteUpdateReplyService platformRemoteUpdateReplyService; + @Autowired + private QrCodeDeliveryReplyService qrCodeDeliveryReplyService; + @Autowired + private SecurityDetectionService securityDetectionService; + + @Resource + private ChargingPileClient chargingPileClient; + + + + + + @StreamListener("input") + @Override + protected void handleMessage(ChargingMessage message) throws Exception { + String serviceId = message.getServiceId(); + if(!StringUtils.hasLength(serviceId)){ + return; + } + switch (serviceId){ + case SendTagConstant.ONLINE: + OnlineMessage onlineMessage = message.getOnlineMessage(); + log.info("充电桩登录认证业务消息处理:{}",onlineMessage); + // 持久化消息 + Online online = new Online(); + BeanUtils.copyProperties(onlineMessage,online); + onlineService.create(online); + break; + case SendTagConstant.PING: + PingMessage pingMessage = message.getPingMessage(); + log.info("充电桩心跳包-业务消息处理:{}",pingMessage); + // 持久化消息 + Ping ping = new Ping(); + BeanUtils.copyProperties(pingMessage,ping); + pingService.create(ping); + + chargingPileClient.updateChargingPileStatus(pingMessage.getCharging_pile_code(), pingMessage.getCharging_gun_status()); + break; + case SendTagConstant.END_CHARGE: + EndChargeMessage endChargeMessage = message.getEndChargeMessage(); + log.info("充电结束-业务消息处理:{}",endChargeMessage); + // 持久化消息 + EndCharge endCharge = new EndCharge(); + BeanUtils.copyProperties(endChargeMessage,endCharge); + endChargeService.create(endCharge); + // 业务处理 + chargingOrderClient.endCharge(endCharge.getTransaction_serial_number()); + break; + case SendTagConstant.ERROR_MESSAGE: + ErrorMessageMessage errorMessageMessage1 = message.getErrorMessageMessage(); + log.info("错误报文-业务消息处理:{}",errorMessageMessage1); + // 持久化消息 + ErrorMessageMessage errorMessageMessage = new ErrorMessageMessage(); + BeanUtils.copyProperties(errorMessageMessage1,errorMessageMessage); + errorMessageMessageService.create(errorMessageMessage); + break; + case SendTagConstant.BILLING_MODE_VERIFY: + BillingModeVerifyMessage billingModeVerifyMessage = message.getBillingModeVerifyMessage(); + log.info("计费模型验证请求-业务消息处理:{}",billingModeVerifyMessage); + // 持久化消息 + BillingModeVerify billingModeVerify = new BillingModeVerify(); + BeanUtils.copyProperties(billingModeVerifyMessage,billingModeVerify); + billingModeVerifyService.create(billingModeVerify); + break; + case SendTagConstant.ACQUISITION_BILLING_MODE: + AcquisitionBillingModeMessage acquisitionBillingModeMessage = message.getAcquisitionBillingModeMessage(); + log.info("充电桩计费模型请求-业务消息处理:{}",acquisitionBillingModeMessage); + // 持久化消息 + AcquisitionBillingMode acquisitionBillingMode = new AcquisitionBillingMode(); + BeanUtils.copyProperties(acquisitionBillingModeMessage,acquisitionBillingMode); + acquisitionBillingModeService.create(acquisitionBillingMode); + break; + case SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA: + UploadRealTimeMonitoringDataMessage uploadRealTimeMonitoringDataMessage = message.getUploadRealTimeMonitoringDataMessage(); + log.info("上传实时监测数据-业务消息处理:{}",uploadRealTimeMonitoringDataMessage); + // 持久化消息 + UploadRealTimeMonitoringData uploadRealTimeMonitoringData = new UploadRealTimeMonitoringData(); + BeanUtils.copyProperties(uploadRealTimeMonitoringDataMessage,uploadRealTimeMonitoringData); + // 查询mogondb上一条数据 + UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(uploadRealTimeMonitoringDataMessage.getTransaction_serial_number()); + // 查询订单 + TChargingOrder chargingOrder = chargingOrderClient.getOrderByCode(uploadRealTimeMonitoringDataMessage.getTransaction_serial_number()).getData(); + // 查询当前时间段的计费策略 + TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailBySiteId(chargingOrder.getSiteId()).getData(); + uploadRealTimeMonitoringData.setElectrovalence_all(accountingStrategyDetail.getElectrovalence()); + uploadRealTimeMonitoringData.setService_charge(accountingStrategyDetail.getServiceCharge()); + if (Objects.nonNull(data)) { + uploadRealTimeMonitoringData.setLast_time(data.getLast_time()); + uploadRealTimeMonitoringData.setPeriod_electric_price(uploadRealTimeMonitoringDataMessage.getPaid_amount().subtract(data.getPaid_amount())); + uploadRealTimeMonitoringData.setPeriod_charging_degree(uploadRealTimeMonitoringDataMessage.getCharging_degree().subtract(data.getCharging_degree())); + uploadRealTimeMonitoringData.setPeriod_service_price(uploadRealTimeMonitoringDataMessage.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP)); + }else { + log.info("首次上传实时监测数据"); + uploadRealTimeMonitoringData.setPeriod_electric_price(uploadRealTimeMonitoringDataMessage.getPaid_amount()); + uploadRealTimeMonitoringData.setPeriod_charging_degree(uploadRealTimeMonitoringDataMessage.getCharging_degree()); + uploadRealTimeMonitoringData.setPeriod_service_price(uploadRealTimeMonitoringDataMessage.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP)); + } + uploadRealTimeMonitoringDataService.create(uploadRealTimeMonitoringData); + // 业务处理 + UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery(); + BeanUtils.copyProperties(uploadRealTimeMonitoringData, query); + chargingOrderClient.chargeMonitoring(query); + GetChargingGunByCode code = new GetChargingGunByCode(); + code.setCharging_pile_code(uploadRealTimeMonitoringDataMessage.getCharging_pile_code()); + code.setCharging_gun_code(uploadRealTimeMonitoringDataMessage.getCharging_gun_code()); + TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData(); + if(Objects.nonNull(chargingGun)){ + // 存储状态信息 + TFaultMessage faultMessage = new TFaultMessage(); + if(uploadRealTimeMonitoringDataMessage.getCharging_gun_status().equals(0) || uploadRealTimeMonitoringDataMessage.getCharging_gun_status().equals(1)){ + faultMessage.setSiteId(chargingGun.getSiteId()); + faultMessage.setChargingPileId(chargingGun.getChargingPileId()); + faultMessage.setChargingGunId(chargingGun.getId()); + switch (uploadRealTimeMonitoringDataMessage.getCharging_gun_status()){ + case 0: + faultMessage.setStatus(1); + chargingGun.setStatus(1); + break; + case 1: + faultMessage.setStatus(2); + chargingGun.setStatus(7); + break; + } + faultMessage.setDownTime(LocalDateTime.now()); + faultMessageClient.createFaultMessage(faultMessage); + }else { + switch (uploadRealTimeMonitoringDataMessage.getCharging_gun_status()){ + case 2: + chargingGun.setStatus(2); + break; + case 3: + chargingGun.setStatus(4); + break; + } + // 空闲 充电 查询是否该设备之前存在离线记录或者故障记录 + faultMessage = faultMessageClient.getFaultMessageByGunId(chargingGun.getId()).getData(); + if(Objects.nonNull(faultMessage)){ + faultMessage.setEndTime(LocalDateTime.now()); + faultMessageClient.updateFaultMessage(faultMessage); + } + } + chargingGunClient.updateChargingGunById(chargingGun); + } + break; + case SendTagConstant.CHARGING_HANDSHAKE: + ChargingHandshakeMessage chargingHandshakeMessage = message.getChargingHandshakeMessage(); + log.info("充电握手-业务消息处理:{}",chargingHandshakeMessage); + // 持久化消息 + ChargingHandshake chargingHandshake = new ChargingHandshake(); + BeanUtils.copyProperties(chargingHandshakeMessage,chargingHandshake); + chargingHandshakeService.create(chargingHandshake); + break; + case SendTagConstant.PARAMETER_SETTING: + ParameterSettingMessage parameterSettingMessage = message.getParameterSettingMessage(); + log.info("业务消息处理:{}",parameterSettingMessage); + // 持久化消息 + ParameterSetting parameterSetting = new ParameterSetting(); + BeanUtils.copyProperties(parameterSettingMessage,parameterSetting); + parameterSettingService.create(parameterSetting); + break; + case SendTagConstant.BMS_ABORT: + BmsAbortMessage bmsAbortMessage = message.getBmsAbortMessage(); + log.info("充电阶段BMS中止-业务消息处理:{}",bmsAbortMessage); + // 持久化消息 + BmsAbort bmsAbort = new BmsAbort(); + BeanUtils.copyProperties(bmsAbortMessage,bmsAbort); + bmsAbortService.create(bmsAbort); + // 业务处理 + chargingOrderClient.excelEndCharge(bmsAbort.getTransaction_serial_number()); + break; + case SendTagConstant.MOTOR_ABORT: + MotorAbortMessage motorAbortMessage = message.getMotorAbortMessage(); + log.info("充电阶段充电机中止-业务消息处理:{}",motorAbortMessage); + // 持久化消息 + MotorAbort motorAbort = new MotorAbort(); + BeanUtils.copyProperties(motorAbortMessage,motorAbort); + motorAbortService.create(motorAbort); + // 业务处理 + chargingOrderClient.excelEndCharge(motorAbort.getTransaction_serial_number()); + break; + case SendTagConstant.BMS_DEMAND_AND_CHARGER_EXPORTATION: + BmsDemandAndChargerExportationMessage bmsDemandAndChargerExportationMessage = message.getBmsDemandAndChargerExportationMessage(); + log.info("充电过程BMS需求、充电机输出-业务消息处理:{}",bmsDemandAndChargerExportationMessage); + // 持久化消息 + BmsDemandAndChargerExportation bmsDemandAndChargerExportation = new BmsDemandAndChargerExportation(); + BeanUtils.copyProperties(bmsDemandAndChargerExportationMessage,bmsDemandAndChargerExportation); + bmsDemandAndChargerExportationService.create(bmsDemandAndChargerExportation); + // 业务处理 + TChargingOrder chargingOrderBms = chargingOrderClient.getOrderByCode(bmsDemandAndChargerExportationMessage.getTransaction_serial_number()).getData(); + if(Objects.nonNull(chargingOrderBms)){ + chargingOrderBms.setNeedElec(bmsDemandAndChargerExportationMessage.getBms_current_requirements()); + chargingOrderClient.updateChargingOrder(chargingOrderBms); + } + break; + case SendTagConstant.BMS_INFORMATION: + BmsInformationMessage bmsInformationMessage = message.getBmsInformationMessage(); + log.info("充电过程BMS信息-业务消息处理:{}",bmsInformationMessage); + // 持久化消息 + BmsInformation bmsInformation = new BmsInformation(); + BeanUtils.copyProperties(bmsInformationMessage,bmsInformation); + bmsInformationService.create(bmsInformation); + break; + case SendTagConstant.CHARGING_PILE_STARTS_CHARGING: + ChargingPileStartsChargingMessage chargingPileStartsChargingMessage = message.getChargingPileStartsChargingMessage(); + log.info("充电桩主动申请启动充电-业务消息处理:{}",chargingPileStartsChargingMessage); + // 持久化消息 + ChargingPileStartsCharging chargingPileStartsCharging = new ChargingPileStartsCharging(); + BeanUtils.copyProperties(chargingPileStartsChargingMessage,chargingPileStartsCharging); + chargingPileStartsChargingService.create(chargingPileStartsCharging); + break; + case SendTagConstant.PLATFORM_START_CHARGING_REPLY: + PlatformStartChargingReplyMessage platformStartChargingReplyMessage = message.getPlatformStartChargingReplyMessage(); + log.info("远程启机命令回复-业务消息处理:{}",platformStartChargingReplyMessage); + // 持久化消息 + PlatformStartChargingReply platformStartChargingReply = new PlatformStartChargingReply(); + BeanUtils.copyProperties(platformStartChargingReplyMessage,platformStartChargingReply); + platformStartChargingReplyService.create(platformStartChargingReply); + // 业务处理 + PlatformStartChargingReplyMessageVO message1 = new com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO(); + BeanUtils.copyProperties(platformStartChargingReplyMessage, message1); + chargingOrderClient.startChargeSuccessfully(message1); + break; + case SendTagConstant.PLATFORM_STOP_CHARGING_REPLY: + PlatformStopChargingReplyMessage platformStopChargingReplyMessage = message.getPlatformStopChargingReplyMessage(); + log.info("远程停机命令回复-业务消息处理:{}",platformStopChargingReplyMessage); + // 持久化消息 + PlatformStopChargingReply platformStopChargingReply = new PlatformStopChargingReply(); + BeanUtils.copyProperties(platformStopChargingReplyMessage,platformStopChargingReply); + platformStopChargingReplyService.create(platformStopChargingReply); + PlatformStopChargingReplyVO platformStopChargingReply1 = new PlatformStopChargingReplyVO(); + BeanUtils.copyProperties(platformStopChargingReply, platformStopChargingReply1); + chargingOrderClient.terminateSuccessfulResponse(platformStopChargingReply1); + break; + case SendTagConstant.TRANSACTION_RECORD: + TransactionRecordMessage transactionRecordMessage = message.getTransactionRecordMessage(); + log.info("交易记录-业务消息处理:{}",transactionRecordMessage); + // 持久化消息 + TransactionRecord transactionRecord = new TransactionRecord(); + BeanUtils.copyProperties(transactionRecordMessage,transactionRecord); + transactionRecordService.create(transactionRecord); + // 业务处理 + TChargingOrder chargingOrderRecord = chargingOrderClient.getOrderByCode(transactionRecordMessage.getTransaction_serial_number()).getData(); + if(Objects.nonNull(chargingOrderRecord)){ + chargingOrderRecord.setTotalElectricity(transactionRecordMessage.getTotal_electricity()); + chargingOrderClient.updateChargingOrder(chargingOrderRecord); + } + break; + case SendTagConstant.UPDATE_BALANCE_REPLY: + UpdateBalanceReplyMessage updateBalanceReplyMessage = message.getUpdateBalanceReplyMessage(); + log.info("余额更新应答-业务消息处理:{}",updateBalanceReplyMessage); + // 持久化消息 + UpdateBalanceReply updateBalanceReply = new UpdateBalanceReply(); + BeanUtils.copyProperties(updateBalanceReplyMessage,updateBalanceReply); + updateBalanceReplyService.create(updateBalanceReply); + break; + case SendTagConstant.SYNCHRONIZE_OFFLINE_CARD_REPLY: + SynchronizeOfflineCardReplyMessage synchronizeOfflineCardReplyMessage = message.getSynchronizeOfflineCardReplyMessage(); + log.info("卡数据同步应答-业务消息处理:{}",synchronizeOfflineCardReplyMessage); + // 持久化消息 + SynchronizeOfflineCardReply synchronizeOfflineCardReply = new SynchronizeOfflineCardReply(); + BeanUtils.copyProperties(synchronizeOfflineCardReplyMessage,synchronizeOfflineCardReply); + synchronizeOfflineCardReplyService.create(synchronizeOfflineCardReply); + break; + case SendTagConstant.CLEAR_OFFLINE_CARD_REPLY: + ClearOfflineCardReplyMessage clearOfflineCardReplyMessage = message.getClearOfflineCardReplyMessage(); + log.info("离线卡数据清除应答-业务消息处理:{}",clearOfflineCardReplyMessage); + // 持久化消息 + ClearOfflineCardReply clearOfflineCardReply = new ClearOfflineCardReply(); + BeanUtils.copyProperties(clearOfflineCardReplyMessage,clearOfflineCardReply); + clearOfflineCardReplyService.create(clearOfflineCardReply); + break; + case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY: + WorkingParameterSettingReplyMessage workingParameterSettingReplyMessage = message.getWorkingParameterSettingReplyMessage(); + log.info("充电桩工作参数设置应答-业务消息处理:{}",workingParameterSettingReplyMessage); + // 持久化消息 + WorkingParameterSettingReply workingParameterSettingReply = new WorkingParameterSettingReply(); + BeanUtils.copyProperties(workingParameterSettingReplyMessage,workingParameterSettingReply); + workingParameterSettingReplyService.create(workingParameterSettingReply); + break; + case SendTagConstant.TIMING_SETTING: + TimingSettingMessage timingSettingMessage = message.getTimingSettingMessage(); + log.info("对时设置-业务消息处理:{}",timingSettingMessage); + // 持久化消息 + TimingSetting timingSetting = new TimingSetting(); + BeanUtils.copyProperties(timingSettingMessage,timingSetting); + timingSettingService.create(timingSetting); + break; + case SendTagConstant.SETUP_BILLING_MODEL_REPLY: + SetupBillingModelReplyMessage setupBillingModelReplyMessage = message.getSetupBillingModelReplyMessage(); + log.info("计费模型应答-业务消息处理:{}",setupBillingModelReplyMessage); + // 持久化消息 + SetupBillingModelReply setupBillingModelReply = new SetupBillingModelReply(); + BeanUtils.copyProperties(setupBillingModelReplyMessage,setupBillingModelReply); + setupBillingModelReplyService.create(setupBillingModelReply); + break; + case SendTagConstant.GROUND_LOCK_REAL_TIME_DATA: + GroundLockRealTimeDataMessage groundLockRealTimeDataMessage = message.getGroundLockRealTimeDataMessage(); + log.info("地锁数据上送(充电桩上送)-业务消息处理:{}",groundLockRealTimeDataMessage); + // 持久化消息 + GroundLockRealTimeData groundLockRealTimeData = new GroundLockRealTimeData(); + BeanUtils.copyProperties(groundLockRealTimeDataMessage,groundLockRealTimeData); + groundLockRealTimeDataService.create(groundLockRealTimeData); + break; + case SendTagConstant.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA: + ChargingPileReturnsGroundLockDataMessage chargingPileReturnsGroundLockDataMessage = message.getChargingPileReturnsGroundLockDataMessage(); + log.info("充电桩返回数据(上行)-业务消息处理:{}",chargingPileReturnsGroundLockDataMessage); + // 持久化消息 + ChargingPileReturnsGroundLockData chargingPileReturnsGroundLockData = new ChargingPileReturnsGroundLockData(); + BeanUtils.copyProperties(chargingPileReturnsGroundLockDataMessage,chargingPileReturnsGroundLockData); + chargingPileReturnsGroundLockDataService.create(chargingPileReturnsGroundLockData); + break; + case SendTagConstant.PLATFORM_RESTART_REPLY: + PlatformRestartReplyMessage platformRestartReplyMessage = message.getPlatformRestartReplyMessage(); + log.info("远程重启应答-业务消息处理:{}",platformRestartReplyMessage); + // 持久化消息 + PlatformRestartReply platformRestartReply = new PlatformRestartReply(); + BeanUtils.copyProperties(platformRestartReplyMessage,platformRestartReply); + platformRestartReplyService.create(platformRestartReply); + break; + case SendTagConstant.QR_CODE_DELIVERY_REPLY: + QrCodeDeliveryReplyMessage qrCodeDeliveryReplyMessage = message.getQrCodeDeliveryReplyMessage(); + log.info("二维码下发应答-业务消息处理:{}",qrCodeDeliveryReplyMessage); + QrCodeDeliveryReply qrCodeDeliveryReply = new QrCodeDeliveryReply(); + BeanUtils.copyProperties(qrCodeDeliveryReplyMessage,qrCodeDeliveryReply); + qrCodeDeliveryReplyService.create(qrCodeDeliveryReply); + break; + case SendTagConstant.SECURITY_DETECTION: + SecurityDetectionMessage securityDetectionMessage = message.getSecurityDetectionMessage(); + log.info("安全监测-业务消息处理:{}",securityDetectionMessage); + SecurityDetection securityDetection = new SecurityDetection(); + BeanUtils.copyProperties(securityDetectionMessage,securityDetection); + securityDetectionService.create(securityDetection); + SecurityDetectionVO securityDetection1 = new SecurityDetectionVO(); + BeanUtils.copyProperties(securityDetection, securityDetection1); + chargingOrderClient.securityDetection(securityDetection1); + break; + default: + PlatformRemoteUpdateReplyMessage platformRemoteUpdateReplyMessage = message.getPlatformRemoteUpdateReplyMessage(); + log.info("远程更新应答-业务消息处理:{}",platformRemoteUpdateReplyMessage); + PlatformRemoteUpdateReply platformRemoteUpdateReply = new PlatformRemoteUpdateReply(); + BeanUtils.copyProperties(platformRemoteUpdateReplyMessage,platformRemoteUpdateReply); + platformRemoteUpdateReplyService.create(platformRemoteUpdateReply); + break; + } + } + + @Override + protected void handleMaxRetriesExceeded(ChargingMessage message) { + // 当超过指定重试次数消息时此处方法会被调用 + // 生产中可以进行回退或其他业务操作 + log.error("消息消费失败,请执行后续处理"); + } + + + /** + * 是否执行重试机制 + */ + @Override + protected boolean isRetry() { + return true; + } + + @Override + protected boolean throwException() { + // 是否抛出异常,false搭配retry自行处理异常 + return false; + } + + /** + * 若需要处理消息过滤,在父级中进行统一处理,或者在此处实现之后,自行处理 + * @param message 待处理消息 + * @return true: 本次消息被过滤,false:不过滤 + */ + @Override + protected boolean filter(ChargingMessage message) { + // 此处可做消息过滤 + return false; + } + + /** + * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型 + */ + @Override + public void onMessage(ChargingMessage message) { + super.dispatchMessage(message); + } +} \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java index 21d9a0e..ce9a938 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java @@ -343,4 +343,15 @@ return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.SECURITY_DETECTION, SendTagConstant.SECURITY_DETECTION, message); } + /** + * 充电桩登录认证 + */ + public SendResult chargingMessage(ChargingMessage message) { + // 设置业务key + message.setKey(UUID.randomUUID().toString()); + // 设置消息来源,便于查询 + message.setSource(SendTagConstant.CHARGING_MESSAGE); + return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.CHARGING_MESSAGE, SendTagConstant.CHARGING_MESSAGE, message); + } + } \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml index 12e29cf..b61f26e 100644 --- a/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml @@ -12,8 +12,8 @@ allow-circular-references: true profiles: # 环境配置 -# active: dev - active: prod + active: dev +# active: prod --- spring: @@ -64,52 +64,52 @@ type: nacos nacos: # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# data-id: seata-server.properties -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP data-id: seata-server.properties username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# data-id: seata-server.properties +# username: nacos +# password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# username: nacos +# password: nacos cloud: nacos: discovery: # 开发环境 -# server-addr: 192.168.110.169:8848 # nacos注册中心地址 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 -# group: DEFAULT_GROUP -# application: seata-server #Nacos 中 Seata 名称 -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 # nacos注册中心地址 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 group: DEFAULT_GROUP application: seata-server #Nacos 中 Seata 名称 username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# application: seata-server #Nacos 中 Seata 名称 +# username: nacos +# password: nacos sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台地址 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 2f2117c..ea4a3c8 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 @@ -53,6 +53,7 @@ import com.ruoyi.order.dto.OrderEvaluateVo; import com.ruoyi.order.dto.*; import com.ruoyi.order.service.*; +import com.ruoyi.order.service.impl.TChargingOrderServiceImpl; import com.ruoyi.order.util.PreviousSixMonths; import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; @@ -63,6 +64,8 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.models.auth.In; import jdk.nashorn.internal.runtime.ListAdapter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import io.swagger.annotations.ApiOperation; @@ -94,6 +97,8 @@ @RestController @RequestMapping("/t-charging-order") public class TChargingOrderController { + + private Logger log = LoggerFactory.getLogger(TChargingOrderController.class); @Resource private TChargingOrderService chargingOrderService; @@ -457,7 +462,30 @@ @RequestParam("attach") String attach) { AjaxResult ajaxResult = chargingOrderService.chargingOrderCallback(1, out_trade_no, transaction_id, attach); } - + + + /** + * 修改安全检测数据 + * @param securityDetection + */ + @ResponseBody + @PostMapping(value = "/securityDetection") + public void securityDetection(@RequestBody SecurityDetectionVO securityDetection){ + chargingOrderService.securityDetection(securityDetection); + } + + /** + * 远程启动充电应答 + * @param message + */ + @ResponseBody + @PostMapping(value = "/startChargeSuccessfully") + public void startChargeSuccessfully(@RequestBody PlatformStartChargingReplyMessageVO message){ + log.error("-------------------远程启动充电请求应答-------------------:" + message); + chargingOrderService.startChargeSuccessfully(message); + } + + /** * 支付宝支付成功后的回调 @@ -487,10 +515,10 @@ */ @ResponseBody @PostMapping(value = "/chargingOrderStartupFailureWxRefund") - public void chargingOrderStartupFailureWxRefund(@RequestParam("out_trade_no") String out_refund_no, - @RequestParam("out_trade_no") String refund_id, - @RequestParam("out_trade_no") String tradeState, - @RequestParam("out_trade_no") String success_time){ + public void chargingOrderStartupFailureWxRefund(@RequestParam("out_refund_no") String out_refund_no, + @RequestParam("refund_id") String refund_id, + @RequestParam("tradeState") String tradeState, + @RequestParam("success_time") String success_time){ chargingOrderService.chargingOrderStartupFailureWxRefund(out_refund_no, refund_id, tradeState, success_time); } @@ -533,6 +561,20 @@ public AjaxResult stopCharging(@PathVariable String id) { return chargingOrderService.stopCharging(id); } + + + /** + * 停止充电应答处理逻辑 + * @param platformStopChargingReply + */ + @PostMapping("/terminateSuccessfulResponse") + public void terminateSuccessfulResponse(@RequestBody PlatformStopChargingReplyVO platformStopChargingReply){ + log.error("-------------------远程停止充电请求应答-------------------:" + platformStopChargingReply); + chargingOrderService.terminateSuccessfulResponse(platformStopChargingReply); + } + + + @ResponseBody @GetMapping(value = "/six/charge") diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java index d69169a..5637f6c 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java @@ -142,7 +142,9 @@ byte[] imageBytes = IOUtils.toByteArray(inputStream); // 创建临时文件 - File tempFile = File.createTempFile("tempImage", ".png"); + // 截取imageUrl后缀名 + String fileExtension = imageUrl.substring(imageUrl.lastIndexOf(".")); + File tempFile = File.createTempFile("tempImage", fileExtension); try (FileOutputStream fos = new FileOutputStream(tempFile)) { fos.write(imageBytes); } 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 dfd86b8..d096708 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 @@ -17,10 +17,6 @@ import com.ruoyi.order.api.vo.*; import com.ruoyi.order.dto.*; import com.ruoyi.order.vo.ChargingOrderListInfoVO; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; - -import java.math.BigDecimal; import java.time.LocalDate; import java.util.List; import java.util.Map; @@ -80,6 +76,20 @@ /** + * 安全检测数据 + * @param securityDetection + */ + void securityDetection(SecurityDetectionVO securityDetection); + + + /** + * 启动充电应发 + * @param message + */ + void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message); + + + /** * 充电启动失败后的退款回调处理 * @param out_refund_no * @param refund_id @@ -105,6 +115,15 @@ * @return */ AjaxResult stopCharging(String id); + + + /** + * 停止充电应答结果处理 + * @param platformStopChargingReply + */ + void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply); + + TCharingOrderVO chargingOrder(ChargingOrderQuery dto); 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 4f4c9a1..f479f12 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,6 +11,7 @@ import com.ruoyi.account.api.vo.GetInviteUser; import com.ruoyi.chargingPile.api.feignClient.*; import com.ruoyi.chargingPile.api.model.*; +import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ChargingOrderGroup; import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; @@ -37,6 +38,7 @@ import com.ruoyi.order.api.query.SettlementListQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.*; +import com.ruoyi.order.api.vo.PlatformStopChargingReplyVO; import com.ruoyi.order.dto.*; import com.ruoyi.order.mapper.TChargingOrderMapper; import com.ruoyi.order.mapper.TSettlementConfirmMapper; @@ -189,6 +191,9 @@ //计数器 private Map<String, Integer> counter_map = new HashMap<>(); + + //计数器 + private Map<String, Integer> boot_failed_map = new HashMap<>(); @@ -449,7 +454,7 @@ //直营站点才可以享受会员折扣 if(null != appUser.getVipId() && 1 == site.getBusinessCategory()){ - TVip vip = vipClient.getInfo(appUser.getVipId()).getData(); + TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); BigDecimal discount = null; if(1 == vip.getType()){ //普通会员折扣使用积分策略上的折扣,且有最高优惠金额 @@ -541,7 +546,7 @@ preChargeCheck.setSecureConnectionDetection(false); preChargeCheck.setStartupSuccess(1); String key = "AQJC_" + chargingOrder.getChargingGunId(); - redisService.setCacheObject(key, preChargeCheck); + redisService.setCacheObject(key, preChargeCheck, 24L, TimeUnit.HOURS); //根据当前充值的金额和计费模板算出充电的金额 BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); @@ -602,7 +607,7 @@ if(discountAmount.compareTo(BigDecimal.ZERO) >= 0){ //计算会员最大优惠金额 if(null != appUser.getVipId()){ - TVip vip = vipClient.getInfo(appUser.getVipId()).getData(); + TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); BigDecimal maximumDeduction = vip.getMaximumDeduction(); //普通会员有最高优惠限制 if(vip.getType() == 1 && discountAmount.compareTo(maximumDeduction) > 0){ @@ -614,7 +619,7 @@ getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId()); getAppUserVipDetail.setVipId(appUser.getVipId()); TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData(); - if(data.getChargeNum() > 0){ + if(null != data && data.getChargeNum() > 0){ data.setChargeNum(data.getChargeNum() - 1); appUserVipDetailClient.updateAppUserVipDetail(data); //会员有充电优惠次数,直接将优惠金额加入到充电费用中增加充电时长 @@ -622,6 +627,9 @@ } } } + + electrovalence = electrovalence.setScale(2, RoundingMode.HALF_EVEN); + discountAmount = discountAmount.setScale(2, RoundingMode.HALF_EVEN); chargingOrder.setChargeAmount(electrovalence); chargingOrder.setVipDiscountAmount(discountAmount); this.updateById(chargingOrder); @@ -636,72 +644,18 @@ //使用订单id作为逻辑卡号 platformStartCharging.setCard_number(chargingOrder.getId().toString()); platformStartCharging.setAccount_balance(electrovalence); - - System.err.println("-------------------远程调起开始充电请求-------------------"); - System.err.println(platformStartCharging.toString()); + + log.error(chargingOrder.getCode() + ":-------------------远程调起开始充电请求-------------------"); + log.error(platformStartCharging.toString()); sendMessageClient.platformStartCharging(platformStartCharging); //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 - String code = chargingOrder.getCode(); + Long id = chargingOrder.getId(); //执行5分钟的定时任务检测 ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleAtFixedRate(()->{ - //获取安全校验 - SecurityDetection securityDetection = securityDetectionClient.getSecurityDetection(chargingOrder.getCode()).getData(); - if(null != securityDetection){ - PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingOrder.getChargingGunId()); - if(null != preChargeCheck1){ - preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock()); - preChargeCheck1.setInsulationTesting(true); - preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection()); - preChargeCheck1.setStartupSuccess(1); - redisService.setCacheObject("AQJC_" + chargingOrder.getChargingGunId(), preChargeCheck1); - } - } - - List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData(); - System.err.println("-------------------开始检查调起充电结果-------------------"); - System.err.println(data.toString()); - 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分钟内还未插枪则取消充电,退回金额。 - if(failure_cause == 5 && (null == counter || counter < 300)){ - counter = (null == counter ? 0 : counter) + 1; - 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(-1); - order.setEndMode(0); - }else{ - //启动成功 - preChargeCheck1.setStartupSuccess(2); - order.setStatus(3); - order.setStartTime(LocalDateTime.now()); - } - this.updateById(order); - redisService.setCacheObject(key, preChargeCheck1); - //提前结束定时任务 + if(timingDetection(id)){ scheduler.shutdown(); - }else{ - log.error("未上传开启充电结果........"); } }, 5, 1, TimeUnit.SECONDS); return AjaxResult.success(); @@ -709,10 +663,167 @@ /** + * 定时检测mongodb数据库数据 + * @param id + * @return + */ + public boolean timingDetection(Long id){ + TChargingOrder chargingOrder = this.getById(id); + if(chargingOrder.getStatus() != 2){ + return true; + } + String code = chargingOrder.getCode(); + String key = "AQJC_" + chargingOrder.getChargingGunId(); + //获取安全校验 + com.ruoyi.integration.api.model.SecurityDetection securityDetection = securityDetectionClient.getSecurityDetection(chargingOrder.getCode()).getData(); + if(null != securityDetection){ + PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingOrder.getChargingGunId()); + if(null != preChargeCheck1){ + preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock()); + preChargeCheck1.setInsulationTesting(true); + preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection()); + preChargeCheck1.setStartupSuccess(1); + redisService.setCacheObject("AQJC_" + chargingOrder.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS); + } + } + + List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData(); + log.error(code + ":-------------------开始检查调起充电结果-------------------"); + log.error(data.toString()); + 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分钟内还未插枪则取消充电,退回金额。 + if(failure_cause == 5 && (null == counter || counter < 300)){ + counter = (null == counter ? 0 : counter) + 1; + counter_map.put(code, counter); + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(failure_cause); + redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); + return false; + } + + //清除计时器中的无效数据 + 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(-1); + order.setEndMode(0); + }else{ + //启动成功 + preChargeCheck1.setStartupSuccess(2); + order.setStatus(3); + order.setStartTime(LocalDateTime.now()); + } + this.updateById(order); + redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); + return true; + }else{ + log.error(code + ":-------------------未上传开启充电结果-------------------"); + + Integer counter = boot_failed_map.get(code); + PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); + //5分钟内未启动成功,退回金额。 + if(null == counter || counter < 300){ + counter = (null == counter ? 0 : counter) + 1; + boot_failed_map.put(code, counter); + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(0); + redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); + return false; + } + + //清除计时器中的无效数据 + boot_failed_map.remove(code); + TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(0); + //启动失败后取消订单,退款操作 + refund(code); + order.setStatus(-1); + order.setEndMode(0); + this.updateById(order); + redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS); + return true; + } + } + + + /** + * 修改安全检测数据 + * @param securityDetection + */ + @Override + public void securityDetection(SecurityDetectionVO securityDetection){ + GetChargingGunByCode code = new GetChargingGunByCode(); + code.setCharging_pile_code(securityDetection.getCharging_pile_code()); + code.setCharging_gun_code(securityDetection.getCharging_gun_code()); + TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData(); + PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingGun.getId()); + if(null != preChargeCheck1){ + preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock()); + preChargeCheck1.setInsulationTesting(true); + preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection()); + preChargeCheck1.setStartupSuccess(1); + redisService.setCacheObject("AQJC_" + chargingGun.getId(), preChargeCheck1, 24L, TimeUnit.HOURS); + } + } + + /** + * 启动充电应发 + * @param message + */ + @Override + public void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message) { + Integer startup_result = message.getStartup_result(); + Integer failure_cause = message.getFailure_cause(); + TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, message.getTransaction_serial_number())); + if(order.getStatus() != 2){ + return; + } + String code = order.getCode(); + PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + order.getChargingGunId()); + if(null != preChargeCheck1){ + preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock()); + preChargeCheck1.setInsulationTesting(true); + preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection()); + preChargeCheck1.setStartupSuccess(1); + } + if(0 == startup_result){ + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(failure_cause); + //启动失败后取消订单,退款操作 + refund(code); + order.setStatus(-1); + order.setEndMode(0); + }else{ + //启动成功 + preChargeCheck1.setStartupSuccess(2); + order.setStatus(3); + order.setStartTime(LocalDateTime.now()); + } + redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS); + this.updateById(order); + } + + /** * 启动失败后的退款,取消订单 * @param code */ public void refund(String code){ + log.error(code + ":-------------------充电启动失败,执行退款-------------------"); TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); if(chargingOrder.getStatus() == 2){ Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); @@ -847,9 +958,13 @@ public AjaxResult stopCharging(String id) { TChargingOrder chargingOrder = this.getById(id); Integer status = chargingOrder.getStatus(); + if(status != 3){ + return AjaxResult.error("还未开始充电"); + } if(status == 4 || status == 5){ return AjaxResult.error("不能重复操作"); } + chargingOrder.setEndTime(LocalDateTime.now()); chargingOrder.setStatus(4); chargingOrder.setEndMode(1); this.updateById(chargingOrder); @@ -910,7 +1025,7 @@ } } } - + String code1 = chargingOrder.getCode(); //异步线程处理停机 ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1); @@ -922,12 +1037,17 @@ platformStopCharging.setCharging_pile_code(chargingPile.getCode()); platformStopCharging.setCharging_gun_code(chargingGun.getCode()); sendMessageClient.platformStopCharging(platformStopCharging); + log.error(code1 + ":-------------------远程停止充电请求-------------------"); + log.error(platformStopCharging.toString()); //开始查询停机应答,成功后开始计费费用 for (int i = 0; i < 60; i++) { GetPlatformStopChargingReply query = new GetPlatformStopChargingReply(); query.setCharging_gun_code(chargingGun.getCode()); query.setCharging_pile_code(chargingPile.getCode()); + query.setEnd_time(chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData(); + log.error(code1 + ":-------------------查询远程停止充电应答-------------------"); + log.error(reply.toString()); if(null == reply){ try { Thread.sleep(1000); @@ -936,7 +1056,12 @@ } continue; } - + + TChargingOrder chargingOrder1 = this.getById(id); + if(chargingOrder1.getStatus() != 3){ + break; + } + if(0 == reply.getStop_result()){ String failure_cause = ""; switch (reply.getFailure_cause()){ @@ -953,8 +1078,13 @@ failure_cause = "其他"; break; } - log.error("停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause); - throw new RuntimeException(failure_cause); + log.error(code1 + ":停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + continue; } // 将枪状态重置为空闲 @@ -962,6 +1092,7 @@ chargingGunClient.updateChargingGunById(chargingGun); //计算费用,处理退款 endCharge(chargingOrder); + log.error(code1 + ":-------------------远程停止充电请求成功-------------------"); break; } }); @@ -979,7 +1110,7 @@ TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData(); if(null != appUser1.getVipId()){ - TVip vip = vipClient.getInfo(appUser1.getVipId()).getData(); + TVip vip = vipClient.getInfo1(appUser1.getVipId()).getData(); Integer doubleIntegration = vip.getDoubleIntegration(); //双倍积分 if(1 == doubleIntegration){ @@ -1018,8 +1149,56 @@ return AjaxResult.success(); } - - + + + + /** + * 停止充电应答结果处理 + * @param platformStopChargingReply + */ + @Override + public void terminateSuccessfulResponse(PlatformStopChargingReplyVO platformStopChargingReply){ + GetChargingGunByCode code = new GetChargingGunByCode(); + code.setCharging_gun_code(platformStopChargingReply.getCharging_gun_code()); + code.setCharging_pile_code(platformStopChargingReply.getCharging_pile_code()); + TChargingGun chargingGun = chargingGunClient.getChargingGunByCode(code).getData(); + TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, chargingGun.getId()) + .orderByDesc(TChargingOrder::getEndTime).eq(TChargingOrder::getRechargePaymentStatus, 2).last(" limit 0, 1")); + if(null != order && order.getStatus() != 3){ + return; + } + String code1 = order.getCode(); + if(0 == platformStopChargingReply.getStop_result()){ + String failure_cause = ""; + switch (platformStopChargingReply.getFailure_cause()){ + case 0: + failure_cause = "无"; + break; + case 1: + failure_cause = "设备编号不匹配"; + break; + case 2: + failure_cause = "枪未处于充电状态"; + break; + case 3: + failure_cause = "其他"; + break; + } + log.error(code1 + ":停机失败:订单号:{},失败原因:{}", order.getCode(), failure_cause); + return; + } + + // 将枪状态重置为空闲 + chargingGun.setStatus(2); + chargingGunClient.updateChargingGunById(chargingGun); + //计算费用,处理退款 + endCharge(order); + } + + + + + /** * 手动结束后的费用计算和退款逻辑 */ @@ -1061,7 +1240,7 @@ Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1"); Integer integral = payAmount.multiply(new BigDecimal(num1)).intValue(); if(null != appUser.getVipId()){ - TVip vip = vipClient.getInfo(appUser.getVipId()).getData(); + TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); Integer doubleIntegration = vip.getDoubleIntegration(); //双倍积分 if(1 == doubleIntegration){ @@ -1791,7 +1970,7 @@ TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData(); if(null != appUser1.getVipId()){ - TVip vip = vipClient.getInfo(appUser1.getVipId()).getData(); + TVip vip = vipClient.getInfo1(appUser1.getVipId()).getData(); Integer doubleIntegration = vip.getDoubleIntegration(); //双倍积分 if(1 == doubleIntegration){ diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java index 221c46f..689b6e2 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java @@ -278,7 +278,7 @@ if(null != num1 && 0 < num1){ TAppUser appUser = appUserClient.getUserById(userid).getData(); if(null != appUser.getVipId()){ - TVip vip = vipClient.getInfo(appUser.getVipId()).getData(); + TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); Integer doubleIntegration = vip.getDoubleIntegration(); //双倍积分 if(1 == doubleIntegration){ diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java index 23aeefd..b341dd9 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java @@ -53,7 +53,7 @@ for (TVipOrder tVipOrder : list) { tVipOrder.setUid(tVipOrder.getId().toString()); tVipOrder.setUserUid(tVipOrder.getAppUserId().toString()); - TVip data = vipClient.getInfo(tVipOrder.getVipId()).getData(); + TVip data = vipClient.getInfo1(tVipOrder.getVipId()).getData(); if (data!=null){ tVipOrder.setName(data.getName()); } diff --git a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml index 917dd7a..d0b8691 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml @@ -29,7 +29,6 @@ namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb username: nacos password: nacos - ip: 192.168.110.85 config: # 配置中心地址 server-addr: 192.168.110.169:8848 diff --git a/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml index 382af35..fc51ae5 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml @@ -29,7 +29,6 @@ namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb username: nacos password: nacos - ip: 192.168.110.85 config: # 配置中心地址 server-addr: 192.168.110.169:8848 diff --git a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml index 3d1b30e..0c4c5ce 100644 --- a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml @@ -12,8 +12,8 @@ allow-circular-references: true profiles: # 环境配置 -# active: dev - active: prod + active: dev +# active: prod --- spring: config: @@ -56,52 +56,52 @@ type: nacos nacos: # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# data-id: seata-server.properties -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP data-id: seata-server.properties username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# data-id: seata-server.properties +# username: nacos +# password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# group: DEFAULT_GROUP -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# username: nacos +# password: nacos cloud: nacos: discovery: # 开发环境 -# server-addr: 192.168.110.169:8848 # nacos注册中心地址 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 -# group: DEFAULT_GROUP -# application: seata-server #Nacos 中 Seata 名称 -# username: nacos -# password: nacos - # 生产环境 - server-addr: 192.168.0.137:8848,192.168.0.123:8848 - namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + server-addr: 192.168.110.169:8848 # nacos注册中心地址 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 group: DEFAULT_GROUP application: seata-server #Nacos 中 Seata 名称 username: nacos password: nacos + # 生产环境 +# server-addr: 192.168.0.137:8848,192.168.0.123:8848 +# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# group: DEFAULT_GROUP +# application: seata-server #Nacos 中 Seata 名称 +# username: nacos +# password: nacos sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台地址 -- Gitblit v1.7.1