From 1266ed302b259f09a9370bc4315316b8a212b5d0 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期日, 26 一月 2025 11:42:35 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java                              |   27 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java                                 |  135 ++++++++++-
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java                                       |    9 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java                             |    3 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java              |   17 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java                      |   12 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/PlaceHolderPrice.java                         |   32 ++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStartChargeResult.java                   |    1 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java                              |   15 +
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java                 |    8 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OperatorFallbackFactory.java                                 |    5 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/QueryTerminalCode.java               |   19 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/PlaceHolder.java                              |   42 +++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationInfo.java                              |   10 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java                                 |    5 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorInfo.java                            |    5 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java                                       |   30 ++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/TCECKDUtil.java                            |  159 +++++++++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/QueryTerminalCodeResult.java         |   19 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OperatorController.java                                       |   13 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/StationChange.java                   |   31 ++
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java                   |    7 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationsInfoResult.java                  |    6 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java                     |    1 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/NotificationStationChangeResult.java |   40 +++
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AddTripartitePlatformOrder.java                                |    6 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OperatorClient.java                                      |   10 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java                          |    9 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java                      |   14 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStartCharge.java                         |    6 
 30 files changed, 650 insertions(+), 46 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java
index 3caeadd..96a375a 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java
@@ -34,7 +34,13 @@
             public R<TParkingLot> getLotBySiteId(Integer siteId) {
                 return R.fail("通过站点id查询停车场信息调用失败:" + throwable.getMessage());
             }
-
+    
+    
+            @Override
+            public R<List<TParkingLot>> getAllParkingLot() {
+                return R.fail("获取所有停车场数据失败:" + throwable.getMessage());
+            }
+    
             @Override
             public R<TParkingRecord> getRecordById(Long siteId) {
                 return R.fail("通过id查询停车场记录:" + throwable.getMessage());
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java
index d1fd062..0aa4b11 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java
@@ -27,13 +27,21 @@
      * 通过站点id查询停车场信息
      */
     @PostMapping(value = "/t-parking-lot/getLotBySiteId")
-    public R<TParkingLot> getLotBySiteId(@RequestParam("siteId") Integer siteId);
+    R<TParkingLot> getLotBySiteId(@RequestParam("siteId") Integer siteId);
+    
+    /**
+     * 获取所有停车场数据
+     */
+    @PostMapping(value = "/t-parking-lot/getAllParkingLot")
+    R<List<TParkingLot>> getAllParkingLot();
+    
+    
 
     @GetMapping(value = "/t-parking-lot/getRecordById")
-    public R<TParkingRecord> getRecordById(@RequestParam("id") Long siteId);
+    R<TParkingRecord> getRecordById(@RequestParam("id") Long siteId);
 
     @PostMapping(value = "/t-parking-lot/getRecordAmount")
-    public R<BigDecimal> getRecordAmount(@RequestParam("sixBefore") LocalDate sixBefore);
+    R<BigDecimal> getRecordAmount(@RequestParam("sixBefore") LocalDate sixBefore);
     
     
     /**
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java
index ddd9bce..977ca77 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java
@@ -5,6 +5,8 @@
 import com.ruoyi.integration.api.vo.StartChargeResult;
 import org.springframework.cloud.openfeign.FallbackFactory;
 
+import java.util.List;
+
 /**
  * @author zhibing.pu
  * @Date 2025/1/24 10:33
@@ -40,6 +42,11 @@
 			public R notificationChargeOrderInfo(String startChargeSeq, Integer operatorId) {
 				return R.fail("推送订单信息失败:" + cause.getMessage());
 			}
+			
+			@Override
+			public R notificationStationChange(List<Integer> siteIds) {
+				return R.fail("站点变更推送通知失败:" + cause.getMessage());
+			}
 		};
 	}
 }
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java
index 8e7e738..9c3535b 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java
@@ -9,6 +9,8 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.util.List;
+
 /**
  * @author zhibing.pu
  * @Date 2025/1/24 10:32
@@ -64,6 +66,17 @@
 	 * @param startChargeSeq
 	 * @return
 	 */
-	@PostMapping("/notificationChargeOrderInfo")
+	@PostMapping("/evcs/v1.0/notificationChargeOrderInfo")
 	R notificationChargeOrderInfo(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("operatorId") Integer operatorId);
+	
+	
+	
+	
+	/**
+	 * 站点变更推送通知
+	 * @param siteIds
+	 * @return
+	 */
+	@PostMapping("/evcs/v1.0/notificationStationChange")
+	R notificationStationChange(@RequestParam("siteIds") List<Integer> siteIds);
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AddTripartitePlatformOrder.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AddTripartitePlatformOrder.java
index fc54026..5c3b5f6 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AddTripartitePlatformOrder.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AddTripartitePlatformOrder.java
@@ -2,6 +2,7 @@
 
 import lombok.Data;
 
+import javax.validation.constraints.Null;
 import java.math.BigDecimal;
 
 /**
@@ -30,4 +31,9 @@
 	 * 充电余额
 	 */
 	private BigDecimal paymentAmount;
+	/**
+	 * 充电车牌号
+	 */
+	@Null
+	private String PlateNum;
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OperatorFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OperatorFallbackFactory.java
index 53ccf8e..c7ae376 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OperatorFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OperatorFallbackFactory.java
@@ -24,6 +24,11 @@
 			}
 			
 			@Override
