From 9bc378e6bb9b4563a0dec222e1c2d5d3278632cb Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 17 九月 2025 17:41:54 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java               |   53 -
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java                  |   39 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java                   |    5 
 ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java                           |  528 +++++++++++++-
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java                          |    7 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java                                   |  495 +++++++++++++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java      |    8 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/ChargingMessageUtil.java    |   30 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java    |    3 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java  |    2 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java      |    4 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java                        |   14 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java |    3 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java     |    8 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java                    |    2 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml                                |  922 +++++++++++++-----------
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java     |   13 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java  |    4 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java                  |   77 -
 19 files changed, 1,566 insertions(+), 651 deletions(-)

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 7da496b..21909bc 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java
@@ -5,6 +5,7 @@
 import com.ruoyi.chargingPile.api.model.TChargingGun;
 import com.ruoyi.chargingPile.api.model.TChargingPile;
 import com.ruoyi.chargingPile.api.model.TFaultMessage;
+import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo;
 import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode;
 import com.ruoyi.chargingPile.api.vo.SiteNameVO;
 import com.ruoyi.common.core.domain.R;
@@ -72,7 +73,7 @@
             }
     
             @Override
-            public R<List<TChargingGun>> getChargingGunByChargingPileIds(List<Integer> chargingPileIds) {
+            public R<List<TChargingGun>> getChargingGunByChargingPileIds(GetChargingGunByChargingPileIdsVo vo) {
                 return R.fail("根据充电桩ids获取枪失败:" + throwable.getMessage());
             }
     
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java
index a1a1779..bbbc41f 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java
@@ -3,6 +3,7 @@
 import com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory;
 import com.ruoyi.chargingPile.api.model.TChargingGun;
 import com.ruoyi.chargingPile.api.model.TChargingPile;
+import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo;
 import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode;
 import com.ruoyi.chargingPile.api.vo.SiteNameVO;
 import com.ruoyi.common.core.constant.ServiceNameConstants;
@@ -83,11 +84,10 @@
 	
 	/**
 	 * 根据充电桩ids获取枪
-	 * @param chargingPileIds
 	 * @return
 	 */
 	@PostMapping("/t-charging-gun/getChargingGunByChargingPileIds")
-	R<List<TChargingGun>> getChargingGunByChargingPileIds(@RequestParam("chargingPileIds") List<Integer> chargingPileIds);
+	R<List<TChargingGun>> getChargingGunByChargingPileIds(@RequestBody GetChargingGunByChargingPileIdsVo vo);
 	
 	
 	
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 e5db1a4..034b6f3 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
@@ -190,7 +190,7 @@
             Address[] allRecipients = {toMail, toMail2};
             message.setRecipients(Message.RecipientType.TO, allRecipients);
             // Set Subject: 邮件主体
-            message.setSubject("明星电力");
+            message.setSubject("明星新能源充电开票");
             // 设置消息体
             message.setSentDate(new Date());
             javax.mail.internet.MimeMultipart msgMultipart = new MimeMultipart("mixed");
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 cc3f860..9b93c6e 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
@@ -326,12 +326,14 @@
     
     /**
      * 根据充电桩ids获取枪
-     * @param chargingPileIds
      * @return
      */
     @PostMapping("/getChargingGunByChargingPileIds")
-    public R<List<TChargingGun>> getChargingGunByChargingPileIds(@RequestParam("chargingPileIds") List<Integer> chargingPileIds){
-        List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, chargingPileIds)
+    public R<List<TChargingGun>> getChargingGunByChargingPileIds(@RequestBody GetChargingGunByChargingPileIdsVo vo){
+        if(vo.getChargingPileIds().isEmpty()){
+            return R.ok(new ArrayList<>());
+        }
+        List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, vo.getChargingPileIds())
                 .eq(TChargingGun::getDelFlag, 0));
         return R.ok(list);
     }
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 90ec317..4ff6248 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
@@ -267,7 +267,7 @@
 					@Override
 					public void run() {
 						//推送状态给三方平台
-						tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), tChargingGun1.getStatus());
+						tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), 2);
 					}
 				}).start();
 				
@@ -295,7 +295,7 @@
 					@Override
 					public void run() {
 						//推送状态给三方平台
-						tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), tChargingGun1.getStatus());
+						tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), 7);
 					}
 				}).start();
 				
@@ -348,7 +348,7 @@
 						@Override
 						public void run() {
 							//推送状态给三方平台
-							tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), tChargingGun1.getStatus());
+							tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), 5);
 						}
 					}).start();
 				}else{
@@ -360,7 +360,7 @@
 						@Override
 						public void run() {
 							//推送状态给三方平台
-							tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), tChargingGun1.getStatus());
+							tcecClient.pushChargingGunStatus(tChargingGun.getFullNumber(), 3);
 						}
 					}).start();
 				}
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 6522019..84337b6 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
@@ -733,7 +733,7 @@
 				@Override
 				public void run() {
 					//推送状态给三方平台
-					tcecClient.pushChargingGunStatus(chargingGun1.getFullNumber(), chargingGun1.getStatus());
+					tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 1);
 				}
 			}).start();
 			
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
index 39ad475..2be7fa8 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
@@ -5,6 +5,7 @@
 import com.alibaba.nacos.common.utils.JacksonUtils;
 import com.ruoyi.chargingPile.api.feignClient.*;
 import com.ruoyi.chargingPile.api.model.*;
+import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -150,31 +151,7 @@
 		}
 		return baseResult;
 	}
-	public BaseResult requestCheckJianGuan(Boolean tokenCheck, BaseRequest baseRequest, HttpServletRequest request){
-		Operator operator = new Operator();
-		BaseResult baseResult = new BaseResult();
-		baseResult.setRet(0);
-		baseResult.setMsg("成功");
-		baseResult.setOperatorID(baseRequest.getOperatorID());
-		operator.setOperatorId(baseRequest.getOperatorID());
-		Long mapKey = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
-		baseResult.setTimeStamp(mapKey);
-		baseResult.setSeq("0001");
-		//校验token和签名
-		String operatorID = baseRequest.getOperatorID();
-		String sig = baseRequest.getSig();
-		Long timeStamp = baseRequest.getTimeStamp();
-		String data = baseRequest.getData();
-		String seq = baseRequest.getSeq();
-		baseResult.setOperator(operator);
-		if(StringUtils.isEmpty(operatorID) || StringUtils.isEmpty(sig) || StringUtils.isEmpty(data) || StringUtils.isEmpty(seq) || null == timeStamp){
-			baseResult.setRet(4003);
-			baseResult.setMsg("参数异常");
-			return baseResult;
-		}
-		return baseResult;
-	}
-	
+
 	
 	
 	
@@ -348,7 +325,9 @@
 		List<Integer> siteIds = sites.stream().map(Site::getId).collect(Collectors.toList());
 		List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
 		List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
