From d8828959064d1339d1cb47fc6b6f997275c0f4ab Mon Sep 17 00:00:00 2001
From: zhibing.pu <393733352@qq.com>
Date: 星期六, 31 八月 2024 17:40:31 +0800
Subject: [PATCH] 完善功能

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java                                  |  183 +++++++++++++++++++-
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java                                  |    1 
 ruoyi-service/ruoyi-integration/pom.xml                                                                                              |    7 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java                      |    1 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java                              |    7 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java                             |   36 ++++
 ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports  |    3 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java            |   28 +++
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java                      |    2 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java                              |   11 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java                                           |   20 ++
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java                    |    2 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java                                     |   10 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java                                                      |    4 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java                                                |    4 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml                                                   |    1 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java       |   34 +++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java                                     |   39 ++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java |   16 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java           |   11 +
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java                                |    5 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java             |   35 +++
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java                                  |    2 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java                         |    7 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java  |   16 +
 25 files changed, 463 insertions(+), 22 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
index bb60f76..71dc82f 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
@@ -35,7 +35,7 @@
     
             @Override
             public R<TAppUser> getUserById(Long id) {
-                return R.fail("根据id查询用户失败:"+throwable.getMessage());
+                throw new RuntimeException("根据id查询用户失败:"+throwable.getMessage());
             }
 
             @Override
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java
index f22b61a..ebd90f7 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java
@@ -26,7 +26,12 @@
     
             @Override
             public R<TAppUserVipDetail> getAppUserVipDetail(GetAppUserVipDetail getAppUserVipDetail) {
-                return R.fail("获取用户当前有效的VIP明细调用失败:" + throwable.getMessage());
+                throw new RuntimeException("获取用户当前有效的VIP明细调用失败:" + throwable.getMessage());
+            }
+    
+            @Override
+            public void updateAppUserVipDetail(TAppUserVipDetail appUserVipDetail) {
+                throw new RuntimeException(throwable.getMessage());
             }
         };
     }
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java
index 37f0dbb..2470569 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java
@@ -7,6 +7,7 @@
 import com.ruoyi.common.core.domain.R;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * @author zhibing.pu
@@ -24,4 +25,10 @@
 	R<TAppUserVipDetail> getAppUserVipDetail(GetAppUserVipDetail getAppUserVipDetail);
 	
 	
+	/**
+	 * 修改会员明细
+	 * @param appUserVipDetail
+	 */
+	@PostMapping("/appUserVipDetail/updateAppUserVipDetail")
+	void updateAppUserVipDetail(@RequestBody TAppUserVipDetail appUserVipDetail);
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java
index 3c9c594..f5a89cc 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java
@@ -35,7 +35,7 @@
     
             @Override
             public R<TChargingGun> getChargingGunById(Integer id) {
-                return R.fail("根据id获取充电枪失败:" + throwable.getMessage());
+                throw new RuntimeException("根据id获取充电枪失败:" + throwable.getMessage());
             }
 
             @Override
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java
new file mode 100644
index 0000000..e0c2990
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java
@@ -0,0 +1,34 @@
+package com.ruoyi.integration.api.factory;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.integration.api.feignClient.PlatformStartChargingReplyClient;
+import com.ruoyi.integration.api.model.PlatformStartChargingReply;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/31 15:16
+ */
+@Component
+public class PlatformStartChargingReplyFallbackFactory  implements FallbackFactory<PlatformStartChargingReplyClient> {
+	
+	private static final Logger log = LoggerFactory.getLogger(PlatformStartChargingReplyFallbackFactory.class);
+	
+	
+	@Override
+	public PlatformStartChargingReplyClient create(Throwable throwable) {
+		log.error("远程启机应答调用失败:{}", throwable.getMessage());
+		return new PlatformStartChargingReplyClient(){
+			
+			@Override
+			public R<List<PlatformStartChargingReply>> getPlatformStartChargingReply(String code) {
+				return R.fail("根据订单编号查询远程启机应答结果失败:" + throwable.getMessage());
+			}
+		};
+	}
+}
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java
index 863530b..8b9c02b 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java
@@ -28,6 +28,7 @@
     
             @Override
             public void platformStartCharging(PlatformStartCharging platformStartCharging) {
+                throw new RuntimeException("远程启机失败" + throwable.getMessage());
             }
         };
     }
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java
new file mode 100644
index 0000000..e3856e6
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java
@@ -0,0 +1,28 @@
+package com.ruoyi.integration.api.feignClient;
+
+import com.ruoyi.common.core.constant.ServiceNameConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.integration.api.factory.PlatformStartChargingReplyFallbackFactory;
+import com.ruoyi.integration.api.model.PlatformStartChargingReply;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/31 15:16
+ */
+@FeignClient(contextId = "PlatformStartChargingReplyClient", value = ServiceNameConstants.INTEGRATION_SERVICE, fallbackFactory = PlatformStartChargingReplyFallbackFactory.class)
+public interface PlatformStartChargingReplyClient {
+	
+	
+	/**
+	 * 根据订单编号查询远程启机应答结果
+	 * @param code
+	 * @return
+	 */
+	@PostMapping("/platformStartChargingReply/getPlatformStartChargingReply")
+	R<List<PlatformStartChargingReply>> getPlatformStartChargingReply(@RequestParam("code") String code);
+}
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java
index b131c91..de43de0 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java
@@ -2,7 +2,6 @@
 
 import lombok.Data;
 import lombok.experimental.Accessors;