+			public R<Operator> getOperatorByName(String name) {
+				return R.fail("获取运营商数据失败:" + cause.getMessage());
+			}
+			
+			@Override
 			public R<Operator> getOperator(String operatorId) {
 				return R.fail("获取运营商数据失败:" + cause.getMessage());
 			}
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OperatorClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OperatorClient.java
index d75bc3a..3578a2f 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OperatorClient.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OperatorClient.java
@@ -30,6 +30,16 @@
 	
 	/**
 	 * 获取运营商数据
+	 * @param name
+	 * @return
+	 */
+	@PostMapping("/operator/getOperatorByName")
+	R<Operator> getOperatorByName(@RequestParam("name") String name);
+	
+	
+	
+	/**
+	 * 获取运营商数据
 	 * @param operatorId
 	 * @return
 	 */
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
index ae4c353..b897691 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -332,8 +332,7 @@
 		return R.ok(divide);
 	}
 
-	@Resource
-    private SiteClient siteClient;
+	
 
 
 	
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
index de5b1ac..987610b 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -28,6 +28,7 @@
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.integration.api.feignClient.IntegrationClient;
+import com.ruoyi.integration.api.feignClient.TCECClient;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import io.swagger.annotations.ApiOperation;
@@ -44,6 +45,7 @@
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 import static com.ruoyi.common.core.context.SecurityContextHolder.getUserId;
 
@@ -66,11 +68,14 @@
     private TChargingPileService chargingPileService;
     @Autowired
     private ISiteService siteService;
-    @Autowired
+    @Resource
     private SysUserClient sysUserClient;
     
     @Resource
     private IntegrationClient integrationClient;
+    
+    @Resource
+    private TCECClient tcecClient;
 
 
     @Autowired
@@ -386,12 +391,12 @@
                         site.setAccountingStrategyId(byId.getId());
                     }
                     siteService.updateBatchById(list);
-                    //
-                    
-
-
-                    //
                     accountingStrategyService.removeById(one.getId());
+    
+                    //推送三方平台
+                    List<Integer> siteIds = list.stream().map(Site::getId).collect(Collectors.toList());
+                    tcecClient.notificationStationChange(siteIds);
+                    
                 }
                 //硬件
     
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java
index f3c6b43..cbf61a2 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java
@@ -158,6 +158,18 @@
     }
     
     
