From c6ae115f27ba34dbeb52fafa6f6dd728d3809157 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期一, 02 九月 2024 19:55:25 +0800
Subject: [PATCH] 硬件接口处理

---
 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/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java  |   36 ++++++++++--
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java          |    7 ++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java |   13 ++++
 ruoyi-service/ruoyi-integration/pom.xml                                                                                               |    4 +
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java        |    5 +
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java                                      |   13 +++-
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java                          |   16 +++--
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java             |    7 ++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java             |   20 ++++++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java                                      |   13 ++++
 11 files changed, 121 insertions(+), 18 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java
index cdc9f16..10f44fe 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java
@@ -26,6 +26,11 @@
 			public R<TAccountingStrategyDetail> getNowData(Integer accountingStrategyId) {
 				return R.fail("获取当前有效的计费策略明细失败:" + throwable.getMessage());
 			}
+
+			@Override
+			public R<TAccountingStrategyDetail> getDetailBySiteId(Integer siteId) {
+				return R.fail("通过站点id查询当前时段使用的策略明细失败:" + throwable.getMessage());
+			}
 		};
 	}
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java
index b63175e..cddb45e 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java
@@ -23,4 +23,11 @@
 	 */
 	@PostMapping("/t-accounting-strategy-detail/getNowData")
 	R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId);
+	/**
+	 * 通过站点id查询当前时段使用的策略明细
+	 * @param siteId
+	 * @return
+	 */
+	@PostMapping("/t-accounting-strategy-detail/getDetailBySiteId")
+	R<TAccountingStrategyDetail> getDetailBySiteId(@RequestParam("siteId") Integer siteId);
 }
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 8738bb2..64b0022 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
@@ -68,6 +68,11 @@
             @Override
             public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) {
             }
+
+            @Override
+            public R<TChargingOrder> getOrderByCode(String code) {
+                return R.fail("通过流水号查询订单调用失败:" + 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 96340a0..6077804 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
@@ -9,10 +9,7 @@
 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;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -70,4 +67,12 @@
      */
     @PostMapping(value = "/t-charging-order/chargeMonitoring")
     void chargeMonitoring(@RequestBody UploadRealTimeMonitoringDataQuery query);
+
+    /**
+     * 通过流水号查询订单
+     * @param code
+     * @return
+     */
+    @PostMapping(value = "/t-charging-order/getOrderByCode/{code}")
+    R<TChargingOrder> getOrderByCode(@PathVariable("code") String code);
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java
index 5234673..f8558c5 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java
@@ -91,5 +91,25 @@
                 .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time"));
         return R.ok(one);
     }
+
+    /**
+     * 获取当前有效的计费模板
+     * @param accountingStrategyId
+     * @return
+     */
+    /**
+     * 通过站点id查询当前时段使用的策略明细
+     * @param siteId
+     * @return
+     */
+    @PostMapping("/getDetailBySiteId")
+    public R<TAccountingStrategyDetail> getDetailBySiteId(@RequestParam("siteId") Integer siteId){
+        Site site = siteService.getById(siteId);
+        TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId());
+        TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(Wrappers.<TAccountingStrategyDetail>lambdaQuery()
+                .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId())
+                .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time"));
+        return R.ok(one);
+    }
 }
 
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
index fe5e167..029a4e9 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
@@ -21,6 +21,8 @@
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.OperatorType;
+import com.ruoyi.integration.api.feignClient.IntegrationClient;
+import com.ruoyi.integration.api.model.EndCharge;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -51,18 +53,16 @@
 @RequestMapping("/t-charging-gun")
 public class TChargingGunController {
 
-    private final TChargingGunService chargingGunService;
-    
+    @Autowired
+    private TChargingGunService chargingGunService;
+    @Autowired
+    private IntegrationClient integrationClient;
+
     @Resource
     private TChargingPileService chargingPileService;
     @Resource
     private ISiteService siteService;
 
-    @Autowired
-    public TChargingGunController(TChargingGunService chargingGunService) {
-        this.chargingGunService = chargingGunService;
-    }
-    
     /**
      * 查询充电枪列表
      */
@@ -132,6 +132,8 @@
     @PutMapping(value = "/stopCharging")
     public AjaxResult<String> stopCharging(@RequestParam("id") Integer id) {
         // TODO 硬件 结束充电
+        EndCharge endCharge = new EndCharge();
+        integrationClient.endCharge(endCharge);
         return AjaxResult.success();
     }
     
diff --git a/ruoyi-service/ruoyi-integration/pom.xml b/ruoyi-service/ruoyi-integration/pom.xml
index 4c146a8..571bf94 100644
--- a/ruoyi-service/ruoyi-integration/pom.xml
+++ b/ruoyi-service/ruoyi-integration/pom.xml
@@ -169,6 +169,10 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-api-order</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-api-chargingPile</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java
index e142505..f5b92c3 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java
@@ -17,4 +17,11 @@
 	List<UploadRealTimeMonitoringData> getDataByOrderCode(String code);
 	List<UploadRealTimeMonitoringData> getDataAll(Set<String> values, Integer page, Integer size);
 
+	/**
+	 * 查询订单最新一条数据
+	 * @param transaction_serial_number
+	 * @return
+	 */
+    UploadRealTimeMonitoringData getLastDataById(String transaction_serial_number);
+
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
index 89cf4d0..cbed3aa 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
@@ -73,4 +73,17 @@
         return uploadRealTimeMonitoringData;
     }
 