-import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.math.BigDecimal;
@@ -16,7 +15,6 @@
 @Accessors(chain = true)
 public class UploadRealTimeMonitoringData extends BaseModel {
 
-    @Id
     private String transaction_serial_number; // 交易流水号
     private String charging_pile_code; // 桩编码
     private String charging_gun_code; // 抢号
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 5d5cc8f..6cc32c5 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,4 +1,5 @@
 com.ruoyi.integration.api.factory.IntegrationFallbackFactory
 com.ruoyi.integration.api.factory.UploadRealTimeMonitoringDataFallbackFactory
 com.ruoyi.integration.api.factory.ChargingHandshakeFallbackFactory
-com.ruoyi.integration.api.factory.SendMessageFallbackFactory
\ No newline at end of file
+com.ruoyi.integration.api.factory.SendMessageFallbackFactory
+com.ruoyi.integration.api.factory.PlatformStartChargingReplyFallbackFactory
\ No newline at end of file
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
index ee6192f..7d51b53 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
@@ -4,6 +4,7 @@
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import com.ruoyi.order.api.model.TChargingOrder;
 import com.ruoyi.order.api.query.TChargingCountQuery;
+import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
@@ -49,6 +50,10 @@
             public R<Long> getCar() {
                 return R.fail("获取用户最近使用车辆充电的车辆id:" + throwable.getMessage());
             }
+    
+            @Override
+            public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) {
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
index 5d19dd8..8417bef 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
@@ -5,6 +5,7 @@
 import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory;
 import com.ruoyi.order.api.model.TChargingOrder;
 import com.ruoyi.order.api.query.TChargingCountQuery;
+import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -46,4 +47,13 @@
      */
     @GetMapping(value = "/t-charging-order/getCar")
     public R<Long> getCar();
+    
+    
+    /**
+     * 处理充电订单实时监控数据相关的业务逻辑
+     * @param query
+     * @return
+     */
+    @PostMapping(value = "/t-charging-order/chargeMonitoring")
+    void chargeMonitoring(@RequestBody UploadRealTimeMonitoringDataQuery query);
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
index 9351b4e..cd8aa59 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
@@ -109,6 +109,10 @@
     @ApiModelProperty(value = "充值支付第三方流水号")
     @TableField("recharge_serial_number")
     private String rechargeSerialNumber;
+    
+    @ApiModelProperty(value = "剩余金额(用于前端展示)")
+    @TableField("residual_amount")
+    private BigDecimal residualAmount;
 
     @ApiModelProperty(value = "订单金额(总金额)")
     @TableField("order_amount")
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java
new file mode 100644
index 0000000..33b0426
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java
@@ -0,0 +1,36 @@
+package com.ruoyi.order.api.query;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 上传实时监测数据
+ **/
+
+@Data
+public class UploadRealTimeMonitoringDataQuery {
+    private String transaction_serial_number; // 交易流水号
+    private String charging_pile_code; // 桩编码
+    private String charging_gun_code; // 抢号
+    private Integer charging_gun_status; // 状态(0:离线,1:故障,2:空闲,3:充电)
+    private Integer homing_status; // 枪是否归位(0:否,1:是,2:未知)
+    private Integer insertion_status; // 是否插枪(0:否,1:是)
+    private BigDecimal output_voltage; // 输出电压,精确到小数点后一位;待机置零
+    private BigDecimal output_current; // 输出电流,精确到小数点后一位;待机置零
+    private Integer gun_line_temperature; // 枪线温度,整形,偏移量-50;待机置零
+    private String gun_line_code; // 枪线编码,没有置零
+    private Integer soc; // SOC待机置零;交流桩置零
+    private Integer battery_temperature; // 电池组最高温度,整形,偏移量-50 ºC;待机置零;交流桩置零
+    private Integer cumulative_charging_time; // 累计充电时间,单位:min;待机置零
+    private Integer time_remaining; // 剩余时间,单位:min;待机置零、交流桩置零
+    private BigDecimal charging_degree; // 充电度数,精确到小数点后四位;待机置零
+    private BigDecimal loss_of_charging_degree; // 计损充电度数,精确到小数点后四位;待机置零,未设置计损比例时等于充电度数
+    private BigDecimal paid_amount; // 已充金额,精确到小数点后四位;待机置零(电费+服务费)*计损充电度数
+    private Integer hardware_fault; // 硬件故障(1:急停按钮动作故障;2:无可用整流模块;3:出风口温度过高;4:交流防雷故障;5:交直流模块 DC20 通信中断;6:绝缘检测模块 FC08 通信中断;7:电度表通信中断;8:读卡器通信中断;9:RC10 通信中断;10:风扇调速板故障;11:直流熔断器故障;12:高压接触器故障;13:门打开)
+    private Date create_time;
+
+}
+
+
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java
index 42de42e..690629f 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java
@@ -56,6 +56,15 @@
         }
         return R.ok(list);
 	}