+    /**
+     * 获取所有停车场数据
+     */
+    @PostMapping(value = "/getAllParkingLot")
+    public R<List<TParkingLot>> getAllParkingLot(){
+        List<TParkingLot> list = parkingLotService.list(new LambdaQueryWrapper<TParkingLot>().eq(TParkingLot::getDelFlag, 0));
+        return R.fail(list);
+    }
+    
+    
+    
+    
     @RequiresPermissions(value = {"/paymentOrder/order"}, logical = Logical.OR)
     @GetMapping(value = "/getRecordById")
     public R<TParkingRecord> getRecordById(@RequestParam("id") Long id){
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
index aa55790..d46361c 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -25,6 +25,7 @@
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.integration.api.feignClient.IntegrationClient;
+import com.ruoyi.integration.api.feignClient.TCECClient;
 import com.ruoyi.other.api.domain.TVip;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.other.api.feignClient.UserSiteClient;
@@ -72,8 +73,6 @@
 	@Resource
 	private AppUserClient appUserClient;
 	@Resource
-	private VipClient vipClient;
-	@Resource
 	private SysUserRoleClient sysUserRoleClient;
 	@Resource
 	private TParkingLotService parkingLotService;
@@ -88,6 +87,9 @@
 	
 	@Resource
 	private TPartnerSiteService partnerSiteService;
+	
+	@Resource
+	private TCECClient tcecClient;
 	
 	
 	/**
@@ -462,5 +464,8 @@
 		for (TChargingPile tChargingPile : list1) {
 			integrationClient.setupBillingModel1(tChargingPile.getCode(), JSON.toJSONString(accountingStrategyDetails));
 		}
+		
+		//推送三方平台
+		tcecClient.notificationStationChange(Arrays.asList(id));
 	}
 }
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 71d189a..ca33eb3 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
@@ -1,18 +1,16 @@
 package com.ruoyi.integration.drainage;
 
 import com.alibaba.fastjson.JSON;
-import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient;
-import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
-import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
-import com.ruoyi.chargingPile.api.feignClient.SiteClient;
-import com.ruoyi.chargingPile.api.model.Site;
-import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
-import com.ruoyi.chargingPile.api.model.TChargingGun;
-import com.ruoyi.chargingPile.api.model.TChargingPile;
+import com.ruoyi.chargingPile.api.feignClient.*;
+import com.ruoyi.chargingPile.api.model.*;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.integration.drainage.kuaidian.TCECKDUtil;
+import com.ruoyi.integration.drainage.kuaidian.model.NotificationStationChangeResult;
+import com.ruoyi.integration.drainage.kuaidian.model.QueryTerminalCode;
+import com.ruoyi.integration.drainage.kuaidian.model.QueryTerminalCodeResult;
 import com.ruoyi.integration.drainage.model.*;
 import com.ruoyi.integration.drainage.model.enu.*;
 import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
@@ -73,6 +71,10 @@
 	private TokenUtil tokenUtil;
 	
 	private static Map<Long, Integer> map = new HashMap<>();
+	
+	@Resource
+	private ParkingLotClient parkingLotClient;
+	
 	
 	
 	/**
@@ -234,11 +236,12 @@
 			pageSize = 10;
 		}
 		PageInfo<Site> siteListPaging = siteClient.getSiteListPaging(pageNo, pageSize);
+		List<TParkingLot> parkingLots = parkingLotClient.getAllParkingLot().getData();
 		QueryStationsInfoResult queryStationsInfoResult = new QueryStationsInfoResult();
 		queryStationsInfoResult.setPageNo(pageNo);
 		queryStationsInfoResult.setPageCount((0 == (siteListPaging.getTotal() % pageSize) ? 0 : 1) + Double.valueOf(siteListPaging.getTotal() / pageSize).intValue());
 		queryStationsInfoResult.setItemSize(Long.valueOf(siteListPaging.getTotal()).intValue());
-		queryStationsInfoResult.setStationInfos(buildSite(siteListPaging.getRecords()));
+		queryStationsInfoResult.setStationInfos(buildSite(parkingLots, siteListPaging.getRecords()));
 		//参数加密
 		String jsonString = JSON.toJSONString(queryStationsInfoResult);
 		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
@@ -253,7 +256,7 @@
 	 * @param sites
 	 * @return
 	 */
-	public List<StationInfo> buildSite(List<Site> sites){
+	public List<StationInfo> buildSite(List<TParkingLot> parkingLots, List<Site> sites){
 		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());
@@ -312,12 +315,42 @@
 			stationInfo.setMatchCars(datum.getVehicleDescription());
 			stationInfo.setBusineHours(datum.getStartServiceTime() + "-" + datum.getEndServiceTime());
 			stationInfo.setElectricityFee(datum.getRateDescription());
+			//添加停车费信息
+			Optional<TParkingLot> first = parkingLots.stream().filter(s -> s.getSiteId().equals(datum.getId())).findFirst();
+			if(first.isPresent()){
+				TParkingLot tParkingLot = first.get();
+				buildPlaceHolder(tParkingLot, stationInfo);
+			}
+			
 			//构建充电设备信息数据
 			stationInfo.setEquipmentInfos(buildEquipmentInfo(datum.getId(), tChargingPiles, chargingGunList));
 			StationInfos.add(stationInfo);
+			
 		}
 		return StationInfos;
 	}
+	
+	
+	/**
+	 * 构建停车费信息
+	 * @param tParkingLot
+	 * @param stationInfo
+	 */
+	public void buildPlaceHolder(TParkingLot tParkingLot, StationInfo stationInfo){
+		stationInfo.setOvertimeFee(tParkingLot.getName() + "停车费");
+		PlaceHolder placeHolder = new PlaceHolder();
+		placeHolder.setFreeTime(tParkingLot.getChargeFreeDuration());
+		placeHolder.setMaxFee(tParkingLot.getChargeCapping());
+		List<PlaceHolderPrice> PlaceHolderPrices = new ArrayList<>();
+		PlaceHolderPrice placeHolderPrice = new PlaceHolderPrice();
+		placeHolderPrice.setStartTime("00:00");
+		placeHolderPrice.setEndTime("23:59");
+		placeHolderPrice.setPrice(tParkingLot.getChargeRate());
+		PlaceHolderPrices.add(placeHolderPrice);
+		placeHolder.setPlaceHolderPrices(PlaceHolderPrices);
+		stationInfo.setPlaceHolder(placeHolder);
+	}
+	
 	
 	
 	
@@ -357,7 +390,7 @@
 			}
 			
 			//构建设备接口信息
-			equipmentInfo.setConnectorInfos(buildConnectorInfos(tChargingPile.getId(), chargingGunList));
+			equipmentInfo.setConnectorInfos(buildConnectorInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList));
 			equipmentInfos.add(equipmentInfo);
 		}
 		return equipmentInfos;
@@ -369,7 +402,7 @@
 	 * @param chargingGunList
 	 * @return
 	 */