-		List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
+		GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo();
+		vo.setChargingPileIds(collect1);
+		List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(vo).getData();
 		String serviceTel = systemConfigurationClient.getServerPhone().getData();
 		List<StationInfo> StationInfos = new ArrayList<>();
 		for (Site datum : sites) {
@@ -651,7 +630,9 @@
 		List<Integer> siteIds = data.stream().map(Site::getId).collect(Collectors.toList());
 		List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
 		List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
-		List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
+		GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo();
+		vo.setChargingPileIds(collect1);
+		List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(vo).getData();
 		
 		QueryStationStatusResult result = new QueryStationStatusResult();
 		result.setTotal(data.size());
@@ -1896,7 +1877,9 @@
 		List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(stationIDList).getData();
 		if(!CollectionUtils.isEmpty(chargingPiles)){
 			List<Integer> pileIds = chargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
-			List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(pileIds).getData();
+			GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo();
+			vo.setChargingPileIds(pileIds);
+			List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(vo).getData();
 			if(!CollectionUtils.isEmpty(chargingGuns)){
 				for (Integer stationID : stationIDList) {
 					StationStatusInfo stationStatusInfo = new StationStatusInfo();
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
index a7ce4cc..ef03edc 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
@@ -8,6 +8,7 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.ruoyi.chargingPile.api.feignClient.*;
 import com.ruoyi.chargingPile.api.model.*;
+import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -287,7 +288,9 @@
 		List<Integer> siteIds = sites.stream().map(Site::getId).collect(Collectors.toList());
 		List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
 		List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
-		List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
+		GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo();
+		vo.setChargingPileIds(collect1);
+		List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(vo).getData();
 		String serviceTel = systemConfigurationClient.getServerPhone().getData();
 		List<StationInfo> StationInfos = new ArrayList<>();
 		for (Site datum : sites) {
@@ -595,7 +598,9 @@
 		List<Integer> siteIds = data.stream().map(Site::getId).collect(Collectors.toList());
 		List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
 		List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
-		List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
+		GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo();
+		vo.setChargingPileIds(collect1);
+		List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(vo).getData();
 		
 		QueryStationStatusResult result = new QueryStationStatusResult();
 		result.setTotal(data.size());
@@ -1929,7 +1934,9 @@
 		List<TChargingPile> chargingPiles = chargingPileClient.getChargingPileBySiteIds(stationIDList).getData();
 		if(!CollectionUtils.isEmpty(chargingPiles)){
 			List<Integer> pileIds = chargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
-			List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(pileIds).getData();
+			GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo();
+			vo.setChargingPileIds(pileIds);
+			List<TChargingGun> chargingGuns = chargingGunClient.getChargingGunByChargingPileIds(vo).getData();
 			if(!CollectionUtils.isEmpty(chargingGuns)){
 				for (Integer stationID : stationIDList) {
 					StationStatusInfo stationStatusInfo = new StationStatusInfo();
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java
index 258b1f5..c696aa2 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java
@@ -5,6 +5,7 @@
 import com.ruoyi.chargingPile.api.model.Site;
 import com.ruoyi.chargingPile.api.model.TChargingGun;
 import com.ruoyi.chargingPile.api.model.TChargingPile;
+import com.ruoyi.chargingPile.api.vo.GetChargingGunByChargingPileIdsVo;
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.integration.drainage.TCECSuperviseUtil;
 import com.ruoyi.integration.drainage.TokenUtil;
@@ -158,7 +159,9 @@
             List<Integer> siteIds = data.stream().filter(s->s.getStatus() == 1).map(Site::getId).collect(Collectors.toList());
             List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
             List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
-            List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
+            GetChargingGunByChargingPileIdsVo vo = new GetChargingGunByChargingPileIdsVo();
+            vo.setChargingPileIds(collect1);
+            List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(vo).getData();
             SupStationPowerInfoResult supStationPowerInfoResult = new SupStationPowerInfoResult();
             List<SupStationPowerInfo> stationStatsInfos = new ArrayList<>();
             LocalDateTime now = LocalDateTime.now();
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
index 970238f..1f7f61c 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -66,7 +66,6 @@
      */
     @PostMapping(value = "/message")
     public AjaxResult<String> message(@RequestBody JSONObject jsonObject) throws IOException {
-        log.info("接收到消息中转:{}",jsonObject.toJSONString());
         JSONObject body = jsonObject.getJSONObject("notify_data").getJSONObject("body");
         JSONObject content = null;
         try {
@@ -85,6 +84,9 @@
         String nodeId = header.getString("node_id"); // 设备编号
         String productId = header.getString("product_id"); // 产品id
         String service_id = content.getString("service_id");
+        if(!SendTagConstant.PING.equals(service_id)){
+            log.info("收到IOT发送的消息:{}",jsonObject.toJSONString());
+        }
 //        log.info("服务id:{}",service_id);
         ChargingMessage chargingMessage = new ChargingMessage();
         chargingMessage.setServiceId(service_id);
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
index 2743b00..f4dd22c 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
@@ -40,7 +40,6 @@
      */
     @PostMapping("/sendMessage")
     public String sendMessage(String code, String name, JSONObject message){
-//        log.info("消息下发至设备:code={},name={},message={}", code, name, message);
         CreateMessageRequest request = new CreateMessageRequest();
         request.withDeviceId(code);
         DeviceMessageRequest body = new DeviceMessageRequest();
@@ -50,11 +49,9 @@
         request.withBody(body);
         try {
             CreateMessageResponse response = iotBuilder.buildIot().createMessage(request);
-//            log.info("消息下发至设备结果:{}", JSON.toJSONString(response));
             return JSON.toJSONString(response);
         } catch (Exception e) {
             e.printStackTrace();
-//            log.error("消息下发至设备异常:code---{},msg---{}", code, e.getMessage());
             return e.getMessage();
         }
     }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/ChargingMessageUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/ChargingMessageUtil.java
index 159a1f0..66daebf 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/ChargingMessageUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/ChargingMessageUtil.java
@@ -107,7 +107,6 @@
 
 
     public void handleMessage(ChargingMessage message){
-        log.info("收到的消息内容:{}",message);
         String serviceId = message.getServiceId();
         if(!StringUtils.hasLength(serviceId)){
             return;
@@ -115,7 +114,6 @@
         switch (serviceId){
             case SendTagConstant.ONLINE:
                 OnlineMessage onlineMessage = message.getOnlineMessage();
-                log.info("充电桩登录认证业务消息处理:{}",onlineMessage);
                 // 持久化消息
                 Online online = new Online();
                 BeanUtils.copyProperties(onlineMessage,online);
@@ -123,7 +121,6 @@
                 break;
             case SendTagConstant.PING:
                 PingMessage pingMessage = message.getPingMessage();
-                log.info("充电桩心跳包-业务消息处理:{}",pingMessage);
                 // 持久化消息
                 Ping ping = new Ping();
                 BeanUtils.copyProperties(pingMessage,ping);
@@ -139,7 +136,6 @@
                 break;
             case SendTagConstant.END_CHARGE:
                 EndChargeMessage endChargeMessage = message.getEndChargeMessage();
-                log.info("充电结束-业务消息处理:{}",endChargeMessage);
                 // 持久化消息
                 EndCharge endCharge = new EndCharge();
                 BeanUtils.copyProperties(endChargeMessage,endCharge);
@@ -149,7 +145,6 @@
                 break;
             case SendTagConstant.ERROR_MESSAGE:
                 ErrorMessageMessage errorMessageMessage1 = message.getErrorMessageMessage();
-                log.info("错误报文-业务消息处理:{}",errorMessageMessage1);
                 // 持久化消息
 //                ErrorMessageMessage errorMessageMessage = new ErrorMessageMessage();
 //                BeanUtils.copyProperties(errorMessageMessage1,errorMessageMessage);
@@ -157,7 +152,6 @@
                 break;
             case SendTagConstant.BILLING_MODE_VERIFY:
                 BillingModeVerifyMessage billingModeVerifyMessage = message.getBillingModeVerifyMessage();
-                log.info("计费模型验证请求-业务消息处理:{}",billingModeVerifyMessage);
                 // 持久化消息
 //                BillingModeVerify billingModeVerify = new BillingModeVerify();
 //                BeanUtils.copyProperties(billingModeVerifyMessage,billingModeVerify);
@@ -165,7 +159,6 @@
                 break;
             case SendTagConstant.ACQUISITION_BILLING_MODE:
                 AcquisitionBillingModeMessage acquisitionBillingModeMessage = message.getAcquisitionBillingModeMessage();
-                log.info("充电桩计费模型请求-业务消息处理:{}",acquisitionBillingModeMessage);
                 // 持久化消息
                 AcquisitionBillingMode acquisitionBillingMode = new AcquisitionBillingMode();
                 BeanUtils.copyProperties(acquisitionBillingModeMessage,acquisitionBillingMode);
@@ -184,7 +177,6 @@
                 }
                 redisTemplate.opsForValue().set("upload_real_time_monitoring_data:" + transaction_serial_number, System.currentTimeMillis(), 1, TimeUnit.MINUTES);
                 try {
-                    log.info("上传实时监测数据-业务消息处理:{}",uploadRealTimeMonitoringDataMessage);
                     // 持久化消息
                     UploadRealTimeMonitoringData uploadRealTimeMonitoringData = new UploadRealTimeMonitoringData();
                     BeanUtils.copyProperties(uploadRealTimeMonitoringDataMessage,uploadRealTimeMonitoringData);
@@ -202,7 +194,6 @@
                         uploadRealTimeMonitoringData.setPeriod_charging_degree(uploadRealTimeMonitoringDataMessage.getCharging_degree().subtract(data.getCharging_degree()));
                         uploadRealTimeMonitoringData.setPeriod_service_price(uploadRealTimeMonitoringDataMessage.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP));
                     }else {
-                        log.info("首次上传实时监测数据");
                         uploadRealTimeMonitoringData.setPeriod_electric_price(uploadRealTimeMonitoringDataMessage.getPaid_amount());
                         uploadRealTimeMonitoringData.setPeriod_charging_degree(uploadRealTimeMonitoringDataMessage.getCharging_degree());
                         uploadRealTimeMonitoringData.setPeriod_service_price(uploadRealTimeMonitoringDataMessage.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP));
@@ -225,7 +216,6 @@
                 break;
             case SendTagConstant.CHARGING_HANDSHAKE:
                 ChargingHandshakeMessage chargingHandshakeMessage = message.getChargingHandshakeMessage();
-                log.info("充电握手-业务消息处理:{}",chargingHandshakeMessage);
                 // 持久化消息
                 ChargingHandshake chargingHandshake = new ChargingHandshake();
                 BeanUtils.copyProperties(chargingHandshakeMessage,chargingHandshake);
@@ -233,7 +223,6 @@
                 break;
             case SendTagConstant.PARAMETER_SETTING:
                 ParameterSettingMessage parameterSettingMessage = message.getParameterSettingMessage();
-                log.info("参数配置-业务消息处理:{}",parameterSettingMessage);
                 // 持久化消息
 //                ParameterSetting parameterSetting = new ParameterSetting();
 //                BeanUtils.copyProperties(parameterSettingMessage,parameterSetting);
@@ -241,7 +230,6 @@
                 break;
             case SendTagConstant.BMS_ABORT:
                 BmsAbortMessage bmsAbortMessage = message.getBmsAbortMessage();
-                log.info("充电阶段BMS中止-业务消息处理:{}",bmsAbortMessage);
                 // 持久化消息
                 BmsAbort bmsAbort = new BmsAbort();
                 BeanUtils.copyProperties(bmsAbortMessage,bmsAbort);
@@ -251,7 +239,6 @@
                 break;
             case SendTagConstant.MOTOR_ABORT:
                 MotorAbortMessage motorAbortMessage = message.getMotorAbortMessage();
-                log.info("充电阶段充电机中止-业务消息处理:{}",motorAbortMessage);
                 // 持久化消息
                 MotorAbort motorAbort = new MotorAbort();
                 BeanUtils.copyProperties(motorAbortMessage,motorAbort);
@@ -261,7 +248,6 @@
                 break;
             case SendTagConstant.BMS_DEMAND_AND_CHARGER_EXPORTATION:
                 BmsDemandAndChargerExportationMessage bmsDemandAndChargerExportationMessage = message.getBmsDemandAndChargerExportationMessage();
-                log.info("充电过程BMS需求、充电机输出-业务消息处理:{}",bmsDemandAndChargerExportationMessage);
                 String transaction_serial_number1 = bmsDemandAndChargerExportationMessage.getTransaction_serial_number();
                 Object o1 = redisTemplate.opsForValue().get("bms_demand_and_charger_exportation:" + transaction_serial_number1);
                 if(null != o1){
@@ -286,7 +272,6 @@
                 break;
             case SendTagConstant.BMS_INFORMATION:
                 BmsInformationMessage bmsInformationMessage = message.getBmsInformationMessage();
-                log.info("充电过程BMS信息-业务消息处理:{}",bmsInformationMessage);
                 String transaction_serial_number2 = bmsInformationMessage.getTransaction_serial_number();
                 Object o2 = redisTemplate.opsForValue().get("bms_information:" + transaction_serial_number2);
                 if(null != o2){
@@ -304,7 +289,6 @@
                 break;
             case SendTagConstant.CHARGING_PILE_STARTS_CHARGING:
                 ChargingPileStartsChargingMessage chargingPileStartsChargingMessage = message.getChargingPileStartsChargingMessage();
-                log.info("充电桩主动申请启动充电-业务消息处理:{}",chargingPileStartsChargingMessage);
                 // 持久化消息
                 ChargingPileStartsCharging chargingPileStartsCharging = new ChargingPileStartsCharging();
                 BeanUtils.copyProperties(chargingPileStartsChargingMessage,chargingPileStartsCharging);
@@ -312,7 +296,6 @@
                 break;
             case SendTagConstant.PLATFORM_START_CHARGING_REPLY:
                 PlatformStartChargingReplyMessage platformStartChargingReplyMessage = message.getPlatformStartChargingReplyMessage();
-                log.info("远程启机命令回复-业务消息处理:{}",platformStartChargingReplyMessage);
                 // 持久化消息
                 PlatformStartChargingReply platformStartChargingReply = new PlatformStartChargingReply();
                 BeanUtils.copyProperties(platformStartChargingReplyMessage,platformStartChargingReply);
@@ -325,7 +308,6 @@
                 break;
             case SendTagConstant.PLATFORM_STOP_CHARGING_REPLY:
                 PlatformStopChargingReplyMessage platformStopChargingReplyMessage = message.getPlatformStopChargingReplyMessage();
-                log.info("远程停机命令回复-业务消息处理:{}",platformStopChargingReplyMessage);
                 // 持久化消息
                 PlatformStopChargingReply platformStopChargingReply = new PlatformStopChargingReply();
                 BeanUtils.copyProperties(platformStopChargingReplyMessage,platformStopChargingReply);
@@ -337,7 +319,6 @@
                 break;
             case SendTagConstant.TRANSACTION_RECORD:
                 TransactionRecordMessage transactionRecordMessage = message.getTransactionRecordMessage();
-                log.info("交易记录-业务消息处理:{}",transactionRecordMessage);
                 transactionRecordMessage.setResult(JSONObject.toJSONString(transactionRecordMessage));
                 // 持久化消息
                 TransactionRecord transactionRecord = new TransactionRecord();
@@ -368,7 +349,6 @@
                 break;
             case SendTagConstant.UPDATE_BALANCE_REPLY:
                 UpdateBalanceReplyMessage updateBalanceReplyMessage = message.getUpdateBalanceReplyMessage();
-                log.info("余额更新应答-业务消息处理:{}",updateBalanceReplyMessage);
                 // 持久化消息
                 UpdateBalanceReply updateBalanceReply = new UpdateBalanceReply();
                 BeanUtils.copyProperties(updateBalanceReplyMessage,updateBalanceReply);
@@ -376,7 +356,6 @@
                 break;
             case SendTagConstant.SYNCHRONIZE_OFFLINE_CARD_REPLY:
                 SynchronizeOfflineCardReplyMessage synchronizeOfflineCardReplyMessage = message.getSynchronizeOfflineCardReplyMessage();
-                log.info("卡数据同步应答-业务消息处理:{}",synchronizeOfflineCardReplyMessage);
                 // 持久化消息
                 SynchronizeOfflineCardReply synchronizeOfflineCardReply = new SynchronizeOfflineCardReply();
                 BeanUtils.copyProperties(synchronizeOfflineCardReplyMessage,synchronizeOfflineCardReply);
@@ -384,7 +363,6 @@
                 break;
             case SendTagConstant.CLEAR_OFFLINE_CARD_REPLY:
                 ClearOfflineCardReplyMessage clearOfflineCardReplyMessage = message.getClearOfflineCardReplyMessage();
-                log.info("离线卡数据清除应答-业务消息处理:{}",clearOfflineCardReplyMessage);
                 // 持久化消息
                 ClearOfflineCardReply clearOfflineCardReply = new ClearOfflineCardReply();
                 BeanUtils.copyProperties(clearOfflineCardReplyMessage,clearOfflineCardReply);
@@ -392,7 +370,6 @@
                 break;
             case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY:
                 WorkingParameterSettingReplyMessage workingParameterSettingReplyMessage = message.getWorkingParameterSettingReplyMessage();
-                log.info("充电桩工作参数设置应答-业务消息处理:{}",workingParameterSettingReplyMessage);
                 // 持久化消息
                 WorkingParameterSettingReply workingParameterSettingReply = new WorkingParameterSettingReply();
                 BeanUtils.copyProperties(workingParameterSettingReplyMessage,workingParameterSettingReply);
@@ -400,7 +377,6 @@
                 break;
             case SendTagConstant.TIMING_SETTING:
                 TimingSettingMessage timingSettingMessage = message.getTimingSettingMessage();
-                log.info("对时设置-业务消息处理:{}",timingSettingMessage);
                 // 持久化消息
 //                TimingSetting timingSetting = new TimingSetting();
 //                BeanUtils.copyProperties(timingSettingMessage,timingSetting);
@@ -408,7 +384,6 @@
                 break;
             case SendTagConstant.SETUP_BILLING_MODEL_REPLY:
                 SetupBillingModelReplyMessage setupBillingModelReplyMessage = message.getSetupBillingModelReplyMessage();
-                log.info("计费模型应答-业务消息处理:{}",setupBillingModelReplyMessage);
                 // 持久化消息
                 SetupBillingModelReply setupBillingModelReply = new SetupBillingModelReply();
                 BeanUtils.copyProperties(setupBillingModelReplyMessage,setupBillingModelReply);
@@ -416,7 +391,6 @@
                 break;
             case SendTagConstant.GROUND_LOCK_REAL_TIME_DATA:
                 GroundLockRealTimeDataMessage groundLockRealTimeDataMessage = message.getGroundLockRealTimeDataMessage();
-                log.info("地锁数据上送(充电桩上送)-业务消息处理:{}",groundLockRealTimeDataMessage);
                 // 持久化消息
                 GroundLockRealTimeData groundLockRealTimeData = new GroundLockRealTimeData();
                 BeanUtils.copyProperties(groundLockRealTimeDataMessage,groundLockRealTimeData);
@@ -424,7 +398,6 @@
                 break;
             case SendTagConstant.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA:
                 ChargingPileReturnsGroundLockDataMessage chargingPileReturnsGroundLockDataMessage = message.getChargingPileReturnsGroundLockDataMessage();
-                log.info("充电桩返回数据(上行)-业务消息处理:{}",chargingPileReturnsGroundLockDataMessage);
                 // 持久化消息
                 ChargingPileReturnsGroundLockData chargingPileReturnsGroundLockData = new ChargingPileReturnsGroundLockData();
                 BeanUtils.copyProperties(chargingPileReturnsGroundLockDataMessage,chargingPileReturnsGroundLockData);
@@ -432,7 +405,6 @@
                 break;
             case SendTagConstant.PLATFORM_RESTART_REPLY:
                 PlatformRestartReplyMessage platformRestartReplyMessage = message.getPlatformRestartReplyMessage();
-                log.info("远程重启应答-业务消息处理:{}",platformRestartReplyMessage);
                 // 持久化消息
                 PlatformRestartReply platformRestartReply = new PlatformRestartReply();
                 BeanUtils.copyProperties(platformRestartReplyMessage,platformRestartReply);
@@ -440,14 +412,12 @@
                 break;
             case SendTagConstant.QR_CODE_DELIVERY_REPLY:
                 QrCodeDeliveryReplyMessage qrCodeDeliveryReplyMessage = message.getQrCodeDeliveryReplyMessage();
-                log.info("二维码下发应答-业务消息处理:{}",qrCodeDeliveryReplyMessage);
                 QrCodeDeliveryReply qrCodeDeliveryReply = new QrCodeDeliveryReply();
                 BeanUtils.copyProperties(qrCodeDeliveryReplyMessage,qrCodeDeliveryReply);
                 qrCodeDeliveryReplyService.create(qrCodeDeliveryReply);
                 break;
             case SendTagConstant.SECURITY_DETECTION:
                 SecurityDetectionMessage securityDetectionMessage = message.getSecurityDetectionMessage();
-                log.info("安全监测-业务消息处理:{}",securityDetectionMessage);
                 SecurityDetection securityDetection = new SecurityDetection();
                 BeanUtils.copyProperties(securityDetectionMessage,securityDetection);
                 securityDetectionService.create(securityDetection);
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 6c495ee..f7bf4dc 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
@@ -222,55 +222,36 @@
     @PostMapping(value = "/pay/order/list")
     @ApiOperation(value = "列表", tags = {"管理后台-支付订单-订单信息"})
     public R<PageInfo<PayOrderDto>> payOrderList(@RequestBody PayOrderQueryDto payOrderQueryDto) {
-        Integer pageCurr = payOrderQueryDto.getPageCurr();
-        Integer pageSize = payOrderQueryDto.getPageSize();
-        payOrderQueryDto.setPageCurr(1);
-        payOrderQueryDto.setPageSize(10000999);
-        PageInfo<PayOrderDto> data = chargingOrderService.payOrderQuery(payOrderQueryDto).getData();
-        List<PayOrderDto> res = new ArrayList<>();
-        // 查询当前登陆人按钮权限
-        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
-        Integer roleType = sysUser.getRoleType();
-        Long userId = tokenService.getLoginUser().getUserid();
-        //如果没传siteId,获取当前登陆人所有的siteIds
-        List<Integer> siteIds = new ArrayList<>();
-        if (userId != null){
-            List<GetSiteListDTO> data2 = siteClient.getSiteListByUserId(userId).getData();
-            for (GetSiteListDTO datum : data2) {
-                siteIds.add(datum.getId());
-            }
-        }
-        if (siteIds.isEmpty()){
-            siteIds.add(-1);
-        }
-        List<TChargingOrder> list = chargingOrderService.list();
-        List<TParkingRecord> parkingRecord = parkingLotClient.getSiteIdAll().getData();
-        for (PayOrderDto record : data.getRecords()) {
-            if (record.getType() == 1){
-                TChargingOrder chargingOrder = list.stream().filter(e -> e.getId().equals(Long.valueOf(record.getId()))).findFirst().orElse(null);
-                if (chargingOrder!=null){
-                    record.setSiteId(chargingOrder.getSiteId());
-                }
-            }
-            if (record.getType()==4){
-                TParkingRecord tParkingRecord = parkingRecord.stream().filter(e -> e.getId().equals(Long.valueOf(record.getId()))).findFirst().orElse(null);
-                if (tParkingRecord!=null){
-                    record.setSiteId(tParkingRecord.getSiteId());
-                }
-            }
-            if (roleType==1||(record.getType()!=1&&record.getType()!=4)){
-                res.add(record);
-                continue;
-            }
-            if (roleType==2 && (record.getType()==1||record.getType()==4) && siteIds.contains(record.getSiteId())){
-                res.add(record);
-            }
+        return chargingOrderService.payOrderQuery(payOrderQueryDto);
 
-        }
-        List<PayOrderDto> res1 = testing5(res.size(), pageCurr, pageSize, res);
-        data.setTotal(res.size());
-        data.setRecords(res1);
-        return R.ok(data);
+//        List<TChargingOrder> list = chargingOrderService.list();
+//        List<TParkingRecord> parkingRecord = parkingLotClient.getSiteIdAll().getData();
+//        for (PayOrderDto record : data.getRecords()) {
+//            if (record.getType() == 1){
+//                TChargingOrder chargingOrder = list.stream().filter(e -> e.getId().equals(Long.valueOf(record.getId()))).findFirst().orElse(null);
+//                if (chargingOrder!=null){
+//                    record.setSiteId(chargingOrder.getSiteId());
+//                }
+//            }
+//            if (record.getType()==4){
+//                TParkingRecord tParkingRecord = parkingRecord.stream().filter(e -> e.getId().equals(Long.valueOf(record.getId()))).findFirst().orElse(null);
+//                if (tParkingRecord!=null){
+//                    record.setSiteId(tParkingRecord.getSiteId());
+//                }
+//            }
+//            if (roleType==1||(record.getType()!=1&&record.getType()!=4)){
+//                res.add(record);
+//                continue;
+//            }
+//            if (roleType==2 && (record.getType()==1||record.getType()==4) && siteIds.contains(record.getSiteId())){
+//                res.add(record);
+//            }
+//
+//        }
+//        List<PayOrderDto> res1 = testing5(res.size(), pageCurr, pageSize, res);
+//        data.setTotal(res.size());
+//        data.setRecords(res1);
+//        return R.ok(data);
     }
 
 
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
index 057e170..6c456d8 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -169,4 +169,11 @@
 	 * @return
 	 */
 	List<TChargingOrder> findChargingOrder();
+
+
+	/**
+	 * 获取已结束的数据
+	 * @return
+	 */
+	List<TChargingOrder> findEndChargingOrder();
 }
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 801f023..38dafd3 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
@@ -128,8 +128,12 @@
 	 * @return
 	 */
 	AjaxResult stopCharging(String id);
-	
-	
+
+
+	void editUserTag(TChargingOrder chargingOrder);
+
+	void referralReward(TChargingOrder chargingOrder);
+
 	/**
 	 * 停止充电应答结果处理
 	 * @param platformStopChargingReply
@@ -349,4 +353,10 @@
 	 * @return
 	 */
 	List<TChargingOrder> findChargingOrder();
+
+	/**
+	 * 获取已结束的数据
+	 * @return
+	 */
+	List<TChargingOrder> findEndChargingOrder();
 }
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 bc4d15a..88b4cf1 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
@@ -583,6 +583,8 @@
 			AccountingStrategyDetailOrder accountingStrategyDetailOrder = new AccountingStrategyDetailOrder();
 			BeanUtils.copyProperties(tAccountingStrategyDetail, accountingStrategyDetailOrder);
 			accountingStrategyDetailOrder.setChargingOrderId(chargingOrder.getId());
+			accountingStrategyDetailOrder.setCreateTime(LocalDateTime.now());
+			accountingStrategyDetailOrder.setDelFlag(false);
 			list1.add(accountingStrategyDetailOrder);
 		}
 		accountingStrategyDetailOrderService.saveBatch(list1);
@@ -939,7 +941,7 @@
 			chargingGun.setStatus(4);
 			chargingGunClient.updateChargingGunById(chargingGun);
 			//推送状态给三方平台
-			tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus());
+			tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 4);
 		}
 		redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
 		this.updateById(order);
@@ -1602,42 +1604,7 @@
 				
 			}
 		}
-
-//		List<TChargingOrderRefund> chargingOrderRefunds = chargingOrderRefundService.lambdaQuery()
-//				.eq(TChargingOrderRefund::getRefundStatus,2).list();
-		
-		
 		Map<String, Object> map = this.baseMapper.chargingOrderNolimit(dto, startTime1, startTime2, endTime1, endTime2);
-//		for (ChargingOrderVO chargingOrderVO : list1) {
-//			if(null == chargingOrderVO.getStatus() || 5 != chargingOrderVO.getStatus()){
-//				continue;
-//			}
-//			List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(chargingOrderVO.getId())).collect(Collectors.toList());
-//			BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-//			BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
-//			BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
-//			electronicMoney = electronicMoney.add(electronic_reduce);
-//			total = total.add(chargingCapacity);
-//			if (!chargingOrderVO.getOrderSource().equals(2)) {
-//				serviceMoney = serviceMoney.add(service_reduce);
-//				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
-//			}else{
-//				serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
-//				paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
-//			}
-//			if (chargingOrderVO.getStartTime()!=null && chargingOrderVO.getEndTime()!=null){
-//				LocalDateTime startTime = chargingOrderVO.getStartTime();
-//				LocalDateTime endTime = chargingOrderVO.getEndTime();
-//				// 计算时间差 单位秒
-//				long between = ChronoUnit.SECONDS.between(startTime, endTime);
-//				time+=between;
-//			}
-////			List<TChargingOrderRefund> list2 = chargingOrderRefunds.stream().filter(e -> e.getChargingOrderId() != null && e.getChargingOrderId().equals(chargingOrderVO.getId()))
-////					.collect(Collectors.toList());
-////			for (TChargingOrderRefund tChargingOrderRefund : list2) {
-////				refundMoney = refundMoney.add(tChargingOrderRefund.getRefundTotalAmount());
-////			}
-//		}
 		if (null != map) {
 			tCharingOrderVO.setTotal(map.get("total") == null ? BigDecimal.ZERO : (BigDecimal) map.get("total"));
 			tCharingOrderVO.setTime(map.get("time") == null ? 0L : (Long) map.get("time"));
@@ -2662,9 +2629,10 @@
 			chargingGun.setStatus(2);
 			chargingGun.setChargingPower(BigDecimal.ZERO);
 			chargingGunClient.updateChargingGunById(chargingGun);
+			chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
 			//推送状态给三方平台
 			if (2 == chargingOrder.getOrderSource()) {
-				tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus());
+				tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 2);
 			}
 			
 			//添加积分
@@ -4104,6 +4072,8 @@
 			AccountingStrategyDetailOrder accountingStrategyDetailOrder = new AccountingStrategyDetailOrder();
 			BeanUtils.copyProperties(tAccountingStrategyDetail, accountingStrategyDetailOrder);
 			accountingStrategyDetailOrder.setChargingOrderId(chargingOrder.getId());
+			accountingStrategyDetailOrder.setCreateTime(LocalDateTime.now());
+			accountingStrategyDetailOrder.setDelFlag(false);
 			list1.add(accountingStrategyDetailOrder);
 		}
 		accountingStrategyDetailOrderService.saveBatch(list1);
@@ -4363,4 +4333,13 @@
 	public List<TChargingOrder> findChargingOrder() {
 		return this.baseMapper.findChargingOrder();
 	}
+
+	/**
+	 * 获取已结束的数据
+	 * @return
+	 */
+	@Override
+	public List<TChargingOrder> findEndChargingOrder() {
+		return this.baseMapper.findEndChargingOrder();
+	}
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
index ab5da09..4529c75 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
@@ -4,24 +4,44 @@
 import com.alibaba.fastjson2.util.UUIDUtils;
 import com.alibaba.nacos.common.utils.UuidUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.account.api.feignClient.AppCouponClient;
+import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.feignClient.AppUserIntegralChangeClient;
+import com.ruoyi.account.api.feignClient.AppUserVipDetailClient;
+import com.ruoyi.account.api.model.TAppCoupon;
+import com.ruoyi.account.api.model.TAppUser;
+import com.ruoyi.account.api.model.TAppUserIntegralChange;
+import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.chargingPile.api.model.TChargingGun;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.integration.api.feignClient.ChargingMessageClient;
+import com.ruoyi.integration.api.feignClient.TCECClient;
 import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
 import com.ruoyi.integration.api.model.TransactionRecord;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.integration.api.vo.ChargingOrderVo;
-import com.ruoyi.order.api.model.TChargingBill;
-import com.ruoyi.order.api.model.TChargingOrder;
-import com.ruoyi.order.api.model.TChargingOrderRefund;
+import com.ruoyi.order.api.model.*;
+import com.ruoyi.order.api.vo.AccountingStrategyDetailOrderVo;
 import com.ruoyi.order.api.vo.TransactionRecordMessageVO;
-import com.ruoyi.order.service.TChargingBillService;
-import com.ruoyi.order.service.TChargingOrderRefundService;
-import com.ruoyi.order.service.TChargingOrderService;
+import com.ruoyi.order.service.*;
 import com.ruoyi.order.util.mongodb.service.TransactionRecordService;
 import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService;
+import com.ruoyi.other.api.domain.TCoupon;
+import com.ruoyi.other.api.domain.TIntegralRule;
+import com.ruoyi.other.api.domain.TVip;
+import com.ruoyi.other.api.feignClient.IntegralRuleClient;
+import com.ruoyi.other.api.feignClient.VipClient;
+import com.ruoyi.payment.api.feignClient.AliPaymentClient;
+import com.ruoyi.payment.api.feignClient.H5AliPaymentClient;
+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 lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.core.util.UuidUtil;
 import org.apache.poi.util.StringUtil;
@@ -33,14 +53,16 @@
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -71,6 +93,42 @@
     private ChargingMessageClient chargingMessageClient;
     
     private Integer port = null;
+    @Resource
+    private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService;
+
+    @Resource
+    private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
+
+    @Resource
+    private AppCouponClient appCouponClient;
+
+    @Resource
+    private TCECClient tcecClient;
+
+    @Resource
+    private VipClient vipClient;
+
+    @Resource
+    private ChargingGunClient chargingGunClient;
+
+    @Resource
+    private IntegralRuleClient integralRuleClient;
+    @Resource
+    private AppUserClient appUserClient;
+
+    @Resource
+    private AppUserIntegralChangeClient appUserIntegralChangeClient;
+
+    @Resource
+    private WxPaymentClient wxPaymentClient;
+
+    @Resource
+    private AliPaymentClient aliPaymentClient;
+    @Resource
+    private H5AliPaymentClient h5AliPaymentClient;
+
+    @Resource
+    private ITChargingOrderSummaryDataService chargingOrderSummaryDataService;
 
 
     //十分钟循环执行的定时任务
@@ -132,6 +190,8 @@
                     BeanUtils.copyProperties(one, vo);
                     R r = chargingOrderService.endChargeBillingCharge(vo);
                     log.info("定时任务执行,停止中的订单处理结果:{}", JSON.toJSONString(r));
+                }else{
+//                    endOrder(order);
                 }
             }
             //处理状态为充电中,但硬件已完成的订单
@@ -155,6 +215,19 @@
                     log.info("定时任务执行,充电中的订单处理结果:{}", JSON.toJSONString(r));
                 }
             }