-
+	
+	
+	/**
+	 * 修改会员明细
+	 * @param appUserVipDetail
+	 */
+	@PostMapping("/updateAppUserVipDetail")
+	public void updateAppUserVipDetail(@RequestBody TAppUserVipDetail appUserVipDetail){
+		appUserVipDetailService.updateById(appUserVipDetail);
+	}
 	
 }
diff --git a/ruoyi-service/ruoyi-integration/pom.xml b/ruoyi-service/ruoyi-integration/pom.xml
index 0ee4a2f..4c146a8 100644
--- a/ruoyi-service/ruoyi-integration/pom.xml
+++ b/ruoyi-service/ruoyi-integration/pom.xml
@@ -164,8 +164,11 @@
             <artifactId>huaweicloud-sdk-bundle</artifactId>
             <version>3.1.87</version>
         </dependency>
-
-
+    
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-api-order</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java
new file mode 100644
index 0000000..b5224d7
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java
@@ -0,0 +1,35 @@
+package com.ruoyi.integration.controller;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.integration.api.model.PlatformStartChargingReply;
+import com.ruoyi.integration.mongodb.service.PlatformStartChargingReplyService;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2024/8/31 15:09
+ */
+@RestController
+@RequestMapping("/platformStartChargingReply")
+public class PlatformStartChargingReplyController {
+	
+	@Resource
+	private PlatformStartChargingReplyService platformStartChargingReplyService;
+	
+	/**
+	 * 根据订单编号查询远程启机应答结果
+	 * @param code
+	 * @return
+	 */
+	@PostMapping("/getPlatformStartChargingReply")
+	public R<List<PlatformStartChargingReply>> getPlatformStartChargingReply(@RequestParam("code") String code){
+		List<PlatformStartChargingReply> platformStartChargingReply = platformStartChargingReplyService.getPlatformStartChargingReply(code);
+		return R.ok(platformStartChargingReply);
+	}
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java
index da31586..c07b517 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java
@@ -2,6 +2,17 @@
 
 import com.ruoyi.integration.api.model.PlatformStartChargingReply;
 import com.ruoyi.integration.mongodb.base.BaseService;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
 
 public interface PlatformStartChargingReplyService extends BaseService<PlatformStartChargingReply> {
+	
+	/**
+	 * 根据订单编号查询远程启机应答数据
+	 * @param code
+	 * @return
+	 */
+	List<PlatformStartChargingReply> getPlatformStartChargingReply(String code);
+	
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java
index fcbe760..78fa5c2 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java
@@ -5,6 +5,8 @@
 import com.ruoyi.integration.mongodb.service.PlatformStartChargingReplyService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -29,4 +31,18 @@
     public List<PlatformStartChargingReply> findAll() {
         return mongoTemplate.findAll(PlatformStartChargingReply.class);
     }
+    
+    
+    /**
+     * 根据订单编号查询远程启机应答数据
+     * @param code
+     * @return
+     */
+    @Override
+    public List<PlatformStartChargingReply> getPlatformStartChargingReply(String code) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("transaction_serial_number").is(code));
+        List<PlatformStartChargingReply> platformStartChargingReplies = mongoTemplate.find(query, PlatformStartChargingReply.class);
+        return platformStartChargingReplies;
+    }
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java
index 31a7501..f28993e 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java
@@ -5,12 +5,16 @@
 import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
 import com.ruoyi.integration.rocket.model.UploadRealTimeMonitoringDataMessage;
 import com.ruoyi.integration.rocket.util.EnhanceMessageHandler;
