From a9de601f87f633f71b6e531da0b61da8665d6383 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 10 十月 2024 09:04:24 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java                                |   89 +++++++++++++-
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/util/TaskUtil.java                                           |   30 +++++
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java                       |    4 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java                            |    2 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingPileClient.java                      |    9 +
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java                                       |    3 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java                                            |    2 
 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                              |    9 +
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingPileFallbackFactory.java                 |    6 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TChargingPileService.java                            |    6 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java                                         |   17 +-
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStopChargingReplyVO.java                                    |   19 +++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java                      |   31 ++++-
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java                                   |    1 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java                                     |    2 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java                                   |   13 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java |    5 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java                    |   21 +++
 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 |    3 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java                                   |   25 +++
 22 files changed, 288 insertions(+), 37 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 07c35bf..54077e6 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
@@ -66,17 +66,20 @@
     @TableField("start_time")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime startTime;
 
     @ApiModelProperty(value = "会员结束时间")
     @TableField("end_time")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime endTime;
 
     @TableField("create_time")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
 
     @ApiModelProperty(value = "已赠送的月份")
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/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/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/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 15f974f..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
@@ -140,14 +140,19 @@
             }
     
             @Override
-            public void securityDetection(SecurityDetection securityDetection) {
+            public void securityDetection(SecurityDetectionVO securityDetection) {
                 log.error("修改安全检测数据失败:" + throwable.getMessage());
             }
     
             @Override
-            public void startChargeSuccessfully(PlatformStartChargingReplyMessage message) {
+            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 02f977b..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
@@ -177,13 +177,12 @@
                                              @RequestParam("out_trade_no") String tradeState,
                                              @RequestParam("out_trade_no") String success_time);
     
-    //todo 待监听完成后调用此方法
     /**
      * 修改安全检测数据
      * @param securityDetection
      */
     @PostMapping("/t-charging-order/securityDetection")
-    void securityDetection(@RequestBody SecurityDetection securityDetection);
+    void securityDetection(@RequestBody SecurityDetectionVO securityDetection);
     
     
     /**
@@ -191,5 +190,13 @@
      * @param message
      */
     @PostMapping("/t-charging-order/startChargeSuccessfully")
-    void startChargeSuccessfully(PlatformStartChargingReplyMessage message);
+    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/PlatformStartChargingReplyMessage.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java
similarity index 93%
rename from ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessage.java
rename to ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java
index e074bdd..5bb4dbf 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessage.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/PlatformStartChargingReplyMessageVO.java
@@ -7,7 +7,7 @@
  * @Date 2024/10/8 17:16
  */
 @Data
-public class PlatformStartChargingReplyMessage {
+public class PlatformStartChargingReplyMessageVO {
 	private String transaction_serial_number; // 交易流水号
 	private String charging_pile_code; // 桩编码
 	private String charging_gun_code; // 抢号
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/SecurityDetection.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java
similarity index 92%
rename from ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetection.java
rename to ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java
index 0f24456..9279fbf 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetection.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SecurityDetectionVO.java
@@ -3,7 +3,7 @@
 import lombok.Data;
 
 @Data
-public class SecurityDetection {
+public class SecurityDetectionVO {
     private String transaction_serial_number; // 交易流水号
     private String charging_pile_code; // 桩编码
     private String charging_gun_code; // 抢号
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 f634a7b..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
@@ -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())
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..2d16d90 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
@@ -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-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/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-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/listener/PlatformStartChargingReplyMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/PlatformStartChargingReplyMessageListener.java
index 5aded73..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
@@ -6,6 +6,7 @@
 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;
@@ -44,7 +45,7 @@
         BeanUtils.copyProperties(message,platformStartChargingReply);
         platformStartChargingReplyService.create(platformStartChargingReply);
         // 业务处理
-        com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage message1 = new com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage();
+        PlatformStartChargingReplyMessageVO message1 = new PlatformStartChargingReplyMessageVO();
         BeanUtils.copyProperties(message, message1);
         chargingOrderClient.startChargeSuccessfully(message1);
     }
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
index 521a8e3..6cebbaf 100644
--- 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
@@ -3,6 +3,7 @@
 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;
@@ -18,6 +19,9 @@
 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;
@@ -112,6 +116,14 @@
     private QrCodeDeliveryReplyService qrCodeDeliveryReplyService;
     @Autowired
     private SecurityDetectionService securityDetectionService;
+    
+    @Resource
+    private ChargingPileClient chargingPileClient;
+    
+    
+    
+    
+    
     @StreamListener("input")
     @Override
     protected void handleMessage(ChargingMessage message) throws Exception {
@@ -135,6 +147,8 @@
                 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();
@@ -316,7 +330,7 @@
                 BeanUtils.copyProperties(platformStartChargingReplyMessage,platformStartChargingReply);
                 platformStartChargingReplyService.create(platformStartChargingReply);
                 // 业务处理
-                com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage message1 = new com.ruoyi.order.api.vo.PlatformStartChargingReplyMessage();
+                PlatformStartChargingReplyMessageVO message1 = new com.ruoyi.order.api.vo.PlatformStartChargingReplyMessageVO();
                 BeanUtils.copyProperties(platformStartChargingReplyMessage, message1);
                 chargingOrderClient.startChargeSuccessfully(message1);
                 break;
@@ -327,6 +341,9 @@
                 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();
@@ -427,7 +444,7 @@
                 SecurityDetection securityDetection = new SecurityDetection();
                 BeanUtils.copyProperties(securityDetectionMessage,securityDetection);
                 securityDetectionService.create(securityDetection);
-                com.ruoyi.order.api.vo.SecurityDetection securityDetection1 = new com.ruoyi.order.api.vo.SecurityDetection();
+                SecurityDetectionVO securityDetection1 = new SecurityDetectionVO();
                 BeanUtils.copyProperties(securityDetection, securityDetection1);
                 chargingOrderClient.securityDetection(securityDetection1);
                 break;
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 21535a0..dc7ee0a 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;
@@ -465,7 +470,7 @@
      */
     @ResponseBody
     @PostMapping(value = "/securityDetection")
-    public void securityDetection(@RequestBody SecurityDetection securityDetection){
+    public void securityDetection(@RequestBody SecurityDetectionVO securityDetection){
         chargingOrderService.securityDetection(securityDetection);
     }
     
@@ -475,8 +480,8 @@
      */
     @ResponseBody
     @PostMapping(value = "/startChargeSuccessfully")
-    public void startChargeSuccessfully(@RequestBody PlatformStartChargingReplyMessage message){
-        System.err.println("远程启动应答:" + message);
+    public void startChargeSuccessfully(@RequestBody PlatformStartChargingReplyMessageVO message){
+        log.error("-------------------远程启动充电请求应答-------------------:" + message);
         chargingOrderService.startChargeSuccessfully(message);
     }
     
@@ -556,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/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
index 790dc57..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;
@@ -83,14 +79,14 @@
 	 * 安全检测数据
 	 * @param securityDetection
 	 */
-	void securityDetection(SecurityDetection securityDetection);
+	void securityDetection(SecurityDetectionVO securityDetection);
 	
 	
 	/**
 	 * 启动充电应发
 	 * @param message
 	 */
-	void startChargeSuccessfully(PlatformStartChargingReplyMessage message);
+	void startChargeSuccessfully(PlatformStartChargingReplyMessageVO message);
 	
 	
 	/**
@@ -119,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 a4206d6..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
@@ -38,7 +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.SecurityDetection;
+import com.ruoyi.order.api.vo.PlatformStopChargingReplyVO;
 import com.ruoyi.order.dto.*;
 import com.ruoyi.order.mapper.TChargingOrderMapper;
 import com.ruoyi.order.mapper.TSettlementConfirmMapper;
@@ -627,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);
@@ -762,7 +765,7 @@
 	 * @param securityDetection
 	 */
 	@Override
-	public void securityDetection(SecurityDetection securityDetection){
+	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());
@@ -782,7 +785,7 @@
 	 * @param message
 	 */
 	@Override
-	public void startChargeSuccessfully(PlatformStartChargingReplyMessage message) {
+	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()));
@@ -955,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);
@@ -1018,7 +1025,7 @@
 				}
 			}
 		}
-		
+		String code1 = chargingOrder.getCode();
 		
 		//异步线程处理停机
 		ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1);
@@ -1030,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);
@@ -1044,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()){
@@ -1061,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;
 				}
 
 				// 将枪状态重置为空闲
@@ -1070,6 +1092,7 @@
 				chargingGunClient.updateChargingGunById(chargingGun);
 				//计算费用,处理退款
 				endCharge(chargingOrder);
+				log.error(code1 + ":-------------------远程停止充电请求成功-------------------");
 				break;
 			}
 		});
@@ -1126,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);
+	}
+	
+	
+	
+	
+	
 	/**
 	 * 手动结束后的费用计算和退款逻辑
 	 */

--
Gitblit v1.7.1