From 8f400975692e27d65af770acd01dadc0dea025fe Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 29 一月 2026 10:02:14 +0800
Subject: [PATCH] Merge branch 'dev' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile

---
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Site.java                                  |    5 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/HttpUtils.java                        |  361 +++++++
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java                                   |    3 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/EquipmentInfos.java                 |   49 +
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java                              |    5 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeStatus.java                   |   61 +
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderAccountingStrategyFallbackFactory.java    |    5 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/CodeGenerateUtils.java                |   85 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/controller/NotifyController.java           |  213 ++++
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java                        |    3 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java                           |   20 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/TaskUtilCharging.java                 |   51 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/service/impl/ContentServiceImpl.java       |   13 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/constant/ChargePileInterface.java          |   28 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ConnectorStatusInfos.java           |   24 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/ContentMapper.java                            |    9 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/SequenceGenerator.java                |   56 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java                           |    6 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/controller/ChargingPileInfoController.java |  605 ++++++++++++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderAccountingStrategyController.java         |   10 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargeDetail.java                                |   33 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java                          |    4 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/HMacMD5Util.java                      |  122 ++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/SupportOrder.java                   |  119 ++
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java                                   |    5 
 ruoyi-gateway/src/main/resources/bootstrap.yml                                                                             |   10 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderBackController.java                                |   88 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ConnectorInfo.java                  |   42 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/OperatorData.java                   |   64 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/ChargePileHttpUtil.java               |  292 ++++++
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java                      |   10 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeRecord.java                   |   48 +
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java                                    |    6 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/service/IContentService.java               |    9 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java         |   13 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/StationInfos.java                   |  117 ++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeDetail.java                   |   26 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeStartResponse.java            |   43 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/TContent.java                       |   48 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargeOrder.java                                 |   62 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/PageInfo.java                       |   25 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/AesEncryption.java                    |   55 +
 42 files changed, 2,838 insertions(+), 15 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Site.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Site.java
index d604215..e7818bb 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Site.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Site.java
@@ -465,5 +465,8 @@
 	@TableField("isEnergyStorage")
 	@ApiModelProperty(value = "是否有储能设施(0:无,1:有)")
 	private Integer isEnergyStorage;
-
+	// todo 临时字段 用于区分途来电订单数据属于哪一个站点
+	@TableField("stationID")
+	@ApiModelProperty(value = "站点ID")
+	private String stationID;
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java
index acfc5b1..e5e554e 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java
@@ -148,4 +148,8 @@
     @ApiModelProperty(value = "2.0修改字段-运营时间描述")
     @TableField("opreate_hours")
     private String opreateHours;