+import com.ruoyi.order.api.feignClient.ChargingOrderClient;
+import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
 import org.apache.rocketmq.spring.core.RocketMQListener;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
 
 @Slf4j
 @Component
@@ -24,6 +28,15 @@
 
     @Autowired
     private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
+    
+    @Resource
+    private ChargingOrderClient chargingOrderClient;
+    
+    
+    
+    
+    
+    
     @Override
     protected void handleMessage(UploadRealTimeMonitoringDataMessage message) throws Exception {
         // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试
@@ -33,6 +46,9 @@
         BeanUtils.copyProperties(message,uploadRealTimeMonitoringData);
         uploadRealTimeMonitoringDataService.create(uploadRealTimeMonitoringData);
         // 业务处理
+        UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery();
+        BeanUtils.copyProperties(uploadRealTimeMonitoringData, query);
+        chargingOrderClient.chargeMonitoring(query);
     }
 
     @Override
diff --git a/ruoyi-service/ruoyi-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 712b961..bb6436b 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
@@ -24,9 +24,11 @@
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.BasePage;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.order.api.model.*;
 import com.ruoyi.order.api.query.ChargingOrderQuery;
 import com.ruoyi.order.api.query.TChargingCountQuery;
+import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
 import com.ruoyi.order.api.vo.ChargingOrderInfoVO;
 import com.ruoyi.order.api.vo.ChargingOrderVO;
 import com.ruoyi.order.api.vo.TCharingOrderVO;
@@ -40,6 +42,7 @@
 import com.ruoyi.payment.api.feignClient.AliPaymentClient;
 import com.ruoyi.payment.api.feignClient.WxPaymentClient;
 import com.ruoyi.payment.api.vo.AliQueryOrder;
+import com.ruoyi.payment.api.vo.WxRefundNotifyResp;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -85,7 +88,7 @@
     @Resource
     private TShoppingOrderService shoppingOrderService;
 
-    @Autowired
+    @Resource
     private AppUserClient appUserClient;
 
     @Resource
@@ -406,6 +409,27 @@
             e.printStackTrace();
         }
     }