+    @Override
+    public UploadRealTimeMonitoringData getLastDataById(String transaction_serial_number) {
+        Query query = new Query();
+        if (StringUtils.isNotEmpty(transaction_serial_number)){
+            query.addCriteria(Criteria.where("transaction_serial_number").is(transaction_serial_number));
+        }
+        // 按照 createdAt 字段降序排序
+        query.with(Sort.by(Sort.Direction.DESC, "create_time"));
+        // 限制结果只返回一条记录
+        query.limit(1);
+        return mongoTemplate.findOne(query, UploadRealTimeMonitoringData.class);
+    }
+
 }
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 f28993e..dc6342c 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
@@ -1,11 +1,14 @@
 package com.ruoyi.integration.rocket.listener;
 
+import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient;
+import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
 import com.ruoyi.integration.api.model.Online;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 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.model.TChargingOrder;
 import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
@@ -15,6 +18,9 @@
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Objects;
 
 @Slf4j
 @Component
@@ -31,12 +37,10 @@
     
     @Resource
     private ChargingOrderClient chargingOrderClient;
-    
-    
-    
-    
-    
-    
+    @Resource
+    private AccountingStrategyDetailClient accountingStrategyDetailClient;
+
+
     @Override
     protected void handleMessage(UploadRealTimeMonitoringDataMessage message) throws Exception {
         // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试
@@ -44,11 +48,31 @@
         // 持久化消息
         UploadRealTimeMonitoringData uploadRealTimeMonitoringData = new UploadRealTimeMonitoringData();
         BeanUtils.copyProperties(message,uploadRealTimeMonitoringData);
+        // 查询mogondb上一条数据
+        UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(message.getTransaction_serial_number());
+        // 查询订单
+        TChargingOrder chargingOrder = chargingOrderClient.getOrderByCode(message.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(message.getPaid_amount().divide(data.getPaid_amount()));
+            uploadRealTimeMonitoringData.setPeriod_charging_degree(message.getCharging_degree().divide(data.getCharging_degree()));
+            uploadRealTimeMonitoringData.setPeriod_service_price(message.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP));
+        }else {
+            log.info("首次上传实时监测数据");
+            uploadRealTimeMonitoringData.setPeriod_electric_price(message.getPaid_amount());
+            uploadRealTimeMonitoringData.setPeriod_charging_degree(message.getCharging_degree());
+            uploadRealTimeMonitoringData.setPeriod_service_price(message.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP));
+        }
         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 ca25338..4ca0f92 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
@@ -1,4 +1,5 @@
 package com.ruoyi.order.controller;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.google.common.collect.Lists;
 
 import java.math.BigDecimal;
@@ -638,7 +639,17 @@
     public void chargeMonitoring(@RequestBody UploadRealTimeMonitoringDataQuery query){
         chargingOrderService.chargeMonitoring(query);
     }
-    
+    /**
+     * 通过流水号查询订单
+     * @param code
+     * @return
+     */
+    @PostMapping(value = "/getOrderByCode/{code}")
+    public R<TChargingOrder> getOrderByCode(@PathVariable("code") String code){
+        return R.ok(chargingOrderService.getOne(Wrappers.lambdaQuery(TChargingOrder.class)
+                .eq(TChargingOrder::getCode,code)));
+    }
+
 
 
 

--
Gitblit v1.7.1