+            //处理还未退款,但是订单状态已结束的数据
+            List<TChargingOrder> endChargingOrder = chargingOrderService.findEndChargingOrder();
+            log.info("定时任务执行,查询到已结束未退款的订单数量:{}", endChargingOrder.size());
+            for (TChargingOrder order : endChargingOrder) {
+                if(-1 == order.getStatus()){
+                    order.setStatus(2);
+                }
+                if(5 == order.getStatus()){
+                    order.setStatus(4);
+                }
+                chargingOrderService.updateById(order);
+            }
+
         }
     }
     
@@ -285,4 +358,406 @@
         port = event.getWebServer().getPort();
         System.out.println("端口号:" + port);
     }
+
+
+
+    public void endOrder(TChargingOrder order){
+        List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(order.getCode());
+        if(!dataList.isEmpty()){
+            //获取当前订单的计费规则,然后分段计算总的度数和充电金额
+            List<AccountingStrategyDetailOrder> detailOrders = accountingStrategyDetailOrderService.list(new LambdaQueryWrapper<AccountingStrategyDetailOrder>()
+                    .eq(AccountingStrategyDetailOrder::getChargingOrderId, order.getId()).last(" order by start_time"));
+            detailOrders.get(detailOrders.size() - 1).setEndTime("23:59");
+            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
+            //开始解析每个时段的充电度数
+            BigDecimal decimal = BigDecimal.ZERO;
+            //如果使用优惠券需要判断优惠券是否满足使用条件
+            //退款金额=优惠券金额+剩余充电金额
+            BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
+            BigDecimal periodServicePrice_total = BigDecimal.ZERO;
+            BigDecimal vipDiscountAmount_total = BigDecimal.ZERO;
+            BigDecimal serviceCharge_total = BigDecimal.ZERO;
+            BigDecimal total = BigDecimal.ZERO;
+            //判断实时数据是否跨天
+            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
+            Date end_time = dataList.get(0).getCreate_time();
+            String end = sdf2.format(end_time);
+            Date start_time = dataList.get(dataList.size() - 1).getCreate_time();
+            String start = sdf2.format(start_time);
+            if(!end.equals(start)){
+                List<AccountingStrategyDetailOrder> list = detailOrders.stream().map(s->{
+                    AccountingStrategyDetailOrder accountingStrategyDetailOrder = new AccountingStrategyDetailOrder();
+                    BeanUtils.copyProperties(s, accountingStrategyDetailOrder);
+                    return accountingStrategyDetailOrder;
+                }).collect(Collectors.toList());
+                for (AccountingStrategyDetailOrder detailOrder : detailOrders) {
+                    detailOrder.setStartTime(start + " " + detailOrder.getStartTime());
+                    detailOrder.setEndTime(start + " " + detailOrder.getEndTime());
+                }
+                for (AccountingStrategyDetailOrder detailOrder : list) {
+                    detailOrder.setStartTime(end + " " + detailOrder.getStartTime());
+                    detailOrder.setEndTime(end + " " + detailOrder.getEndTime());
+                }
+                detailOrders.addAll(list);
+            }else{
+                for (AccountingStrategyDetailOrder detailOrder : detailOrders) {
+                    detailOrder.setStartTime(start + " " + detailOrder.getStartTime());
+                    detailOrder.setEndTime(start + " " + detailOrder.getEndTime());
+                }
+            }
+
+            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmm");
+            List<TChargingOrderAccountingStrategy> list = new ArrayList<>();
+            for (AccountingStrategyDetailOrder detailOrder : detailOrders) {
+                long startTime = Long.parseLong(detailOrder.getStartTime().replaceAll("-", "").replaceAll(" ", "").replaceAll(":", ""));
+                long endTime = Long.parseLong(detailOrder.getEndTime().replaceAll("-", "").replaceAll(" ", "").replaceAll(":", ""));
+                List<UploadRealTimeMonitoringData> collect = dataList.stream().filter(s -> Long.parseLong(sdf1.format(s.getCreate_time())) > startTime && Long.parseLong(sdf1.format(s.getCreate_time())) <= endTime).collect(Collectors.toList());
+
+                if(!collect.isEmpty()){
+                    //升序排序
+                    collect.sort(new Comparator<UploadRealTimeMonitoringData>(){
+                        @Override
+                        public int compare(UploadRealTimeMonitoringData o1, UploadRealTimeMonitoringData o2) {
+                            return o1.getCharging_degree().compareTo(o2.getCharging_degree());
+                        }
+                    });
+                    UploadRealTimeMonitoringData uploadRealTimeMonitoringData = collect.get(collect.size() - 1);
+                    BigDecimal chargingDegree = uploadRealTimeMonitoringData.getCharging_degree();
+                    BigDecimal subtract = chargingDegree.subtract(decimal);
+                    decimal = chargingDegree;
+                    if(subtract.compareTo(BigDecimal.ZERO) > 0){
+                        //组装充电明细数据
+                        TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
+                        chargingOrderAccountingStrategy.setChargingOrderId(order.getId());
+                        chargingOrderAccountingStrategy.setAccountingStrategyDetailId(detailOrder.getId());
+                        chargingOrderAccountingStrategy.setType(detailOrder.getType());
+                        chargingOrderAccountingStrategy.setElectrovalence(detailOrder.getElectrovalence());
+                        chargingOrderAccountingStrategy.setServiceCharge(detailOrder.getServiceCharge());
+                        chargingOrderAccountingStrategy.setCostServiceCharge(detailOrder.getCostServiceCharge());
+                        chargingOrderAccountingStrategy.setChargingCapacity(subtract);
+                        chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
+
+                        if (list.size() == 0) {
+                            String time = sdf.format(collect.get(0).getCreate_time());
+                            chargingOrderAccountingStrategy.setStartTime(time);
+                        } else {
+                            chargingOrderAccountingStrategy.setStartTime(detailOrder.getStartTime().split(" ")[1]);
+                        }
+                        chargingOrderAccountingStrategy.setEndTime(detailOrder.getEndTime().split(" ")[1]);
+
+                        //已充电总度数
+                        BigDecimal electrovalenc = detailOrder.getElectrovalence().multiply(subtract);
+                        BigDecimal originalServicePrice = detailOrder.getServiceCharge().multiply(subtract);
+                        BigDecimal serviceCharge = originalServicePrice;
+                        BigDecimal vipDiscountAmount = BigDecimal.ZERO;
+                        //计算优惠金额
+                        if (null != order.getVipDiscount()) {
+                            //0.58折
+                            vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(order.getVipDiscount()));
+                            serviceCharge = serviceCharge.multiply(order.getVipDiscount());
+                        }
+                        chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(4, RoundingMode.HALF_EVEN));
+                        chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(4, RoundingMode.HALF_EVEN));
+                        chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(4, RoundingMode.HALF_EVEN));
+                        chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN));
+                        chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
+                        list.add(chargingOrderAccountingStrategy);
+                        //电费
+                        periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
+                        //服务费(含折扣)
+                        serviceCharge_total = serviceCharge_total.add(serviceCharge);
+                        //服务费(不含折扣)
+                        periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
+                        //会员折扣优惠金额
+                        vipDiscountAmount_total = vipDiscountAmount_total.add(vipDiscountAmount);
+                        //原始总金额(不含折扣)
+                        total = total.add(electrovalenc.add(originalServicePrice));
+                    }
+                }
+
+            }
+            list.get(list.size() - 1).setEndTime(sdf.format(dataList.get(0).getCreate_time()));
+            chargingOrderAccountingStrategyService.saveBatch(list);
+
+            BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
+            //原金额
+            BigDecimal rechargeAmount = order.getRechargeAmount();
+            //支付金额
+            BigDecimal payAmount = periodElectricPrice_total.add(serviceCharge_total);
+            //退款金额=充值金额-实际支付金额
+            BigDecimal refundAmount = rechargeAmount.subtract(payAmount);
+
+            UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(order.getCode());
+            if (null != uploadRealTimeMonitoringData && null == order.getEndMode()) {
+                Integer soc = uploadRealTimeMonitoringData.getSoc();
+                if (soc >= 98) {
+                    order.setEndMode(2);
+                } else if (null != order.getResidualAmount() && order.getResidualAmount().compareTo(new BigDecimal(1)) <= 0) {
+                    order.setEndMode(3);
+                } else {
+                    order.setEndMode(1);
+                }
+            }
+
+            order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
+            order.setStartTime(list.get(0).getCreateTime());
+            order.setEndTime(list.get(list.size() - 1).getCreateTime());
+            order.setStatus(5);
+            order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
+            order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
+            order.setChargingCapacity(list.get(list.size() - 1).getChargingCapacity());
+            order.setElectricity(list.get(list.size() - 1).getChargingCapacity());
+            order.setVipDiscountAmount(vipDiscountAmount_total);
+            if (vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0) {
+                order.setVipDiscount(BigDecimal.valueOf(1));
+            }
+
+            //计算优惠券
+            BigDecimal couponDiscount = BigDecimal.ZERO;
+            if (null != order.getAppCouponId()) {
+                //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。
+                TAppCoupon appCoupon = appCouponClient.getAppCouponById(order.getAppCouponId()).getData();
+                String couponJson = appCoupon.getCouponJson();
+                TCoupon tCoupon = com.alibaba.fastjson2.JSON.parseObject(couponJson, TCoupon.class);
+                Integer preferentialMode = tCoupon.getPreferentialMode();
+                if (1 == preferentialMode) {
+                    //满减
+                    if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) {
+                        BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
+                        //如果优惠金额大于服务费金额,以服务费作为最大限制
+                        if (serviceCharge_total.compareTo(couponDiscountAmount) < 0) {
+                            couponDiscount = serviceCharge_total;
+                            serviceCharge_total = BigDecimal.ZERO;
+                        } else {
+                            couponDiscount = couponDiscountAmount;
+                        }
+                        appCoupon.setStatus(2);
+                        appCouponClient.updateAppCoupon(appCoupon);
+                    } else {
+                        appCouponClient.refund(order.getAppCouponId().toString());
+                        order.setAppCouponId(null);
+                        order.setCouponDiscountAmount(BigDecimal.ZERO);
+                    }
+                }
+                if (2 == preferentialMode) {
+                    //抵扣
+                    if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) {
+                        //折扣金额
+                        BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10));
+                        divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
+                        //如果优惠金额大于服务费金额,以服务费作为最大限制
+                        if (serviceCharge_total.compareTo(divide) < 0) {
+                            couponDiscount = serviceCharge_total;
+                            serviceCharge_total = BigDecimal.ZERO;
+                        } else {
+                            couponDiscount = divide;
+                        }
+
+                        appCoupon.setStatus(2);
+                        appCouponClient.updateAppCoupon(appCoupon);
+                    } else {
+                        order.setAppCouponId(null);
+                        order.setCouponDiscountAmount(BigDecimal.ZERO);
+                        appCouponClient.refund(order.getAppCouponId().toString());
+                    }
+                }
+            }
+            //优惠券优惠金额
+            couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN);
+            //退款金额+优惠券
+            refundAmount = refundAmount.add(couponDiscount);
+            //实际支付金额-优惠券
+            payAmount = payAmount.subtract(couponDiscount);
+            if (serviceCharge_total.compareTo(BigDecimal.ZERO) > 0) {
+                serviceCharge_total = serviceCharge_total.subtract(couponDiscount);
+            }
+            order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
+            order.setServiceCharge(serviceCharge_total.setScale(2, RoundingMode.HALF_EVEN));
+            order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
+            order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
+            order.setRefundStatus(1);
+            chargingOrderService.updateById(order);
+
+            order = chargingOrderService.getById(order.getId());
+
+            //推送三方平台
+            if (2 == order.getOrderSource()) {
+                TChargingOrder finalChargingOrder = order;
+                new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        tcecClient.notificationEquipChargeStatus(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId());
+                        tcecClient.notificationStopChargeResult(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getChargingGunId().toString(),
+                                finalChargingOrder.getOperatorId());
+                        tcecClient.notificationChargeOrderInfo(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId());
+                    }
+                }).start();
+            }
+
+            //开始将优惠券优惠的金额添加到明细中
+            BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
+            if (null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0) {
+                List<TChargingOrderAccountingStrategy> list1 = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
+                BigDecimal reduce = list1.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list1) {
+                    BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
+                    BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN)));
+                    periodServicePrice = periodServicePrice.subtract(multiply);
+                    chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.HALF_EVEN));
+                    chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.HALF_EVEN));
+                }
+                chargingOrderAccountingStrategyService.updateBatchById(list1);
+            }
+
+            // 将枪状态重置为空闲
+            TChargingGun chargingGun = new TChargingGun();
+            chargingGun.setId(order.getChargingGunId());
+            chargingGun.setStatus(2);
+            chargingGun.setChargingPower(BigDecimal.ZERO);
+            chargingGunClient.updateChargingGunById(chargingGun);
+            chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
+            //推送状态给三方平台
+            if (2 == order.getOrderSource()) {
+                tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), 2);
+            }
+
+            //添加积分
+            if (1 == order.getOrderSource()) {
+                TIntegralRule integralRule = integralRuleClient.getSet().getData();
+                if (null != integralRule) {
+                    TAppUser appUser = appUserClient.getUserById(order.getAppUserId()).getData();
+                    Integer num1 = com.alibaba.fastjson2.JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
+                    Integer integral = order.getServiceCharge().intValue() * num1;
+                    if (null != appUser.getVipId()) {
+                        TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+                        Integer doubleIntegration = vip.getDoubleIntegration();
+                        //双倍积分
+                        if (1 == doubleIntegration) {
+                            integral *= 2;
+                        }
+                    }
+
+                    if (integral > 0) {
+                        TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
+                        appUserIntegralChange.setAppUserId(appUser.getId());
+                        appUserIntegralChange.setChangeType(2);
+                        appUserIntegralChange.setHistoricalIntegral(appUser.getPoints());
+                        appUser.setPoints(appUser.getPoints() + integral);
+                        appUserIntegralChange.setCurrentIntegral(appUser.getPoints());
+                        appUserIntegralChange.setCreateTime(LocalDateTime.now());
+                        appUserIntegralChange.setOrderCode(order.getCode());
+                        appUserIntegralChange.setExtension(order.getId().toString());
+                        appUserClient.updateAppUser(appUser);
+                        appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
+                    }
+                }
+
+                //计算用户标签
+                chargingOrderService.editUserTag(order);
+                //用户推荐奖励
+                chargingOrderService.referralReward(order);
+
+                //开始构建退款费用
+                refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
+                if (refundAmount.compareTo(BigDecimal.ZERO) > 0) {
+                    Integer rechargePaymentType = order.getRechargePaymentType();
+                    //构建退款明细
+                    TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
+                    chargingOrderRefund.setChargingOrderId(order.getId());
+                    SimpleDateFormat sdfaa = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+                    chargingOrderRefund.setRefundCode("CDF" + sdfaa.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+                    chargingOrderRefund.setRefundAmount(refundAmount);
+                    chargingOrderRefund.setRefundStatus(1);
+                    chargingOrderRefund.setPayType(rechargePaymentType);
+                    chargingOrderRefund.setRefundStatus(1);
+                    chargingOrderRefund.setCode(order.getCode());
+                    chargingOrderRefund.setRefundTitle("充电完成退款");
+                    chargingOrderRefund.setRefundContent("充电完成退款");
+                    chargingOrderRefund.setRefundReason("充电完成退款");
+                    chargingOrderRefund.setRefundRemark("实际充电消费金额:" + order.getPaymentAmount());
+                    chargingOrderRefund.setRefundTotalAmount(refundAmount);
+                    chargingOrderRefund.setPayAmount(rechargeAmount);
+                    if (1 == rechargePaymentType) {
+                        WxPaymentRefundModel model = new WxPaymentRefundModel();
+                        model.setOut_trade_no(order.getCode());
+                        model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+                        model.setReason("充电完成退款");
+                        model.setNotify_url("/payment/wx/refund/notify");
+                        WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+                        amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
+                        amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+                        amount.setCurrency("CNY");
+                        model.setAmount(amount);
+                        R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model);
+                        if (200 == result.getCode()) {
+                            chargingOrderRefundService.save(chargingOrderRefund);
+                            //手续费
+                            Map<String, Object> amount1 = (Map<String, Object>) result.getData().get("amount");
+                            Object refund_fee1 = amount1.get("refund_fee");
+                            BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+                            chargingOrderRefund.setRefundFee(refund_fee);
+                            chargingOrderRefundService.updateById(chargingOrderRefund);
+                        }
+                    }
+                    if (2 == rechargePaymentType) {
+                        RefundReq dto = new RefundReq();
+                        dto.setOutTradeNo(order.getCode());
+                        dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
+                        dto.setRefundAmount(refundAmount.toString());
+                        dto.setRefundReason("充电完成退款");
+                        RefundResp resp = aliPaymentClient.refund(dto).getData();
+                        if (null != resp) {
+                            chargingOrderRefundService.save(chargingOrderRefund);
+                            chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+                        }
+                    }
+                    if (3 == rechargePaymentType) {
+                        RefundReq dto = new RefundReq();
+                        dto.setOutTradeNo(order.getRechargeSerialNumber());
+                        dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
+                        dto.setRefundAmount(refundAmount.toString());
+                        dto.setRefundReason("充电完成退款");
+                        RefundResp resp = h5AliPaymentClient.refund(dto).getData();
+                        if (null != resp && "10000".equals(resp.getCode())) {
+                            chargingOrderRefundService.save(chargingOrderRefund);
+                            chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+                        }
+                    }
+                }
+            }
+
+            //添加汇总统计数据
+            List<TChargingOrderAccountingStrategy> list4 = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>().eq("charging_order_id", order.getId()));
+            BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal serviceMoney = BigDecimal.ZERO;
+            BigDecimal paymentMoney = BigDecimal.ZERO;
+            long time = 0;
+            if (!order.getOrderSource().equals(2)) {
+                serviceMoney = serviceMoney.add(service_reduce);
+                paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
+            } else {
+                serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
+                paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+            }
+            if (order.getStartTime() != null && order.getEndTime() != null) {
+                time = ChronoUnit.SECONDS.between(order.getStartTime(), order.getEndTime());
+            }
+            TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
+            summaryData.setChargingOrderId(order.getId());
+            summaryData.setChargingCapacity(chargingCapacity);
+            summaryData.setChargingDuration(time);
+            summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+            summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+            summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+            chargingOrderSummaryDataService.save(summaryData);
+
+            //推送监管平台订单状态和订单详情
+            ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
+            BeanUtils.copyProperties(order, chargingOrderVo);
+            chargingMessageClient.pushOrderInfo(chargingOrderVo);
+            chargingMessageClient.pushOrderStatus(chargingOrderVo);
+        }
+    }
 }
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 1b5d62a..2ebb895 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
@@ -4,57 +4,62 @@
 
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.ruoyi.order.api.model.TChargingOrder">
-        <id column="id" property="id" />
-        <result column="code" property="code" />
-        <result column="order_type" property="orderType" />
-        <result column="order_classification" property="orderClassification" />
-        <result column="app_user_id" property="appUserId" />
-        <result column="app_user_car_id" property="appUserCarId" />
-        <result column="site_id" property="siteId" />
-        <result column="parking_lot_id" property="parkingLotId" />
-        <result column="charging_pile_id" property="chargingPileId" />
-        <result column="charging_gun_id" property="chargingGunId" />
+        <id column="id" property="id"/>
+        <result column="code" property="code"/>
+        <result column="order_type" property="orderType"/>
+        <result column="order_classification" property="orderClassification"/>
+        <result column="app_user_id" property="appUserId"/>
+        <result column="app_user_car_id" property="appUserCarId"/>
+        <result column="site_id" property="siteId"/>
+        <result column="parking_lot_id" property="parkingLotId"/>
+        <result column="charging_pile_id" property="chargingPileId"/>
+        <result column="charging_gun_id" property="chargingGunId"/>
         <result column="charging_capacity" property="chargingCapacity"/>
         <result column="charging_power" property="chargingPower"/>