+    
+    
+    /**
+     * 远程启动失败后退款回调
+     * @param request
+     */
+    @ResponseBody
+    @PostMapping(value = "/chargingOrderALICallback")
+    public void chargingOrderStartupFailureWxRefund(HttpServletRequest request){
+        WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData();
+        if(null != data){
+            String out_refund_no = data.getOut_refund_no();
+            String refund_id = data.getRefund_id();
+            String tradeState = data.getTradeState();
+            String success_time = data.getSuccess_time();
+            chargingOrderService.chargingOrderStartupFailureWxRefund(out_refund_no, refund_id, tradeState, success_time);
+        }
+    }
+    
+    
+    
 
 
     @ResponseBody
@@ -442,5 +466,18 @@
     public AjaxResult stopCharging(@PathVariable String id) {
         return chargingOrderService.stopCharging(id);
     }
+    
+    
+    
+    
+    /**
+     * 处理充电订单实时监控数据相关的业务逻辑
+     * @param query
+     */
+    @PostMapping("/chargeMonitoring")
+    public void chargeMonitoring(@RequestBody UploadRealTimeMonitoringDataQuery query){
+        chargingOrderService.chargeMonitoring(query);
+    }
+    
 }
 
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java
index 3620ddf..4ed552c 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java
@@ -17,4 +17,8 @@
 	private Boolean insulationTesting;
 	@ApiModelProperty("电子锁锁止")
 	private Boolean electronicLockLock;
+	@ApiModelProperty("启动成功(1=启动中,2=启动成功,3=启动失败,退款)")
+	private Integer startupSuccess;
+	@ApiModelProperty("失败原因(0:无,1:设备编号不匹配,2:枪已在充电,3:设备故障,4:设备离线,5:未插枪桩在收到启充命令后,检测到未插枪则发送 0x33 报文回复充电失败。若在 60 秒(以收到 0x34 时间开始计算)内检测到枪重新连接,则补送 0x33 成功报文;超时或者离线等其他异常,桩不启充、不补发 0x33 报文)")
+	private Integer failureCause;
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
index 8608071..efd2b30 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
@@ -8,6 +8,7 @@
 import com.ruoyi.order.api.model.TChargingOrder;
 import com.ruoyi.order.api.model.TChargingOrderRefund;
 import com.ruoyi.order.api.query.ChargingOrderQuery;
+import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
 import com.ruoyi.order.api.vo.ChargingOrderTimeVO;
 import com.ruoyi.order.api.vo.ChargingOrderVO;
 import com.ruoyi.order.api.vo.TCharingOrderVO;
@@ -72,6 +73,18 @@
 	
 	
 	/**
+	 * 充电启动失败后的退款回调处理
+	 * @param out_refund_no
+	 * @param refund_id
+	 * @param tradeState
+	 * @param success_time
+	 * @return
+	 */
+	AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time);
+	
+	
+	
+	/**
 	 * 获取充电中的详情
 	 * @param id
 	 * @return
@@ -93,4 +106,11 @@
     R<PageInfo<TChargingOrderRefund>> getRefundList(ChargingRefundDto chargingRefundDto);
 
     ChargingOrderTimeVO chargingList(ChargingListQuery dto);
+	
+	
+	/**
+	 * 处理充电订单实时监控数据相关的业务逻辑
+	 * @param query
+	 */
+	void chargeMonitoring(UploadRealTimeMonitoringDataQuery query);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index 2eed89a..dc520c0 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
@@ -25,16 +25,16 @@
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.integration.api.feignClient.ChargingHandshakeClient;
+import com.ruoyi.integration.api.feignClient.PlatformStartChargingReplyClient;
 import com.ruoyi.integration.api.feignClient.SendMessageClient;
 import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
 import com.ruoyi.integration.api.model.ChargingHandshake;
 import com.ruoyi.integration.api.model.PlatformStartCharging;