-	public List<ConnectorInfo> buildConnectorInfos(Integer chargingPileId, List<TChargingGun> chargingGunList){
+	public List<ConnectorInfo> buildConnectorInfos(Integer chargingPileId, String code, List<TChargingGun> chargingGunList){
 		List<ConnectorInfo> connectorInfos = new ArrayList<>();
 		List<TChargingGun> collect = chargingGunList.stream().filter(s -> s.getChargingPileId().equals(chargingPileId)).collect(Collectors.toList());
 		for (TChargingGun chargingGun : collect) {
@@ -402,6 +435,7 @@
 			connectorInfo.setPower(chargingGun.getRatedPower());
 			connectorInfo.setParkNo(chargingGun.getParkingNumber());
 			connectorInfo.setNationalStandard(Integer.valueOf(chargingGun.getNationalStandard()));
+			connectorInfo.setQRCode("https://mxcd.zhinenganguan.com?No=" + code + chargingGun.getCode());
 			connectorInfos.add(connectorInfo);
 		}
 		return connectorInfos;
@@ -732,6 +766,49 @@
 	
 	
 	/**
+	 * 站点变更推送通知(快电)
+	 * @param siteIds
+	 * @return
+	 */
+	@PostMapping("/notificationStationChange")
+	public R notificationStationChange(@RequestParam("siteIds") List<Integer> siteIds){
+		Operator operator = operatorClient.getOperatorByName("KuaiDian").getData();
+		NotificationStationChangeResult notificationStationChange = TCECKDUtil.notificationStationChange(operator, 3, siteIds);
+		//启动重试推送机制
+		if(null == notificationStationChange || 1 == notificationStationChange.getSuccStat()){
+			ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
+			threadPoolExecutor.execute(new Runnable() {
+				//计数器
+				Integer size = 0;
+				@Override
+				public void run() {
+					NotificationStationChangeResult notificationStationChange1 = TCECKDUtil.notificationStationChange(operator, 3, siteIds);
+					//启动重试推送机制
+					if(null != notificationStationChange1 && 0 == notificationStationChange1.getSuccStat()){
+						threadPoolExecutor.shutdown();
+						return;
+					}
+					size++;
+					if(size >= 5){
+						threadPoolExecutor.shutdown();
+						return;
+					}
+					//间隔一分钟重试一次
+					try {
+						Thread.sleep(60000);
+					} catch (InterruptedException e) {
+						throw new RuntimeException(e);
+					}
+				}
+			});
+		}
+		return R.ok();
+	}
+	
+	
+	
+	
+	/**
 	 * 请求定充电
 	 * @return
 	 */
@@ -788,6 +865,7 @@
 		addTripartitePlatformOrder.setOperatorId(operator.getOperatorId());
 		addTripartitePlatformOrder.setPaymentAmount(queryStartCharge.getPaymentAmount());
 		addTripartitePlatformOrder.setRechargePaymentType(queryStartCharge.getPaymentType());
+		addTripartitePlatformOrder.setPlateNum(queryStartCharge.getPlateNum());
 		R order = chargingOrderClient.addTripartitePlatformOrder(addTripartitePlatformOrder);
 		//启动失败
 		if(200 != order.getCode()){
@@ -1238,4 +1316,37 @@
 		notificationChargeOrderInfo.setChargeDetails(chargeDetails);
 		return notificationChargeOrderInfo;
 	}
+	
+	
+	/**
+	 * 二维码查询抢号(快电)
+	 * @param baseRequest
+	 * @param request
+	 * @return
+	 */
+	@PostMapping("/query_terminal_code")
+	public BaseResult queryTerminalCode(@RequestBody BaseRequest baseRequest, HttpServletRequest request){
+		//校验token和签名
+		BaseResult baseResult = requestCheck(true, baseRequest, request);
+		if(0 != baseResult.getRet()){
+			baseResult.setData("");
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
+			return baseResult;
+		}
+		Operator operator = baseResult.getOperator();
+		//解密参数
+		String decrypt = AESUtil.decrypt(baseRequest.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		QueryTerminalCode queryTerminalCode = JSON.parseObject(decrypt, QueryTerminalCode.class);
+		String qrCode = queryTerminalCode.getQRCode();
+		String substring = qrCode.substring(qrCode.indexOf("=") + 1);
+		QueryTerminalCodeResult queryTerminalCodeResult = new QueryTerminalCodeResult();
+		queryTerminalCodeResult.setTerminalCode(substring);
+		
+		//参数加密
+		String jsonString = JSON.toJSONString(queryTerminalCodeResult);
+		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		baseResult.setData(encrypt);
+		baseResult.setSig(TCECUtil.buildSign(baseResult));
+		return baseResult;
+	}
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
index 697d9d9..397691b 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
@@ -4,6 +4,8 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.common.core.utils.SpringUtils;
+import com.ruoyi.integration.drainage.kuaidian.model.NotificationStationChangeResult;
+import com.ruoyi.integration.drainage.kuaidian.model.StationChange;
 import com.ruoyi.integration.drainage.model.*;
 import com.ruoyi.integration.drainage.model.enu.InterfaceUrlEnum;
 import com.ruoyi.other.api.domain.Operator;
@@ -15,7 +17,9 @@
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 中电联TCEC标准
@@ -96,6 +100,32 @@
 	
 	
 	/**
+	 * 站点变更通知
+	 * @param operator
+	 * @param type
+	 * @param siteIds
+	 * @return
+	 */
+	public static NotificationStationChangeResult notificationStationChange(Operator operator, Integer type, List<Integer> siteIds) {
+		StationChange stationChange = new StationChange();
+		stationChange.setOperatorId(OperatorID);
+		stationChange.setType(type);
+		List<String> collect = siteIds.stream().map(String::valueOf).collect(Collectors.toList());
+		stationChange.setStationIds(collect);
+		HttpRequest post = HttpUtil.createPost(operator.getTestUrl() + InterfaceUrlEnum.NOTIFICATION_STATION_CHANGE.getUrl());
+		buildBody(post, stationChange, operator);
+		HttpResponse execute = post.execute();
+		if(200 != execute.getStatus()){
+			log.error("推送站点变更通知失败:" + execute.body());
+			return null;
+		}
+		return JSON.parseObject(execute.body(), NotificationStationChangeResult.class);
+	}
+	
+	
+	
+	
+	/**
 	 * 推送启动充电结果
 	 * @param info
 	 * @return
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/TCECKDUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/TCECKDUtil.java
new file mode 100644
index 0000000..71d41df
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/TCECKDUtil.java
@@ -0,0 +1,159 @@
+package com.ruoyi.integration.drainage.kuaidian;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.utils.SpringUtils;
+import com.ruoyi.integration.drainage.AESUtil;
+import com.ruoyi.integration.drainage.SignUtil;
+import com.ruoyi.integration.drainage.kuaidian.model.NotificationStationChangeResult;
+import com.ruoyi.integration.drainage.kuaidian.model.StationChange;
+import com.ruoyi.integration.drainage.model.*;
+import com.ruoyi.integration.drainage.model.enu.InterfaceUrlEnum;
+import com.ruoyi.other.api.domain.Operator;
+import com.ruoyi.other.api.feignClient.OperatorClient;
+import lombok.extern.slf4j.Slf4j;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 中电联TCEC标准(快电)
+ * @author zhibing.pu
+ * @Date 2025/1/21 11:48
+ */
+@Slf4j
+public class TCECKDUtil {
+	/**
+	 * 运营商标识
+	 */
+	private static final String OperatorID = "";
+	
+	private static OperatorClient operatorClient = SpringUtils.getBean(OperatorClient.class);
+	
+	private static Map<Long, Integer> map = new HashMap<>();
+	
+	
+	/**
+	 * 获取token
+	 */
+	public static String queryToken(Operator operator){
+		HttpRequest post = HttpUtil.createPost("");
+		post.contentType("application/json;charset=utf-8");
+		JSONObject body = new JSONObject();
+		body.put("OperatorID", OperatorID);
+		body.put("OperatorSecret", operator.getOurOperatorSecret());
+		post.body(body.toJSONString());
+		HttpResponse execute = post.execute();
+		if(200 != execute.getStatus()){
+			log.error("获取三方token失败:" + execute.body());
+			return null;
+		}
+		JSONObject jsonObject = JSON.parseObject(execute.body());
+		Integer succStat = jsonObject.getInteger("SuccStat");
+		if(0 != succStat){
+			log.error("获取三方token失败:" + jsonObject.getString("FailReason"));
+			return null;
+		}
+		String token = jsonObject.getString("AccessToken");
+		Long tokenAvailableTime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC) + jsonObject.getLong("TokenAvailableTime");
+		LocalDateTime localDateTime = Instant.ofEpochSecond(tokenAvailableTime).atOffset(ZoneOffset.UTC).toLocalDateTime();
+		operator.setAccessToken(token);
+		operator.setTokenAvailableTime(localDateTime);
+		operatorClient.editOperator(operator);
+		return token;
+	}
+	
+	
+	/**
+	 * 获取token
+	 * @return
+	 */
+	public static String getToken(Operator operator){
+		if(null != operator.getTokenAvailableTime() && operator.getTokenAvailableTime().isBefore(LocalDateTime.now())){
+			return operator.getAccessToken();
+		}else{
+			return queryToken(operator);
+		}
+	}
+	
+	
+	
+	
+	/**
+	 * 站点变更通知
+	 * @param operator
+	 * @param type
+	 * @param siteIds
+	 * @return
+	 */
+	public static NotificationStationChangeResult notificationStationChange(Operator operator, Integer type, List<Integer> siteIds) {
+		StationChange stationChange = new StationChange();
+		stationChange.setOperatorId(OperatorID);
+		stationChange.setType(type);
+		List<String> collect = siteIds.stream().map(String::valueOf).collect(Collectors.toList());
+		stationChange.setStationIds(collect);
+		HttpRequest post = HttpUtil.createPost(operator.getTestUrl() + InterfaceUrlEnum.NOTIFICATION_STATION_CHANGE.getUrl());
+		buildBody(post, stationChange, operator);
+		HttpResponse execute = post.execute();
+		if(200 != execute.getStatus()){
+			log.error("推送站点变更通知失败:" + execute.body());
+			return null;
+		}
+		return JSON.parseObject(execute.body(), NotificationStationChangeResult.class);
+	}
+	
+	
+	
+	/**
+	 * 构建请求参数和消息头
+	 * @param post
+	 * @param o
+	 */
+	public static void buildBody(HttpRequest post, Object o, Operator operator){
+		Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+		Integer integer = map.get(timeStamp);
+		if(null == integer){
+			integer = 1;
+		}else{
+			integer++;
+		}
+		map.put(timeStamp, integer);
+		post.contentType("application/json;charset=utf-8");
+		post.header("Authorization", "Bearer " + getToken(operator));
+		BaseRequest baseRequest = new BaseRequest();
+		baseRequest.setOperatorID(OperatorID);
+		baseRequest.setTimeStamp(timeStamp);
+		baseRequest.setSeq(String.format("%04d", integer));
+		String jsonString = JSON.toJSONString(o);
+		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		baseRequest.setData(encrypt);
+		baseRequest.setOperator(operator);
+		baseRequest.setSig(buildSign(baseRequest));
+		post.body(JSON.toJSONString(baseRequest));
+		//清空小于当前时间的map中的无效数据
+		for (Long k : map.keySet()) {
+			if(k <= (timeStamp - 10)){
+				map.remove(k);
+			}
+		}
+	}
+	
+	
+	public static String buildSign(BaseModel model){
+		Operator operator = model.getOperator();
+		//签名秘钥SigSecret
+		String key = operator.getSigSecret();
+		String sign = SignUtil.hmacSign(model.getData(), key);
+		return sign;
+	}
+	
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/NotificationStationChangeResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/NotificationStationChangeResult.java
new file mode 100644
index 0000000..66112ef
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/NotificationStationChangeResult.java
@@ -0,0 +1,40 @@
+package com.ruoyi.integration.drainage.kuaidian.model;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 站点变更通知返回结果
+ * @author zhibing.pu
+ * @Date 2025/1/26 10:45
+ */
+@Data
+public class NotificationStationChangeResult {
+	/**
+	 * 运营商ID
+	 */
+	@NotNull
+	private String OperatorId;
+	/**
+	 * 站点ID
+	 */
+	@NotNull
+	private List<String> StationIds;
+	/**
+	 * 成功状态
+	 * 0:成功
+	 * 1:失败
+	 */
+	@NotNull
+	private Integer SuccStat;
+	/**
+	 * 失败原因
+	 * 0:无
+	 * 1:无效站点
+	 * 2`9:自定义
+	 */
+	@NotNull
+	private Integer FailReason;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/QueryTerminalCode.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/QueryTerminalCode.java
new file mode 100644
index 0000000..444776a
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/QueryTerminalCode.java
@@ -0,0 +1,19 @@
+package com.ruoyi.integration.drainage.kuaidian.model;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 二维码查询抢号
+ * @author zhibing.pu
+ * @Date 2025/1/26 11:12
+ */
+@Data
+public class QueryTerminalCode {
+	/**
+	 * 二维码信息
+	 */
+	@NotNull
+	private String QRCode;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/QueryTerminalCodeResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/QueryTerminalCodeResult.java
new file mode 100644
index 0000000..2d022ee
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/QueryTerminalCodeResult.java
@@ -0,0 +1,19 @@
+package com.ruoyi.integration.drainage.kuaidian.model;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 二维码查询抢号结果
+ * @author zhibing.pu
+ * @Date 2025/1/26 11:18
+ */
+@Data
+public class QueryTerminalCodeResult {
+	/**
+	 * 枪号
+	 */
+	@NotNull
+	private String TerminalCode;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/StationChange.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/StationChange.java
new file mode 100644
index 0000000..a51ffd4
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/kuaidian/model/StationChange.java
@@ -0,0 +1,31 @@
+package com.ruoyi.integration.drainage.kuaidian.model;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 站点变更通知
+ * @author zhibing.pu
+ * @Date 2025/1/26 10:34
+ */
+@Data
+public class StationChange {
+	/**
+	 * 运营商ID
+	 */
+	@NotNull
+	private String operatorId;
+	/**
+	 * 变更类型
+	 * 3:站点计费策略变更
+	 */
+	@NotNull
+	private Integer type;
+	/**
+	 * 站点ID
+	 */
+	@NotNull
+	private List<String> stationIds;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorInfo.java
index 80af044..8fefa8f 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorInfo.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorInfo.java
@@ -60,4 +60,9 @@
 	 */
 	@NotNull
 	private Integer NationalStandard;
+	/**
+	 * 枪二维码
+	 */
+	@Null
+	private String QRCode;
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/PlaceHolder.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/PlaceHolder.java
new file mode 100644
index 0000000..e89e38a
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/PlaceHolder.java
@@ -0,0 +1,42 @@
+package com.ruoyi.integration.drainage.model;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 占位费信息
+ * @author zhibing.pu
+ * @Date 2025/1/26 9:29
+ */
+@Data
+public class PlaceHolder {
+	/**
+	 * 免费时长
+	 */
+	@NotNull
+	private Integer FreeTime;
+	/**
+	 * 嘴阀占位费
+	 */
+	@NotNull
+	private BigDecimal MaxFee;
+	/**
+	 * 生效开始时间
+	 * yyyy-MM-dd HH:mm:ss
+	 */
+	@NotNull
+	private String EffectStartTime;
+	/**
+	 * 生效结束时间
+	 */
+	@NotNull
+	private String EffectEndTime;
+	/**
+	 * 占位费价格
+	 */
+	@NotNull
+	private List<PlaceHolderPrice> PlaceHolderPrices;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/PlaceHolderPrice.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/PlaceHolderPrice.java
new file mode 100644
index 0000000..0eca7ff
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/PlaceHolderPrice.java
@@ -0,0 +1,32 @@
+package com.ruoyi.integration.drainage.model;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * 占位费价格
+ * @author zhibing.pu
+ * @Date 2025/1/26 9:33
+ */
+@Data
+public class PlaceHolderPrice {
+	/**
+	 * 开始时段
+	 * HH:mm
+	 */
+	@NotNull
+	private String StartTime;
+	/**
+	 * 结束时段
+	 * HH:mm
+	 */
+	@NotNull
+	private String EndTime;
+	/**
+	 * 单价
+	 */
+	@NotNull
+	private BigDecimal Price;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStartCharge.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStartCharge.java
index 358f366..e930446 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStartCharge.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStartCharge.java
@@ -3,6 +3,7 @@
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Null;
 import java.math.BigDecimal;
 
 /**
@@ -37,4 +38,9 @@
 	 */
 	@NotNull
 	private BigDecimal paymentAmount;
+	/**
+	 * 充电车牌号
+	 */
+	@Null
+	private String PlateNum;
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStartChargeResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStartChargeResult.java
index 2cf489c..d806590 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStartChargeResult.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStartChargeResult.java
@@ -3,6 +3,7 @@
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Null;
 
 /**
  * 请求启动充电返回结果
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationsInfoResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationsInfoResult.java
index dced6d5..2a5febd 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationsInfoResult.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationsInfoResult.java
@@ -2,6 +2,8 @@
 
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Null;
 import java.util.List;
 
 /**
@@ -14,17 +16,21 @@
 	/**
 	 * 当前页数
 	 */
+	@NotNull
 	private Integer PageNo;
 	/**
 	 * 页码总数
 	 */
+	@NotNull
 	private Integer PageCount;
 	/**
 	 * 总记录条数
 	 */
+	@NotNull
 	private Integer ItemSize;
 	/**
 	 * 充电站信息列表
 	 */
+	@NotNull
 	private List<StationInfo> StationInfos;
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationInfo.java
index 9acbf16..5a21d0f 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationInfo.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationInfo.java
@@ -151,4 +151,14 @@
 	 */
 	@NotNull
 	private List<EquipmentInfo> EquipmentInfos;
+	/**
+	 * 占位费描述
+	 */
+	@Null
+	private String OvertimeFee;
+	/**
+	 * 占位费信息
+	 */
+	@Null
+	private PlaceHolder PlaceHolder;
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java
index c609fed..1316226 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java
@@ -7,6 +7,7 @@
  */
 public enum InterfaceUrlEnum {
 	NOTIFICATION_STATION_STATUS("/notification_station_status", "设备状态变化推送"),
+	NOTIFICATION_STATION_CHANGE("/notification_station_change", "站点计费策略变更推送"),
 	NOTIFICATION_START_CHARGE_RESULT("/notification_start_charge_result", "推送启动充电结果"),
 	NOTIFICATION_EQUIP_CHARGE_STATUS("/notification_equip_charge_status", "推送充电状态"),
 	NOTIFICATION_STOP_CHARGE_RESULT("/notification_stop_charge_result", "推送停止充电结果"),
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 2b730f5..cd0f8ee 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
@@ -2101,10 +2101,7 @@
      */
     @PostMapping("/addTripartitePlatformOrder")
     public R addTripartitePlatformOrder(@RequestBody AddTripartitePlatformOrder query){
-        return chargingOrderService.addTripartitePlatformOrder(query.getChargingGunId(), query.getOperatorId(),
-                query.getRechargePaymentType(),
-                query.getPaymentAmount(),
-                query.getStartChargeSeq());
+        return chargingOrderService.addTripartitePlatformOrder(query);
     }
     
     
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 175381f..61f43bf 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
@@ -7,10 +7,7 @@
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.order.api.dto.SettlementConfirmAdd;
-import com.ruoyi.order.api.model.ChargingListQuery;
-import com.ruoyi.order.api.model.TChargingOrder;
-import com.ruoyi.order.api.model.TChargingOrderRefund;
-import com.ruoyi.order.api.model.TSettlementConfirm;
+import com.ruoyi.order.api.model.*;
 import com.ruoyi.order.api.query.ChargingOrderQuery;
 import com.ruoyi.order.api.query.SettlementListQuery;
 import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
@@ -292,9 +289,9 @@
 	
 	/**
 	 * 添加三方平台充电订单数据
-	 * @param chargingGunId
+	 * @param query
 	 */
-	R addTripartitePlatformOrder(Integer chargingGunId, String operatorId, Integer rechargePaymentType, BigDecimal paymentAmount, String startChargeSeq);
+	R addTripartitePlatformOrder(AddTripartitePlatformOrder query);
 	
 	
 	/**
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index c10feaf..461958a 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
@@ -4019,12 +4019,12 @@
 	
 	/**
 	 * 添加三方平台充电订单数据
-	 * @param chargingGunId
+	 * @param query
 	 */
 	@Override
-	public R addTripartitePlatformOrder(Integer chargingGunId, String operatorId, Integer rechargePaymentType, BigDecimal paymentAmount, String startChargeSeq) {
+	public R addTripartitePlatformOrder(AddTripartitePlatformOrder query) {
 		//检查当前枪是否是正在使用中
-		TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, chargingGunId)
+		TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, query.getChargingGunId())
 				.in(TChargingOrder::getStatus, Arrays.asList(1, 2, 3)).eq(TChargingOrder::getDelFlag, 0));
 		if(null != one){
 			return R.fail("充电枪正在充电中,启动失败");
@@ -4037,21 +4037,30 @@
 		chargingOrder.setCode(code);
 		chargingOrder.setOrderType(1);
 		chargingOrder.setOrderClassification(1);
-		TChargingGun tChargingGun = chargingGunClient.getChargingGunById(chargingGunId).getData();
+		TChargingGun tChargingGun = chargingGunClient.getChargingGunById(query.getChargingGunId()).getData();
 		TChargingPile chargingPile = chargingPileClient.getChargingPileById(tChargingGun.getChargingPileId()).getData();
 		chargingOrder.setSiteId(tChargingGun.getSiteId());
 		chargingOrder.setChargingPileId(tChargingGun.getChargingPileId());
-		chargingOrder.setChargingGunId(chargingGunId);
-		chargingOrder.setRechargePaymentType(rechargePaymentType);
+		chargingOrder.setChargingGunId(query.getChargingGunId());
+		chargingOrder.setRechargePaymentType(query.getRechargePaymentType());
 		chargingOrder.setRechargePaymentStatus(2);
-		chargingOrder.setRechargeAmount(paymentAmount);
+		chargingOrder.setRechargeAmount(query.getPaymentAmount());
 		chargingOrder.setVipDiscountAmount(BigDecimal.ZERO);
 		chargingOrder.setOrderSource(2);
-		Operator operator = operatorClient.getOperator(operatorId).getData();
+		Operator operator = operatorClient.getOperator(query.getOperatorId()).getData();
 		chargingOrder.setOperatorId(operator.getId());
 		chargingOrder.setAppUserId(operator.getId().longValue());
 		chargingOrder.setTripartitePlatformName(operator.getName());
-		chargingOrder.setStartChargeSeq(startChargeSeq);
+		chargingOrder.setStartChargeSeq(query.getStartChargeSeq());
+		//车辆信息
+		if(StringUtils.hasLength(query.getPlateNum())){
+			TAppUserCar appUserCar = appUserCarClient.getAppUserCarByLicensePlate(query.getPlateNum()).getData();
+			if(null != appUserCar){
+				chargingOrder.setAppUserCarId(appUserCar.getId());
+			}
+		}
+		
+		
 		chargingOrder.setTitle("【充电桩充电】" + chargingPile.getNumber() + "号桩/" + tChargingGun.getCode() + "号枪");
 		chargingOrder.setStatus(2);
 		chargingOrder.setPayTime(LocalDateTime.now());
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OperatorController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OperatorController.java
index 491f45e..58f2605 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OperatorController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OperatorController.java
@@ -35,6 +35,19 @@
 	
 	
 	
+	/**
+	 * 获取运营商数据
+	 * @param name
+	 * @return
+	 */
+	@PostMapping("/getOperatorByName")
+	public R<Operator> getOperatorByName(@RequestParam("name") String name){
+		Operator operator = operatorService.getOne(new LambdaQueryWrapper<Operator>().eq(Operator::getName, name));
+		return R.ok(operator);
+	}
+	
+	
+	
 	
 	/**
 	 * 获取运营商数据

--
Gitblit v1.7.1