-        <result column="start_time" property="startTime" />
-        <result column="end_time" property="endTime" />
-        <result column="status" property="status" />
+        <result column="start_time" property="startTime"/>
+        <result column="end_time" property="endTime"/>
+        <result column="status" property="status"/>
         <result column="end_mode" property="endMode"/>
-        <result column="recharge_amount" property="rechargeAmount" />
-        <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" />
-        <result column="vip_discount" property="vipDiscount" />
-        <result column="vip_discount_amount" property="vipDiscountAmount" />
-        <result column="payment_amount" property="paymentAmount" />
-        <result column="refund_code" property="refundCode" />
-        <result column="refund_amount" property="refundAmount" />
-        <result column="refund_status" property="refundStatus" />
-        <result column="refund_serial_number" property="refundSerialNumber" />
-        <result column="refund_time" property="refundTime" />
-        <result column="need_elec" property="needElec" />
-        <result column="create_time" property="createTime" />
-        <result column="del_flag" property="delFlag" />
-        <result column="total_electricity" property="totalElectricity" />
+        <result column="recharge_amount" property="rechargeAmount"/>
+        <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"/>
+        <result column="vip_discount" property="vipDiscount"/>
+        <result column="vip_discount_amount" property="vipDiscountAmount"/>
+        <result column="payment_amount" property="paymentAmount"/>
+        <result column="refund_code" property="refundCode"/>
+        <result column="refund_amount" property="refundAmount"/>
+        <result column="refund_status" property="refundStatus"/>
+        <result column="refund_serial_number" property="refundSerialNumber"/>
+        <result column="refund_time" property="refundTime"/>
+        <result column="need_elec" property="needElec"/>
+        <result column="create_time" property="createTime"/>
+        <result column="del_flag" property="delFlag"/>
+        <result column="total_electricity" property="totalElectricity"/>
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, code, order_type, order_classification, app_user_id, app_user_car_id,site_id, parking_lot_id, charging_pile_id, charging_gun_id,
-            start_time, end_time, status, recharge_amount, recharge_payment_type, recharge_payment_status, recharge_serial_number,
-            order_amount, app_coupon_id, coupon_discount_amount, vip_discount, vip_discount_amount, payment_amount, refund_code,
-            refund_amount, refund_status, refund_serial_number, refund_time, create_time, del_flag,need_elec,total_electricity
+        id, code, order_type, order_classification, app_user_id, app_user_car_id,site_id, parking_lot_id,
+        charging_pile_id, charging_gun_id,
+        start_time, end_time, status, recharge_amount, recharge_payment_type, recharge_payment_status,
+        recharge_serial_number,
+        order_amount, app_coupon_id, coupon_discount_amount, vip_discount, vip_discount_amount, payment_amount,
+        refund_code,
+        refund_amount, refund_status, refund_serial_number, refund_time, create_time,
+        del_flag,need_elec,total_electricity
     </sql>
 
-    
+
     <select id="getMyChargingOrderList" resultMap="BaseResultMap">
         select * from t_charging_order where del_flag = 0 and app_user_id = #{appUserId} and recharge_payment_status = 2
         <if test="1 == type">