+import com.ruoyi.integration.api.model.PlatformStartChargingReply;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
-import com.ruoyi.order.api.model.TChargingOrder;
-import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
-import com.ruoyi.order.api.model.TChargingOrderRefund;
-import com.ruoyi.order.api.model.TOrderEvaluate;
+import com.ruoyi.order.api.model.*;
 import com.ruoyi.order.api.query.ChargingOrderQuery;
+import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
 import com.ruoyi.order.api.vo.ChargingOrderListVO;
 import com.ruoyi.order.api.vo.ChargingOrderTimeVO;
 import com.ruoyi.order.api.vo.ChargingOrderVO;
@@ -42,10 +42,16 @@
 import com.ruoyi.order.dto.*;
 import com.ruoyi.order.mapper.TChargingOrderMapper;
 import com.ruoyi.order.service.TChargingOrderAccountingStrategyService;
+import com.ruoyi.order.service.TChargingOrderRefundService;
 import com.ruoyi.order.service.TChargingOrderService;
 import com.ruoyi.order.service.TOrderEvaluateService;
+import com.ruoyi.other.api.domain.TCoupon;
+import com.ruoyi.other.api.domain.TGoods;
 import com.ruoyi.payment.api.feignClient.AliPaymentClient;
 import com.ruoyi.payment.api.feignClient.WxPaymentClient;
+import com.ruoyi.payment.api.model.RefundReq;
+import com.ruoyi.payment.api.model.RefundResp;
+import com.ruoyi.payment.api.model.WxPaymentRefundModel;
 import com.ruoyi.payment.api.vo.*;
 import io.seata.spring.annotation.GlobalTransactional;
 import io.swagger.annotations.ApiModelProperty;
@@ -61,6 +67,7 @@
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
+import java.util.concurrent.*;
 import java.util.stream.Collectors;
 
 /**
@@ -122,6 +129,15 @@
 	
 	@Resource
 	private AccountingStrategyDetailClient accountingStrategyDetailClient;
+	
+	@Resource
+	private PlatformStartChargingReplyClient platformStartChargingReplyClient;
+	
+	@Resource
+	private TChargingOrderRefundService chargingOrderRefundService;
+	
+	//计数器
+	private Map<String, Integer> counter_map = new HashMap<>();
 	
 	
 	
@@ -424,6 +440,7 @@
 	 * @return
 	 */
 	@Override
+	@GlobalTransactional(rollbackFor = Exception.class)
 	public AjaxResult chargingOrderCallback(Integer paymentType, String out_trade_no, String transaction_id, String attach) {
 		TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, out_trade_no));
 		if(chargingOrder.getRechargePaymentStatus() == 2){
@@ -431,12 +448,15 @@
 		}
 		chargingOrder.setRechargePaymentStatus(2);
 		chargingOrder.setRechargeSerialNumber(transaction_id);
+		chargingOrder.setStatus(2);
 		this.updateById(chargingOrder);
+		
 		//添加安全检测数据到缓存中,每步安全检测完成后需要更新缓存数据
 		PreChargeCheck preChargeCheck = new PreChargeCheck();
 		preChargeCheck.setElectronicLockLock(false);
 		preChargeCheck.setInsulationTesting(false);
 		preChargeCheck.setSecureConnectionDetection(false);
+		preChargeCheck.setStartupSuccess(1);
 		String key = "AQJC_" + chargingOrder.getChargingGunId();
 		redisService.setCacheObject(key, preChargeCheck);
 		
@@ -464,24 +484,153 @@
 			if(data.getChargeNum() > 0){
 				discount = serviceCharge.multiply(data.getDiscount().divide(new BigDecimal(10)));
 				data.setChargeNum(data.getChargeNum() - 1);
-				appUserVipDetailClient.
+				appUserVipDetailClient.updateAppUserVipDetail(data);
 			}
 		}
 		electrovalence = electrovalence.add(discount);
-
+		
+		
+		TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData();
 		//调用远程启动充电消息
 		PlatformStartCharging platformStartCharging = new PlatformStartCharging();
 		platformStartCharging.setTransaction_serial_number(chargingOrder.getCode());