+    // todo 临时字段 用于区分途来电订单数据属于哪一个站点
+    @TableField("connectorID")
+    @ApiModelProperty(value = "连接器id")
+    private String connectorID;
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderAccountingStrategyFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderAccountingStrategyFallbackFactory.java
index a5a173c..f1a9de1 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderAccountingStrategyFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderAccountingStrategyFallbackFactory.java
@@ -44,6 +44,11 @@
             public R<List<TChargingOrderAccountingStrategy>> getChargingOrderAccountingStrategyByOrderId(Long chargingOrderId) {
                 return R.fail("根据订单id查询充电明细失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R<String> addChargingOrderAccountingStrategy(List<TChargingOrderAccountingStrategy> accountingStrategyList) {
+                return R.fail("添加充电计费明细失败:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
index 1bb738f..8ea4cee 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
@@ -223,6 +223,16 @@
             public R<BigDecimal> getSumDegreeBySiteIds(@RequestParam("siteIds") List<Integer> SiteIds){
                 return R.fail("获取站点集合中总的充电量失败:" + throwable.getMessage());
             }
+
+//            @Override
+//            public R<List<TChargingOrder>> getOrderListByStatus(List<Integer> statusList) {
+//                return R.fail("获取站点集合中总的充电量失败:" + throwable.getMessage());
+//            }
+
+            @Override
+            public R<Long> addChargingOrder(TChargingOrder chargingOrder) {
+                return R.fail("添加订单失败:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java
index 43607fb..db8faea 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java
@@ -6,10 +6,7 @@
 import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory;
 import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Map;
@@ -48,4 +45,12 @@
 	 */
 	@PostMapping("/t-charging-order-accounting-strategy/getChargingOrderAccountingStrategyByOrderId")
 	R<List<TChargingOrderAccountingStrategy>> getChargingOrderAccountingStrategyByOrderId(@RequestParam("chargingOrderId") Long chargingOrderId);
+
+	/**
+	 * 添加充电计费明细
+	 * @param accountingStrategyList
+	 * @return
+	 */
+	@PostMapping("/t-charging-order-accounting-strategy/addChargingOrderAccountingStrategy")
+	R<String> addChargingOrderAccountingStrategy(@RequestBody List<TChargingOrderAccountingStrategy> accountingStrategyList);
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
index 564f9ca..66c8d7d 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
@@ -325,7 +325,21 @@
      */
     @GetMapping("/t-charging-order/getSumDegreeBySiteIds")
     R<BigDecimal> getSumDegreeBySiteIds(@RequestParam("siteIds") List<Integer> SiteIds);
-    
-    
-    
+
+
+//    /**
+//     * 获取充电订单列表
+//     * @param statusList
+//     * @return
+//     */
+//    @GetMapping("/t-charging-order/getOrderListByStatus")
+//    R<List<TChargingOrder>> getOrderListByStatus(List<Integer> statusList);
+
+    /**
+     * 添加订单
+     * @param chargingOrder
+     * @return
+     */
+    @PostMapping("/t-charging-order/addChargingOrder")
+    R<Long> addChargingOrder(@RequestBody TChargingOrder chargingOrder);
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java
index 93dcd59..6b62218 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java
@@ -108,6 +108,11 @@
             }
 
             @Override
+            public R<List<Region>> listAllRegion() {
+                return R.fail("远程调用获取所有region失败:"+throwable.getMessage());
+            }
+
+            @Override
             public R<List<TSystemConfiguration>> getTSystemConfiguration() {
                 return R.fail("远程调用获取配置失败:"+throwable.getMessage());
             }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java
index 788bfbe..45ca63b 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java
@@ -76,7 +76,8 @@
     R<List<TEnterpriseUserApplication>> getTnterPrise();
     @GetMapping("/region/getRegionBuyCode/{code}")
     R<Region> getRegionBuyCode(@PathVariable("code") String code);
-
+    @GetMapping("/region/listAllRegion")
+    R<List<Region>> listAllRegion();
     @GetMapping("/region/getTSystemConfiguration")
     R<List<TSystemConfiguration>> getTSystemConfiguration();
 
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java
index 230ce8a..244980c 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java
@@ -383,5 +383,11 @@
         return df.format(time);
     }
 
+    // string转LocalDateTime
+    public static LocalDateTime stringToLocalDateTime(String time) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        return LocalDateTime.parse(time, formatter);
+    }
+
 
 }
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
index 13943f1..d1b72c5 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
@@ -118,8 +118,9 @@
     
     public static void main(String[] args) {
         BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
-        String encode = passwordEncoder.encode("0173940ec8314d1671c2ba365d28fcc1");
+        String encode = passwordEncoder.encode("e10adc3949ba59abbe56e057f20f883e");
         System.err.println(encode);
+        System.err.println(passwordEncoder.matches(encode,"$2a$10$DWPje3LRma6N0haEINuZCOaaaeZ7d.nLxjDefNkoVkAWlQ3U/u23i"));
 //        String s = encryptPassword("0173940ec8314d1671c2ba365d28fcc1");
 //        System.err.println(s);
 //        boolean b = matchesPassword("0173940ec8314d1671c2ba365d28fcc1", "$2a$10$5ViClN9ACi9jM7W9wLqmJ.kgpYhT7da7sWvBDI5j2fXKNrBakUdQS");
diff --git a/ruoyi-gateway/src/main/resources/bootstrap.yml b/ruoyi-gateway/src/main/resources/bootstrap.yml
index 7598ca6..4b6a008 100644
--- a/ruoyi-gateway/src/main/resources/bootstrap.yml
+++ b/ruoyi-gateway/src/main/resources/bootstrap.yml
@@ -12,8 +12,8 @@
     allow-bean-definition-overriding: true
   profiles:
     # 环境配置
-#    active: dev
-    active: prod
+    active: dev
+#    active: prod
 ---
 spring:
   config:
@@ -23,7 +23,7 @@
     nacos:
       discovery:
         # 服务注册地址
-        server-addr: 192.168.110.169:8848
+        server-addr: 192.168.110.64:8848
         service: ${spring.application.name}
         group: DEFAULT_GROUP
         namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
@@ -31,7 +31,7 @@
         password: nacos
       config:
         # 配置中心地址
-        server-addr: 192.168.110.169:8848
+        server-addr: 192.168.110.64:8848
         namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb
         username: nacos
         password: nacos
@@ -52,7 +52,7 @@
       datasource:
         ds1:
           nacos:
-            server-addr: 192.168.110.169:8848
+            server-addr: 192.168.110.64:8848
             dataId: sentinel-ruoyi-gateway
             groupId: DEFAULT_GROUP
             username: nacos
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargeDetail.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargeDetail.java
new file mode 100644
index 0000000..14351c1
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargeDetail.java
@@ -0,0 +1,33 @@
+package com.ruoyi.chargingPile.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(description = "充电详情实体")
+@Data
+
+public class ChargeDetail {
+
+    @ApiModelProperty(value = "详情开始时间", example = "2023-11-10 14:16:54")
+    private String detailStartTime;
+
+    @ApiModelProperty(value = "详情结束时间", example = "1970-01-01 08:00:00")
+    private String detailEndTime;
+
+    @ApiModelProperty(value = "电价", example = "0.5")
+    private Double elecPrice;
+
+    @ApiModelProperty(value = "服务价格", example = "0.42")
+    private Double sevicePrice;
+
+    @ApiModelProperty(value = "详情功率", example = "0")
+    private Integer detailPower;
+
+    @ApiModelProperty(value = "详情电费", example = "0")
+    private Integer detailElecMoney;
+
+    @ApiModelProperty(value = "详情服务费", example = "0")
+    private Integer detailSeviceMoney;
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargeOrder.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargeOrder.java
new file mode 100644
index 0000000..54c75e1
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargeOrder.java
@@ -0,0 +1,62 @@
+package com.ruoyi.chargingPile.dto;
+
+import com.ruoyi.chargingPile.tulaidian.domain.ChargeDetail;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@ApiModel(description = "充电订单实体")
+@Data
+public class ChargeOrder {
+
+    @ApiModelProperty(value = "启动充电序列号", example = "1726204696124142")
+    private String startChargeSeq;
+
+    @ApiModelProperty(value = "启动充电序列状态", example = "4")
+    private Integer startChargeSeqStat;
+
+    @ApiModelProperty(value = "连接器状态", example = "1")
+    private Integer connectorStatus;
+
+    @ApiModelProperty(value = "连接器ID", example = "9227171651855801")
+    private String connectorID;
+
+    @ApiModelProperty(value = "当前电流A", example = "0.0")
+    private String currentA;
+
+    @ApiModelProperty(value = "电压A", example = "0.0")
+    private String voltageA;
+
+    @ApiModelProperty(value = "电池电量百分比", example = "0.00")
+    private String soc;
+
+    @ApiModelProperty(value = "开始时间", example = "2024-09-13 13:18:16")
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间", example = "2026-01-27 10:42:05")
+    private String endTime;
+
+    @ApiModelProperty(value = "总功率", example = "0.0000")
+    private String totalPower;
+
+    @ApiModelProperty(value = "电费", example = "0.00")
+    private String elecMoney;
+
+    @ApiModelProperty(value = "服务费", example = "0.00")
+    private String seviceMoney;
+
+    @ApiModelProperty(value = "总费用", example = "0.00")
+    private String totalMoney;
+
+    @ApiModelProperty(value = "车辆识别码", example = "null")
+    private String vin;
+
+    @ApiModelProperty(value = "充电详情列表")
+    private List<ChargeDetail> chargeDetails;
+
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/ContentMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/ContentMapper.java
new file mode 100644
index 0000000..b341aa4
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/ContentMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.chargingPile.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.chargingPile.tulaidian.domain.TContent;
+
+public interface ContentMapper extends BaseMapper<TContent> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/constant/ChargePileInterface.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/constant/ChargePileInterface.java
new file mode 100644
index 0000000..ac42249
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/constant/ChargePileInterface.java
@@ -0,0 +1,28 @@
+package com.ruoyi.chargingPile.tulaidian.constant;
+
+public class ChargePileInterface {
+    public static final String TOKEN_KEY = "charge_token:";
+    public static final String OperatorID = "734810353";
+    // 获取token
+    public static final String QUERY_TOKEN = "http://tld.itsou.top/evcs/tld/query_token";
+    // 查询充电站信息
+    public static final String QUERY_STATIONS_INFO = "http://tld.itsou.top/evcs/tld/query_stations_info";
+    public static final String QUERY_ORDER_LIST = "http://tld.itsou.top/evcs/tld/query_finish_orders";
+    // 设备接口状态查询
+    public static final String QUERY_STATION_STATUS = "http://tld.itsou.top/evcs/tld/query_station_status";
+    // 查询业务策略信息
+    public static final String QUERY_EQUIP_BUSINESS_POLICY = "http://tld.itsou.top/evcs/tld/query_equip_business_policy";
+    // 请求设备认证
+    public static final String QUERY_EQUIP_AUTH = "http://tld.itsou.top/evcs/tld/query_equip_auth";
+    // 请求启动充电
+    public static final String QUERY_START_CHARGE = "http://tld.itsou.top/evcs/tld/query_start_charge";
+    // 查询充电状态
+    public static final String QUERY_EQUIP_CHARGE_STATUS = "http://tld.itsou.top/evcs/tld/query_equip_charge_status";
+    // 请求停止充电
+    public static final String QUERY_STOP_CHARGE = "http://tld.itsou.top/evcs/tld/query_stop_charge";
+    // 自助备案车牌号
+    public static final String QUERY_MERCHANT_VEHICLES = "http://tld.itsou.top/evcs/tld/query_merchant_vehicles";
+    // 获取商户企业账户余额
+    public static final String QUERY_CASHBALANCE = "http://tld.itsou.top/evcs/tld/query_cashbalance";
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/controller/ChargingPileInfoController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/controller/ChargingPileInfoController.java
new file mode 100644
index 0000000..407cd8e
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/controller/ChargingPileInfoController.java
@@ -0,0 +1,605 @@
+package com.ruoyi.chargingPile.tulaidian.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.dto.ChargeOrder;
+import com.ruoyi.chargingPile.service.ISiteService;
+import com.ruoyi.chargingPile.service.TChargingGunService;
+import com.ruoyi.chargingPile.service.TChargingPileService;
+import com.ruoyi.chargingPile.tulaidian.domain.*;
+import com.ruoyi.chargingPile.tulaidian.util.ChargePileHttpUtil;
+import com.ruoyi.chargingPile.tulaidian.util.CodeGenerateUtils;
+import com.ruoyi.chargingPile.util.UUIDUtil;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
+import com.ruoyi.order.api.feignClient.ChargingOrderClient;
+import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
+import com.ruoyi.other.api.domain.Region;
+import com.ruoyi.other.api.feignClient.OtherClient;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.models.auth.In;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 站桩枪、订单 临时数据接口
+ *
+ * @author stylefeng
+ * @Date 2018/7/20 23:39
+ */
+@RestController
+@RequestMapping("/chargingPileInfo")
+@Slf4j
+public class ChargingPileInfoController {
+    @Autowired
+    private ChargePileHttpUtil chargePileHttpUtil;
+    @Autowired
+    private ISiteService siteService;
+    @Autowired
+    private ChargingOrderAccountingStrategyClient chargingOrderAccountingStrategyClient;
+    @Autowired
+    private TChargingGunService chargingGunService;
+    @Autowired
+    private TChargingPileService chargingPileService;
+    @Autowired
+    private ChargingOrderClient chargingOrderClient;
+    @Autowired
+    private OtherClient otherClient;
+    private static final double EARTH_RADIUS = 6371.0; // 地球半径,单位为千米
+
+    /**
+     * 计算两点之间的距离,单位为千米
+     *
+     * @param lat1 第一个点的纬度
+     * @param lon1 第一个点的经度
+     * @param lat2 第二个点的纬度
+     * @param lon2 第二个点的经度
+     * @return 两点之间的距离,单位为千米
+     */
+    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
+        double dLat = Math.toRadians(lat2 - lat1);
+        double dLon = Math.toRadians(lon2 - lon1);
+
+        lat1 = Math.toRadians(lat1);
+        lat2 = Math.toRadians(lat2);
+
+        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
+                Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
+        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+
+        return EARTH_RADIUS * c;
+    }
+    @ResponseBody
+    @PostMapping("/deleteSite")
+    @ApiOperation(value = "删除关联站桩枪", tags = {"删除关联站桩枪"}, notes = "")
+    public R<String> deleteSite(){
+        siteService.remove(new LambdaQueryWrapper<Site>()
+                .eq(Site::getPartnerId,26));
+        chargingPileService.remove(new LambdaQueryWrapper<TChargingPile>()
+                .eq(TChargingPile::getPartnerId,26));
+        chargingGunService.remove(new LambdaQueryWrapper<TChargingGun>()
+                .eq(TChargingGun::getPartnerId,26));
+        return R.ok();
+    }
+    /**
+     * 司机端-获取充电桩列表
+     */
+    @ResponseBody
+    @PostMapping("/orderList")
+    @ApiOperation(value = "获取充电订单", tags = {"司机端-获取充电订单"}, notes = "")
+    public R<String> chargingPileList(){
+        List<ChargeOrder> result = getOrderList();
+        List<TChargingOrder> orders = new ArrayList<>();
+        List<TChargingOrderAccountingStrategy> accountingStrategies = new ArrayList<>();
+        // 封装订单数据
+        for (ChargeOrder chargeOrder : result) {
+            TChargingOrder chargingOrder = new TChargingOrder();
+            chargingOrder.setOrderType(1);
+            chargingOrder.setOrderClassification(1);
+//            chargingOrder.setAppUserId(1L);
+//            chargingOrder.setAppUserCarId(1L);
+            chargingOrder.setRefundAmount(new BigDecimal(chargeOrder.getTotalMoney()));
+            chargingOrder.setRechargeSerialNumber("4200002747202505247686188393");
+            chargingOrder.setCouponDiscountAmount(BigDecimal.ZERO);
+            chargingOrder.setVipDiscount(BigDecimal.ZERO);
+            chargingOrder.setVipDiscountAmount(BigDecimal.ZERO);
+            chargingOrder.setCouponDiscountAmount(BigDecimal.ZERO);
+            chargingOrder.setCommissionAmount(BigDecimal.ZERO);
+            chargingOrder.setSharingAmount(BigDecimal.ZERO);
+            chargingOrder.setDelFlag(false);
+            chargingOrder.setNeedElec(new BigDecimal(chargeOrder.getTotalPower()));
+            chargingOrder.setStartSoc(BigDecimal.ZERO);
+            chargingOrder.setEndSoc(new BigDecimal("100"));
+            chargingOrder.setPower(new BigDecimal(chargeOrder.getTotalPower()));
+            chargingOrder.setElectricity(new BigDecimal(chargeOrder.getTotalPower()));
+            chargingOrder.setVoltage(new BigDecimal(chargeOrder.getTotalPower()));
+            chargingOrder.setCurrent(new BigDecimal(chargeOrder.getTotalPower()));
+            chargingOrder.setChargingPower(new BigDecimal(chargeOrder.getTotalPower()));
+            chargingOrder.setChargingCapacity(new BigDecimal(chargeOrder.getTotalPower()));
+            chargingOrder.setCode(chargeOrder.getStartChargeSeq());
+            chargingOrder.setOrderSource(2);
+            chargingOrder.setOperatorId(999);
+            chargingOrder.setTripartitePlatformName("途来电");
+            chargingOrder.setStartChargeSeq(chargeOrder.getStartChargeSeq());
+            chargingOrder.setSourceName("途来电");
+            chargingOrder.setStartTime(DateUtils.stringToLocalDateTime(chargeOrder.getStartTime()));
+            chargingOrder.setEndTime(DateUtils.stringToLocalDateTime(chargeOrder.getEndTime()));
+            chargingOrder.setStatus(5);
+            chargingOrder.setEndMode(1);
+            chargingOrder.setElectrovalence(new BigDecimal(chargeOrder.getElecMoney()));
+            chargingOrder.setServiceCharge(new BigDecimal(chargeOrder.getSeviceMoney()));
+            chargingOrder.setTotalElectricity(new BigDecimal(chargeOrder.getElecMoney()));
+            chargingOrder.setPaymentAmount(new BigDecimal(chargeOrder.getTotalMoney()));
+            chargingOrder.setRechargePaymentType(1);
+            chargingOrder.setRechargePaymentStatus(2);
+            chargingOrder.setChargeAmount(new BigDecimal(chargeOrder.getTotalMoney()));
+            chargingOrder.setOrderAmount(new BigDecimal(chargeOrder.getTotalMoney()));
+            chargingOrder.setResidualAmount(BigDecimal.ZERO);
+            chargingOrder.setPaymentAmount(new BigDecimal(chargeOrder.getTotalMoney()));
+            chargingOrder.setPayTime(LocalDateTime.now());
+            // 通过枪编号查询枪
+            TChargingGun chargingGun = chargingGunService.getOne(Wrappers.lambdaQuery(TChargingGun.class)
+                    .eq(TChargingGun::getConnectorID, chargeOrder.getConnectorID()));
+            if(Objects.nonNull(chargingGun)){
+                chargingOrder.setChargingGunId(chargingGun.getId());
+                chargingOrder.setChargingPileId(chargingGun.getChargingPileId());
+                chargingOrder.setSiteId(chargingGun.getSiteId());
+            }else{
+                continue;
+            }
+            R<Long> orderIdR = chargingOrderClient.addChargingOrder(chargingOrder);
+            if(orderIdR.getCode() == 200){
+                // 充电明细
+                List<ChargeDetail> chargeDetails = chargeOrder.getChargeDetails();
+                if(!CollectionUtils.isEmpty(chargeDetails)){
+                    List<TChargingOrderAccountingStrategy> accountingStrategyList = new ArrayList<>();
+                    for (ChargeDetail chargeDetail : chargeDetails) {
+                        TChargingOrderAccountingStrategy accountingStrategy = new TChargingOrderAccountingStrategy();
+                        accountingStrategy.setChargingOrderId(orderIdR.getData());
+                        accountingStrategy.setAccountingStrategyDetailId(232);
+                        accountingStrategy.setType(1);
+                        accountingStrategy.setStartTime(chargeDetail.getDetailStartTime());
+                        accountingStrategy.setEndTime(chargeDetail.getDetailEndTime());
+                        accountingStrategy.setElectrovalence(chargeDetail.getElecPrice());
+                        accountingStrategy.setServiceCharge(chargeDetail.getSevicePrice());
+                        accountingStrategy.setCostServiceCharge(chargeDetail.getDetailSeviceMoney());
+                        accountingStrategy.setChargingCapacity(chargeDetail.getDetailPower());
+                        accountingStrategy.setPeriodElectricPrice(chargeDetail.getDetailElecMoney());
+                        accountingStrategy.setCouponDiscountAmount(BigDecimal.ZERO);
+                        accountingStrategy.setVipDiscountAmount(BigDecimal.ZERO);
+                        accountingStrategy.setPeriodServicePrice(chargeDetail.getDetailSeviceMoney());
+                        accountingStrategy.setPeriodOriginalServicePrice(chargeDetail.getDetailSeviceMoney());
+                        accountingStrategy.setCreateTime(LocalDateTime.now());
+                        accountingStrategyList.add(accountingStrategy);
+                    }
+                    chargingOrderAccountingStrategyClient.addChargingOrderAccountingStrategy(accountingStrategyList);
+                }
+            }
+        }
+
+        return R.ok();
+    }
+
+    @ResponseBody
+    @PostMapping("/chargingPileList")
+    @ApiOperation(value = "获取充电桩列表", tags = {"获取充电桩列表"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "电站类型 0=不限 1=公共 50=个人 100=公交 101=环卫(专用) 102=物流(专用) 103=出租车(专用) 255=其他", name = "type", required = false, dataType = "string"),
+            @ApiImplicitParam(value = "电站距离 不限=0 1km内=1 2km内=2 3km内=3 5km内=4 10km内=5 50km内=6 100km内=7 ", name = "distance", required = false, dataType = "int"),
+            @ApiImplicitParam(value = "设备状态 不限=0 1=只看空闲", name = "status", required = false, dataType = "int"),
+            @ApiImplicitParam(value = "电站名称/目标地址", name = "name", required = false, dataType = "string"),
+            @ApiImplicitParam(value = "pageNo", name = "pageNo", required = false, dataType = "string"),
+            @ApiImplicitParam(value = "pageSize", name = "pageSize", required = false, dataType = "string"),
+            @ApiImplicitParam(value = "lon", name = "经度", required = false, dataType = "string"),
+            @ApiImplicitParam(value = "lat", name = "纬度", required = false, dataType = "string"),
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
+    })
+    public R<String> chargingPileList(String type, Integer distance,
+                                      Integer status,
+                                      String name,
+                                      String lon,
+                                      String lat,
+                                      Integer pageNo, Integer pageSize){
+        PageInfo pageInfo = new PageInfo();
+        List<StationInfos> result = getStationInfos();
+        // 电站类型
+        if (StringUtils.hasLength(type) && (!type.equals("0"))){
+            List<Integer> list = Arrays.stream(type.split(",")).map(Integer::parseInt).collect(Collectors.toList());
+            result = result.stream().filter(item -> list.contains(item.getStationType())).collect(Collectors.toList());
+        }
+        // 电站名称/目标地址
+        if(StringUtils.hasLength(name)){
+            result = result.stream().filter(item -> item.getStationName().contains(name) ||
+                    item.getAddress().contains(name)).collect(Collectors.toList());
+        }
+
+        for (StationInfos stationInfo : result) {
+            if (StringUtils.hasLength(lon)){
+                double v = calculateDistance(
+                        stationInfo.getStationLat(),
+                        stationInfo.getStationLng(),
+                        Double.parseDouble(lat),
+                        Double.parseDouble(lon)
+                );
+                stationInfo.setDistance(String.valueOf(Math.abs(v)));
+            }else {
+                stationInfo.setDistance("0");
+            }
+
+            List<EquipmentInfos> equipmentInfos = stationInfo.getEquipmentInfos();
+            int a = 0;
+            int b = 0;
+            for (EquipmentInfos equipmentInfo : equipmentInfos) {
+                if (equipmentInfo.getEquipmentType()==1){
+                    a++;
+                }
+                if (equipmentInfo.getEquipmentType()==2){
+                    b++;
+                }
+            }
+            stationInfo.setFastTotal(a);
+            stationInfo.setSnowTotal(b);
+            stationInfo.setFast(a);
+            stationInfo.setSnow(b);
+        }
+        if(Objects.nonNull(distance) && distance != 0){
+            switch (distance){
+                case 1:
+                    result = result.stream().filter(item -> Double.parseDouble(item.getDistance()) <= 1).collect(Collectors.toList());
+                    break;
+                case 2:
+                    result = result.stream().filter(item -> Double.parseDouble(item.getDistance()) <= 2).collect(Collectors.toList());
+                    break;
+                case 3:
+                    result = result.stream().filter(item -> Double.parseDouble(item.getDistance()) <= 3).collect(Collectors.toList());
+                    break;
+                case 4:
+                    result = result.stream().filter(item -> Double.parseDouble(item.getDistance()) <= 5).collect(Collectors.toList());
+                    break;
+                case 5:
+                    result = result.stream().filter(item -> Double.parseDouble(item.getDistance()) <= 10).collect(Collectors.toList());
+                    break;
+                case 6:
+                    result = result.stream().filter(item -> Double.parseDouble(item.getDistance()) <= 50).collect(Collectors.toList());
+                    break;
+                case 7:
+                    result = result.stream().filter(item -> Double.parseDouble(item.getDistance()) <= 100).collect(Collectors.toList());
+                    break;
+            }
+        }
+        List<String> stationIDs = result.stream()
+                .map(StationInfos::getStationID)
+                .collect(Collectors.toList());
+        String obj = chargePileHttpUtil.queryStationStatus(stationIDs);
+        JSONObject jsonObject1 = JSONObject.parseObject(obj);
+        JSONArray stationStatusInfos = jsonObject1.getJSONArray("StationStatusInfos");
+        for (StationInfos stationInfo : result) {
+            for (EquipmentInfos equipmentInfo : stationInfo.getEquipmentInfos()) {
+                for (ConnectorInfo connectorInfo : equipmentInfo.getConnectorInfos()) {
+                    for (Object stationStatusInfo : stationStatusInfos) {
+                        JSONObject jsonObject2 = (JSONObject) stationStatusInfo;
+                        String stationID = jsonObject2.getString("StationID");
+                        JSONArray connectorStatusInfos = jsonObject2.getJSONArray("ConnectorStatusInfos");
+                        if (connectorStatusInfos != null) {
+                            for (Object connectorStatusInfo : connectorStatusInfos) {
+                                JSONObject jsonObject3 = (JSONObject) connectorStatusInfo;
+                                String status1 = jsonObject3.getString("ConnectorID");
+                                if (connectorInfo.getConnectorID().equals(status1)){
+                                    Integer status2 = jsonObject3.getInteger("Status");
+                                    if (status2==1){
+                                        connectorInfo.setStatus(1);
+                                    }else {
+                                        connectorInfo.setStatus(2);
+                                    }
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        // 电站状态
+        if (Objects.nonNull(status) && status == 1) {
+            Iterator<StationInfos> iterator1 = result.iterator();
+            while (iterator1.hasNext()) {
+                StationInfos next = iterator1.next();
+                for (Object stationStatusInfo : stationStatusInfos) {
+                    JSONObject jsonObject2 = (JSONObject) stationStatusInfo;
+                    String stationID = jsonObject2.getString("StationID");
+                    if (stationID != null && stationID.equals(next.getStationID())) {
+                        JSONArray connectorStatusInfos = jsonObject2.getJSONArray("ConnectorStatusInfos");
+                        if (connectorStatusInfos != null) {
+                            for (Object connectorStatusInfo : connectorStatusInfos) {
+                                JSONObject jsonObject3 = (JSONObject) connectorStatusInfo;
+                                Integer status1 = jsonObject3.getInteger("Status");
+                                if (status1 != null && status1 == 1) {
+                                    break;
+                                }else {
+                                    iterator1.remove();
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        result.sort(Comparator.comparing(StationInfos::getDistance));
+        pageInfo.setTotal(result.size());
+
+//        List<StationInfos> testing = testing(result.size(), pageNo, pageSize, result);
+        Map<String, Region> regionMap = otherClient.listAllRegion().getData()
+                .stream().collect(Collectors.toMap(Region::getCode, e -> e));
+        Map<Integer, Region> regionIdMap = otherClient.listAllRegion().getData()
+                .stream().collect(Collectors.toMap(Region::getId, e -> e));
+        List<Site> sites = new ArrayList<>();
+        List<TChargingPile> piles = new ArrayList<>();
+        List<TChargingGun> guns = new ArrayList<>();
+        Map<String, Site> siteMap = siteService.list().stream().collect(Collectors.toMap(Site::getStationID, e -> e));
+        for (StationInfos stationInfos : result) {
+            if (siteMap.get(stationInfos.getStationID())!=null){
+                continue;
+            }
+            Site site = new Site();
+            site.setStationID(stationInfos.getStationID());
+            site.setPartnerId(26);
+            Calendar calendar = Calendar.getInstance();
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
+            String dateTime = dateFormat.format(calendar.getTime());
+            dateTime = dateTime.substring(2);
+            String timestampPart = "" + (Math.random() * 10000) * (System.currentTimeMillis() / 10000);
+            timestampPart = timestampPart.replace(".", "").replace("E", "");
+            timestampPart = timestampPart.substring(0, 4);
+            site.setCode(dateTime+timestampPart);
+            site.setName(stationInfos.getStationName());
+            site.setSiteType(stationInfos.getStationType());
+            site.setBusinessCategory(2);
+            site.setStatus(1);
+            site.setConstructionSite(1);
+            site.setImgUrl("");
+            Region region = regionMap.get(stationInfos.getAreaCode());
+            if (region!=null){
+                site.setDistricts(region.getName());
+                site.setDistrictsCode(region.getCode());
+                Integer parentId = region.getParentId();
+                Region parentRegion = regionIdMap.get(parentId);
+                if (parentRegion != null) {
+                    site.setCity(parentRegion.getName());
+                    site.setCityCode(parentRegion.getCode());
+                    Region region1 = regionIdMap.get(parentRegion.getParentId());
+                    if (region1!=null){
+                        site.setProvince(region1.getName());
+                        site.setProvinceCode(region1.getCode());
+                    }
+                }
+            }
+            site.setLon(stationInfos.getStationLng()+"");
+            site.setLat(stationInfos.getStationLat()+"");
+            site.setAddress(stationInfos.getAddress());
+//            site.setCountryCode();
+            site.setPhone(stationInfos.getServiceTel());
+            site.setServicePhone(stationInfos.getServiceTel());
+            site.setGuide(stationInfos.getSiteGuide());
+            site.setStartServiceTime("24小时");
+//            site.setEndServiceTime();
+//            site.setServiceDescription();
+//            site.setVehicleDescription();
+            site.setParkingSpace(stationInfos.getParkNums());
+//            site.setRateDescription();
+//            site.setSpaceChargeExplain();
+            // todo 临时写死一个
+            site.setAccountingStrategyId(232);
+//            site.setEstablishmentTime();
+            site.setSort(180);
+//            site.setRemark();
+//            site.setMark();
+//            site.setAreaCodeCountryside();
+            site.setStationClassification(1);
+            site.setGeneralApplicationType(1);
+            site.setSwapMatchCars(stationInfos.getMatchCars());
+            site.setRoundTheClock(1);
+            site.setParkType(4);
+//            site.setParkFee();
+//            site.setParkFeeFree();
+            site.setBusinessExpandType(1);
+            site.setElectricityType(1);
+            site.setCapacity(new BigDecimal("1250"));
+            site.setRatedPower(new BigDecimal("1200"));
+            site.setPeriodFee(1);
+            site.setOfficialRunTime("2025-06-22");
+//            site.setStationOrientation();
+//            site.setStationArea();
+            site.setHavePerson(1);
+            site.setVideoMonitor(1);
+//            site.setSupportingFacilities();
+            site.setPrinterFlag(1);
+            site.setBarrierFlag(1);
+            site.setParkingLockFlag(1);
+//            site.setElectricityFee();
+            site.setEquipmentOwnerName("途来电");
+            site.setSupplyType(1);
+            site.setResidentNo("0110043462");
+            site.setWattHourMeterNo("MX01D05054000217");
+            site.setForwardPower(new BigDecimal("0"));
+            site.setServiceFee("0:00-23:59:\"0.20\"");
+            Calendar calendar1 = Calendar.getInstance();
+            SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyyMMdd");
+            String dateTime1 = dateFormat1.format(calendar1.getTime());
+            dateTime1 = dateTime1.substring(2);
+            String timestampPart1 = "" + (Math.random() * 10000) * (System.currentTimeMillis() / 10000);
+            timestampPart1 = timestampPart1.replace(".", "").replace("E", "");
+            timestampPart1 = timestampPart1.substring(0, 4);
+            site.setRecordUniqueNo(dateTime+timestampPart);
+            site.setPayment(1);
+            site.setSupportOrder(1);
+//            site.setSerAreaCode();
+            site.setIsOpenSynchronization(0);
+            site.setIsEnergyStorage(0);
+            siteService.save(site);
+            sites.add(site);
+            int i = 1;
+
+            for (EquipmentInfos equipmentInfo : stationInfos.getEquipmentInfos()) {
+                TChargingPile chargingPile = new TChargingPile();
+                Calendar calendar2 = Calendar.getInstance();
+                SimpleDateFormat dateFormat3 = new SimpleDateFormat("yyyyMMddHHmmss");
+                String dateTime4 = dateFormat3.format(calendar2.getTime());
+                dateTime4 = dateTime4.substring(2);
+                String timestampPart5 = "" + (Math.random() * 10000) * (System.currentTimeMillis() / 10000);
+                timestampPart5 = timestampPart5.replace(".", "").replace("E", "");
+                timestampPart5 = timestampPart5.substring(0, 4);
+                chargingPile.setCode(dateTime4+timestampPart5);
+                chargingPile.setName(equipmentInfo.getEquipmentName());
+                chargingPile.setNumber(i);
+                chargingPile.setType(equipmentInfo.getEquipmentType());
+                chargingPile.setSiteId(site.getId());
+                chargingPile.setPartnerId(26);
+                chargingPile.setManufacturerCode(equipmentInfo.getManufacturerID());
+                chargingPile.setManufacturer(equipmentInfo.getManufacturerName());
+                chargingPile.setEquipmentType(equipmentInfo.getEquipmentModel());
+                String productionDate = equipmentInfo.getProductionDate();
+                if (StringUtils.hasLength(productionDate)){
+                    // 转化为LocalDate
+                    chargingPile.setProductionDate(LocalDate.parse(productionDate));
+                }
+                chargingPile.setRatedPower(new BigDecimal(120));
+//                chargingPile.setChargingStationNumber();
+                chargingPile.setStatus(1);
+//                chargingPile.setIotdDeviceId();
+                chargingPile.setEquipmentClassification(1);
+//                chargingPile.setEquipmentUniqueNumber(equipmentInfo.getEquipmentID());
+                chargingPile.setEquipmentLng(equipmentInfo.getEquipmentLng()+"");
+                chargingPile.setEquipmentLat(equipmentInfo.getEquipmentLat()+"");
+//                chargingPile.setEquipmentProductCode();
+                chargingPile.setEquipmentPurpose(1);
+                chargingPile.setNewNationalStandard(1);
+                chargingPile.setVinFlag(1);
+                chargingPileService.save(chargingPile);
+                piles.add(chargingPile);
+                i++;
+                int j = 1;
+
+                for (ConnectorInfo connectorInfo : equipmentInfo.getConnectorInfos()) {
+                    TChargingGun gun = new TChargingGun();
+                    gun.setConnectorID(connectorInfo.getConnectorID());
+                    gun.setCode(j+"");
+                    gun.setSiteId(site.getId());
+                    gun.setPartnerId(26);
+                    gun.setChargingPileId(chargingPile.getId());
+                    gun.setName(connectorInfo.getConnectorName());
+                    gun.setType(connectorInfo.getConnectorType());
+                    gun.setStatus(2);
+                    gun.setChargeMode(connectorInfo.getGunType());
+                    // todo 临时写死
+                    gun.setAccountingStrategyId(232);
+                    gun.setUpperRatedVoltage(new BigDecimal("240"));
+                    gun.setLowerLimitOfRatedVoltage(new BigDecimal("200"));
+                    gun.setRatedCurrent(new BigDecimal("32"));
+                    gun.setRatedPower(new BigDecimal("7"));
+                    gun.setChargingPower(new BigDecimal("200"));
+                    gun.setParkingNumber("39");
+                    gun.setParkingStatus(1);
+                    gun.setParkingLockState(0);
+                    gun.setNationalStandard("3");
+//                    gun.setRemark();
+//                    gun.setSoc();
+                    gun.setFullNumber(chargingPile.getNumber()+j+"");
+                    gun.setEquipmentClassification(1);
+                    gun.setConstantVoltageUpperLimits(new BigDecimal("240"));
+                    gun.setConstantVoltageLowerLimits(new BigDecimal("200"));
+                    gun.setConstantCurrentUpperLimits(new BigDecimal("32"));
+                    gun.setConstantCurrentLowerLimits(new BigDecimal("7"));
+                    gun.setAuxPower(3);
+                    gun.setOpreateStatus(0);
+//                    gun.setOpreateHours();
+                    guns.add(gun);
+                    chargingGunService.save(gun);
+                    j++;
+
+                }
+            }
+        }
+        log.info("新增的站点数据:{}", sites);
+        log.info("新增的桩数据:{}", piles);
+        log.info("新增的枪数据:{}", guns);
+
+        return R.ok();
+    }
+
+    private List<StationInfos> getStationInfos(){
+        String s = chargePileHttpUtil.queryStationsInfo(1, 199);
+        // 将s字符串转化为json 然后转化为实体类PageInfo
+        JSONObject jsonObject = JSONObject.parseObject(s);
+        PageInfo pageInfo = JSON.parseObject(jsonObject.toJSONString(), PageInfo.class);
+        List<StationInfos> result = new ArrayList<>();
+        int itemSize = pageInfo.getItemSize();
+        if(itemSize>199){
+            result.addAll(pageInfo.getStationInfos());
+            int i = itemSize / 199;
+            for (int j = 2; j < i + 2; j++) {
+                s = chargePileHttpUtil.queryStationsInfo(j, 199);
+                // 将s字符串转化为json 然后转化为实体类PageInfo
+                jsonObject = JSONObject.parseObject(s);
+                pageInfo = JSON.parseObject(jsonObject.toJSONString(), PageInfo.class);
+                result.addAll(pageInfo.getStationInfos());
+            }
+        }else {
+            result.addAll(pageInfo.getStationInfos());
+        }
+        return result;
+    }
+    private List<ChargeOrder> getOrderList(){
+        String s = chargePileHttpUtil.getOrderList(1, 199);
+        // 将s字符串转化为json 然后转化为实体类PageInfo
+        JSONObject jsonObject = JSONObject.parseObject(s);
+        PageInfo pageInfo = JSON.parseObject(jsonObject.toJSONString(), PageInfo.class);
+        List<ChargeOrder> result = new ArrayList<>();
+        int itemSize = pageInfo.getItemSize();
+        int temp =  0;
+        if(itemSize>199){
+            result.addAll(pageInfo.getChargeOrders());
+            int i = itemSize / 199;
+            for (int j = 2; j < i + 2; j++) {
+                s = chargePileHttpUtil.getOrderList(j, 199);
+                // 将s字符串转化为json 然后转化为实体类PageInfo
+                jsonObject = JSONObject.parseObject(s);
+                pageInfo = JSON.parseObject(jsonObject.toJSONString(), PageInfo.class);
+                result.addAll(pageInfo.getChargeOrders());
+                if (temp==10){
+                    break;
+                }
+                temp++;
+            }
+        }else {
+            result.addAll(pageInfo.getChargeOrders());
+        }
+        return result;
+    }
+
+}
+
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/controller/NotifyController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/controller/NotifyController.java
new file mode 100644
index 0000000..2be386e
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/controller/NotifyController.java
@@ -0,0 +1,213 @@
+package com.ruoyi.chargingPile.tulaidian.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.chargingPile.api.model.TChargingGun;
+import com.ruoyi.chargingPile.service.ISiteService;
+import com.ruoyi.chargingPile.service.TChargingGunService;
+import com.ruoyi.chargingPile.service.TChargingPileService;
+import com.ruoyi.chargingPile.tulaidian.domain.ChargeDetail;
+import com.ruoyi.chargingPile.tulaidian.domain.ChargeRecord;
+import com.ruoyi.chargingPile.tulaidian.domain.ConnectorStatusInfos;
+import com.ruoyi.chargingPile.tulaidian.domain.TContent;
+import com.ruoyi.chargingPile.tulaidian.service.IContentService;
+import com.ruoyi.chargingPile.tulaidian.util.AesEncryption;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
+import com.ruoyi.order.api.feignClient.ChargingOrderClient;
+import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.time.LocalDateTime;
+import java.util.*;
+
+/**
+ * 广告控制器
+ */
+@Api
+@RestController
+@RequestMapping("/orderCallBack")
+public class NotifyController {
+    @Autowired
+    private ChargingOrderClient chargingOrderClient;
+//    @Autowired
+//    private IContentService contentService;
+    @Autowired
+    private ChargingOrderAccountingStrategyClient chargingOrderAccountingStrategyClient;
+    @Autowired
+    private IContentService contentService;
+    @Autowired
+    private TChargingGunService chargingGunService;
+    @Autowired
+    private TChargingPileService chargingPileService;
+    @Autowired
+    private ISiteService siteService;
+    private static final String OperatorID = "MA01H3BQ3";
+    private static final String OperatorSecret = "f1331ef0b37c2d2";
+    private static final String SigSecret = "a6fedf0e1b27d6f8";
+    private static final String DataSecret = "50a61b93919c9606";
+    private static final String DataSecretIV = "7c8ac6861661d586";
+
+    private static final String OperatorSecretOther = "f1331ef0b37c2d2";
+    private static final String SigSecretOther = "a6fedf0e1b27d6f8";
+    private static final String DataSecretOther = "50a61b93919c9606";
+    private static final String DataSecretIVOther = "7c8ac6861661d586";
+
+//    // 结束充电后 特来电主动 推送充电订单信息
+//    @ResponseBody
+//    @PostMapping("/notification_charge_order_info")
+//    public Map<String, Object> notification_charge_order_info(@RequestBody String json) throws ParseException {
+//        TContent tContent = new TContent();
+//        tContent.setType(1);
+//        tContent.setContent(json);
+//        tContent.setCreateTime(new Date());
+//        contentService.save(tContent);
+//        JSONObject jsonObject1 = JSONObject.parseObject(json);
+//        String data = jsonObject1.getString("Data");
+//        String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, data);
+//        System.err.println(decrypt);
+//        JSONObject jsonObject = JSONObject.parseObject(decrypt);
+//        System.err.println("结束充电后 特来电主动推送订单信息");
+//        ChargeRecord chargeRecord = JSON.parseObject(jsonObject.toJSONString(), ChargeRecord.class);
+//        // 新增订单
+//        TChargingOrder chargingOrder = new TChargingOrder();
+//        chargingOrder.setCode(chargeRecord.getStartChargeSeq());
+//        chargingOrder.setOrderSource(2);
+//        chargingOrder.setOperatorId(26);
+//        chargingOrder.setTripartitePlatformName("途来电");
+//        chargingOrder.setStartChargeSeq(chargeRecord.getStartChargeSeq());
+//        chargingOrder.setSourceName("途来电");
+//        chargingOrder.setStartTime(DateUtils.stringToLocalDateTime(chargeRecord.getStartTime()));
+//        chargingOrder.setEndTime(DateUtils.stringToLocalDateTime(chargeRecord.getEndTime()));
+//        chargingOrder.setStatus(5);
+//        chargingOrder.setEndMode(1);
+//        chargingOrder.setElectrovalence(chargeRecord.getTotalElecMoney());
+//        chargingOrder.setServiceCharge(chargeRecord.getTotalSeviceMoney());
+//        chargingOrder.setTotalElectricity(chargeRecord.getTotalPower());
+//        chargingOrder.setPaymentAmount(chargeRecord.getTotalMoney());
+//        chargingOrder.setRechargePaymentType(1);
+//        chargingOrder.setRechargePaymentStatus(2);
+//        chargingOrder.setChargeAmount(chargeRecord.getTotalMoney());
+//        chargingOrder.setOrderAmount(chargeRecord.getTotalMoney());
+//        chargingOrder.setResidualAmount(BigDecimal.ZERO);
+//        chargingOrder.setPaymentAmount(chargeRecord.getTotalMoney());
+//        chargingOrder.setPayTime(LocalDateTime.now());
+//        // 通过枪编号查询枪
+//        TChargingGun chargingGun = chargingGunService.getOne(Wrappers.lambdaQuery(TChargingGun.class)
+//                .eq(TChargingGun::getCode, chargeRecord.getConnectorID()));
+//        if(Objects.nonNull(chargingGun)){
+//            chargingOrder.setChargingGunId(chargingGun.getId());
+//            chargingOrder.setChargingPileId(chargingGun.getChargingPileId());
+//            chargingOrder.setSiteId(chargingGun.getSiteId());
+//        }
+//        R<Long> orderIdR = chargingOrderClient.addChargingOrder(chargingOrder);
+//        if(orderIdR.getCode() == 200){
+//            // 充电明细
+//            List<ChargeDetail> chargeDetails = chargeRecord.getChargeDetails();
+//            if(!CollectionUtils.isEmpty(chargeDetails)){
+//                List<TChargingOrderAccountingStrategy> accountingStrategyList = new ArrayList<>();
+//                for (ChargeDetail chargeDetail : chargeDetails) {
+//                    TChargingOrderAccountingStrategy accountingStrategy = new TChargingOrderAccountingStrategy();
+//                    accountingStrategy.setChargingOrderId(orderIdR.getData());
+//                    accountingStrategy.setAccountingStrategyDetailId(232);
+//                    accountingStrategy.setType(1);
+//                    accountingStrategy.setStartTime(chargeDetail.getDetailStartTime());
+//                    accountingStrategy.setEndTime(chargeDetail.getDetailEndTime());
+//                    accountingStrategy.setElectrovalence(chargeDetail.getElecPrice());
+//                    accountingStrategy.setServiceCharge(chargeDetail.getSevicePrice());
+//                    accountingStrategy.setChargingCapacity(chargeDetail.getDetailPower());
+//                    accountingStrategy.setPeriodElectricPrice(chargeDetail.getDetailElecMoney());
+//                    accountingStrategy.setPeriodServicePrice(chargeDetail.getDetailSeviceMoney());
+//                    accountingStrategy.setPeriodOriginalServicePrice(chargeDetail.getDetailSeviceMoney());
+//                    accountingStrategy.setCreateTime(LocalDateTime.now());
+//                    accountingStrategyList.add(accountingStrategy);
+//                }
+//                chargingOrderAccountingStrategyClient.addChargingOrderAccountingStrategy(accountingStrategyList);
+//            }
+//        }
+//        Map<String,Object> map = new HashMap<>();
+//        map.put("StartChargeSeq",chargeRecord.getStartChargeSeq());
+//        map.put("ConnectorID",chargeRecord.getConnectorID());
+//        map.put("ConfirmResult",0);
+//        return map;
+//    }
+
+//    @ResponseBody
+//    @PostMapping("/notification_equip_charge_status")
+//    public R notification_equip_charge_status(@RequestBody String json) throws ParseException {
+//        TContent tContent = new TContent();
+//        tContent.setType(2);
+//        tContent.setContent(json);
+//        tContent.setCreateTime(new Date());
+//        contentService.save(tContent);
+//        JSONObject jsonObject1 = JSONObject.parseObject(json);
+//        String data = jsonObject1.getString("Data");
+//        String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, data);
+//        System.err.println(decrypt);
+//        JSONObject jsonObject = JSONObject.parseObject(decrypt);
+//        System.err.println("特来电主动推送订单状态");
+//        ChargeStatus chargeStatus = JSON.parseObject(jsonObject.toJSONString(), ChargeStatus.class);
+//        R<TChargingOrder> chargeOrderR = chargingOrderClient.getChargingOrderByStartChargeSeq(chargeStatus.getStartChargeSeq());
+//        TChargingOrder chargingOrder = chargeOrderR.getData();
+//        if (chargingOrder!=null){
+//            // 修改订单状态
+//            chargingOrder.setStatus(chargeStatus.getStartChargeSeqStat());
+//            chargingOrderClient.updateChargingOrder(chargingOrder);
+//        }
+//        return R.ok();
+//    }
+
+    @ResponseBody
+    @PostMapping("/notification_stationStatus")
+    public Map<String,Integer> notification_stationStatus(@RequestBody String json) {
+//        TContent tContent = new TContent();
+//        tContent.setType(3);
+//        tContent.setContent(json);
+//        tContent.setCreateTime(new Date());
+//        contentService.save(tContent);
+//        JSONObject jsonObject1 = JSONObject.parseObject(json);
+//        String data = jsonObject1.getString("Data");
+//        String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, data);
+//        System.err.println(decrypt);
+//        JSONObject jsonObject = JSONObject.parseObject(decrypt);
+//        System.err.println("特来电主动推送设备状态");
+//        ConnectorStatusInfos connectorStatusInfos = JSON.parseObject(jsonObject.toJSONString(), ConnectorStatusInfos.class);
+//        TChargingGun chargingGun = chargingGunService.getOne(Wrappers.lambdaQuery(TChargingGun.class)
+//                .eq(TChargingGun::getCode, connectorStatusInfos.getConnectorID()));
+//        if (Objects.nonNull(chargingGun)){
+//            // 修改订单状态
+//            switch (connectorStatusInfos.getStatus()){
+//                case 0:
+//                    chargingGun.setStatus(1);
+//                    break;
+//                case 1:
+//                    chargingGun.setStatus(2);
+//                    break;
+//                case 2:
+//                    chargingGun.setStatus(3);
+//                    break;
+//                case 3:
+//                    chargingGun.setStatus(4);
+//                    break;
+//                case 4:
+//                    chargingGun.setStatus(6);
+//                    break;
+//                case 255:
+//                    chargingGun.setStatus(7);
+//                    break;
+//            }
+//            chargingGunService.updateById(chargingGun);
+//        }
+        Map<String,Integer> map = new HashMap<>();
+        map.put("Status",0);
+        return map;
+    }
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeDetail.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeDetail.java
new file mode 100644
index 0000000..7de2d58
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeDetail.java
@@ -0,0 +1,26 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(description = "充电详情实体类")
+public class ChargeDetail {
+    @ApiModelProperty(value = "开始时间", example = "2017-08-08 11:29:29")
+    private String DetailStartTime;
+    @ApiModelProperty(value = "结束时间")
+    private String DetailEndTime;
+    @ApiModelProperty(value = "时段电价")
+    private BigDecimal ElecPrice;
+    @ApiModelProperty(value = "时段服务费价格")
+    private BigDecimal SevicePrice;
+    @ApiModelProperty(value = "时段充电量")
+    private BigDecimal DetailPower;
+    @ApiModelProperty(value = "时段电费")
+    private BigDecimal DetailElecMoney;
+    @ApiModelProperty(value = "时段服务费")
+    private BigDecimal DetailSeviceMoney;
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeRecord.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeRecord.java
new file mode 100644
index 0000000..e80e49a
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeRecord.java
@@ -0,0 +1,48 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@ApiModel(description = "充电记录实体类")
+@Data
+public class ChargeRecord {
+
+    @ApiModelProperty(value = "充电订单号\n" +
+            "\n", example = "395815801201708081212000874")
+    private String startChargeSeq;
+
+    @ApiModelProperty(value = "连接器ID", example = "3702120244206")
+    private String connectorID;
+
+    @ApiModelProperty(value = "开始时间", example = "2017-08-08 11:29:29")
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间", example = "2017-08-08 11:30:30")
+    private String endTime;
+
+    @ApiModelProperty(value = "总电量", example = "0.00")
+    private BigDecimal totalPower;
+
+    @ApiModelProperty(value = "电费总额", example = "0.00")
+    private BigDecimal totalElecMoney;
+
+    @ApiModelProperty(value = "服务费总额", example = "0.00")
+    private BigDecimal totalSeviceMoney;
+
+    @ApiModelProperty(value = "总金额", example = "0.00")
+    private BigDecimal totalMoney;
+
+    @ApiModelProperty(value = "停止原因", example = "2")
+    private Integer stopReason;
+
+    @ApiModelProperty(value = "总时长", example = "0")
+    private Integer sumPeriod;
+
+    @ApiModelProperty(value = "充电详情列表")
+    private List<ChargeDetail> chargeDetails;
+}
+
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeStartResponse.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeStartResponse.java
new file mode 100644
index 0000000..ecc2dad
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeStartResponse.java
@@ -0,0 +1,43 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "请求停止充电返回对象")
+public class ChargeStartResponse {
+
+    @ApiModelProperty(value = "充电订单状态 1:启动中\n" +
+            "\n" +
+            "2:充电中\n" +
+            "\n" +
+            "3:停止中\n" +
+            "\n" +
+            "4:已结束\n" +
+            "\n" +
+            "5:未知")
+    private int startChargeSeqStat;
+
+    @ApiModelProperty(value = "充电订单号")
+    private String startChargeSeq;
+
+    @ApiModelProperty(value = "连接器ID", example = "3702120244401")
+    private String connectorID;
+
+    @ApiModelProperty(value = "操作结果0:成功 1:失败")
+    private int succStat;
+
+    @ApiModelProperty(value = "失败原因 0:无;\n" +
+            "\n" +
+            "1:此设备不存在;\n" +
+            "\n" +
+            "2:此设备离线:\n" +
+            "\n" +
+            "3:设备已停止充电;\n" +
+            "\n" +
+            "4~99:自定义")
+    private int failReason;
+
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeStatus.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeStatus.java
new file mode 100644
index 0000000..5d9e9e0
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ChargeStatus.java
@@ -0,0 +1,61 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "充电订单对象")
+@Data
+public class ChargeStatus {
+    @ApiModelProperty(value = "累计充电时间")
+    private Long chargingTime;
+    @ApiModelProperty(value = "充电站名称")
+    private String stationName;
+    @ApiModelProperty(value = "桩名称")
+    private String pileName;
+    @ApiModelProperty(value = "桩编号")
+    private String equipmentID;
+    @ApiModelProperty(value = "枪名称")
+    private String gunName;
+    @ApiModelProperty(value = "枪编号")
+    private String connectorID;
+    @ApiModelProperty(value = "电费总额")
+    private Double elecMoney;
+    @ApiModelProperty(value = "充电总度数")
+    private Double totalPower;
+    @ApiModelProperty(value = "充电订单状态 1:启动中; 2:充电中; 3:停止中;4:已结束 5:未知 6:启动失败")
+    private Integer startChargeSeqStat;
+    @ApiModelProperty(value = "电池剩余电量")
+    private Integer soc;
+    @ApiModelProperty(value = "启动充电失败原因")
+    private String identCode;
+    @ApiModelProperty(value = "订单id")
+    private Long id;
+    @ApiModelProperty(value = "充电订单号")
+    private String startChargeSeq;
+    @ApiModelProperty(value = "充电设备接口 状态 1:空闲; 2:占用(未充电) 3:占用(充电中) 4:占用(预约锁定); 255:故障")
+    private Integer connectorStatus;
+    @ApiModelProperty(value = "电流A相")
+    private Double currentA;
+    @ApiModelProperty(value = "电流B相")
+    private Double currentB;
+    @ApiModelProperty(value = "电流C相")
+    private Double currentC;
+    @ApiModelProperty(value = "电压A相")
+    private Double voltageA;
+    @ApiModelProperty(value = "电压B相")
+    private Double voltageB;
+    @ApiModelProperty(value = "电压C相")
+    private Double voltageC;
+    @ApiModelProperty(value = "充电开始时间")
+    private String startTime;
+    @ApiModelProperty(value = "充电采样时间")
+    private String endTime;
+    @ApiModelProperty(value = "服务费总额")
+    private Double seviceMoney;
+    @ApiModelProperty(value = "总金额")
+    private Double totalMoney;
+    @ApiModelProperty(value = "时段数N")
+    private Integer sumPeriod;
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ConnectorInfo.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ConnectorInfo.java
new file mode 100644
index 0000000..ec917aa
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ConnectorInfo.java
@@ -0,0 +1,42 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ConnectorInfo {
+    @ApiModelProperty(value = "连接器ID")
+    private String connectorID;
+
+    @ApiModelProperty(value = "连接器名称")
+    private String connectorName;
+
+    @ApiModelProperty(value = "连接器类型 1:家用插座(模式2);\n" +
+            "2:交流接口插座(模式3,连 接方式B);\n" +
+            "3:交流接口插头(带枪线, 模式3,连接方式C);\n" +
+            "4:直流接口枪头(带枪线, 模式4);\n" +
+            "5:无线充电座; 6:其他")
+    private int connectorType;
+
+    @ApiModelProperty(value = "电压上限")
+    private int voltageUpperLimits;
+
+    @ApiModelProperty(value = "电压下限")
+    private int voltageLowerLimits;
+
+    @ApiModelProperty(value = "电流")
+    private int current;
+
+    @ApiModelProperty(value = "功率")
+    private double power;
+
+    @ApiModelProperty(value = "停车位编号")
+    private String parkNo;
+    @ApiModelProperty(value = "状态 1空闲 2占用")
+    private Integer status;
+
+    @ApiModelProperty(value = "国家标准")
+    private int nationalStandard;
+    @ApiModelProperty(value = "枪类型 1=快充 2=慢充")
+    private Integer gunType;
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ConnectorStatusInfos.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ConnectorStatusInfos.java
new file mode 100644
index 0000000..41c9949
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/ConnectorStatusInfos.java
@@ -0,0 +1,24 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ConnectorStatusInfos implements Serializable {
+
+
+    @ApiModelProperty(value = "充电设备接口编码")
+    private String ConnectorID;
+
+    @ApiModelProperty(value = "接口状态 0:离网; 1:空闲; 2:占用(未充电); 3:占用(充电中); 4:占用(预约锁定); 255:故障")
+    private Integer Status;
+
+    @ApiModelProperty(value = "车位状态 0:未知 10:空闲 50:占用")
+    private Integer ParkStatus;
+
+    @ApiModelProperty(value = "地锁状态 0:未知 10:已解锁 50:已上锁")
+    private Integer LockStatus;
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/EquipmentInfos.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/EquipmentInfos.java
new file mode 100644
index 0000000..929041f
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/EquipmentInfos.java
@@ -0,0 +1,49 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(value = "充电站对象")
+
+public class EquipmentInfos {
+    @ApiModelProperty(value = "设备ID")
+    private String equipmentID;
+
+    @ApiModelProperty(value = "设备名称")
+    private String equipmentName;
+
+    @ApiModelProperty(value = "制造商ID")
+    private String manufacturerID;
+
+    @ApiModelProperty(value = "制造商名称")
+    private String manufacturerName;
+
+    @ApiModelProperty(value = "设备型号")
+    private String equipmentModel;
+
+    @ApiModelProperty(value = "生产日期")
+    private String productionDate;
+
+    @ApiModelProperty(value = "设备类型 1:直流设备; 2:交流设备;\n" +
+            "3:交直流一体设备; 4:无线设备;\n" +
+            "5:其他")
+    private int equipmentType;
+
+    @ApiModelProperty(value = "设备经度")
+    private double equipmentLng;
+
+    @ApiModelProperty(value = "设备纬度")
+    private double equipmentLat;
+
+    @ApiModelProperty(value = "功率")
+    private double power;
+    @ApiModelProperty(value = "枪类型 1=快充 2=慢充")
+    private Integer gunType;
+    @ApiModelProperty(value = "连接器信息列表")
+    private List<ConnectorInfo> connectorInfos;
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/OperatorData.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/OperatorData.java
new file mode 100644
index 0000000..5215e0f
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/OperatorData.java
@@ -0,0 +1,64 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description = "推送统一接收实体类")
+public class OperatorData {
+
+    @ApiModelProperty(value = "运营商ID", example = "395815801")
+    private String OperatorID;
+
+    @ApiModelProperty(value = "数据内容", example = "MdtylP2lneRGc9XzcskU+I+sLFM0lW0OmxV4yRCW7Yoqy7XWGbN4g0sNMxyALuT59PsBJ1Oy4uNbCcvjTD2eJFnSSx0UDBOMu4KFkIjYrJp2IWroDD/960epFXvTEldX+c92DmO2HI9yUiVDYMHdt3P4in69l4RVRUy9Czos7H4T5GApCizy42jXEGv1UgON")
+    private String Data;
+
+    @ApiModelProperty(value = "时间戳", example = "20180517090848")
+    private String TimeStamp;
+
+    @ApiModelProperty(value = "序列号", example = "0001")
+    private String Seq;
+
+    @ApiModelProperty(value = "签名", example = "AD80102D05D1C31C2056DE130333A8CE")
+    private String Sig;
+
+    // Getters and Setters
+    public String getOperatorID() {
+        return OperatorID;
+    }
+
+    public void setOperatorID(String operatorID) {
+        OperatorID = operatorID;
+    }
+
+    public String getData() {
+        return Data;
+    }
+
+    public void setData(String data) {
+        Data = data;
+    }
+
+    public String getTimeStamp() {
+        return TimeStamp;
+    }
+
+    public void setTimeStamp(String timeStamp) {
+        TimeStamp = timeStamp;
+    }
+
+    public String getSeq() {
+        return Seq;
+    }
+
+    public void setSeq(String seq) {
+        Seq = seq;
+    }
+
+    public String getSig() {
+        return Sig;
+    }
+
+    public void setSig(String sig) {
+        Sig = sig;
+    }
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/PageInfo.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/PageInfo.java
new file mode 100644
index 0000000..b301ad1
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/PageInfo.java
@@ -0,0 +1,25 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import com.ruoyi.chargingPile.dto.ChargeOrder;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(value = "分页对象")
+public class PageInfo {
+    private int pageNo;
+    private int pageCount;
+    private int itemSize;
+    private int total;
+    private List<StationInfos> stationInfos;
+    private List<ChargeOrder> chargeOrders;
+
+    public PageInfo(int pageNo, int pageCount) {
+        this.pageNo = pageNo;
+        this.pageCount = pageCount;
+    }
+    public PageInfo() {
+    }
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/StationInfos.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/StationInfos.java
new file mode 100644
index 0000000..79b1e81
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/StationInfos.java
@@ -0,0 +1,117 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import com.ruoyi.integration.api.elutong.model.EquipmentInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@ApiModel(value = "充电站对象")
+@Data
+public class StationInfos {
+    @ApiModelProperty(value = "距离我xxKM")
+    private String distance;
+    @ApiModelProperty(value = "站点ID")
+    private String stationID;
+
+    @ApiModelProperty(value = "运营商ID")
+    private String operatorID;
+
+    @ApiModelProperty(value = "设备所有者ID")
+    private String equipmentOwnerID;
+
+    @ApiModelProperty(value = "站点名称")
+    private String stationName;
+
+    @ApiModelProperty(value = "国家代码")
+    private String countryCode;
+
+    @ApiModelProperty(value = "区域代码")
+    private String areaCode;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    @ApiModelProperty(value = "站点电话")
+    private String stationTel;
+
+    @ApiModelProperty(value = "服务电话")
+    private String serviceTel;
+
+    @ApiModelProperty(value = "站点类型 1:公共;  50:个人;\n" +
+            "100:公交(专用);\n" +
+            "101:环卫(专用);\n" +
+            "102:物流(专用);\n" +
+            "103:出租车(专用); 255:其他")
+    private int stationType;
+
+    @ApiModelProperty(value = "站点状态 0:未知;\n" +
+            "1:建设中;\n" +
+            "5:关闭下线; 6:维护中;\n" +
+            "50:正常使用")
+    private int stationStatus;
+
+    @ApiModelProperty(value = "停车位数量")
+    private int parkNums;
+
+    @ApiModelProperty(value = "站点经度")
+    private double stationLng;
+
+    @ApiModelProperty(value = "站点纬度")
+    private double stationLat;
+
+    @ApiModelProperty(value = "站点引导")
+    private String siteGuide;
+
+    @ApiModelProperty(value = "建设情况 1:居民区;\n" +
+            "2:公共机构;\n" +
+            "3:企事业单位;\n" +
+            "4:写字楼;\n" +
+            "5:工业园区; 6:交通枢纽;\n" +
+            "7:大型文体设施; 8:城市绿地;\n" +
+            "9:大型建筑配建停车场; 10:路边停车位;\n" +
+            "11:城际高速服务区; 255:其他")
+    private int construction;
+
+    @ApiModelProperty(value = "匹配车型")
+    private String matchCars;
+
+    @ApiModelProperty(value = "停车场信息")
+    private String parkInfo;
+
+    @ApiModelProperty(value = "营业时间")
+    private String busineHours;
+
+    @ApiModelProperty(value = "电费价格说明")
+    private String electricityFee;
+
+    @ApiModelProperty(value = "服务费价格说明")
+    private String serviceFee;
+
+    @ApiModelProperty(value = "停车费价格说明")
+    private String parkFee;
+
+    @ApiModelProperty(value = "支付方式")
+    private String payment;
+
+    @ApiModelProperty(value = "是否支持预约")
+    private int supportOrder;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+    @ApiModelProperty(value = "图片")
+    private List<String> pictures;
+    @ApiModelProperty(value = "快充总数")
+    private Integer fastTotal;
+    @ApiModelProperty(value = "快充数量")
+    private Integer fast;
+    @ApiModelProperty(value = "慢充数量")
+    private Integer snow;
+    @ApiModelProperty(value = "慢充总数")
+    private Integer snowTotal;
+
+    @ApiModelProperty(value = "设备信息列表")
+    private List<EquipmentInfos> equipmentInfos;
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/SupportOrder.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/SupportOrder.java
new file mode 100644
index 0000000..be636e1
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/SupportOrder.java
@@ -0,0 +1,119 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@ApiModel(description = "查询业务策略信息")
+@Data
+public class SupportOrder {
+
+    @ApiModelProperty(value = "设备业务序列号", example = "123456789201805081628123456")
+    private String EquipBizSeq;
+
+    @ApiModelProperty(value = "连接器ID", example = "3702120244401")
+    private String ConnectorID;
+
+    @ApiModelProperty(value = "成功状态", example = "0")
+    private int SuccStat;
+
+    @ApiModelProperty(value = "失败原因", example = "0")
+    private int FailReason;
+
+    @ApiModelProperty(value = "总周期", example = "15")
+    private int SumPeriod;
+
+    @ApiModelProperty(value = "策略信息列表")
+    private List<PolicyInfo> PolicyInfos;
+
+    // Getters and Setters
+
+    public String getEquipBizSeq() {
+        return EquipBizSeq;
+    }
+
+    public void setEquipBizSeq(String equipBizSeq) {
+        EquipBizSeq = equipBizSeq;
+    }
+
+    public String getConnectorID() {
+        return ConnectorID;
+    }
+
+    public void setConnectorID(String connectorID) {
+        ConnectorID = connectorID;
+    }
+
+    public int getSuccStat() {
+        return SuccStat;
+    }
+
+    public void setSuccStat(int succStat) {
+        SuccStat = succStat;
+    }
+
+    public int getFailReason() {
+        return FailReason;
+    }
+
+    public void setFailReason(int failReason) {
+        FailReason = failReason;
+    }
+
+    public int getSumPeriod() {
+        return SumPeriod;
+    }
+
+    public void setSumPeriod(int sumPeriod) {
+        SumPeriod = sumPeriod;
+    }
+
+    public List<PolicyInfo> getPolicyInfos() {
+        return PolicyInfos;
+    }
+
+    public void setPolicyInfos(List<PolicyInfo> policyInfos) {
+        PolicyInfos = policyInfos;
+    }
+
+    // Inner class for PolicyInfo
+    @ApiModel(description = "策略信息")
+    public static class PolicyInfo {
+        @ApiModelProperty(value = "开始时间", example = "090000")
+        private String StartTime;
+
+        @ApiModelProperty(value = "电价", example = "0.5000")
+        private String ElecPrice;
+
+        @ApiModelProperty(value = "服务费", example = "0.4000")
+        private String SevicePrice;
+
+        // Getters and Setters
+
+        public String getStartTime() {
+            return StartTime;
+        }
+
+        public void setStartTime(String startTime) {
+            StartTime = startTime;
+        }
+
+        public String getElecPrice() {
+            return ElecPrice;
+        }
+
+        public void setElecPrice(String elecPrice) {
+            ElecPrice = elecPrice;
+        }
+
+        public String getSevicePrice() {
+            return SevicePrice;
+        }
+
+        public void setSevicePrice(String sevicePrice) {
+            SevicePrice = sevicePrice;
+        }
+    }
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/TContent.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/TContent.java
new file mode 100644
index 0000000..2bc9f1e
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/domain/TContent.java
@@ -0,0 +1,48 @@
+package com.ruoyi.chargingPile.tulaidian.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 部门表
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2017-07-11
+ */
+@TableName("t_content")
+@Data
+public class TContent extends Model<TContent> {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 主键id
+     */
+	@TableId(value="id", type= IdType.AUTO)
+	private Integer id;
+    /**
+     * 类型1推送订单结束 2订单状态 3设备状态
+     */
+	private Integer type;
+    /**
+     * 内容
+     */
+	private String content;
+	/**
+     * 创建时间
+     */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+	@TableField("createTime")
+	private Date createTime;
+
+
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/service/IContentService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/service/IContentService.java
new file mode 100644
index 0000000..17002f2
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/service/IContentService.java
@@ -0,0 +1,9 @@
+package com.ruoyi.chargingPile.tulaidian.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.chargingPile.tulaidian.domain.TContent;
+
+public interface IContentService extends IService<TContent> {
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/service/impl/ContentServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/service/impl/ContentServiceImpl.java
new file mode 100644
index 0000000..c259a7b
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/service/impl/ContentServiceImpl.java
@@ -0,0 +1,13 @@
+package com.ruoyi.chargingPile.tulaidian.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.chargingPile.mapper.ContentMapper;
+import com.ruoyi.chargingPile.tulaidian.domain.TContent;
+import com.ruoyi.chargingPile.tulaidian.service.IContentService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ContentServiceImpl extends ServiceImpl<ContentMapper, TContent> implements IContentService {
+
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/AesEncryption.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/AesEncryption.java
new file mode 100644
index 0000000..37d143e
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/AesEncryption.java
@@ -0,0 +1,55 @@
+package com.ruoyi.chargingPile.tulaidian.util;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.Base64;
+
+/**
+ * 充电桩交互的数据的加密解密
+ */
+public class AesEncryption {
+
+    /**
+     * 加密
+     * @param key
+     * @param iv
+     * @param data
+     * @return
+     */
+    public static String encrypt(String key, String iv, String data) {
+        try {
+            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+            SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
+            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
+            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
+            byte[] encrypted = cipher.doFinal(data.getBytes());
+            return Base64.getEncoder().encodeToString(encrypted);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 解密
+     * @param key
+     * @param iv
+     * @param encryptedData
+     * @return
+     */
+    public static String decrypt(String key, String iv, String encryptedData) {
+        try {
+            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+            SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
+            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
+            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
+            byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
+            return new String(decrypted);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/ChargePileHttpUtil.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/ChargePileHttpUtil.java
new file mode 100644
index 0000000..88684b6
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/ChargePileHttpUtil.java
@@ -0,0 +1,292 @@
+package com.ruoyi.chargingPile.tulaidian.util;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.chargingPile.tulaidian.constant.ChargePileInterface;
+import com.ruoyi.common.redis.service.RedisService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 通用http发送方法
+ * 
+ * @author ruoyi
+ */
+@Component
+public  class ChargePileHttpUtil{
+
+    private static final String OperatorID = "MA01H3BQ3";
+    private static final String OperatorSecret = "f1331ef0b37c2d2";
+    private static final String SigSecret = "a6fedf0e1b27d6f8";
+    private static final String DataSecret = "50a61b93919c9606";
+    private static final String DataSecretIV = "7c8ac6861661d586";
+
+    @Autowired
+    private RedisService redisService;
+
+    /**
+     * 验签
+     * @return
+     */
+    public static boolean checkSig(){
+        return true;
+    }
+
+    /**
+     * 获取token
+     * @return
+     */
+    public String getToken(){
+        String token = redisService.getCacheObject(ChargePileInterface.TOKEN_KEY);
+        if(StringUtils.hasLength(token)){
+            return token;
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("OperatorID", OperatorID);
+        jsonObject.put("OperatorSecret", OperatorSecret);
+        String params = jsonObject.toJSONString();
+        // 参数加密
+        String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params);
+        // 获取签名
+        String timeStamp = System.currentTimeMillis() + "";
+        SequenceGenerator generator = new SequenceGenerator();
+        String nextSequence = generator.getNextSequence();
+        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret);
+        jsonObject = new JSONObject();
+        jsonObject.put("OperatorID", OperatorID);
+        jsonObject.put("Data", data);
+        jsonObject.put("TimeStamp", timeStamp);
+        jsonObject.put("Seq", nextSequence);
+        jsonObject.put("Sig", hmacMD5);
+        String result = HttpUtils.sendPost(ChargePileInterface.QUERY_TOKEN, jsonObject.toJSONString());
+        String string = JSONObject.parseObject(result).getString("Data");
+        String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string);
+        JSONObject tokenResult = JSONObject.parseObject(decrypt);
+        token = tokenResult.getString("AccessToken");
+        Integer TokenAvailableTime = tokenResult.getInteger("TokenAvailableTime");
+        redisService.setCacheObject(ChargePileInterface.TOKEN_KEY,token,Long.valueOf(TokenAvailableTime)-60L, TimeUnit.SECONDS);
+        return token;
+    }
+
+    /**
+     * 获取充电桩
+     * @return
+     */
+    public String queryStationsInfo(Integer PageNo, Integer PageSize){
+        String token = getToken();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("PageNo", PageNo);
+        jsonObject.put("PageSize", PageSize);
+        String params = jsonObject.toJSONString();
+        // 参数加密
+        String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params);
+        // 获取签名
+        String timeStamp = System.currentTimeMillis() + "";
+        SequenceGenerator generator = new SequenceGenerator();
+        String nextSequence = generator.getNextSequence();
+        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret);
+        jsonObject = new JSONObject();
+        jsonObject.put("OperatorID", OperatorID);
+        jsonObject.put("Data", data);
+        jsonObject.put("TimeStamp", timeStamp);
+        jsonObject.put("Seq", nextSequence);
+        jsonObject.put("Sig", hmacMD5);
+        String result = HttpUtils.sendPost(ChargePileInterface.QUERY_STATIONS_INFO, jsonObject.toJSONString(),token);
+        String string = JSONObject.parseObject(result).getString("Data");
+        String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string);
+        System.err.println(decrypt);
+        return decrypt;
+    }
+    /**
+     * 获取充电桩
+     * @return
+     */
+    public String getOrderList(Integer PageNo, Integer PageSize){
+        String token = getToken();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("PageNo", PageNo);
+        jsonObject.put("PageSize", PageSize);
+        String params = jsonObject.toJSONString();
+        // 参数加密
+        String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params);
+        // 获取签名
+        String timeStamp = System.currentTimeMillis() + "";
+        SequenceGenerator generator = new SequenceGenerator();
+        String nextSequence = generator.getNextSequence();
+        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret);
+        jsonObject = new JSONObject();
+        jsonObject.put("OperatorID", OperatorID);
+        jsonObject.put("Data", data);
+        jsonObject.put("TimeStamp", timeStamp);
+        jsonObject.put("Seq", nextSequence);
+        jsonObject.put("Sig", hmacMD5);
+        String result = HttpUtils.sendPost(ChargePileInterface.QUERY_ORDER_LIST, jsonObject.toJSONString(),token);
+        String string = JSONObject.parseObject(result).getString("Data");
+        String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string);
+        System.err.println(decrypt);
+        return decrypt;
+    }
+
+    /**
+     * 获取充电桩
+     * @return
+     */
+    public String queryStationStatus(List<String> StationIDs){
+        String token = getToken();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("StationIDs", StationIDs);
+        String params = jsonObject.toJSONString();
+        // 参数加密
+        String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params);
+        // 获取签名
+        String timeStamp = System.currentTimeMillis() + "";
+        SequenceGenerator generator = new SequenceGenerator();
+        String nextSequence = generator.getNextSequence();
+        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret);
+        jsonObject = new JSONObject();
+        jsonObject.put("OperatorID", OperatorID);
+        jsonObject.put("Data", data);
+        jsonObject.put("TimeStamp", timeStamp);
+        jsonObject.put("Seq", nextSequence);
+        jsonObject.put("Sig", hmacMD5);
+        String result = HttpUtils.sendPost(ChargePileInterface.QUERY_STATION_STATUS, jsonObject.toJSONString(),token);
+        String string = JSONObject.parseObject(result).getString("Data");
+        String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string);
+        System.err.println(decrypt);
+        return decrypt;
+    }
+
+    /**
+     * 请求设备认证
+     * @param EquipAuthSeq 设备认证流水号 格式“运营商ID+唯一编号”,27字符
+     * @param ConnectorID 充电设备接口编码 格式“6位行政区编码,4位电站编码,3位终端编码”,13位字符
+     * @return
+     */
+    public String queryEquipAuth(String EquipAuthSeq,String ConnectorID){
+        String token = getToken();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("EquipAuthSeq", EquipAuthSeq);
+        jsonObject.put("ConnectorID", ConnectorID);
+        String params = jsonObject.toJSONString();
+        // 参数加密
+        String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params);
+        // 获取签名
+        String timeStamp = System.currentTimeMillis() + "";
+        SequenceGenerator generator = new SequenceGenerator();
+        String nextSequence = generator.getNextSequence();
+        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret);
+        jsonObject = new JSONObject();
+        jsonObject.put("OperatorID", OperatorID);
+        jsonObject.put("Data", data);
+        jsonObject.put("TimeStamp", timeStamp);
+        jsonObject.put("Seq", nextSequence);
+        jsonObject.put("Sig", hmacMD5);
+        String result = HttpUtils.sendPost(ChargePileInterface.QUERY_EQUIP_AUTH, jsonObject.toJSONString(),token);
+        String string = JSONObject.parseObject(result).getString("Data");
+        String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string);
+        System.err.println(decrypt);
+        return decrypt;
+    }
+
+    /**
+     * 请求充电
+     * @param StartChargeSeq 充电订单号 格式“运营商ID+唯一编号”,27字符
+     * @param ConnectorID 充电设备接口编码 格式“6位行政区编码,4位电站编码,3位终端编码”,13位字符
+     * @param QRCode  二维码其他信息 二维码中含有自定义部分的,需要将二维码自定义部分的原文传输。
+     * @param PhoneNum 手机号 个人支付必传,格式确保正确
+     * @param PlateNum 车牌号 停车减免必传,格式确保正确
+     * @return
+     */
+    public String queryStartCharge(String StartChargeSeq,String ConnectorID,String QRCode,String PhoneNum,String PlateNum,BigDecimal money){
+        String token = getToken();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("StartChargeSeq", StartChargeSeq);
+        jsonObject.put("ConnectorID", ConnectorID);
+        jsonObject.put("QRCode", QRCode);
+        jsonObject.put("PhoneNum", PhoneNum);
+        jsonObject.put("PlateNum", PlateNum);
+        jsonObject.put("chargingAmt", money);
+        String params = jsonObject.toJSONString();
+        String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params);
+        // 获取签名
+        String timeStamp = System.currentTimeMillis() + "";
+        SequenceGenerator generator = new SequenceGenerator();
+        String nextSequence = generator.getNextSequence();
+        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret);
+        jsonObject = new JSONObject();
+        jsonObject.put("OperatorID", OperatorID);
+        jsonObject.put("Data", data);
+        jsonObject.put("TimeStamp", timeStamp);
+        jsonObject.put("Seq", nextSequence);
+        jsonObject.put("Sig", hmacMD5);
+        String result = HttpUtils.sendPost(ChargePileInterface.QUERY_START_CHARGE, jsonObject.toJSONString(),token);
+        String string = JSONObject.parseObject(result).getString("Data");
+        String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string);
+        System.err.println(decrypt);
+        return decrypt;
+    }
+
+    /**
+     * 请求停止充电
+     * @param StartChargeSeq 充电订单号 格式“运营商ID+唯一编号”,27字符
+     * @param ConnectorID 充电设备接口编码 格式“6位行政区编码,4位电站编码,3位终端编码”,13位字符
+     * @return
+     */
+    public String queryStopCharge(String StartChargeSeq,String ConnectorID){
+        String token = getToken();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("StartChargeSeq", StartChargeSeq);
+        jsonObject.put("ConnectorID", ConnectorID);
+        String params = jsonObject.toJSONString();
+        // 参数加密
+        String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params);
+        // 获取签名
+        String timeStamp = System.currentTimeMillis() + "";
+        SequenceGenerator generator = new SequenceGenerator();
+        String nextSequence = generator.getNextSequence();
+        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret);
+        jsonObject = new JSONObject();
+        jsonObject.put("OperatorID", OperatorID);
+        jsonObject.put("Data", data);
+        jsonObject.put("TimeStamp", timeStamp);
+        jsonObject.put("Seq", nextSequence);
+        jsonObject.put("Sig", hmacMD5);
+        String result = HttpUtils.sendPost(ChargePileInterface.QUERY_STOP_CHARGE, jsonObject.toJSONString(),token);
+        String string = JSONObject.parseObject(result).getString("Data");
+        String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string);
+        System.err.println(decrypt);
+        return decrypt;
+    }
+    /**
+     * 查询订单状态
+     */
+    public String queryEquipChargeStatus(String StartChargeSeq){
+        String token = getToken();
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("StartChargeSeq", StartChargeSeq);
+        String params = jsonObject.toJSONString();
+        // 参数加密
+        String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params);
+        // 获取签名
+        String timeStamp = System.currentTimeMillis() + "";
+        SequenceGenerator generator = new SequenceGenerator();
+        String nextSequence = generator.getNextSequence();
+        String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret);
+        jsonObject = new JSONObject();
+        jsonObject.put("OperatorID", OperatorID);
+        jsonObject.put("Data", data);
+        jsonObject.put("TimeStamp", timeStamp);
+        jsonObject.put("Seq", nextSequence);
+        jsonObject.put("Sig", hmacMD5);
+        String result = HttpUtils.sendPost(ChargePileInterface.QUERY_EQUIP_CHARGE_STATUS, jsonObject.toJSONString(),token);
+        String string = JSONObject.parseObject(result).getString("Data");
+        String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string);
+        System.err.println(decrypt);
+        return decrypt;
+    }
+
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/CodeGenerateUtils.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/CodeGenerateUtils.java
new file mode 100644
index 0000000..e878fa4
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/CodeGenerateUtils.java
@@ -0,0 +1,85 @@
+package com.ruoyi.chargingPile.tulaidian.util;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+/**
+ * @Description
+ * @Author xiaochen
+ * @Date 2021/7/28 10:26
+ */
+public class CodeGenerateUtils {
+
+    /**
+     * @return
+     * @Description 获取商品编码
+     * 商品编码规则:nanoTime(后5位)*5位随机数(10000~99999)
+     * @Author xiaochen
+     */
+    public static String generateProductCode() {
+        long nanoPart = System.nanoTime() % 100000L;
+        if (nanoPart < 10000L) {
+            nanoPart += 10000L;
+        }
+        long randomPart = (long) (Math.random() * (90000) + 10000);
+        String code = "0" + new BigDecimal(nanoPart).multiply(new BigDecimal(randomPart));
+        return code.substring(code.length() - 10);
+    }
+
+    /**
+     * @return
+     * @Description 生成订单编号  10位
+     * 订单编号规则:(10位):(年末尾*月,取后2位)+(用户ID%3.33*日取整后2位)+(timestamp*10000以内随机数,取后6位)
+     * @Author xiaochen
+     */
+    public static String generateOrderSn() {
+        Calendar calendar = Calendar.getInstance();
+        int year = calendar.get(Calendar.YEAR);
+        year = year % 10;
+        if (year == 0) year = 10;
+        int month = calendar.get(Calendar.MONTH) + 1;
+        int yearMonth = year * month;
+        String yearMonthPart = "0" + yearMonth;
+        yearMonthPart = yearMonthPart.substring(yearMonthPart.length() - 2);
+
+        int day = calendar.get(Calendar.DAY_OF_MONTH);
+        double v = Math.random() * 10000;
+        int dayNum = (int) ((v % 3.33) * day);
+        String dayPart = "0" + dayNum;
+        dayPart = dayPart.substring(dayPart.length() - 2);
+
+        String timestampPart = "" + (Math.random() * 10000) * (System.currentTimeMillis() / 10000);
+        timestampPart = timestampPart.replace(".", "").replace("E", "");
+        timestampPart = timestampPart.substring(0, 5);
+        return yearMonthPart + dayPart + timestampPart;
+    }
+
+    /**
+     * @return
+     * @Description 生成统一支付单号  规则:年(2)月(2)日(2)时(2)分(2)+timestamp*5位随机整数取后5位
+     * @Author xiaochen
+     */
+    public static String generateVolumeSn() {
+        Calendar calendar = Calendar.getInstance();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmss");
+        String dateTime = dateFormat.format(calendar.getTime());
+        dateTime = dateTime.substring(2);
+        String timestampPart = "" + (Math.random() * 10000) * (System.currentTimeMillis() / 10000);
+        timestampPart = timestampPart.replace(".", "").replace("E", "");
+        timestampPart = timestampPart.substring(0, 6);
+        return dateTime + timestampPart;
+    }
+
+    public static void main(String[] args) {
+        Calendar calendar = Calendar.getInstance();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
+        String dateTime = dateFormat.format(calendar.getTime());
+        dateTime = dateTime.substring(2);
+        String timestampPart = "" + (Math.random() * 10000) * (System.currentTimeMillis() / 10000);
+        timestampPart = timestampPart.replace(".", "").replace("E", "");
+        timestampPart = timestampPart.substring(0, 4);
+        System.err.println(dateTime+timestampPart);
+    }
+
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/HMacMD5Util.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/HMacMD5Util.java
new file mode 100644
index 0000000..0d270df
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/HMacMD5Util.java
@@ -0,0 +1,122 @@
+package com.ruoyi.chargingPile.tulaidian.util;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class HMacMD5Util {
+
+    /**
+     * 加签
+     * @param operatorId
+     * @param timeStamp
+     * @param data
+     * @param seq
+     * @param SigSecret
+     * @return
+     */
+    public static String getHMacMD5(String operatorId,String timeStamp, String data, String seq,String SigSecret) {
+        String m = new StringBuilder(operatorId).append(data).append(timeStamp).append(seq).toString();
+        byte[] macMD5 = HMacMD5Util.getHMacMD5Bytes(SigSecret.getBytes(), m.getBytes());
+        return HMacMD5Util.bytesToHexString(macMD5);
+    }
+
+
+    /**
+    * HmacMd5的计算公式为:HMAC(K,M) = H(K⊕opad∣H(K⊕ipad∣M))
+    * 其中:K是密钥(byte[] key),长度可为64字节(后面涉及描述都是以字节byte进行),若小于该长度,在密钥后面用0(即0x00)补齐。
+    * M是消息内容(byte[] m);
+    * H是散列函数(此处采用MD5);
+    * opad和ipad分别是由若干个0x5c和0x36组成的字符串;
+    * ⊕表示异或运算;
+    * ∣表示连接操作。
+    **/
+    private static byte[] getHMacMD5Bytes(byte[] key, byte[] m) {
+        try {
+            //定义长度
+            int length = 64;
+            //定义opad和ipad
+            byte[] opad = new byte[length];
+            byte[] ipad = new byte[length];
+            for (int i = 0; i < 64; i++) {
+                opad[i] = 0x5C;
+                ipad[i] = 0x36;
+            }
+            byte[] actualKey = key;
+            byte[] keyArr = new byte[length];
+            //如果密钥长度,大于64字节,就使用MD5算法计算其散列值,作为密钥
+            if (key.length > length) {
+                actualKey = md5(key);
+            }
+            for (int i = 0; i < actualKey.length; i++) {
+                keyArr[i] = actualKey[i];
+            }
+            //如果密钥长度不足64字节,就使用0x00补齐到64字节
+            if (actualKey.length < length) {
+            for (int i = key.length; i < length; i++)
+                keyArr[i] = 0x00;
+            }
+            //使用密钥和ipad进行异或运算【K⊕ipad】
+            byte[] kIpadXorResult = new byte[length];
+            for (int i = 0; i < length; i++) {
+                kIpadXorResult[i] = (byte) (keyArr[i] ^ ipad[i]);
+            }
+            //将待加密数据M追加到kIpadXorResult后面【K⊕ipad∣M】
+            byte[] firstAppendResult = new byte[kIpadXorResult.length + m.length];
+            for (int i = 0; i < kIpadXorResult.length; i++) {
+                firstAppendResult[i] = kIpadXorResult[i];
+            }
+            for (int i = 0; i < m.length; i++) {
+                firstAppendResult[i + keyArr.length] = m[i];
+            }
+            //做MD5运算【H(K⊕ipad∣M)】
+            byte[] firstHashResult = md5(firstAppendResult);
+
+            //使用密钥和opad进行异或运算【K⊕opad】
+            byte[] kOpadXorResult = new byte[length];
+            for (int i = 0; i < length; i++) {
+                kOpadXorResult[i] = (byte) (keyArr[i] ^ opad[i]);
+            }
+            //将firstHashResult追加到kOpadXorResult后面【K⊕opad∣H(K⊕ipad∣M)】
+            byte[] secondAppendResult = new byte[kOpadXorResult.length + firstHashResult.length];
+            for (int i = 0; i < kOpadXorResult.length; i++) {
+                secondAppendResult[i] = kOpadXorResult[i];
+            }
+            for (int i = 0; i < firstHashResult.length; i++) {
+                secondAppendResult[kOpadXorResult.length + i] = firstHashResult[i];
+            }
+            //做MD5运算【H(K⊕opad∣H(K⊕ipad∣M))】
+            return md5(secondAppendResult);
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+    * MD5(产生出一个128位(16字节)的散列值)
+    **/
+    private static byte[] md5(byte[] str) throws NoSuchAlgorithmException {
+        MessageDigest md = MessageDigest.getInstance("MD5");
+        md.update(str);
+        return md.digest();
+    }
+
+    /**
+    * HEX转化为字符串
+    **/
+    private static String bytesToHexString(byte[] m) {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (m == null || m.length <= 0) {
+            return null;
+        }
+        for (int i = 0; i < m.length; i++) {
+            int v = m[i] & 0xFF;
+            String hv = Integer.toHexString(v);
+            if (hv.length() < 2) {
+                stringBuilder.append(0);
+            }
+            stringBuilder.append(hv);
+        }
+        return stringBuilder.toString().toUpperCase();
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/HttpUtils.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/HttpUtils.java
new file mode 100644
index 0000000..ebd9af1
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/HttpUtils.java
@@ -0,0 +1,361 @@
+package com.ruoyi.chargingPile.tulaidian.util;
+
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.*;
+import java.io.*;
+import java.net.*;
+import java.nio.charset.StandardCharsets;
+import java.security.cert.X509Certificate;
+
+/**
+ * 通用http发送方法
+ * 
+ * @author ruoyi
+ */
+public class HttpUtils
+{
+    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
+
+    /**
+     * 向指定 URL 发送GET方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @param contentType 编码类型
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendGet(String url, String param, String contentType)
+    {
+        StringBuilder result = new StringBuilder();
+        BufferedReader in = null;
+        try
+        {
+            String urlNameString = StringUtils.isNotEmpty(param) ? url + "?" + param : url;
+            log.info("sendGet - {}", urlNameString);
+            URL realUrl = new URL(urlNameString);
+            URLConnection connection = realUrl.openConnection();
+            connection.setRequestProperty("accept", "*/*");
+            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            connection.connect();
+            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (Exception ex)
+            {
+                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 向指定 URL 发送POST方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendPost(String url, String param)
+    {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try
+        {
+            log.info("sendPost - {}", url);
+            URL realUrl = new URL(url);
+            URLConnection conn = realUrl.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("Content-Type", "application/json");
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            out = new PrintWriter(conn.getOutputStream());
+            out.print(param);
+            out.flush();
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (out != null)
+                {
+                    out.close();
+                }
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (IOException ex)
+            {
+                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+    /**
+     * 向指定 URL 发送POST方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @param token token
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendPost(String url, String param,String token)
+    {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try
+        {
+            log.info("sendPost - {}", url);
+            URL realUrl = new URL(url);
+            URLConnection conn = realUrl.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("Content-Type", "application/json");
+            conn.setRequestProperty("Authorization", "Bearer "+token);
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            out = new PrintWriter(conn.getOutputStream());
+            out.print(param);
+            out.flush();
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (out != null)
+                {
+                    out.close();
+                }
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (IOException ex)
+            {
+                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    public static String sendSSLPost(String url, String param)
+    {
+        StringBuilder result = new StringBuilder();
+        String urlNameString = url + "?" + param;
+        try
+        {
+            log.info("sendSSLPost - {}", urlNameString);
+            SSLContext sc = SSLContext.getInstance("SSL");
+            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
+            URL console = new URL(urlNameString);
+            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("contentType", "utf-8");
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+
+            conn.setSSLSocketFactory(sc.getSocketFactory());
+            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
+            conn.connect();
+            InputStream is = conn.getInputStream();
+            BufferedReader br = new BufferedReader(new InputStreamReader(is));
+            String ret = "";
+            while ((ret = br.readLine()) != null)
+            {
+                if (ret != null && !"".equals(ret.trim()))
+                {
+                    result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
+                }
+            }
+            log.info("recv - {}", result);
+            conn.disconnect();
+            br.close();
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
+        }
+        return result.toString();
+    }
+
+    public static String post(String strURL, String params) {
+        String result = "";
+        BufferedReader reader = null;
+        try {
+            URL url = new URL(strURL);// 创建连接
+            HttpURLConnection connection = (HttpURLConnection) url
+                    .openConnection();
+            connection.setDoOutput(true);
+            connection.setDoInput(true);
+            connection.setUseCaches(false);
+            connection.setInstanceFollowRedirects(true);
+            connection.setRequestMethod("POST"); // 设置请求方式
+            connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式
+            connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式
+            connection.connect();
+            if (params != null && !StringUtils.isEmpty(params)) {
+                byte[] writebytes = params.getBytes();
+                // 设置文件长度
+                //   connection.setRequestProperty("Content-Length", String.valueOf(writebytes.length));
+                OutputStream outwritestream = connection.getOutputStream();
+                outwritestream.write(params.getBytes());
+                outwritestream.flush();
+                outwritestream.close();
+                // Log.d("hlhupload", "doJsonPost: conn"+connection.getResponseCode());
+            }
+            if (connection.getResponseCode() == 200) {
+                log.info("<<<<<<<<<<<<<请求响应:{}", connection.getResponseMessage());
+                reader = new BufferedReader(
+                        new InputStreamReader(connection.getInputStream()));
+                result = reader.readLine();
+                log.info("<<<<<<<<<<<<<请求响应:{}", result);
+            } else {
+                throw new ServiceException(connection.getResponseMessage());
+            }
+        } catch (Exception e) {
+            throw new ServiceException("http的post请求异常!" + e.getMessage());
+        } finally {
+            if (reader != null) {
+                try {
+                    reader.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return result;
+    }
+
+    private static class TrustAnyTrustManager implements X509TrustManager
+    {
+        @Override
+        public void checkClientTrusted(X509Certificate[] chain, String authType)
+        {
+        }
+
+        @Override
+        public void checkServerTrusted(X509Certificate[] chain, String authType)
+        {
+        }
+
+        @Override
+        public X509Certificate[] getAcceptedIssuers()
+        {
+            return new X509Certificate[] {};
+        }
+    }
+
+    private static class TrustAnyHostnameVerifier implements HostnameVerifier
+    {
+        @Override
+        public boolean verify(String hostname, SSLSession session)
+        {
+            return true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/SequenceGenerator.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/SequenceGenerator.java
new file mode 100644
index 0000000..217faaa
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/SequenceGenerator.java
@@ -0,0 +1,56 @@
+package com.ruoyi.chargingPile.tulaidian.util;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class SequenceGenerator {
+    private final ConcurrentHashMap<Long, AtomicInteger> counterMap = new ConcurrentHashMap<>();
+
+    public synchronized String getNextSequence() {
+        long currentTimestamp = System.currentTimeMillis() / 1000; // 获取当前秒级时间戳
+
+        AtomicInteger counter = counterMap.get(currentTimestamp);
+        if (counter == null) {
+            counter = new AtomicInteger(1); // 新的一秒,初始化计数器为1
+            counterMap.put(currentTimestamp, counter);
+        } else {
+            counter.incrementAndGet(); // 同一秒内,计数器递增
+        }
+
+        // 生成四位序列号
+        String sequence = String.format("%04d", counter.get());
+
+        return sequence;
+    }
+
+    public static void main(String[] args) {
+        SequenceGenerator generator = new SequenceGenerator();
+
+        // 测试生成多个序列号
+        for (int i = 0; i < 10; i++) {
+            System.out.println(generator.getNextSequence());
+            try {
+                Thread.sleep(100); // 模拟同一秒内的多次调用
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+
+        // 模拟进入新的一秒
+        try {
+            Thread.sleep(1100); // 等待超过1秒
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+
+        // 再次生成序列号
+        for (int i = 0; i < 10; i++) {
+            System.out.println(generator.getNextSequence());
+            try {
+                Thread.sleep(100); // 模拟同一秒内的多次调用
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/TaskUtilCharging.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/TaskUtilCharging.java
new file mode 100644
index 0000000..8771986
--- /dev/null
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/tulaidian/util/TaskUtilCharging.java
@@ -0,0 +1,51 @@
+package com.ruoyi.chargingPile.tulaidian.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.chargingPile.tulaidian.domain.ChargeStatus;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.order.api.feignClient.ChargingOrderClient;
+import com.ruoyi.order.api.model.TChargingOrder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/6/24 15:26
+ */
+@Component
+public class TaskUtilCharging {
+    @Autowired
+    private ChargingOrderClient chargingOrderClient;
+    @Autowired
+    private ChargePileHttpUtil chargePileHttpUtil;
+    /**
+     * 每隔一分钟去处理的定时任务
+     */
+//    @Scheduled(fixedRate = 1000 * 60)
+//    public void taskMinute() {
+//        try {
+//            List<Integer> statusList = new ArrayList<>();
+//            R<List<TChargingOrder>> statusR = chargingOrderClient.getOrderListByStatus(statusList);
+//            List<TChargingOrder> status = statusR.getData();
+//            if(!CollectionUtils.isEmpty(status)){
+//                for (TChargingOrder chargeOrder : status) {
+//                    String s = chargePileHttpUtil.queryEquipChargeStatus(chargeOrder.getStartChargeSeq());
+//                    System.out.println("充电订单:"+chargeOrder.getCode()+"充电状态:"+s);
+//                    JSONObject jsonObject = JSONObject.parseObject(s);
+//                    ChargeStatus chargeStatus = JSON.parseObject(jsonObject.toJSONString(), ChargeStatus.class);
+//                    chargeOrder.setStatus(chargeStatus.getStartChargeSeqStat());
+//                    chargingOrderClient.updateChargingOrder(chargeOrder);
+//                }
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderBackController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderBackController.java
new file mode 100644
index 0000000..7a6e014
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderBackController.java
@@ -0,0 +1,88 @@
+package com.ruoyi.order.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.chargingPile.api.model.Site;
+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.utils.DateUtils;
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.integration.api.elutong.model.ConnectorInfo;
+import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
+import com.ruoyi.order.api.feignClient.ChargingOrderClient;
+import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
+import com.ruoyi.order.service.TChargingOrderAccountingStrategyService;
+import com.ruoyi.order.service.TChargingOrderService;
+import com.ruoyi.other.api.domain.Region;
+import com.ruoyi.other.api.feignClient.OtherClient;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 接口控制器提供
+ *
+ * @author stylefeng
+ * @Date 2018/7/20 23:39
+ */
+@RestController
+@RequestMapping("/tempOrders")
+@Slf4j
+public class OrderBackController {
+
+    @Autowired
+    private TChargingOrderService chargingOrderService;
+    @Resource
+    private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
+
+
+    /**
+     * 删除关联充电订单
+     */
+    @ResponseBody
+    @PostMapping("/deleteOrders")
+    @ApiOperation(value = "删除关联充电订单", tags = {"删除关联充电订单"}, notes = "")
+    public R<String> deleteOrders(){
+        List<Long> orderIds = chargingOrderService.lambdaQuery().eq(TChargingOrder::getOperatorId, 999)
+                .list().stream().map(TChargingOrder::getId).collect(Collectors.toList());
+        chargingOrderService.
+                remove(new LambdaQueryWrapper<TChargingOrder>()
+                        .eq(TChargingOrder::getOperatorId,999));
+        log.info("删除关联订单数量:{}",orderIds.size());
+        log.info("删除关联订单数据:{}",orderIds);
+        if (!orderIds.isEmpty()){
+            chargingOrderAccountingStrategyService.remove(
+                    new LambdaQueryWrapper<TChargingOrderAccountingStrategy>()
+                            .in(TChargingOrderAccountingStrategy::getChargingOrderId
+                            ,
+                                    orderIds)
+            );
+        }
+        return R.ok();
+    }
+
+
+}
+
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderAccountingStrategyController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderAccountingStrategyController.java
index 11d0ca0..9919f38 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderAccountingStrategyController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderAccountingStrategyController.java
@@ -67,5 +67,15 @@
 		List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrderId));
 		return R.ok(list);
 	}
+	/**
+	 * 添加充电计费明细
+	 * @param accountingStrategyList
+	 * @return
+	 */
+	@PostMapping("/addChargingOrderAccountingStrategy")
+	public R<String> addChargingOrderAccountingStrategy(@RequestBody List<TChargingOrderAccountingStrategy> accountingStrategyList){
+		chargingOrderAccountingStrategyService.saveBatch(accountingStrategyList);
+		return R.ok();
+	}
 }
 
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 83fde65..ec71e80 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
@@ -2354,6 +2354,12 @@
 
         return R.ok(new BigDecimal(sumDegreeBySiteIds));
     }
+    @ResponseBody
+    @PostMapping("/addChargingOrder")
+    public R<Long> addChargingOrder(@RequestBody TChargingOrder chargingOrder){
+        chargingOrderService.save(chargingOrder);
+        return R.ok(chargingOrder.getId());
+    }
 
 
     @GetMapping(value = "/getOrderIdByUserId")
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java
index a13432a..da617ed 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java
@@ -64,6 +64,11 @@
 		return R.ok(list);
 	}
 
+	@GetMapping("/listAllRegion")
+	R<List<Region>> listAllRegion(){
+		List<Region> list = regionService.list();
+		return R.ok(list);
+	}
 	@ResponseBody
 	@GetMapping("/getTSystemConfiguration")
 	public R<List<TSystemConfiguration>> getTSystemConfiguration(){

--
Gitblit v1.7.1