-            and id not in (select order_id from t_order_evaluate where order_type = 1 and app_user_id = #{appUserId} and del_flag = 0)
+            and id not in (select order_id from t_order_evaluate where order_type = 1 and app_user_id = #{appUserId} and
+            del_flag = 0)
         </if>
         order by create_time desc
         <if test="null != pageCurr and null != pageSize">
@@ -62,7 +67,8 @@
         </if>
     </select>
     <select id="getNoInvoicedOrder" resultMap="BaseResultMap">
-        select * from t_charging_order where del_flag = 0 and status = 5 and recharge_payment_status = 2 and payment_amount is not null and app_user_id = #{appUserId}
+        select * from t_charging_order where del_flag = 0 and status = 5 and recharge_payment_status = 2 and
+        payment_amount is not null and app_user_id = #{appUserId}
         <if test="null != month and '' != month">
             and DATE_FORMAT(end_time, '%Y-%m') = #{month}
         </if>
@@ -78,15 +84,15 @@
         from t_charging_order t1
         where t1.del_flag = 0
         <if test="null != req.code and req.code!=''">
-            and t1.code  LIKE CONCAT('%',#{req.code},'%')
+            and t1.code LIKE CONCAT('%',#{req.code},'%')
         </if>
-        <if test="null != req.userIds and req.userIds.size()>0" >
+        <if test="null != req.userIds and req.userIds.size()>0">
             and t1.app_user_id in
             <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
                 #{item}
             </foreach>
         </if>
-        <if test="null != req.siteIds and req.siteIds.size()>0" >
+        <if test="null != req.siteIds and req.siteIds.size()>0">
             and t1.site_id in
             <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
                 #{item}
@@ -126,7 +132,8 @@
         order by t1.create_time desc
     </select>
     <select id="payOrderQuery" resultType="com.ruoyi.order.dto.PayOrderDto">
-        SELECT o.*,i.phone FROM (SELECT
+        SELECT o.*,i.phone FROM (
+        SELECT
         a.id,
         a.`code`,
         1 as type,
@@ -145,7 +152,9 @@
         charging_pile_order.t_charging_order a
         left join charging_pile_order.t_charging_order_refund b on (b.charging_order_id = a.id)
         where a.recharge_payment_status = 2
+
         UNION ALL
+
         SELECT
         a.id,
         a.`code`,
@@ -165,7 +174,9 @@
         charging_pile_order.t_shopping_order a
         left join charging_pile_order.t_shopping_order_refund b on (b.shopping_order_id = a.id)
         where a.payment_status = 2
+
         UNION ALL
+
         SELECT
         a.id,
         a.`code`,
@@ -185,7 +196,9 @@
         charging_pile_order.t_vip_order a
         left join charging_pile_order.t_vip_order_refund b on (a.id = b.vip_order_id)
         where a.payment_status = 2
+
         UNION ALL
+
         SELECT
         id,
         `code`,
@@ -202,105 +215,105 @@
         0 as del_flag,
         app_user_id
         FROM
-        charging_pile_service.t_parking_record ) o
-        LEFT JOIN  `charging_pile_account`.`t_app_user` i on o.app_user_id = i.id
-                <where>
-                    o.del_flag = 0
+        charging_pile_service.t_parking_record
+        ) o
+        LEFT JOIN `charging_pile_account`.`t_app_user` i on o.app_user_id = i.id
+        <where>
+            o.del_flag = 0
+            <if test="data.code != null and data.code != ''">
+                AND o.code LIKE CONCAT('%',#{data.code},'%')
+            </if>
+            <if test="data.phone != null and data.phone != ''">
+                AND i.phone LIKE CONCAT('%',#{data.phone},'%')
+            </if>
+            <if test="data.type != null">
+                AND o.type = #{data.type}
+            </if>
+            <if test="data.createTime1 != null">
+                AND o.create_time &gt;= #{data.createTime1}
+            </if>
+            <if test="data.createTime2 != null">
+                AND o.create_time &lt;= #{data.createTime2}
+            </if>
+            <if test="data.ids != null and data.ids.size() > 0">
+                AND o.id IN
+                <foreach collection="data.ids" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
+            <if test="data.isRefund == 1">
+                AND o.refund_status is not null
+            </if>
+            <if test="data.isRefund == 2">
+                AND o.refund_status is null
+            </if>
 
-                    <if test="data.code != null and data.code != ''">
-                        AND o.code LIKE CONCAT('%',#{data.code},'%')
-                    </if>
-                    <if test="data.phone != null and data.phone != ''">
-                        AND i.phone LIKE CONCAT('%',#{data.phone},'%')
-                    </if>
-                    <if test="data.type != null">
-                        AND o.type = #{data.type}
-                    </if>
-                    <if test="data.createTime1 != null">
-                        AND o.create_time &gt;= #{data.createTime1}
-                    </if>
-                    <if test="data.createTime2 != null">
-                        AND o.create_time &lt;= #{data.createTime2}
-                    </if>
-                    <if test="data.ids != null and data.ids.size() > 0">
-                        AND o.id IN
-                        <foreach collection="data.ids" item="id" open="(" separator="," close=")">
-                            #{id}
-                        </foreach>
-                    </if>
-                    <if test="data.isRefund == 1">
-                        AND o.refund_status is not null
-                    </if>
-                    <if test="data.isRefund == 2">
-                        AND o.refund_status is null
-                    </if>
-
-                </where>
+        </where>
         ORDER BY o.create_time desc
 
     </select>
     <select id="getRefundList" resultType="com.ruoyi.order.api.model.TChargingOrderRefund">
         select * from (
         SELECT
-            re.id,
-            re.`code`,
-            re.refund_code,
-            re.refund_title,
-            re.refund_reason,
-            re.refund_amount,
-            re.refund_total_amount,
-            re.refund_time,
-            re.pay_type,
-            re.pay_amount,
-            re.refund_remark,
-            co.recharge_serial_number as serail_number,
-            co.payment_amount,
-            co.create_time as pay_time,
-            co.id as order_id,
-            co.app_user_id as user_id,
-            1 as type
+        re.id,
+        re.`code`,
+        re.refund_code,
+        re.refund_title,
+        re.refund_reason,
+        re.refund_amount,
+        re.refund_total_amount,
+        re.refund_time,
+        re.pay_type,
+        re.pay_amount,
+        re.refund_remark,
+        co.recharge_serial_number as serail_number,
+        co.payment_amount,
+        co.create_time as pay_time,
+        co.id as order_id,
+        co.app_user_id as user_id,
+        1 as type
         FROM t_charging_order_refund re
-        LEFT JOIN t_charging_order  co ON re.charging_order_id = co.id
+        LEFT JOIN t_charging_order co ON re.charging_order_id = co.id
         UNION ALL
         SELECT
-            re.id,
-            re.`code`,
-            re.refund_code,
-            re.refund_title,
-            re.refund_reason,
-            re.refund_amount,
-            re.refund_total_amount,
-            re.refund_time,
-            re.pay_type,
-            re.pay_amount,
-            re.refund_remark,
-            so.serial_number,
-            so.payment_amount,
-            so.create_time as pay_time,
-            so.id as order_id,
-            so.app_user_id as user_id,
-            2 as type
+        re.id,
+        re.`code`,
+        re.refund_code,
+        re.refund_title,
+        re.refund_reason,
+        re.refund_amount,
+        re.refund_total_amount,
+        re.refund_time,
+        re.pay_type,
+        re.pay_amount,
+        re.refund_remark,
+        so.serial_number,
+        so.payment_amount,
+        so.create_time as pay_time,
+        so.id as order_id,
+        so.app_user_id as user_id,
+        2 as type
         FROM t_shopping_order_refund re
         LEFT JOIN t_shopping_order so on re.shopping_order_id = so.id
         UNION ALL
         SELECT
-            vr.id,
-            vr.`code`,
-            vr.refund_code,
-            vr.refund_title,
-            vr.refund_reason,
-            vr.refund_amount,
-            vr.refund_total_amount,
-            vr.refund_time,
-            vr.pay_type,
-            vr.pay_amount,
-            vr.refund_remark,
-            vo.serial_number,
-            vo.payment_amount,
-            vo.create_time as pay_time,
-            vo.id as order_id,
-            vo.app_user_id as user_id,
-            3 as type
+        vr.id,
+        vr.`code`,
+        vr.refund_code,
+        vr.refund_title,
+        vr.refund_reason,
+        vr.refund_amount,
+        vr.refund_total_amount,
+        vr.refund_time,
+        vr.pay_type,
+        vr.pay_amount,
+        vr.refund_remark,
+        vo.serial_number,
+        vo.payment_amount,
+        vo.create_time as pay_time,
+        vo.id as order_id,
+        vo.app_user_id as user_id,
+        3 as type
         FROM t_vip_order_refund vr
         LEFT JOIN t_vip_order vo on vr.vip_order_id = vo.id
         ) o
@@ -316,7 +329,7 @@
 
     </select>
     <select id="chargingOrderGroup" resultType="com.ruoyi.common.core.dto.ChargingOrderGroup">
-        SELECT SUM(tc.charging_capacity) as  charging_capacity,tc.site_id
+        SELECT SUM(tc.charging_capacity) as charging_capacity,tc.site_id
         FROM t_charging_order tc
         left join `charging_pile_service`.`t_site` ts on tc.site_id = ts.id
         <where>
@@ -339,12 +352,11 @@
         GROUP BY site_id
 
 
-
     </select>
     <select id="charge" resultType="com.ruoyi.order.dto.SixChargingDto">
         SELECT
         DATE_FORMAT( subquery.create_time, '%m' ) AS MONTH,
-	    SUM(electrovalence) AS electrovalence,
+        SUM(electrovalence) AS electrovalence,
         SUM(
         CASE
         WHEN subquery.order_source = 0 THEN subquery.service_charge
@@ -354,30 +366,32 @@
         ) AS service_charge
 
         FROM
-            (
-            SELECT
-            a.create_time,
-            b.period_electric_price as electrovalence,
-            b.period_service_price as service_charge,
-            a.order_source
-            FROM
-            t_charging_order a
-            left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
-            <where>
-                a.del_flag = 0 and a.recharge_payment_status = 2 and a.status = 5
-                <if test="sixBefore != null">
-                    AND a.create_time &gt;= #{sixBefore}
-                </if>
-                <if test="siteIds != null and siteIds.size() > 0">
-                    AND a.site_id IN
-                    <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
-                        #{siteId}
-                    </foreach>
-                </if>
-            </where>
-            ) AS subquery
+        (
+        SELECT
+        a.create_time,
+        b.period_electric_price as electrovalence,
+        b.period_service_price as service_charge,
+        a.order_source
+        FROM
+        t_charging_order a
+        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
+        sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money
+        from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
+        <where>
+            a.del_flag = 0 and a.recharge_payment_status = 2 and a.status = 5
+            <if test="sixBefore != null">
+                AND a.create_time &gt;= #{sixBefore}
+            </if>
+            <if test="siteIds != null and siteIds.size() > 0">
+                AND a.site_id IN
+                <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+                    #{siteId}
+                </foreach>
+            </if>
+        </where>
+        ) AS subquery
         GROUP BY
-            DATE_FORMAT( subquery.create_time, '%m' )
+        DATE_FORMAT( subquery.create_time, '%m' )
 
 
     </select>
@@ -391,7 +405,9 @@
         END), 2) AS paymentAmount
         FROM
         t_charging_order a
-        left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
+        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
+        sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money
+        from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
         <where>
             a.del_flag = 0 and a.recharge_payment_status = 2 and a.status = 5
             <if test="siteIds != null and siteIds.size() > 0">
@@ -409,7 +425,9 @@
 
     </select>
     <select id="countAll" resultType="java.util.Map">
-        select sum(electrovalence) as electrovalence,sum(service_charge) as service_charge,ROUND(sum(electrovalence+service_charge) * 0.006, 2) as commission_amount,sum(sharing_amount) as sharing_amount
+        select sum(electrovalence) as electrovalence,sum(service_charge) as
+        service_charge,ROUND(sum(electrovalence+service_charge) * 0.006, 2) as commission_amount,sum(sharing_amount) as
+        sharing_amount
         from t_charging_order
         where del_flag = 0 and recharge_payment_status = 2 and status = 5
         <if test="siteIds != null and siteIds.size() > 0">
@@ -440,7 +458,8 @@
         FROM
         t_charging_order_accounting_strategy t1
         LEFT JOIN t_charging_order t2 on t1.charging_order_id = t2.id
-        where t2.del_flag = 0 and t2.status = 5 and t2.recharge_payment_status = 2 and t2.create_time between #{start} and #{end}
+        where t2.del_flag = 0 and t2.status = 5 and t2.recharge_payment_status = 2 and t2.create_time between #{start}
+        and #{end}
         <if test="null != siteIds and siteIds.size() > 0">
             and t2.site_id in
             <foreach collection="siteIds" separator="," open="(" close=")" item="item" index="index">
@@ -468,9 +487,11 @@
         count(1) as orderCount
         FROM
         t_charging_order a
-        left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
+        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
+        sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money
+        from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
         <where>
-            a.del_flag = 0 and a.status = 5  and a.recharge_payment_status = 2  and DATE(a.create_time) = CURDATE()
+            a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE(a.create_time) = CURDATE()
             and a.create_time between #{start} and #{end}
             <if test="null != siteIds and siteIds.size() > 0">
                 and a.site_id in
@@ -480,9 +501,9 @@
             </if>
         </where>
         GROUP BY
-            time
+        time
         ORDER BY
-            time
+        time
 
     </select>
     <select id="getWeekData" resultType="java.util.Map">
@@ -503,9 +524,12 @@
         count(1) as orderCount
         FROM
         t_charging_order a
-        left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
+        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
+        sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money
+        from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
         <where>
-            a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2  and YEARWEEK(DATE_FORMAT(a.create_time, '%Y-%m-%d'), 1) = YEARWEEK(NOW(), 1)
+            a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and YEARWEEK(DATE_FORMAT(a.create_time,
+            '%Y-%m-%d'), 1) = YEARWEEK(NOW(), 1)
             and a.create_time between #{start} and #{end}
             <if test="null != siteIds and siteIds.size() > 0">
                 and a.site_id in
@@ -538,9 +562,12 @@
         count(1) as orderCount
         FROM
         t_charging_order a
-        left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
+        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
+        sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money
+        from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
         <where>
-            a.del_flag = 0 and a.status = 5  and a.recharge_payment_status = 2  and MONTH(a.create_time) = MONTH(NOW())  AND YEAR(a.create_time) = YEAR(NOW())
+            a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and MONTH(a.create_time) = MONTH(NOW())
+            AND YEAR(a.create_time) = YEAR(NOW())
             and a.create_time between #{start} and #{end}
             <if test="null != siteIds and siteIds.size() > 0">
                 and a.site_id in
@@ -573,9 +600,11 @@
         count(1) as orderCount
         FROM
         t_charging_order a
-        left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
+        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
+        sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money
+        from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
         <where>
-            a.del_flag = 0 and a.status = 5  and a.recharge_payment_status = 2  and YEAR(a.create_time) = YEAR(NOW())
+            a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and YEAR(a.create_time) = YEAR(NOW())
             and a.create_time between #{start} and #{end}
             <if test="null != siteIds and siteIds.size() > 0">
                 and a.site_id in
@@ -607,9 +636,11 @@
         count(1) as orderCount
         FROM
         t_charging_order a
-        left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
+        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
+        sum(period_service_price) as period_service_price, sum(period_electric_price + period_service_price) as money
+        from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
         <where>
-            a.del_flag = 0 and a.status = 5  and a.recharge_payment_status = 2
+            a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2
             and a.create_time between #{start} and #{end}
             <if test="null != siteIds and siteIds.size() > 0">
                 and a.site_id in
@@ -626,15 +657,15 @@
     </select>
     <select id="queryPower" resultType="java.util.Map">
         SELECT
-            'today' AS data_type,
-            DATE_FORMAT(create_time, '%H') AS TIME,
-    SUM(power) AS power
+        'today' AS data_type,
+        DATE_FORMAT(create_time, '%H') AS TIME,
+        SUM(power) AS power
         FROM
-            t_charging_order
+        t_charging_order
         WHERE
-            del_flag = 0
-          AND recharge_payment_status = 2
-          AND DATE(create_time) = CURDATE()
+        del_flag = 0
+        AND recharge_payment_status = 2
+        AND DATE(create_time) = CURDATE()
         <if test="siteIds != null and siteIds.size() > 0">
             AND site_id IN
             <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
@@ -642,20 +673,20 @@
             </foreach>
         </if>
         GROUP BY
-            TIME
+        TIME
 
         UNION ALL
 
         SELECT
-            'yesterday' AS data_type,
-            DATE_FORMAT(create_time, '%H') AS TIME,
-    SUM(power) AS power
+        'yesterday' AS data_type,
+        DATE_FORMAT(create_time, '%H') AS TIME,
+        SUM(power) AS power
         FROM
-            t_charging_order
+        t_charging_order
         WHERE
-            del_flag = 0
-          AND recharge_payment_status = 2
-          AND DATE(create_time) = CURDATE() - INTERVAL 1 DAY
+        del_flag = 0
+        AND recharge_payment_status = 2
+        AND DATE(create_time) = CURDATE() - INTERVAL 1 DAY
         <if test="siteIds != null and siteIds.size() > 0">
             AND site_id IN
             <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
@@ -663,10 +694,10 @@
             </foreach>
         </if>
         GROUP BY
-            TIME
+        TIME
 
         ORDER BY
-            TIME;
+        TIME;
 
 
     </select>
@@ -678,10 +709,10 @@
         SUM(CASE WHEN power BETWEEN 121 AND 300 THEN 1 ELSE 0 END) AS count_121_300,
         SUM(CASE WHEN power > 300 THEN 1 ELSE 0 END) AS count_above_300
         FROM
-            t_charging_order
+        t_charging_order
         WHERE
-            del_flag = 0
-          AND recharge_payment_status = 2
+        del_flag = 0
+        AND recharge_payment_status = 2
         <if test="siteIds != null and siteIds.size() > 0">
             AND site_id IN
             <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
@@ -698,7 +729,7 @@
             AND MONTH(create_time) = MONTH(CURDATE())
         </if>
         <if test="statisticsQueryDto.dayType ==4">
-           AND YEAR(create_time) = YEAR(CURDATE())
+            AND YEAR(create_time) = YEAR(CURDATE())
         </if>
         <if test="statisticsQueryDto.dayType ==5">
 
@@ -714,31 +745,31 @@
 
         SELECT
 
-            DATE_FORMAT( create_time, '%H:00' ) AS time,
-	count(1) AS counts
+        DATE_FORMAT( create_time, '%H:00' ) AS time,
+        count(1) AS counts
         FROM
-            charging_pile_account.t_app_user
+        charging_pile_account.t_app_user
         WHERE
-            del_flag = 0
-          AND DATE ( create_time ) = CURDATE()
+        del_flag = 0
+        AND DATE ( create_time ) = CURDATE()
         GROUP BY
-            time
+        time
     </select>
 
 
     <select id="usersDay1" resultType="java.util.Map">
         SELECT
-            'today' AS data_type,
-            '1' as type,
-            DATE_FORMAT( create_time, '%H:00' ) AS time,
-        count(DISTINCT  app_user_id) AS counts
+        'today' AS data_type,
+        '1' as type,
+        DATE_FORMAT( create_time, '%H:00' ) AS time,
+        count(DISTINCT app_user_id) AS counts
         FROM
-            t_charging_order
+        t_charging_order
         WHERE
-            del_flag = 0
-          AND DATE ( create_time ) = CURDATE()
+        del_flag = 0
+        AND DATE ( create_time ) = CURDATE()
         GROUP BY
-            time
+        time
     </select>
 
     <select id="usersByQuery1" resultType="java.util.Map">
@@ -747,7 +778,7 @@
         'today' AS data_type,
         '1' as type,
         DATE_FORMAT( create_time, '%Y-%m-%d' ) AS time,
-        count(DISTINCT  app_user_id) AS counts
+        count(DISTINCT app_user_id) AS counts
         FROM
         t_charging_order
         WHERE
@@ -783,12 +814,12 @@
 
         SELECT
 
-            DATE_FORMAT( create_time, '%Y-%m-%d' ) AS time,
-	count(1) AS counts
+        DATE_FORMAT( create_time, '%Y-%m-%d' ) AS time,
+        count(1) AS counts
         FROM
-            charging_pile_account.t_app_user
+        charging_pile_account.t_app_user
         WHERE
-            del_flag = 0
+        del_flag = 0
         <if test="statisticsQueryDto.dayType ==1 ">
             AND DATE(create_time) = CURDATE()
         </if>
@@ -810,51 +841,52 @@
             </if>
         </if>
         GROUP BY
-            time
+        time
 
 
     </select>
     <select id="getUserTagCount" resultType="java.util.Map">
         SELECT
-            tt.`name`,
-            COUNT( 1 ) AS count
+        tt.`name`,
+        COUNT( 1 ) AS count
         FROM
-            (
-            SELECT
-            a.app_user_id,
-            a.user_tag_id,
-            a.create_time
-            FROM
-            charging_pile_account.t_app_user_tag a
-            JOIN ( SELECT app_user_id, MAX( create_time ) AS max_create_time FROM charging_pile_account.t_app_user_tag GROUP BY app_user_id ) b ON a.app_user_id = b.app_user_id
-            AND a.create_time = b.max_create_time
-            LEFT JOIN `charging_pile_other`.`t_user_tag` ct on a.user_tag_id = ct.id
-            WHERE ct.del_flag = 0
-            ) o
-            LEFT JOIN `charging_pile_other`.`t_user_tag` tt on o.user_tag_id = tt.id
+        (
+        SELECT
+        a.app_user_id,
+        a.user_tag_id,
+        a.create_time
+        FROM
+        charging_pile_account.t_app_user_tag a
+        JOIN ( SELECT app_user_id, MAX( create_time ) AS max_create_time FROM charging_pile_account.t_app_user_tag GROUP
+        BY app_user_id ) b ON a.app_user_id = b.app_user_id
+        AND a.create_time = b.max_create_time
+        LEFT JOIN `charging_pile_other`.`t_user_tag` ct on a.user_tag_id = ct.id
+        WHERE ct.del_flag = 0
+        ) o
+        LEFT JOIN `charging_pile_other`.`t_user_tag` tt on o.user_tag_id = tt.id
         GROUP BY
-            tt.name
+        tt.name
     </select>
     <select id="getVipCount" resultType="java.util.Map">
         SELECT
-            tv.`name`,
-            count(1) AS Counts
+        tv.`name`,
+        count(1) AS Counts
         FROM
-            charging_pile_account.t_app_user  ta
-                LEFT JOIN `charging_pile_other`.`t_vip` tv on ta.vip_id = tv.id
+        charging_pile_account.t_app_user ta
+        LEFT JOIN `charging_pile_other`.`t_vip` tv on ta.vip_id = tv.id
         WHERE
-            ta.del_flag = 0
+        ta.del_flag = 0
         GROUP BY
-            tv.`name`
+        tv.`name`
     </select>
     <select id="unitConsumption" resultType="java.util.Map">
         SELECT
         tc.`name`,
-            au.company_id as companyId,
-            SUM( co.charging_capacity )  as chargingCapacity
+        au.company_id as companyId,
+        SUM( co.charging_capacity ) as chargingCapacity
         FROM
-            charging_pile_order.t_charging_order co
-                LEFT JOIN charging_pile_account.t_app_user au ON co.app_user_id = au.id
+        charging_pile_order.t_charging_order co
+        LEFT JOIN charging_pile_account.t_app_user au ON co.app_user_id = au.id
         LEFT JOIN `charging_pile_other`.`t_company` tc on au.company_id = tc.id
 
         <where>
@@ -866,7 +898,7 @@
                 AND WEEKOFYEAR( co.create_time ) = WEEKOFYEAR( CURDATE() )
             </if>
             <if test="statisticsQueryDto.dayType == 3">
-               AND MONTH( co.create_time ) = MONTH(CURDATE())
+                AND MONTH( co.create_time ) = MONTH(CURDATE())
             </if>
             <if test="statisticsQueryDto.dayType == 4">
                 AND YEAR( co.create_time ) = YEAR(CURDATE() )
@@ -876,7 +908,7 @@
                     and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
                 </if>
                 <if test="statisticsQueryDto.endTime != null">
-                    and DATE(co.create_time)  &lt;= #{statisticsQueryDto.endTime}
+                    and DATE(co.create_time) &lt;= #{statisticsQueryDto.endTime}
                 </if>
             </if>
         </where>
@@ -885,61 +917,61 @@
     </select>
     <select id="carUserMethod" resultType="java.util.Map">
         SELECT
-            count(1) as counts,vehicle_use
+        count(1) as counts,vehicle_use
         from charging_pile_account.t_app_user_car
-        where  del_flag = 0
+        where del_flag = 0
         GROUP BY vehicle_use
     </select>
     <select id="carUserBrand" resultType="java.util.Map">
         SELECT
-            count(1) as counts,vehicle_brand
+        count(1) as counts,vehicle_brand
         from charging_pile_account.t_app_user_car
-        where  del_flag = 0
+        where del_flag = 0
 
         GROUP BY vehicle_brand
         ORDER BY counts DESC
-            limit 5
+        limit 5
     </select>
     <select id="countLocalCar" resultType="java.util.Map">
         SELECT
-            SUM(CASE WHEN license_plate LIKE '%川J%' THEN 1 ELSE 0 END) AS localCar,
-            SUM(CASE WHEN license_plate NOT LIKE '%川J%' THEN 1 ELSE 0 END) AS  notLocalCar
+        SUM(CASE WHEN license_plate LIKE '%川J%' THEN 1 ELSE 0 END) AS localCar,
+        SUM(CASE WHEN license_plate NOT LIKE '%川J%' THEN 1 ELSE 0 END) AS notLocalCar
         FROM
-            `charging_pile_account`.`t_app_user_car`
+        `charging_pile_account`.`t_app_user_car`
         WHERE
-            del_flag = 0
+        del_flag = 0
     </select>
     <select id="getAver" resultType="java.lang.Double">
         SELECT
-            ROUND(AVG(te.mark), 2) AS average_mark
+        ROUND(AVG(te.mark), 2) AS average_mark
         FROM
-            `t_order_evaluate` te
-                LEFT JOIN t_charging_order  co on te.order_id = co.id
+        `t_order_evaluate` te
+        LEFT JOIN t_charging_order co on te.order_id = co.id
         WHERE
-             1 = 1
+        1 = 1
         <if test="siteIds != null and siteIds.size() > 0">
             AND co.site_id IN
             <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
                 #{siteId}
             </foreach>
         </if>
-           AND  te.del_flag = 0
+        AND te.del_flag = 0
 
     </select>
     <select id="getLevelEvaluate" resultType="java.util.Map">
         SELECT
-            CASE
-                WHEN te.mark BETWEEN 1 AND 2 THEN '1-2'
-                WHEN te.mark = 3 THEN '3'
-                WHEN te.mark BETWEEN 4 AND 5 THEN '4-5'
-                ELSE 'Other'
-                END AS score_range,
-            COUNT(*) AS count
+        CASE
+        WHEN te.mark BETWEEN 1 AND 2 THEN '1-2'
+        WHEN te.mark = 3 THEN '3'
+        WHEN te.mark BETWEEN 4 AND 5 THEN '4-5'
+        ELSE 'Other'
+        END AS score_range,
+        COUNT(*) AS count
         FROM
-            `t_order_evaluate` te
-            LEFT JOIN t_charging_order  co on te.order_id = co.id
+        `t_order_evaluate` te
+        LEFT JOIN t_charging_order co on te.order_id = co.id
         WHERE
-            te.del_flag = 0
+        te.del_flag = 0
         <if test="siteIds != null and siteIds.size() > 0">
             AND co.site_id IN
             <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
@@ -947,34 +979,34 @@
             </foreach>
         </if>
         GROUP BY
-            score_range
+        score_range
 
     </select>
     <select id="chargingList" resultType="com.ruoyi.order.api.vo.ChargingOrderListVO">
         select t1.*,
-               t1.current as chargingCapacity,
-               t1.payment_amount as paymentAmount,
-               t1.electricity as chargingCapacity,
-               ifnull(t2.refund_amount, 0) as refundAmount
+        t1.current as chargingCapacity,
+        t1.payment_amount as paymentAmount,
+        t1.electricity as chargingCapacity,
+        ifnull(t2.refund_amount, 0) as refundAmount
         from t_charging_order t1
         left join t_charging_order_refund t2 on t1.id = t2.charging_order_id
-        where t1.del_flag = 0 and t1.status = 5  and t1.recharge_payment_status = 2
+        where t1.del_flag = 0 and t1.status = 5 and t1.recharge_payment_status = 2
         <if test="null != req.code and req.code!=''">
-            and t1.code  LIKE CONCAT('%',#{req.code},'%')
+            and t1.code LIKE CONCAT('%',#{req.code},'%')
         </if>
-        <if test="null != req.carIds and req.carIds.size()>0" >
+        <if test="null != req.carIds and req.carIds.size()>0">
             and t1.app_user_car_id in
             <foreach collection="req.carIds" item="item" index="index" separator="," open="(" close=")">
                 #{item}
             </foreach>
         </if>
-        <if test="null != req.userIds and req.userIds.size()>0" >
+        <if test="null != req.userIds and req.userIds.size()>0">
             and t1.app_user_id in
             <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
                 #{item}
             </foreach>
         </if>
-        <if test="null != req.siteIds and req.siteIds.size()>0" >
+        <if test="null != req.siteIds and req.siteIds.size()>0">
             and t1.site_id in
             <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
                 #{item}
@@ -1005,15 +1037,15 @@
         select t1.* from t_charging_order t1
         where 1=1
         <if test="null != req.code and req.code!=''">
-            and t1.code  LIKE CONCAT('%',#{req.code},'%')
+            and t1.code LIKE CONCAT('%',#{req.code},'%')
         </if>
-        <if test="null != req.carIds and req.carIds.size()>0" >
+        <if test="null != req.carIds and req.carIds.size()>0">
             and t1.app_user_car_id in
             <foreach collection="req.carIds" item="item" index="index" separator="," open="(" close=")">
                 #{item}
             </foreach>
         </if>
-        <if test="null != req.userIds and req.userIds.size()>0" >
+        <if test="null != req.userIds and req.userIds.size()>0">
             and t1.app_user_id in
             <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
                 #{item}
@@ -1049,53 +1081,54 @@
         end as source
         from t_charging_order
         where 1=1
-        AND  del_flag = 0
+        AND del_flag = 0
         AND recharge_payment_status = 2 and status = 5
-            <if test="siteIds != null and siteIds.size() > 0">
-                and site_id IN
-                <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
-                    #{siteId}
-                </foreach>
-            </if>
-            <if test="statisticsQueryDto.dayType == 1">
-                AND DATE(create_time ) = CURDATE()
-            </if>
-            <if test="statisticsQueryDto.dayType != 1">
-                and DATE(create_time) >= #{statisticsQueryDto.startTime}
-                and DATE(create_time)  &lt;= #{statisticsQueryDto.endTime}
-            </if>
+        <if test="siteIds != null and siteIds.size() > 0">
+            and site_id IN
+            <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
+                #{siteId}
+            </foreach>
+        </if>
+        <if test="statisticsQueryDto.dayType == 1">
+            AND DATE(create_time ) = CURDATE()
+        </if>
+        <if test="statisticsQueryDto.dayType != 1">
+            and DATE(create_time) >= #{statisticsQueryDto.startTime}
+            and DATE(create_time) &lt;= #{statisticsQueryDto.endTime}
+        </if>
         group by tripartite_platform_name
 
 
     </select>
     <select id="equipmentUserType1" resultType="java.util.Map">
         SELECT
-            FORMAT(SUM(TIME_TO_SEC(TIMEDIFF(co.end_time, co.start_time)) /
-                       <if test="statisticsQueryDto.dayType == 1">
-                           864
-                       </if>
-                   <if test="statisticsQueryDto.dayType == 2">
-                       6048
-                   </if>
-                   <if test="statisticsQueryDto.dayType == 3">
-                       25920
-                   </if>
-                   <if test="statisticsQueryDto.dayType == 4">
-                       315360
-                   </if>
-                   <if test="statisticsQueryDto.dayType == 5">
-                       (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference
-                       ))
-                   </if>
+        FORMAT(SUM(TIME_TO_SEC(TIMEDIFF(co.end_time, co.start_time)) /
+        <if test="statisticsQueryDto.dayType == 1">
+            864
+        </if>
+        <if test="statisticsQueryDto.dayType == 2">
+            6048
+        </if>
+        <if test="statisticsQueryDto.dayType == 3">
+            25920
+        </if>
+        <if test="statisticsQueryDto.dayType == 4">
+            315360
+        </if>
+        <if test="statisticsQueryDto.dayType == 5">
+            (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS
+            days_difference
+            ))
+        </if>
 
 
-                   ), 2) AS percent,co.charging_gun_id,tc.name,cp.name as siteName
+        ), 2) AS percent,co.charging_gun_id,tc.name,cp.name as siteName
         FROM
-            `charging_pile_order`.`t_charging_order` co
-                LEFT JOIN  `charging_pile_service`.`t_charging_gun` tc on co.charging_gun_id = tc.id
-                LEFT JOIN  `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id
+        `charging_pile_order`.`t_charging_order` co
+        LEFT JOIN `charging_pile_service`.`t_charging_gun` tc on co.charging_gun_id = tc.id
+        LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id
         WHERE co.del_flag = 0 and
-            co.start_time IS NOT NULL AND co.end_time IS NOT NULL and tc.type = 4
+        co.start_time IS NOT NULL AND co.end_time IS NOT NULL and tc.type = 4
         <if test="siteIds != null and siteIds.size() > 0">
             and co.site_id IN
             <foreach collection="siteIds" item="siteId" open="(" separator="," close=")">
@@ -1116,15 +1149,13 @@
         </if>
         <if test="statisticsQueryDto.dayType == 5">
 
-                and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
+            and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
 
 
-                and DATE(co.create_time)  &lt;= #{statisticsQueryDto.endTime}
+            and DATE(co.create_time) &lt;= #{statisticsQueryDto.endTime}
 
         </if>
         GROUP BY tc.name,cp.name,co.charging_gun_id
-
-
 
 
     </select>
@@ -1144,7 +1175,8 @@
             315360
         </if>
         <if test="statisticsQueryDto.dayType == 5">
-            (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference
+            (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS
+            days_difference
             ))
         </if>
 
@@ -1152,8 +1184,8 @@
         ), 2) AS percent,co.charging_gun_id,tc.name,cp.name as siteName
         FROM
         `charging_pile_order`.`t_charging_order` co
-        LEFT JOIN  `charging_pile_service`.`t_charging_gun` tc on co.charging_gun_id = tc.id
-        LEFT JOIN  `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id
+        LEFT JOIN `charging_pile_service`.`t_charging_gun` tc on co.charging_gun_id = tc.id
+        LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on tc.charging_pile_id = cp.id
         WHERE co.del_flag = 0 and
         co.start_time IS NOT NULL AND co.end_time IS NOT NULL and tc.type in (2,3)
         <if test="siteIds != null and siteIds.size() > 0">
@@ -1179,7 +1211,7 @@
                 and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
             </if>
             <if test="statisticsQueryDto.endTime != null">
-                and DATE(co.create_time)  &lt;= #{statisticsQueryDto.endTime}
+                and DATE(co.create_time) &lt;= #{statisticsQueryDto.endTime}
             </if>
         </if>
         GROUP BY tc.name,cp.name,co.charging_gun_id
@@ -1188,7 +1220,7 @@
     </select>
     <select id="equipmentMapbroke1" resultType="java.util.Map">
         SELECT
-            FORMAT(SUM(TIME_TO_SEC(TIMEDIFF(co.end_time, co.down_time)) /
+        FORMAT(SUM(TIME_TO_SEC(TIMEDIFF(co.end_time, co.down_time)) /
         <if test="statisticsQueryDto.dayType == 1">
             864
         </if>
@@ -1202,14 +1234,15 @@
             315360
         </if>
         <if test="statisticsQueryDto.dayType == 5">
-            (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference
+            (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS
+            days_difference
             ))
         </if>
 
-                   ), 2) AS percent,cp.name
+        ), 2) AS percent,cp.name
         FROM
         `charging_pile_service`.`t_fault_message` co
-        LEFT JOIN  `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id
+        LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id
         WHERE
         co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type = 1 and co.status =2
         <if test="siteIds != null and siteIds.size() > 0">
@@ -1232,10 +1265,10 @@
         </if>
         <if test="statisticsQueryDto.dayType == 5">
 
-                and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
+            and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
 
 
-                and DATE(co.create_time)  &lt;= #{statisticsQueryDto.endTime}
+            and DATE(co.create_time) &lt;= #{statisticsQueryDto.endTime}
 
         </if>
         GROUP BY cp.name
@@ -1258,14 +1291,15 @@
             315360
         </if>
         <if test="statisticsQueryDto.dayType == 5">
-            (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference
+            (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS
+            days_difference
             ))
         </if>
 
         ), 2) AS percent,cp.name
         FROM
         `charging_pile_service`.`t_fault_message` co
-        LEFT JOIN  `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id
+        LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id
         WHERE
         co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type in (2,3) and co.status =2
         <if test="siteIds != null and siteIds.size() > 0">
@@ -1288,9 +1322,9 @@
         </if>
         <if test="statisticsQueryDto.dayType == 5">
 
-                and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
+            and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
 
-                and DATE(co.create_time)  &lt;= #{statisticsQueryDto.endTime}
+            and DATE(co.create_time) &lt;= #{statisticsQueryDto.endTime}
 
         </if>
         GROUP BY cp.name
@@ -1313,14 +1347,15 @@
             315360
         </if>
         <if test="statisticsQueryDto.dayType == 5">
-            (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference
+            (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS
+            days_difference
             ))
         </if>
 
-        ), 2)  AS percent,cp.name
+        ), 2) AS percent,cp.name
         FROM
         `charging_pile_service`.`t_fault_message` co
-        LEFT JOIN  `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id
+        LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id
         WHERE
         co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type = 1 and co.status =1
         <if test="siteIds != null and siteIds.size() > 0">
@@ -1346,7 +1381,7 @@
                 and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
             </if>
             <if test="statisticsQueryDto.endTime != null">
-                and DATE(co.create_time)  &lt;= #{statisticsQueryDto.endTime}
+                and DATE(co.create_time) &lt;= #{statisticsQueryDto.endTime}
             </if>
         </if>
         GROUP BY cp.name
@@ -1367,14 +1402,15 @@
             315360
         </if>
         <if test="statisticsQueryDto.dayType == 5">
-            (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS days_difference
+            (864*(SELECT TIMESTAMPDIFF(DAY, #{statisticsQueryDto.startTime}, #{statisticsQueryDto.endTime}) +1 AS
+            days_difference
             ))
         </if>
 
         ), 2) AS percent,cp.name
         FROM
         `charging_pile_service`.`t_fault_message` co
-        LEFT JOIN  `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id
+        LEFT JOIN `charging_pile_service`.`t_charging_pile` cp on co.charging_pile_id = cp.id
         WHERE
         co.down_time IS NOT NULL AND co.end_time IS NOT NULL and cp.type = 2 and co.status =1
         <if test="siteIds != null and siteIds.size() > 0">
@@ -1400,7 +1436,7 @@
                 and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
             </if>
             <if test="statisticsQueryDto.endTime != null">
-                and DATE(co.create_time)  &lt;= #{statisticsQueryDto.endTime}
+                and DATE(co.create_time) &lt;= #{statisticsQueryDto.endTime}
             </if>
         </if>
         GROUP BY cp.name
@@ -1408,14 +1444,14 @@
     </select>
     <select id="needElec" resultType="java.util.Map">
         SELECT
-            FORMAT((SUM(co.current)*100 / SUM(co.need_elec)), 2) AS percent,
-            co.charging_gun_id,
-            tc.name as name,
-            cp.name AS siteName
+        FORMAT((SUM(co.current)*100 / SUM(co.need_elec)), 2) AS percent,
+        co.charging_gun_id,
+        tc.name as name,
+        cp.name AS siteName
         FROM
-            `charging_pile_order`.`t_charging_order` co
-                LEFT JOIN `charging_pile_service`.`t_charging_gun` tc ON co.charging_gun_id = tc.id
-                LEFT JOIN `charging_pile_service`.`t_charging_pile` cp ON tc.charging_pile_id = cp.id
+        `charging_pile_order`.`t_charging_order` co
+        LEFT JOIN `charging_pile_service`.`t_charging_gun` tc ON co.charging_gun_id = tc.id
+        LEFT JOIN `charging_pile_service`.`t_charging_pile` cp ON tc.charging_pile_id = cp.id
         <where>
             tc.type = 4 and co.need_elec != 0
             <if test="siteIds != null and siteIds.size() > 0">
@@ -1438,16 +1474,16 @@
             </if>
             <if test="statisticsQueryDto.dayType == 5">
 
-                    and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
+                and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
 
-                    and DATE(co.create_time)  &lt;= #{statisticsQueryDto.endTime}
+                and DATE(co.create_time) &lt;= #{statisticsQueryDto.endTime}
 
             </if>
         </where>
         GROUP BY
-            tc.name,
-            cp.name,
-            co.charging_gun_id;
+        tc.name,
+        cp.name,
+        co.charging_gun_id;
 
 
     </select>
@@ -1477,8 +1513,11 @@
         (b.charging_capacity) as electricity
         FROM
         t_charging_order a
-        left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
-        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2  and DATE_FORMAT(
+        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
+        sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity,
+        sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by
+        charging_order_id) b on (a.id = b.charging_order_id)
+        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE_FORMAT(
         <if test="statisticsQueryDto.type == 1">
             a.create_time
         </if>
@@ -1520,8 +1559,11 @@
         (b.charging_capacity) as electricity
         FROM
         t_charging_order a
-        left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
-        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2  and DATE_FORMAT(
+        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
+        sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity,
+        sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by
+        charging_order_id) b on (a.id = b.charging_order_id)
+        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE_FORMAT(
         <if test="statisticsQueryDto.type == 1">
             a.start_time
         </if>
@@ -1563,8 +1605,11 @@
         (b.charging_capacity) as electricity
         FROM
         t_charging_order a
-        left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity, sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by charging_order_id) b on (a.id = b.charging_order_id)
-        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2  and DATE_FORMAT(
+        left join (select charging_order_id, sum(period_electric_price) as period_electric_price,
+        sum(period_service_price) as period_service_price, sum(charging_capacity) as charging_capacity,
+        sum(period_electric_price + period_service_price) as money from t_charging_order_accounting_strategy group by
+        charging_order_id) b on (a.id = b.charging_order_id)
+        WHERE a.del_flag = 0 and a.status = 5 and a.recharge_payment_status = 2 and DATE_FORMAT(
         <if test="statisticsQueryDto.type == 1">
             a.start_time
         </if>
@@ -1582,11 +1627,11 @@
     </select>
     <select id="getchargingCapacity" resultType="java.util.Map">
         SELECT
-            DATE_FORMAT( create_time, '%Y-%m-%d' ) as time,
-	SUM(charging_capacity) as chargingCapacity
+        DATE_FORMAT( create_time, '%Y-%m-%d' ) as time,
+        SUM(charging_capacity) as chargingCapacity
         FROM
-            t_charging_order
-        WHERE     del_flag = 0 and recharge_payment_status = 2
+        t_charging_order
+        WHERE del_flag = 0 and recharge_payment_status = 2
         <if test="statisticsQueryDto.dayType == 1">
             AND DATE( create_time ) between #{statisticsQueryDto.startTime} and #{statisticsQueryDto.endTime}
         </if>
@@ -1598,30 +1643,30 @@
             </foreach>
         </if>
         GROUP BY
-            time
+        time
     </select>
     <select id="countAllUserData" resultType="java.util.Map">
         SELECT
-            COUNT( DISTINCT app_user_id ) AS counts,
-            '1' AS type
+        COUNT( DISTINCT app_user_id ) AS counts,
+        '1' AS type
         FROM
-            `charging_pile_order`.`t_charging_order` UNION ALL
+        `charging_pile_order`.`t_charging_order` UNION ALL
         SELECT
-            COUNT(*) AS counts,
-            '2' AS type
+        COUNT(*) AS counts,
+        '2' AS type
         FROM
-            `charging_pile_account`.`t_app_user`
+        `charging_pile_account`.`t_app_user`
         WHERE
-            `vip_end_time` > NOW()
+        `vip_end_time` > NOW()
 
         UNION ALL
         SELECT
-            COUNT(*) AS counts,
-            '3' AS type
+        COUNT(*) AS counts,
+        '3' AS type
         FROM
-            `charging_pile_account`.`t_app_user`
+        `charging_pile_account`.`t_app_user`
         WHERE
-            del_flag = 0
+        del_flag = 0
 
 
     </select>
@@ -1632,7 +1677,8 @@
         tc.name as name,
         cp.name AS siteName
         FROM
-        (select site_id,create_time,charging_gun_id, charging_pile_id, current, (CASE WHEN need_elec = 0 THEN `current` ELSE need_elec END) as need_elec from `charging_pile_order`.`t_charging_order`) co
+        (select site_id,create_time,charging_gun_id, charging_pile_id, current, (CASE WHEN need_elec = 0 THEN `current`
+        ELSE need_elec END) as need_elec from `charging_pile_order`.`t_charging_order`) co
         LEFT JOIN `charging_pile_service`.`t_charging_gun` tc ON co.charging_gun_id = tc.id
         LEFT JOIN `charging_pile_service`.`t_charging_pile` cp ON tc.charging_pile_id = cp.id
         <where>
@@ -1660,7 +1706,7 @@
                     and DATE(co.create_time) >= #{statisticsQueryDto.startTime}
                 </if>
                 <if test="statisticsQueryDto.endTime != null">
-                    and DATE(co.create_time)  &lt;= #{statisticsQueryDto.endTime}
+                    and DATE(co.create_time) &lt;= #{statisticsQueryDto.endTime}
                 </if>
             </if>
         </where>
@@ -1673,24 +1719,24 @@
         SELECT count(1)
         from `charging_pile_account`.`t_app_user` au
         WHERE au.id not IN (
-            SELECT app_user_id
-            from `charging_pile_account`.`t_app_user_tag`
-            GROUP BY app_user_id
+        SELECT app_user_id
+        from `charging_pile_account`.`t_app_user_tag`
+        GROUP BY app_user_id
 
-        )  and au.del_flag = 0
+        ) and au.del_flag = 0
 
     </select>
     <select id="countCar" resultType="java.lang.Long">
         select count(1)
         from
-            charging_pile_account.t_app_user_car
+        charging_pile_account.t_app_user_car
         where del_flag = 0
 
         <if test="brands != null and brands.size() > 0">
-          and vehicle_brand  not in
-        <foreach collection="brands" item="brand" open="(" separator="," close=")">
-            #{brand}
-        </foreach>
+            and vehicle_brand not in
+            <foreach collection="brands" item="brand" open="(" separator="," close=")">
+                #{brand}
+            </foreach>
         </if>
     </select>
     <select id="chargingOrderNolimit" resultType="map">
@@ -1706,15 +1752,15 @@
         from t_charging_order t1
         where 1=1
         <if test="null != req.code and req.code!=''">
-            and t1.code  LIKE CONCAT('%',#{req.code},'%')
+            and t1.code LIKE CONCAT('%',#{req.code},'%')
         </if>
-        <if test="null != req.userIds and req.userIds.size()>0" >
+        <if test="null != req.userIds and req.userIds.size()>0">
             and t1.app_user_id in
             <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
                 #{item}
             </foreach>
         </if>
-        <if test="null != req.siteIds and req.siteIds.size()>0" >
+        <if test="null != req.siteIds and req.siteIds.size()>0">
             and t1.site_id in
             <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
                 #{item}
@@ -1754,84 +1800,96 @@
         )
     </select>
     <select id="countOrdersByDate" resultType="com.ruoyi.order.vo.OrderCountByDate">
-        SELECT  DATE_FORMAT(create_time, '%m/%d') AS `date`,  COUNT(*) AS `count`
+        SELECT DATE_FORMAT(create_time, '%m/%d') AS `date`, COUNT(*) AS `count`
         FROM t_charging_order
         WHERE
-            del_flag = 0
+        del_flag = 0
         and
-            status in (3,5)
+        status in (3,5)
 
-            and charging_gun_id in
-            <foreach item="item" index="index" collection="gunIds" open="(" separator="," close=")">
-                #{item}
-            </foreach>
-        and   create_time BETWEEN #{startTime}  AND #{endTime}
+        and charging_gun_id in
+        <foreach item="item" index="index" collection="gunIds" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        and create_time BETWEEN #{startTime} AND #{endTime}
         GROUP BY DATE(create_time, '%m/%d')
         ORDER BY DATE(create_time, '%m/%d') ASC
     </select>
 
 
-    
     <select id="findFailedStartupOrder" resultType="com.ruoyi.order.api.model.TChargingOrder">
         SELECT
-            *
+        *
         FROM
-            t_charging_order
+        t_charging_order
         WHERE
-            `status` = 2
-          AND recharge_payment_status = 2
-          AND NOW() >= ADDDATE(pay_time, INTERVAL 15 MINUTE )
-          AND del_flag = 0
-          AND id NOT IN (
-            SELECT
-                charging_order_id
-            FROM
-                t_charging_order_refund)
+        `status` = 2 and order_source = 1
+        AND recharge_payment_status = 2
+        AND NOW() >= ADDDATE(pay_time, INTERVAL 15 MINUTE )
+        AND del_flag = 0
+        AND id NOT IN (
+        SELECT
+        charging_order_id
+        FROM
+        t_charging_order_refund)
     </select>
-    
-    
+
+
     <select id="findStoppedOrder" resultType="com.ruoyi.order.api.model.TChargingOrder">
         SELECT
-            *
+        *
         FROM
-            t_charging_order
+        t_charging_order
         WHERE
-            `status` = 4
-          AND NOW() >= ADDDATE(end_time, INTERVAL 10 MINUTE )
-          AND del_flag = 0
-          AND id NOT IN (
-            SELECT
-                charging_order_id
-            FROM
-                t_charging_order_refund)
+        `status` = 4 and order_source = 1
+        AND NOW() >= ADDDATE(end_time, INTERVAL 10 MINUTE )
+        AND del_flag = 0
+        AND id NOT IN (
+        SELECT
+        charging_order_id
+        FROM
+        t_charging_order_refund)
     </select>
-    
-    
+
+
     <select id="findChargingOrder" resultType="com.ruoyi.order.api.model.TChargingOrder">
         SELECT
-            *
+        *
         FROM
-            t_charging_order
+        t_charging_order
         WHERE
-            `status` = 3
-          AND del_flag = 0
-          AND id NOT IN (
-            SELECT
-                charging_order_id
-            FROM
-                t_charging_order_refund)
+        `status` = 3
+        AND del_flag = 0 and order_source = 1
+        AND id NOT IN (
+        SELECT
+        charging_order_id
+        FROM
+        t_charging_order_refund)
     </select>
 
     <select id="getSumDegreeBySiteIds" resultType="java.lang.Double">
         SELECT IFNULL(SUM(t2.charging_capacity), 0.0) AS sumDegreeBySiteIds
         FROM t_charging_order t1
-                 LEFT JOIN t_charging_order_summary_data t2 ON t1.id = t2.charging_order_id
+        LEFT JOIN t_charging_order_summary_data t2 ON t1.id = t2.charging_order_id
         WHERE t1.del_flag = 0
-          <if test="siteIds != null and siteIds.size() > 0">
+        <if test="siteIds != null and siteIds.size() > 0">
             AND t1.site_id IN
             <foreach collection="siteIds" item="item" open="(" separator="," close=")">
                 #{item}
             </foreach>
-          </if>
-     </select>
+        </if>
+    </select>
+
+
+    <select id="findEndChargingOrder" resultType="com.ruoyi.order.api.model.TChargingOrder">
+        SELECT
+        *
+        FROM
+        t_charging_order
+        WHERE `status` in (-1, 5) AND del_flag = 0 and create_time > '2025-08-01 00:00:00' and order_source = 1 AND id NOT IN (
+        SELECT
+        charging_order_id
+        FROM
+        t_charging_order_refund)
+    </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
index a4b8a64..7ff9bac 100644
--- a/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
+++ b/ruoyi-service/ruoyi-order/src/test/java/com/ruoyi/order/RuoYiOrderApplicationTests.java
@@ -1,71 +1,511 @@
 //package com.ruoyi.order;
 //
-//import com.alibaba.fastjson2.JSON;
 //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-//import com.ruoyi.account.api.feignClient.*;
-//import com.ruoyi.account.api.model.TAppUserCar;
-//import com.ruoyi.chargingPile.api.feignClient.*;
-//import com.ruoyi.chargingPile.api.model.Site;
+//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+//import com.ruoyi.account.api.feignClient.AppCouponClient;
+//import com.ruoyi.account.api.feignClient.AppUserClient;
+//import com.ruoyi.account.api.feignClient.AppUserIntegralChangeClient;
+//import com.ruoyi.account.api.model.TAppCoupon;
+//import com.ruoyi.account.api.model.TAppUser;
+//import com.ruoyi.account.api.model.TAppUserIntegralChange;
+//import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
+//import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 //import com.ruoyi.chargingPile.api.model.TChargingGun;
-//import com.ruoyi.chargingPile.api.model.TChargingPile;
 //import com.ruoyi.common.core.domain.R;
-//import com.ruoyi.common.core.web.domain.AjaxResult;
-//import com.ruoyi.common.core.web.page.PageInfo;
-//import com.ruoyi.common.redis.service.RedisService;
-//import com.ruoyi.common.security.service.TokenService;
-//import com.ruoyi.integration.api.feignClient.*;
-//import com.ruoyi.integration.api.model.ChargingHandshake;
+//import com.ruoyi.integration.api.feignClient.ChargingMessageClient;
+//import com.ruoyi.integration.api.feignClient.TCECClient;
 //import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
-//import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient;
-//import com.ruoyi.order.api.model.TChargingOrder;
-//import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
-//import com.ruoyi.order.api.vo.AccountingStrategyDetailOrderVo;
-//import com.ruoyi.order.api.vo.ChargingOrderInfoVO;
-//import com.ruoyi.order.api.vo.TransactionRecordMessageVO;
-//import com.ruoyi.order.dto.ChargingDetails;
-//import com.ruoyi.order.dto.MyChargingOrderInfo;
-//import com.ruoyi.order.dto.PayOrderDto;
-//import com.ruoyi.order.dto.PayOrderQueryDto;
-//import com.ruoyi.order.mapper.TSettlementConfirmMapper;
+//import com.ruoyi.integration.api.vo.ChargingOrderVo;
+//import com.ruoyi.order.api.model.*;
 //import com.ruoyi.order.service.*;
-//import com.ruoyi.order.vo.EndOfChargePageInfo;
+//import com.ruoyi.order.util.mongodb.service.TransactionRecordService;
+//import com.ruoyi.order.util.mongodb.service.UploadRealTimeMonitoringDataService;
+//import com.ruoyi.order.util.task.TaskUtil;
+//import com.ruoyi.other.api.domain.TCoupon;
+//import com.ruoyi.other.api.domain.TIntegralRule;
+//import com.ruoyi.other.api.domain.TVip;
 //import com.ruoyi.other.api.feignClient.IntegralRuleClient;
-//import com.ruoyi.other.api.feignClient.UserTagClient;
 //import com.ruoyi.other.api.feignClient.VipClient;
 //import com.ruoyi.payment.api.feignClient.AliPaymentClient;
+//import com.ruoyi.payment.api.feignClient.H5AliPaymentClient;
 //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 org.junit.jupiter.api.Test;
-//import org.redisson.api.RLock;
-//import org.redisson.api.RedissonClient;
+//import org.springframework.beans.BeanUtils;
 //import org.springframework.beans.factory.annotation.Autowired;
 //import org.springframework.boot.test.context.SpringBootTest;
 //
 //import javax.annotation.Resource;
-//import java.io.PrintWriter;
 //import java.math.BigDecimal;
+//import java.math.MathContext;
+//import java.math.RoundingMode;
+//import java.text.SimpleDateFormat;
+//import java.time.LocalDateTime;
+//import java.time.format.DateTimeFormatter;
+//import java.time.temporal.ChronoUnit;
 //import java.util.*;
-//import java.util.concurrent.TimeUnit;
+//import java.util.stream.Collectors;
 //
 //@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiOrderApplication.class)
 //public class RuoYiOrderApplicationTests {
 //
-//	@Autowired
-//	private RedissonClient redissonClient;
+//    @Resource
+//    private TChargingBillService chargingBillService;
+//    @Resource
+//    private SiteClient siteClient;
+//    @Resource
+//    private TChargingOrderService chargingOrderService;
+//
+//    @Resource
+//    private TChargingOrderRefundService chargingOrderRefundService;
+//
+//    @Resource
+//    private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService;
+//
+//    @Resource
+//    private TransactionRecordService transactionRecordService;
+//
+//    @Resource
+//    private ChargingMessageClient chargingMessageClient;
+//
+//    @Resource
+//    private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService;
+//
+//    @Resource
+//    private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
+//
+//    @Resource
+//    private AppCouponClient appCouponClient;
+//
+//    @Resource
+//    private TCECClient tcecClient;
+//
+//    @Resource
+//    private VipClient vipClient;
+//
+//    @Resource
+//    private ChargingGunClient chargingGunClient;
+//
+//    @Resource
+//    private IntegralRuleClient integralRuleClient;
+//    @Resource
+//    private AppUserClient appUserClient;
+//
+//    @Resource
+//    private AppUserIntegralChangeClient appUserIntegralChangeClient;
+//
+//    @Resource
+//    private WxPaymentClient wxPaymentClient;
+//
+//    @Resource
+//    private AliPaymentClient aliPaymentClient;
+//    @Resource
+//    private H5AliPaymentClient h5AliPaymentClient;
+//
+//    @Resource
+//    private ITChargingOrderSummaryDataService chargingOrderSummaryDataService;
 //
 //
 //	@Test
 //	public void test(){
-//		RLock lock = redissonClient.getLock("endOrder:1234565");
-//		boolean tryLock = false;
-//		try {
-//			tryLock = lock.tryLock(100, TimeUnit.SECONDS);
-//		} catch (InterruptedException e) {
-//			e.printStackTrace();
-//			lock.unlock();
-//		}
-//		if(!tryLock){
-//			System.out.println("获取锁失败");
-//		}
-//		System.out.println("获取锁成功");
-//	}
+//        TChargingOrder order = chargingOrderService.getOne(new QueryWrapper<TChargingOrder>().eq("code", "CD61220250714235257688"));
+//        List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(order.getCode());
+//        if(!dataList.isEmpty()){
+//            //获取当前订单的计费规则,然后分段计算总的度数和充电金额
+//            List<AccountingStrategyDetailOrder> detailOrders = accountingStrategyDetailOrderService.list(new LambdaQueryWrapper<AccountingStrategyDetailOrder>()
+//                    .eq(AccountingStrategyDetailOrder::getChargingOrderId, order.getId()).last(" order by start_time"));
+//            detailOrders.get(detailOrders.size() - 1).setEndTime("23:59");
+//            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
+//            //开始解析每个时段的充电度数
+//            BigDecimal decimal = BigDecimal.ZERO;
+//            //如果使用优惠券需要判断优惠券是否满足使用条件
+//            //退款金额=优惠券金额+剩余充电金额
+//            BigDecimal periodElectricPrice_total = BigDecimal.ZERO;
+//            BigDecimal periodServicePrice_total = BigDecimal.ZERO;
+//            BigDecimal vipDiscountAmount_total = BigDecimal.ZERO;
+//            BigDecimal serviceCharge_total = BigDecimal.ZERO;
+//            BigDecimal total = BigDecimal.ZERO;
+//            //判断实时数据是否跨天
+//            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
+//            Date end_time = dataList.get(0).getCreate_time();
+//            String end = sdf2.format(end_time);
+//            Date start_time = dataList.get(dataList.size() - 1).getCreate_time();
+//            String start = sdf2.format(start_time);
+//            if(!end.equals(start)){
+//                List<AccountingStrategyDetailOrder> list = detailOrders.stream().map(s->{
+//                    AccountingStrategyDetailOrder accountingStrategyDetailOrder = new AccountingStrategyDetailOrder();
+//                    BeanUtils.copyProperties(s, accountingStrategyDetailOrder);
+//                    return accountingStrategyDetailOrder;
+//                }).collect(Collectors.toList());
+//                for (AccountingStrategyDetailOrder detailOrder : detailOrders) {
+//                    detailOrder.setStartTime(start + " " + detailOrder.getStartTime());
+//                    detailOrder.setEndTime(start + " " + detailOrder.getEndTime());
+//                }
+//                for (AccountingStrategyDetailOrder detailOrder : list) {
+//                    detailOrder.setStartTime(end + " " + detailOrder.getStartTime());
+//                    detailOrder.setEndTime(end + " " + detailOrder.getEndTime());
+//                }
+//                detailOrders.addAll(list);
+//            }else{
+//                for (AccountingStrategyDetailOrder detailOrder : detailOrders) {
+//                    detailOrder.setStartTime(start + " " + detailOrder.getStartTime());
+//                    detailOrder.setEndTime(start + " " + detailOrder.getEndTime());
+//                }
+//            }
+//
+//            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmm");
+//            List<TChargingOrderAccountingStrategy> list = new ArrayList<>();
+//            for (AccountingStrategyDetailOrder detailOrder : detailOrders) {
+//                long startTime = Long.parseLong(detailOrder.getStartTime().replaceAll("-", "").replaceAll(" ", "").replaceAll(":", ""));
+//                long endTime = Long.parseLong(detailOrder.getEndTime().replaceAll("-", "").replaceAll(" ", "").replaceAll(":", ""));
+//                List<UploadRealTimeMonitoringData> collect = dataList.stream().filter(s -> Long.parseLong(sdf1.format(s.getCreate_time())) > startTime && Long.parseLong(sdf1.format(s.getCreate_time())) <= endTime).collect(Collectors.toList());
+//
+//                if(!collect.isEmpty()){
+//                    //升序排序
+//                    collect.sort(new Comparator<UploadRealTimeMonitoringData>(){
+//                        @Override
+//                        public int compare(UploadRealTimeMonitoringData o1, UploadRealTimeMonitoringData o2) {
+//                            return o1.getCharging_degree().compareTo(o2.getCharging_degree());
+//                        }
+//                    });
+//                    UploadRealTimeMonitoringData uploadRealTimeMonitoringData = collect.get(collect.size() - 1);
+//                    BigDecimal chargingDegree = uploadRealTimeMonitoringData.getCharging_degree();
+//                    BigDecimal subtract = chargingDegree.subtract(decimal);
+//                    decimal = chargingDegree;
+//                    if(subtract.compareTo(BigDecimal.ZERO) > 0){
+//                        //组装充电明细数据
+//                        TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy();
+//                        chargingOrderAccountingStrategy.setChargingOrderId(order.getId());
+//                        chargingOrderAccountingStrategy.setAccountingStrategyDetailId(detailOrder.getId());
+//                        chargingOrderAccountingStrategy.setType(detailOrder.getType());
+//                        chargingOrderAccountingStrategy.setElectrovalence(detailOrder.getElectrovalence());
+//                        chargingOrderAccountingStrategy.setServiceCharge(detailOrder.getServiceCharge());
+//                        chargingOrderAccountingStrategy.setCostServiceCharge(detailOrder.getCostServiceCharge());
+//                        chargingOrderAccountingStrategy.setChargingCapacity(subtract);
+//                        chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
+//
+//                        if (list.size() == 0) {
+//                            String time = sdf.format(collect.get(0).getCreate_time());
+//                            chargingOrderAccountingStrategy.setStartTime(time);
+//                        } else {
+//                            chargingOrderAccountingStrategy.setStartTime(detailOrder.getStartTime().split(" ")[1]);
+//                        }
+//                        chargingOrderAccountingStrategy.setEndTime(detailOrder.getEndTime().split(" ")[1]);
+//
+//                        //已充电总度数
+//                        BigDecimal electrovalenc = detailOrder.getElectrovalence().multiply(subtract);
+//                        BigDecimal originalServicePrice = detailOrder.getServiceCharge().multiply(subtract);
+//                        BigDecimal serviceCharge = originalServicePrice;
+//                        BigDecimal vipDiscountAmount = BigDecimal.ZERO;
+//                        //计算优惠金额
+//                        if (null != order.getVipDiscount()) {
+//                            //0.58折
+//                            vipDiscountAmount = serviceCharge.multiply(new BigDecimal(1).subtract(order.getVipDiscount()));
+//                            serviceCharge = serviceCharge.multiply(order.getVipDiscount());
+//                        }
+//                        chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc.setScale(4, RoundingMode.HALF_EVEN));
+//                        chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge.setScale(4, RoundingMode.HALF_EVEN));
+//                        chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice.setScale(4, RoundingMode.HALF_EVEN));
+//                        chargingOrderAccountingStrategy.setVipDiscountAmount(vipDiscountAmount.setScale(4, RoundingMode.HALF_EVEN));
+//                        chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now());
+//                        list.add(chargingOrderAccountingStrategy);
+//                        //电费
+//                        periodElectricPrice_total = periodElectricPrice_total.add(electrovalenc);
+//                        //服务费(含折扣)
+//                        serviceCharge_total = serviceCharge_total.add(serviceCharge);
+//                        //服务费(不含折扣)
+//                        periodServicePrice_total = periodServicePrice_total.add(originalServicePrice);
+//                        //会员折扣优惠金额
+//                        vipDiscountAmount_total = vipDiscountAmount_total.add(vipDiscountAmount);
+//                        //原始总金额(不含折扣)
+//                        total = total.add(electrovalenc.add(originalServicePrice));
+//                    }
+//                }
+//
+//            }
+//            list.get(list.size() - 1).setEndTime(sdf.format(dataList.get(0).getCreate_time()));
+//            chargingOrderAccountingStrategyService.saveBatch(list);
+//
+//            BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue());
+//            //原金额
+//            BigDecimal rechargeAmount = order.getRechargeAmount();
+//            //支付金额
+//            BigDecimal payAmount = periodElectricPrice_total.add(serviceCharge_total);
+//            //退款金额=充值金额-实际支付金额
+//            BigDecimal refundAmount = rechargeAmount.subtract(payAmount);
+//
+//            UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getLastDataById(order.getCode());
+//            if (null != uploadRealTimeMonitoringData && null == order.getEndMode()) {
+//                Integer soc = uploadRealTimeMonitoringData.getSoc();
+//                if (soc >= 98) {
+//                    order.setEndMode(2);
+//                } else if (null != order.getResidualAmount() && order.getResidualAmount().compareTo(new BigDecimal(1)) <= 0) {
+//                    order.setEndMode(3);
+//                } else {
+//                    order.setEndMode(1);
+//                }
+//            }
+//
+//            order.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
+//            order.setStartTime(list.get(0).getCreateTime());
+//            order.setEndTime(list.get(list.size() - 1).getCreateTime());
+//            order.setStatus(5);
+//            order.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
+//            order.setElectrovalence(periodElectricPrice_total.setScale(2, RoundingMode.HALF_EVEN));
+//            order.setChargingCapacity(list.get(list.size() - 1).getChargingCapacity());
+//            order.setElectricity(list.get(list.size() - 1).getChargingCapacity());
+//            order.setVipDiscountAmount(vipDiscountAmount_total);
+//            if (vipDiscountAmount_total.compareTo(BigDecimal.ZERO) == 0) {
+//                order.setVipDiscount(BigDecimal.valueOf(1));
+//            }
+//
+//            //计算优惠券
+//            BigDecimal couponDiscount = BigDecimal.ZERO;
+//            if (null != order.getAppCouponId()) {
+//                //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。
+//                TAppCoupon appCoupon = appCouponClient.getAppCouponById(order.getAppCouponId()).getData();
+//                String couponJson = appCoupon.getCouponJson();
+//                TCoupon tCoupon = com.alibaba.fastjson2.JSON.parseObject(couponJson, TCoupon.class);
+//                Integer preferentialMode = tCoupon.getPreferentialMode();
+//                if (1 == preferentialMode) {
+//                    //满减
+//                    if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) {
+//                        BigDecimal couponDiscountAmount = tCoupon.getDiscountAmount();
+//                        //如果优惠金额大于服务费金额,以服务费作为最大限制
+//                        if (serviceCharge_total.compareTo(couponDiscountAmount) < 0) {
+//                            couponDiscount = serviceCharge_total;
+//                            serviceCharge_total = BigDecimal.ZERO;
+//                        } else {
+//                            couponDiscount = couponDiscountAmount;
+//                        }
+//                        appCoupon.setStatus(2);
+//                        appCouponClient.updateAppCoupon(appCoupon);
+//                    } else {
+//                        appCouponClient.refund(order.getAppCouponId().toString());
+//                        order.setAppCouponId(null);
+//                        order.setCouponDiscountAmount(BigDecimal.ZERO);
+//                    }
+//                }
+//                if (2 == preferentialMode) {
+//                    //抵扣
+//                    if (payAmount.compareTo(tCoupon.getMeetTheConditions()) >= 0) {
+//                        //折扣金额
+//                        BigDecimal divide = payAmount.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10));
+//                        divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide;
+//                        //如果优惠金额大于服务费金额,以服务费作为最大限制
+//                        if (serviceCharge_total.compareTo(divide) < 0) {
+//                            couponDiscount = serviceCharge_total;
+//                            serviceCharge_total = BigDecimal.ZERO;
+//                        } else {
+//                            couponDiscount = divide;
+//                        }
+//
+//                        appCoupon.setStatus(2);
+//                        appCouponClient.updateAppCoupon(appCoupon);
+//                    } else {
+//                        order.setAppCouponId(null);
+//                        order.setCouponDiscountAmount(BigDecimal.ZERO);
+//                        appCouponClient.refund(order.getAppCouponId().toString());
+//                    }
+//                }
+//            }
+//            //优惠券优惠金额
+//            couponDiscount = couponDiscount.setScale(4, RoundingMode.HALF_EVEN);
+//            //退款金额+优惠券
+//            refundAmount = refundAmount.add(couponDiscount);
+//            //实际支付金额-优惠券
+//            payAmount = payAmount.subtract(couponDiscount);
+//            if (serviceCharge_total.compareTo(BigDecimal.ZERO) > 0) {
+//                serviceCharge_total = serviceCharge_total.subtract(couponDiscount);
+//            }
+//            order.setCouponDiscountAmount(couponDiscount.setScale(2, RoundingMode.HALF_EVEN));
+//            order.setServiceCharge(serviceCharge_total.setScale(2, RoundingMode.HALF_EVEN));
+//            order.setPaymentAmount(payAmount.setScale(2, RoundingMode.HALF_EVEN));
+//            order.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
+//            order.setRefundStatus(1);
+//            chargingOrderService.updateById(order);
+//
+//            order = chargingOrderService.getById(order.getId());
+//
+//            //推送三方平台
+//            if (2 == order.getOrderSource()) {
+//                TChargingOrder finalChargingOrder = order;
+//                new Thread(new Runnable() {
+//                    @Override
+//                    public void run() {
+//                        tcecClient.notificationEquipChargeStatus(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId());
+//                        tcecClient.notificationStopChargeResult(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getChargingGunId().toString(),
+//                                finalChargingOrder.getOperatorId());
+//                        tcecClient.notificationChargeOrderInfo(finalChargingOrder.getStartChargeSeq(), finalChargingOrder.getOperatorId());
+//                    }
+//                }).start();
+//            }
+//
+//            //开始将优惠券优惠的金额添加到明细中
+//            BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
+//            if (null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0) {
+//                List<TChargingOrderAccountingStrategy> list1 = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, order.getId()));
+//                BigDecimal reduce = list1.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+//                for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list1) {
+//                    BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice();
+//                    BigDecimal multiply = couponDiscountAmount.multiply(periodServicePrice.divide(reduce, new MathContext(4, RoundingMode.HALF_EVEN)));
+//                    periodServicePrice = periodServicePrice.subtract(multiply);
+//                    chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice.setScale(2, RoundingMode.HALF_EVEN));
+//                    chargingOrderAccountingStrategy.setCouponDiscountAmount(multiply.setScale(2, RoundingMode.HALF_EVEN));
+//                }
+//                chargingOrderAccountingStrategyService.updateBatchById(list1);
+//            }
+//
+//            // 将枪状态重置为空闲
+//            TChargingGun chargingGun = new TChargingGun();
+//            chargingGun.setId(order.getChargingGunId());
+//            chargingGun.setStatus(2);
+//            chargingGun.setChargingPower(BigDecimal.ZERO);
+//            chargingGunClient.updateChargingGunById(chargingGun);
+//            //推送状态给三方平台
+//            if (2 == order.getOrderSource()) {
+//                tcecClient.pushChargingGunStatus(chargingGun.getFullNumber(), chargingGun.getStatus());
+//            }
+//
+//            //添加积分
+//            if (1 == order.getOrderSource()) {
+//                TIntegralRule integralRule = integralRuleClient.getSet().getData();
+//                if (null != integralRule) {
+//                    TAppUser appUser = appUserClient.getUserById(order.getAppUserId()).getData();
+//                    Integer num1 = com.alibaba.fastjson2.JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
+//                    Integer integral = order.getServiceCharge().intValue() * num1;
+//                    if (null != appUser.getVipId()) {
+//                        TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+//                        Integer doubleIntegration = vip.getDoubleIntegration();
+//                        //双倍积分
+//                        if (1 == doubleIntegration) {
+//                            integral *= 2;
+//                        }
+//                    }
+//
+//                    if (integral > 0) {
+//                        TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
+//                        appUserIntegralChange.setAppUserId(appUser.getId());
+//                        appUserIntegralChange.setChangeType(2);
+//                        appUserIntegralChange.setHistoricalIntegral(appUser.getPoints());
+//                        appUser.setPoints(appUser.getPoints() + integral);
+//                        appUserIntegralChange.setCurrentIntegral(appUser.getPoints());
+//                        appUserIntegralChange.setCreateTime(LocalDateTime.now());
+//                        appUserIntegralChange.setOrderCode(order.getCode());
+//                        appUserIntegralChange.setExtension(order.getId().toString());
+//                        appUserClient.updateAppUser(appUser);
+//                        appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
+//                    }
+//                }
+//
+//                //计算用户标签
+//                chargingOrderService.editUserTag(order);
+//                //用户推荐奖励
+//                chargingOrderService.referralReward(order);
+//
+//                //开始构建退款费用
+//                refundAmount = refundAmount.setScale(2, RoundingMode.HALF_EVEN);
+//                if (refundAmount.compareTo(BigDecimal.ZERO) > 0) {
+//                    Integer rechargePaymentType = order.getRechargePaymentType();
+//                    //构建退款明细
+//                    TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
+//                    chargingOrderRefund.setChargingOrderId(order.getId());
+//                    SimpleDateFormat sdfaa = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+//                    chargingOrderRefund.setRefundCode("CDF" + sdfaa.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
+//                    chargingOrderRefund.setRefundAmount(refundAmount);
+//                    chargingOrderRefund.setRefundStatus(1);
+//                    chargingOrderRefund.setPayType(rechargePaymentType);
+//                    chargingOrderRefund.setRefundStatus(1);
+//                    chargingOrderRefund.setCode(order.getCode());
+//                    chargingOrderRefund.setRefundTitle("充电完成退款");
+//                    chargingOrderRefund.setRefundContent("充电完成退款");
+//                    chargingOrderRefund.setRefundReason("充电完成退款");
+//                    chargingOrderRefund.setRefundRemark("实际充电消费金额:" + order.getPaymentAmount());
+//                    chargingOrderRefund.setRefundTotalAmount(refundAmount);
+//                    chargingOrderRefund.setPayAmount(rechargeAmount);
+//                    if (1 == rechargePaymentType) {
+//                        WxPaymentRefundModel model = new WxPaymentRefundModel();
+//                        model.setOut_trade_no(order.getCode());
+//                        model.setOut_refund_no(chargingOrderRefund.getRefundCode());
+//                        model.setReason("充电完成退款");
+//                        model.setNotify_url("/payment/wx/refund/notify");
+//                        WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
+//                        amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue());
+//                        amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+//                        amount.setCurrency("CNY");
+//                        model.setAmount(amount);
+//                        R<Map<String, Object>> result = wxPaymentClient.refundOrderR(model);
+//                        if (200 == result.getCode()) {
+//                            chargingOrderRefundService.save(chargingOrderRefund);
+//                            //手续费
+//                            Map<String, Object> amount1 = (Map<String, Object>) result.getData().get("amount");
+//                            Object refund_fee1 = amount1.get("refund_fee");
+//                            BigDecimal refund_fee = new BigDecimal(null == refund_fee1 ? "0" : refund_fee1.toString()).divide(new BigDecimal(100));
+//                            chargingOrderRefund.setRefundFee(refund_fee);
+//                            chargingOrderRefundService.updateById(chargingOrderRefund);
+//                        }
+//                    }
+//                    if (2 == rechargePaymentType) {
+//                        RefundReq dto = new RefundReq();
+//                        dto.setOutTradeNo(order.getCode());
+//                        dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
+//                        dto.setRefundAmount(refundAmount.toString());
+//                        dto.setRefundReason("充电完成退款");
+//                        RefundResp resp = aliPaymentClient.refund(dto).getData();
+//                        if (null != resp) {
+//                            chargingOrderRefundService.save(chargingOrderRefund);
+//                            chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+//                        }
+//                    }
+//                    if (3 == rechargePaymentType) {
+//                        RefundReq dto = new RefundReq();
+//                        dto.setOutTradeNo(order.getRechargeSerialNumber());
+//                        dto.setOutRequestNo(chargingOrderRefund.getRefundCode());
+//                        dto.setRefundAmount(refundAmount.toString());
+//                        dto.setRefundReason("充电完成退款");
+//                        RefundResp resp = h5AliPaymentClient.refund(dto).getData();
+//                        if (null != resp && "10000".equals(resp.getCode())) {
+//                            chargingOrderRefundService.save(chargingOrderRefund);
+//                            chargingOrderService.chargingOrderStartupFailureWxRefund(chargingOrderRefund.getRefundCode(), resp.getTradeNo(), "SUCCESS", null);
+//                        }
+//                    }
+//                }
+//            }
+//
+//            //添加汇总统计数据
+//            List<TChargingOrderAccountingStrategy> list4 = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>().eq("charging_order_id", order.getId()));
+//            BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+//            BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+//            BigDecimal chargingCapacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+//            BigDecimal serviceMoney = BigDecimal.ZERO;
+//            BigDecimal paymentMoney = BigDecimal.ZERO;
+//            long time = 0;
+//            if (!order.getOrderSource().equals(2)) {
+//                serviceMoney = serviceMoney.add(service_reduce);
+//                paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce);
+//            } else {
+//                serviceMoney = serviceMoney.add(service_reduce.multiply(new BigDecimal("0.8")));
+//                paymentMoney = paymentMoney.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")));
+//            }
+//            if (order.getStartTime() != null && order.getEndTime() != null) {
+//                time = ChronoUnit.SECONDS.between(order.getStartTime(), order.getEndTime());
+//            }
+//            TChargingOrderSummaryData summaryData = new TChargingOrderSummaryData();
+//            summaryData.setChargingOrderId(order.getId());
+//            summaryData.setChargingCapacity(chargingCapacity);
+//            summaryData.setChargingDuration(time);
+//            summaryData.setIncome(paymentMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+//            summaryData.setElectricPrice(electronic_reduce.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+//            summaryData.setServicePrice(serviceMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN));
+//            chargingOrderSummaryDataService.save(summaryData);
+//
+//            //推送监管平台订单状态和订单详情
+//            ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
+//            BeanUtils.copyProperties(order, chargingOrderVo);
+//            chargingMessageClient.pushOrderInfo(chargingOrderVo);
+//            chargingMessageClient.pushOrderStatus(chargingOrderVo);
+//        }
+//    }
 //}

--
Gitblit v1.7.1