-		platformStartCharging.setCharging_pile_code();
-		platformStartCharging.setCharging_gun_code();
-		platformStartCharging.setCard_number();
+		platformStartCharging.setCharging_pile_code(chargingPile.getCode());
+		platformStartCharging.setCharging_gun_code(chargingGun.getCode());
+		//使用订单id作为逻辑卡号
+		platformStartCharging.setCard_number(chargingOrder.getId().toString());
 		platformStartCharging.setAccount_balance(electrovalence);
 		sendMessageClient.platformStartCharging(platformStartCharging);
 		//异步线程检测远程启动的应答结果。如果失败,则需要全额退款
-		
-		
+		String code = chargingOrder.getCode();
+		//执行5分钟的定时任务检测
+		ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+		scheduler.scheduleAtFixedRate(()->{
+			List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData();
+			if(data.size() != 0){
+				PlatformStartChargingReply platformStartChargingReply = data.get(1);
+				Integer startup_result = platformStartChargingReply.getStartup_result();
+				Integer failure_cause = platformStartChargingReply.getFailure_cause();
+				Integer counter = counter_map.get(code);
+				PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
+				//状态为5的时候,硬件会间隔60秒后再次检测,依然未插枪,则不启动充电
+				//因这里是间隔5秒执行检测,所以累计次数在30次以上
+				if(failure_cause == 5 && null == counter || counter < 35){
+					counter++;
+					counter_map.put(code, counter);
+					//启动失败
+					preChargeCheck1.setStartupSuccess(3);
+					preChargeCheck1.setFailureCause(failure_cause);
+					redisService.setCacheObject(key, preChargeCheck1);
+					return;
+				}
+				//清除计时器中的无效数据
+				counter_map.remove(code);
+				//开始处理退款
+				TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
+				if(0 == startup_result){
+					//启动失败
+					preChargeCheck1.setStartupSuccess(3);
+					preChargeCheck1.setFailureCause(failure_cause);
+					//启动失败后取消订单,退款操作
+					refund(code);
+					order.setStatus(5);
+					order.setEndMode(0);
+				}else{
+					preChargeCheck1.setStartupSuccess(2);
+					order.setStatus(3);
+					order.setStartTime(LocalDateTime.now());
+				}
+				this.updateById(order);
+				redisService.setCacheObject(key, preChargeCheck1);
+				//提前结束定时任务
+				scheduler.shutdown();
+			}
+		}, 5, 300, TimeUnit.SECONDS);
 		return AjaxResult.success();
 	}
+	
+	
+	/**
+	 * 启动失败后的退款,取消订单
+	 * @param code
+	 */
+	public void refund(String code){
+		TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code));
+		if(chargingOrder.getStatus() == 2){
+			Integer rechargePaymentType = chargingOrder.getRechargePaymentType();
+			BigDecimal rechargeAmount = chargingOrder.getRechargeAmount();
+			//构建退款明细
+			TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
+			chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+			chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Math.random() * 1000));
+			chargingOrderRefund.setRefundAmount(rechargeAmount);
+			chargingOrderRefund.setRefundStatus(1);
+			chargingOrderRefund.setPayType(rechargePaymentType);
+			chargingOrderRefund.setRefundStatus(1);
+			chargingOrderRefund.setCode(code);
+			chargingOrderRefund.setRefundTitle("充电失败");
+			chargingOrderRefund.setRefundContent("充电失败");
+			chargingOrderRefund.setRefundReason("充电失败");
+			chargingOrderRefund.setRefundRemark("全额退款");
+			chargingOrderRefund.setRefundTotalAmount(rechargeAmount);
+			chargingOrderRefund.setPayAmount(rechargeAmount);
+			if(1 == rechargePaymentType){
+				WxPaymentRefundModel model = new WxPaymentRefundModel();
+				model.setOut_trade_no(chargingOrder.getCode());
+				model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+				model.setReason("充电失败,取消充电订单");
+				model.setNotify_url("http://127.0.0.1:9000/order/t-charging-order/chargingOrderStartupFailureWxRefund");
+				WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+				amount.setRefund(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+				amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+				amount.setCurrency("CNY");
+				model.setAmount(amount);
+				R<String> orderR = wxPaymentClient.refundOrderR(model);
+				if(200 == orderR.getCode()){
+					chargingOrderRefundService.save(chargingOrderRefund);
+				}
+			}
+			if(2 == rechargePaymentType){
+				RefundReq dto = new RefundReq();
+				dto.setOutTradeNo(chargingOrder.getCode());
+				dto.setOutRequestNo(chargingOrderRefund.getCode());
+				dto.setRefundAmount(rechargeAmount.toString());
+				dto.setRefundReason("充电失败,取消充电订单");
+				RefundResp resp = aliPaymentClient.refund(dto).getData();
+				if(null != resp){
+					SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
+					AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date()));
+					if(success.isSuccess()){
+						chargingOrderRefundService.save(chargingOrderRefund);
+					}
+				}
+			}
+			
+		}
+	}
+	
+	
+	/**
+	 * 启动失败后微信退款的回调处理
+	 * @param out_refund_no
+	 * @param refund_id
+	 * @param tradeState
+	 * @param success_time
+	 * @return
+	 */
+	public AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time){
+		if("SUCCESS".equals(tradeState)){
+			TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getRefundCode, out_refund_no));
+			one.setRefundSerialNumber(refund_id);
+			one.setRefundStatus(2);
+			one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE")));
+			chargingOrderRefundService.updateById(one);
+		}
+		return AjaxResult.success();
+	}
+	
+	
 	
 	
 	/**
@@ -505,6 +654,7 @@
 		chargingDetails.setName(site.getName() + "-" + chargingPile.getName());
 		chargingDetails.setCode(one.getCode());
 		chargingDetails.setStatus(one.getStatus());
+		chargingDetails.setChargingCost(one.getResidualAmount());
 		UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData();
 		if(null != data){
 			chargingDetails.setChargeCurrent(data.getOutput_current());
@@ -515,7 +665,6 @@
 			chargingDetails.setRemainingChargeTime(data.getTime_remaining());
 			chargingDetails.setChargedDegrees(data.getCharging_degree());
 			chargingDetails.setChargedTime(data.getCumulative_charging_time());
-			chargingDetails.setChargingCost(data.getPaid_amount());
 		}
 		ChargingHandshake chargingHandshake = chargingHandshakeClient.getDataByOrderCode(one.getCode()).getData();
 		if(null != chargingHandshake && null != data && null != one.getAppUserCarId()){
@@ -843,4 +992,14 @@
 		chargingOrderTimeVO.setList(pageInfo);
 		return chargingOrderTimeVO;
 	}
+	
+	
+	/**
+	 * 处理充电订单实时监控数据相关的业务逻辑
+	 * @param query
+	 */
+	@Override
+	public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) {
+		// todo 需完善
+	}
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
index cad99dd..fc68e82 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java
@@ -405,6 +405,7 @@
     public AjaxResult cancelShoppingOrderWxRefund(String out_refund_no, String refund_id, String refund_status, String success_time) {
         if("SUCCESS".equals(refund_status)){
             TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper<TShoppingOrderRefund>().eq(TShoppingOrderRefund::getRefundCode, out_refund_no));
+            one.setRefundStatus(2);
             one.setRefundSerialNumber(refund_id);
             one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE")));
             shoppingOrderRefundService.updateById(one);
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
index e44e153..bf71577 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -24,6 +24,7 @@
         <result column="recharge_payment_type" property="rechargePaymentType" />
         <result column="recharge_payment_status" property="rechargePaymentStatus" />
         <result column="recharge_serial_number" property="rechargeSerialNumber" />
+        <result column="residual_amount" property="residualAmount" />
         <result column="order_amount" property="orderAmount" />
         <result column="app_coupon_id" property="appCouponId" />
         <result column="coupon_discount_amount" property="couponDiscountAmount" />

--
Gitblit v1.7.1