From 4fd0278cda787a91eb35d95d6491f5485afe3e48 Mon Sep 17 00:00:00 2001
From: zhibing.pu <393733352@qq.com>
Date: 星期六, 07 九月 2024 18:03:32 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java                              |  348 ++++++++++++++++
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java                       |   15 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java |    7 
 ruoyi-service/ruoyi-chargingPile/src/main/resources/template/运营商名称1-充电桩名称1-结算对账单明细-结算月份1.xlsx                                    |    0 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TSettlementConfirmServiceImpl.java                          |   34 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java                          |    3 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java                                       |   25 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java                          |    7 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java                                           |    4 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java                          |    6 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java                                       |   20 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java                             |   11 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java       |   20 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TSettlementConfirmService.java                                   |   24 +
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml                                           |   39 +
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java                                 |   17 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java      |    9 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/token/IotTokenUtil.java                          |    2 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java                                                |   50 +
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java                          |   21 +
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementTotalVO.java                                            |   21 +
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordVO.java                               |   23 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java                                     |   33 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java                   |   11 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java                 |    2 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java                            |   14 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java                                  |    3 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java                                        |  200 +++++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java                                |    6 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java               |  101 ++++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java                          |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java                            |   93 ++-
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordPageInfoVO.java                       |   31 +
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/SettlementConfirmAdd.java                                        |   26 +
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml                                    |    3 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java                            |   11 
 36 files changed, 1,151 insertions(+), 91 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java
index b4cdc47..d33b267 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java
@@ -2,7 +2,9 @@
 
 import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
+import com.ruoyi.chargingPile.api.model.Partner;
 import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.chargingPile.api.model.TChargingPile;
 import com.ruoyi.common.core.domain.R;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -25,7 +27,12 @@
     public SiteClient create(Throwable throwable) {
         log.error("站点调用失败:{}", throwable.getMessage());
         return new SiteClient() {
-    
+
+            @Override
+            public R<List<TChargingPile>> getPileListBySiteId(Integer siteId) {
+                return R.fail("根据站点id 查询所有充电桩:" + throwable.getMessage());
+            }
+
             @Override
             public R<List<Site>> getSiteByIds(List<Integer> ids) {
                 return R.fail("根据id集合获取站点数据调用失败:" + throwable.getMessage());
@@ -40,6 +47,12 @@
             public R<List<GetSiteListDTO>> getSiteListByUserId(Long userId) {
                 return null;
             }
+
+            @Override
+            public R<Partner> getPartnerR(Integer id) {
+                return R.fail("根据合作商id获取合作商详情失败:" + throwable.getMessage());
+
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java
index a56392f..c311954 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java
@@ -2,14 +2,13 @@
 
 import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
 import com.ruoyi.chargingPile.api.factory.SiteFallbackFactory;
+import com.ruoyi.chargingPile.api.model.Partner;
 import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.chargingPile.api.model.TChargingPile;
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -19,6 +18,8 @@
  */
 @FeignClient(contextId = "SiteClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = SiteFallbackFactory.class)
 public interface SiteClient {
+	@GetMapping("/site/getPileListBySiteId/{siteId}")
+	public R<List<TChargingPile>> getPileListBySiteId(@PathVariable("siteId")Integer siteId);
 	
 	/**
 	 * 根据id集合获取数据
@@ -37,4 +38,6 @@
 
 	@GetMapping("/site/getSiteList/byUserId")
 	R<List<GetSiteListDTO>> getSiteListByUserId(@RequestParam("userId") Long userId);
+	@GetMapping("/getPartnerR/{id}")
+	R<Partner> getPartnerR(@PathVariable("id") Integer id);
 }
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java
new file mode 100644
index 0000000..38121cc
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/ParkingRecordQuery.java
@@ -0,0 +1,21 @@
+package com.ruoyi.chargingPile.api.query;
+
+import com.ruoyi.common.core.query.TimeRangePageQuery;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "停车缴费订单Query")
+public class ParkingRecordQuery extends TimeRangePageQuery {
+
+    @ApiModelProperty(value = "站点id")
+    private Integer siteId;
+
+    @ApiModelProperty(value = "订单编号")
+    private String code;
+
+    @ApiModelProperty(value = "车牌号")
+    private String licensePlate;
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordPageInfoVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordPageInfoVO.java
new file mode 100644
index 0000000..e27db5c
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordPageInfoVO.java
@@ -0,0 +1,31 @@
+package com.ruoyi.chargingPile.api.vo;
+
+import com.ruoyi.common.core.web.page.PageInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "停车记录分页VO")
+public class TParkingRecordPageInfoVO implements Serializable {
+
+    @ApiModelProperty(value = "订单数")
+    private Integer orderCount;
+
+    @ApiModelProperty(value = "超时占位费")
+    private BigDecimal timeoutAmountSum;
+
+    @ApiModelProperty(value = "超时占用时长")
+    private Integer feeDurationSum;
+
+    @ApiModelProperty(value = "总占用时长")
+    private Integer parkingDurationSum;
+
+    @ApiModelProperty(value = "列表")
+    private PageInfo<TParkingRecordVO> parkingRecordVOS;
+
+
+}
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordVO.java
new file mode 100644
index 0000000..623192c
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TParkingRecordVO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.chargingPile.api.vo;
+
+import com.ruoyi.chargingPile.api.model.TParkingRecord;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "停车记录VO")
+public class TParkingRecordVO extends TParkingRecord {
+
+    @ApiModelProperty(value = "停车费")
+    private BigDecimal parkingFee;
+
+    @ApiModelProperty(value = "收费时长")
+    private Integer feeDuration;
+
+    @ApiModelProperty(value = "站点名称")
+    private String siteName;
+
+}
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java
index 2586a69..d39a68e 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java
@@ -31,7 +31,12 @@
             public R<UploadRealTimeMonitoringData> chargingOrderInfo(String orderId) {
                 return R.fail("查询充电桩实时监测数据失败:" + throwable.getMessage());
             }
-    
+
+            @Override
+            public R<List<UploadRealTimeMonitoringData>> getOrderInfoByCodes(String orderId) {
+                return R.fail("根据订单编号s获取所有监测数据失败:" + throwable.getMessage());
+            }
+
             @Override
             public R<List<UploadRealTimeMonitoringData>> getDataByOrderCode(String code) {
                 return R.fail("根据订单编号获取所有监测数据失败:" + throwable.getMessage());
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java
index 902dff5..5ceab1f 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java
@@ -25,7 +25,14 @@
 	 */
 	@PostMapping("/uploadRealTimeMonitoringData/getOrderInfoByCode")
 	R<UploadRealTimeMonitoringData> chargingOrderInfo(String orderId);
-	
+
+	/**
+	 * 批量查询
+	 * @param orderId
+	 * @return
+	 */
+	@PostMapping(value = "/uploadRealTimeMonitoringData/getOrderInfoByCodes")
+	public R<List<UploadRealTimeMonitoringData>> getOrderInfoByCodes(@RequestParam("orderId") String orderId);
 	/**
 	 * 根据订单编号获取所有监测数据
 	 * @param code
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/SettlementConfirmAdd.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/SettlementConfirmAdd.java
new file mode 100644
index 0000000..fe67ee4
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/SettlementConfirmAdd.java
@@ -0,0 +1,26 @@
+package com.ruoyi.order.api.dto;
+
+import com.ruoyi.common.core.web.page.BasePage;
+import com.ruoyi.order.api.model.TSettlementConfirm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(value = "SettlementConfirmAdd生成结算确认表对象",description = "管理后台-财务结算生成结算确认表对象")
+public class SettlementConfirmAdd {
+    @ApiModelProperty(value = "站点id")
+    private Integer siteId;
+    @ApiModelProperty(value = "费用归属日期类型 1开始 2结束")
+    private Integer type;
+    @ApiModelProperty(value = "开始时间2020-01-01 00:00:00")
+    private String startTime;
+    @ApiModelProperty(value = "结束时间2020-01-01 23:59:59")
+    private String endTime;
+    @ApiModelProperty(value = "点击去生成 传1 填完表格数据点击保存 传2")
+    private Integer state;
+    @ApiModelProperty(value = "保存的数据")
+    private TSettlementConfirm data;
+}
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 cb89711..960f451 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
@@ -6,10 +6,12 @@
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import com.ruoyi.order.api.model.ChargingListQuery;
 import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.model.TSettlementConfirm;
 import com.ruoyi.order.api.query.TChargingCountQuery;
 import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
 import com.ruoyi.order.api.vo.ChargingBillVO;
 import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate;
+import com.ruoyi.order.api.vo.SettlementTotalVO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
@@ -91,11 +93,21 @@
             public void excelEndCharge(String code) {
         
             }
-    
+
             @Override
             public R<TChargingOrder> getChargingOrderByLicensePlate(GetChargingOrderByLicensePlate query) {
                 return R.fail("根据车牌号和时间查询有效的充电数据失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R<TSettlementConfirm> downloadSettlement(String uid) {
+                return R.fail("通过id查询结算确认失败:" + throwable.getMessage());
+            }
+
+            @Override
+            public R<SettlementTotalVO> settlementTotalR(String time) {
+                return R.fail("查询结算汇总表导出列表失败:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
index 366a8c3..80529c0 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
@@ -7,9 +7,11 @@
 import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory;
 import com.ruoyi.order.api.model.ChargingListQuery;
 import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.model.TSettlementConfirm;
 import com.ruoyi.order.api.query.TChargingCountQuery;
 import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
 import com.ruoyi.order.api.vo.ChargingBillVO;
+import com.ruoyi.order.api.vo.SettlementTotalVO;
 import io.swagger.annotations.ApiOperation;
 import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -96,8 +98,8 @@
      */
     @PostMapping("/t-charging-order/excelEndCharge")
     void excelEndCharge(@RequestParam("code") String code);
-    
-    
+
+
     /**
      * 根据车牌号和时间查询有效的充电数据
      * @param query
@@ -105,4 +107,15 @@
      */
     @PostMapping("/t-charging-order/getChargingOrderByLicensePlate")
     R<TChargingOrder> getChargingOrderByLicensePlate(@RequestBody GetChargingOrderByLicensePlate query);
+
+    /**
+     * 获取充电结算记录
+     * @param uid
+     * @return
+     */
+    @GetMapping(value = "/financial/settlement/downloadSettlement/{uid}")
+    public R<TSettlementConfirm> downloadSettlement(@PathVariable("uid") String uid);
+
+    @GetMapping(value = "/financial/settlement/settlementTotalR")
+    public R<SettlementTotalVO> settlementTotalR(String time);
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
new file mode 100644
index 0000000..796d4a9
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
@@ -0,0 +1,200 @@
+package com.ruoyi.order.api.model;
+
+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.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.web.domain.BasePojo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("t_settlement confirm")
+@ApiModel(value="TSettlementConfirm对象", description="")
+public class TSettlementConfirm extends BasePojo {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "站点id")
+    @TableField("site_id")
+    private Integer siteId;
+    @ApiModelProperty(value = "合作商id")
+    @TableField("partner_id")
+    private Integer partnerId;
+    @ApiModelProperty(value = "结算电费备注")
+    @TableField("remark")
+    private String remark;
+    @ApiModelProperty(value = "结算服务费备注")
+    @TableField("service_remark")
+    private String serviceRemark;
+
+    @ApiModelProperty(value = "计量电量(电量合计)")
+    @TableField("metering_electronic")
+    private BigDecimal meteringElectronic;
+    @ApiModelProperty(value = "充电电量")
+    @TableField("charging_electronic")
+    private BigDecimal chargingElectronic;
+    @ApiModelProperty(value = "电损电量")
+    @TableField("loss_electronic")
+    private BigDecimal lossElectronic;
+    @ApiModelProperty(value = "收入合计")
+    @TableField("收入合计")
+    private BigDecimal income;
+
+    @ApiModelProperty(value = "场地费")
+    @TableField("venue")
+    private BigDecimal venue;
+    @ApiModelProperty(value = "计量电费")
+    @TableField("metering")
+    private BigDecimal metering;
+    @ApiModelProperty(value = "清洁费")
+    @TableField("clean")
+    private BigDecimal clean;
+    @ApiModelProperty(value = "日常维护费")
+    @TableField("maintain")
+    private BigDecimal maintain;
+    @ApiModelProperty(value = "成本")
+    @TableField("cost")
+    private BigDecimal cost;
+    @ApiModelProperty(value = "合计可分配金额")
+    @TableField("distribution")
+    private BigDecimal distribution;
+    @ApiModelProperty(value = "利润")
+    @TableField("profit_money")
+    private BigDecimal profitMoney;
+    @ApiModelProperty(value = "新能源利润")
+    @TableField("new_money")
+    private BigDecimal newMoney;
+    @ApiModelProperty(value = "新能源结算金额")
+    @TableField("new_Settlement")
+    private BigDecimal newSettlement;
+
+    @ApiModelProperty(value = "供电局结算电费")
+    @TableField("supply_electronic")
+    private BigDecimal supplyElectronic;
+    @ApiModelProperty(value = "合作商承担电损占比")
+    @TableField("proportion_partner")
+    private BigDecimal proportionPartner;
+    @ApiModelProperty(value = "承担金额")
+    @TableField("proportion_money")
+    private BigDecimal proportionMoney;
+    @ApiModelProperty(value = "本期结算电费总金额 (实际电费转账)")
+    @TableField("total_electronic")
+    private BigDecimal totalElectronic;
+    @ApiModelProperty(value = "本期结算服务费总金额(实际服务费转账)")
+    @TableField("total_service")
+    private BigDecimal totalService;
+    @ApiModelProperty(value = "合作商充电服务费根据合同约定分成比例")
+    @TableField("service_partner")
+    private BigDecimal servicePartner;
+    @ApiModelProperty(value = "合作商充电服务费根据合同约定分成金额")
+    @TableField("service_money")
+    private BigDecimal serviceMoney;
+
+    @ApiModelProperty(value = "三方收费(合计三方平台收费)")
+    @TableField("sharing_amount")
+    private BigDecimal sharingAmount;
+    @ApiModelProperty(value = " 交易手续费 三方收费*0.06%")
+    @TableField("commission_amount")
+    private BigDecimal commissionAmount;
+    @ApiModelProperty(value = "充电电费计费(平台合计电费)")
+    @TableField("electrovalence")
+    private BigDecimal electrovalence;
+    @ApiModelProperty(value = "充电服务费计费(实收服务费)")
+    @TableField("service_charge")
+    private BigDecimal serviceCharge;
+    @ApiModelProperty(value = "交易手续费计费")
+    @TableField("order_commission")
+    private BigDecimal orderCommission;
+    @ApiModelProperty(value = "会员抵扣")
+    @TableField("vip_discount")
+    private BigDecimal vipDiscount;
+    @ApiModelProperty(value = "优惠券抵扣")
+    @TableField("coupon_discount")
+    private BigDecimal couponDiscount;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    @ApiModelProperty(value = "类型(1=开始,2=结束)")
+    @TableField("type")
+    private Integer type;
+    @ApiModelProperty(value = "开始时间")
+    @TableField("start_time")
+    private LocalDateTime startTime;
+    @ApiModelProperty(value = "结束时间")
+    @TableField("end_time")
+    private LocalDateTime endTime;
+    @ApiModelProperty(value = "站点名称")
+    @TableField(exist = false)
+    private String siteName;
+    @ApiModelProperty(value = "合作商名称")
+    @TableField(exist = false)
+    private String partnerName;
+
+    @ApiModelProperty(value = "uid")
+    @TableField(exist = false)
+    private String uid;
+
+    @ApiModelProperty(value = "结账日期 2024年09月06日17:10:06至2024年09月06日17:10:06")
+    @TableField(exist = false)
+    private String time;
+    @ApiModelProperty(value = "充电记录明细")
+    @TableField(exist = false)
+    private List<TChargingOrder> list;
+    @ApiModelProperty(value = "收入合计涨幅/跌幅 正数为涨幅负数为跌幅 字段为空 说明没有上月记录 不展示涨幅跌幅")
+    @TableField(exist = false)
+    private String incomePercentage;
+    @ApiModelProperty(value = "总利润涨幅/跌幅 正数为涨幅负数为跌幅 字段为空 说明没有上月记录 不展示涨幅跌幅")
+    @TableField(exist = false)
+    private String totalPercentage;
+    @ApiModelProperty(value = "利用率")
+    @TableField(exist = false)
+    private String rate;
+    @ApiModelProperty(value = "参与电力市场交易退补电费")
+    @TableField(exist = false)
+    private Integer electronicRefund;
+
+}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java
new file mode 100644
index 0000000..7117147
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/SettlementListQuery.java
@@ -0,0 +1,25 @@
+package com.ruoyi.order.api.query;
+
+import com.ruoyi.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel(value = "SettlementListQuery结算表记录列表查询对象",description = "管理后台-财务结算-结算表记录列表查询对")
+public class SettlementListQuery extends BasePage {
+
+    @ApiModelProperty(value = "类型(1=开始,2=结束)")
+    private Integer type;
+    @ApiModelProperty(value = "站点ids 选择全部 不传")
+    private List<Integer> siteIds;
+    @ApiModelProperty(value = "合作商id ")
+    private Integer partnerId;
+    @ApiModelProperty(value = "开始时间2020-01-01 00:00:00")
+    private String startTime;
+    @ApiModelProperty(value = "结束时间2021-01-01 23:59:59")
+    private String endTime;
+
+}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementTotalVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementTotalVO.java
new file mode 100644
index 0000000..bbe3edf
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementTotalVO.java
@@ -0,0 +1,21 @@
+package com.ruoyi.order.api.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
+import com.ruoyi.order.api.model.TSettlementConfirm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "SettlementTotalVO对象",description = "结算汇总表列表VO")
+public class SettlementTotalVO {
+    @ApiModelProperty(value = "列表数据")
+    List<TSettlementConfirm> list1;
+    @ApiModelProperty(value = "合计数据")
+    List<TSettlementConfirm> list2;
+}
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java
index dc609fb..7d33fd2 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/VipClient.java
@@ -31,7 +31,9 @@
      * @return
      */
     @PostMapping("/vip/getInfo1")
-    public R<TVip> getInfo1(@RequestParam("id") Integer id);
+    R<TVip> getInfo1(@RequestParam("id") Integer id);
+
+
     @PostMapping(value = "/vip/getInfo")
     R<TVip> getInfo(@RequestParam("id") Integer id);
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java
index 690629f..47aab16 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java
@@ -51,8 +51,10 @@
         List<TAppUserVipDetail> list = appUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, userId).last(" and now() between start_time and end_time order by start_time desc").list();
 
 		for (TAppUserVipDetail tAppUserVipDetail : list) {
-            TVip data = vipClient.getInfo1(tAppUserVipDetail.getVipId()).getData();
-            tAppUserVipDetail.setVipName(data.getName());
+            if(null != tAppUserVipDetail.getVipId()){
+                TVip data = vipClient.getInfo1(tAppUserVipDetail.getVipId()).getData();
+                tAppUserVipDetail.setVipName(data.getName());
+            }
         }
         return R.ok(list);
 	}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java
index e5fdd18..ef92923 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java
@@ -17,6 +17,7 @@
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 
 @Component
@@ -44,7 +45,10 @@
 
             R<TVip> info = vipClient.getInfo1(vipId);
             TVip vip = info.getData();
-            List<SendCouponDto> javaList = JSON.parseArray(vip.getCoupon()).toJavaList(SendCouponDto.class);
+            List<SendCouponDto> javaList = new ArrayList<>();
+            if (vip.getCoupon()!=null) {
+                javaList  = JSON.parseArray(vip.getCoupon()).toJavaList(SendCouponDto.class);
+            }
 
             tAppUserVipDetail.setCouponIds(vip.getCoupon());
             tAppUserVipDetail.setSendChargeNum(vip.getDiscountTimes());
@@ -80,16 +84,42 @@
         }else {
             nowUser.setVipEndTime(nowUser.getVipEndTime().plusDays(plusDay).minusDays(1));
             //获取detail里结束时间大于当前时间的数据,并将enttime延长
-            TAppUserVipDetail tAppUserVipDetail = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one();
+            TAppUserVipDetail tAppUserVipDetail = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getVipId,vipId).eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one();
+            if (tAppUserVipDetail!=null) {
+                List<TAppUserVipDetail> list = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).ge(TAppUserVipDetail::getStartTime, tAppUserVipDetail.getEndTime()).list();
+                for (TAppUserVipDetail appUserVipDetail : list) {
+                    appUserVipDetail.setStartTime(appUserVipDetail.getStartTime().plusMonths(plusDay).minusDays(1));
+                    appUserVipDetail.setEndTime(appUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1));
+                }
+                tAppUserVipDetailService.updateBatchById(list);
+                tAppUserVipDetail.setEndTime(tAppUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1));
 
-//            TAppUserVipDetail newAppUser = new TAppUserVipDetail();
-//            newAppUser.setAppUserId(nowUser.getId());
-//            newAppUser.setStartTime(tAppUserVipDetail.getEndTime());
-            tAppUserVipDetail.setEndTime(tAppUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1));
-//            newAppUser.setVipId(vipId);
-            tAppUserVipDetailService.updateById(tAppUserVipDetail);
-//                tAppUserVipDetail.setEndTime(tAppUserVipDetail.getEndTime().plusDays(plusDay));
-//                tAppUserVipDetailService.updateById(tAppUserVipDetail);
+                tAppUserVipDetailService.updateById(tAppUserVipDetail);
+            }else {
+                TAppUserVipDetail tAppUserVipDetail2 = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one();
+
+                TAppUserVipDetail tAppUserVipDetail1 = new TAppUserVipDetail();
+                tAppUserVipDetail1.setAppUserId(nowUser.getId());
+                tAppUserVipDetail1.setStartTime(tAppUserVipDetail2.getEndTime());
+                tAppUserVipDetail1.setEndTime(tAppUserVipDetail2.getEndTime().plusMonths(plusDay).minusDays(1));
+                tAppUserVipDetail1.setVipId(vipId);
+
+                R<TVip> info = vipClient.getInfo1(vipId);
+                TVip vip = info.getData();
+                List<SendCouponDto> javaList = new ArrayList<>();
+                if (vip.getCoupon()!=null) {
+                    javaList  = JSON.parseArray(vip.getCoupon()).toJavaList(SendCouponDto.class);
+                }
+
+                tAppUserVipDetail1.setCouponIds(vip.getCoupon());
+                tAppUserVipDetail1.setSendChargeNum(vip.getDiscountTimes());
+                tAppUserVipDetail1.setChargeNum(vip.getDiscountTimes());
+                tAppUserVipDetail1.setDiscountMoney(vip.getMaximumDeduction());
+                tAppUserVipDetail1.setSendMonth(1);
+                tAppUserVipDetailService.save(tAppUserVipDetail1);
+
+            }
+
         }
 
     }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
index 3c71cd9..7f3c920 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java
@@ -9,6 +9,7 @@
 import com.ruoyi.chargingPile.api.query.SetPermissionConfiguration;
 import com.ruoyi.chargingPile.dto.ResetPassword;
 import com.ruoyi.chargingPile.service.IPartnerService;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.security.utils.SecurityUtils;
@@ -68,6 +69,12 @@
 		Partner partner = partnerService.getPartner(id);
 		return AjaxResult.success(partner);
 	}
+	@ResponseBody
+	@GetMapping("/getPartnerR/{id}")
+	public R<Partner> getPartnerR(@PathVariable("id") Integer id){
+		Partner partner = partnerService.getPartner(id);
+		return R.ok(partner);
+	}
 	
 	
 	
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
index 1db4d7c..fc48e33 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -82,6 +82,17 @@
 
 	@Resource
 	private ChargingOrderClient chargingOrderClient;
+
+	/**
+	 * 根据站点id 查询所有充电桩
+	 * @param siteId
+	 * @return
+	 */
+	@GetMapping("/getPileListBySiteId/{siteId}")
+	public R<List<TChargingPile>> getPileListBySiteId(@PathVariable("siteId")Integer siteId){
+
+		return R.ok(chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, siteId).list());
+	}
 	/**
 	 * 小程序扫一扫
 	 * @param number
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
index ca22e94..c1e071b 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -1,7 +1,14 @@
 package com.ruoyi.chargingPile.controller;
+import java.time.LocalDateTime;
 import java.math.BigDecimal;
+
+import com.ruoyi.chargingPile.api.feignClient.SiteClient;
+import com.ruoyi.chargingPile.api.model.Partner;
+import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.common.core.utils.WebUtils;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.model.TSettlementConfirm;
 import com.ruoyi.order.api.vo.ChargingBillListVO;
 
 
@@ -35,6 +42,7 @@
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import com.ruoyi.order.api.model.ChargingListQuery;
 import com.ruoyi.order.api.vo.ChargingBillVO;
+import com.ruoyi.order.api.vo.SettlementTotalVO;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.codec.CharEncoding;
 import org.springframework.beans.BeanUtils;
@@ -50,6 +58,8 @@
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.regex.Pattern;
 
@@ -70,6 +80,8 @@
     private final RedisService redisService;
     @Resource
     private ChargingOrderClient chargingOrderClient;
+    @Resource
+    private SiteClient siteClient;
 
     @Autowired
     public TApplyChargingPileController(TApplyChargingPileService applyChargingPileService, TokenService tokenService, RedisService redisService) {
@@ -212,9 +224,7 @@
                     applyChargingPileExportDto.setIs3("否");
                 }
                 exportDtos.add(applyChargingPileExportDto);
-
             }
-
             // excel模板封装
             ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream());
             InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" +"充电桩申请记录" + ".xlsx");
@@ -272,6 +282,93 @@
         }
         return R.ok();
     }
+    @ApiOperation(value = "导出", tags = {"管理后台-结算汇总表"})
+    @GetMapping("/downloadSettlementTotal")
+    public R downloadSettlementTotal(String time,HttpServletResponse response)
+    {
+        SettlementTotalVO data = chargingOrderClient.settlementTotalR(time).getData();
+
+
+        try {
+            response.setCharacterEncoding(Constants.UTF8);
+            response.setContentType("application/vnd.ms-excel");
+            response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
+            response.setHeader("Content-Disposition", "attachment;filename=" +
+                    URLEncoder.encode("结算确认单", CharEncoding.UTF_8) + ".xlsx");
+        } catch (UnsupportedEncodingException e) {
+            return R.fail("excel导出失败!");
+        }
+        try {
+            // excel模板封装
+            ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream());
+            InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" +"运营商名称1-充电桩名称1-结算对账单明细-结算月份1" + ".xlsx");
+            // 自动释放资源
+            try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) {
+                WriteSheet writeSheet = EasyExcel.writerSheet().build();
+                FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build();
+                excelWriter.fill(new FillWrapper("data1", data.getList1()), fillConfig, writeSheet);
+                excelWriter.fill(new FillWrapper("data2", data.getList2()), fillConfig, writeSheet);
+                excelWriter.finish();
+            } catch (Exception e) {
+                return R.fail("excel导出失败!");
+            }
+        } catch (IOException e) {
+            return R.fail("excel导出失败!");
+        }
+        return R.ok();
+    }
+    @ApiOperation(value = "下载", tags = {"管理后台-结算表记录"})
+    @GetMapping("/downloadSettlement")
+    public R downloadSettlement(String uid,HttpServletResponse response)
+    {
+        TSettlementConfirm data = chargingOrderClient.downloadSettlement(uid).getData();
+        List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(data.getSiteId())).getData();
+        if (!data1.isEmpty()){
+            data.setSiteName(data1.get(0).getName());
+        }
+        Partner data2 = siteClient.getPartnerR(data.getPartnerId()).getData();
+        if (data2!=null){
+            data.setPartnerName(data2.getName());
+        }
+        List<TSettlementConfirm> chargingBillVOS = new ArrayList<>();
+        chargingBillVOS.add(data);
+        try {
+            response.setCharacterEncoding(Constants.UTF8);
+            response.setContentType("application/vnd.ms-excel");
+            response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
+            response.setHeader("Content-Disposition", "attachment;filename=" +
+                    URLEncoder.encode("结算确认单", CharEncoding.UTF_8) + ".xlsx");
+        } catch (UnsupportedEncodingException e) {
+            return R.fail("excel导出失败!");
+        }
+        try {
+            // excel模板封装
+            ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream());
+            InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" +"运营商名称1-充电桩名称1-结算对账单明细-结算月份1" + ".xlsx");
+            // 自动释放资源
+            try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) {
+                WriteSheet writeSheet = EasyExcel.writerSheet().build();
+                WriteSheet writeSheet2 = EasyExcel.writerSheet().build();
+                WriteSheet writeSheet3 = EasyExcel.writerSheet().build();
+                FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
+                excelWriter.fill(new FillWrapper("data1", chargingBillVOS), fillConfig, writeSheet);
+                excelWriter.fill(new FillWrapper("data2", chargingBillVOS), fillConfig, writeSheet2);
+                excelWriter.fill(new FillWrapper("data3", data.getList()), fillConfig, writeSheet3);
+                excelWriter.finish();
+            } catch (Exception e) {
+                return R.fail("excel导出失败!");
+            }
+        } catch (IOException e) {
+            return R.fail("excel导出失败!");
+        }
+        return R.ok();
+    }
+
+
+
+
+
+
     @ApiOperation(value = "下载-未出账", tags = {"管理后台-充电算账单"})
     @GetMapping("/download")
     public R download(String uid,HttpServletResponse response)
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
index ad1d1f3..b34c051 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java
@@ -5,12 +5,16 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.chargingPile.api.model.TParkingLot;
 import com.ruoyi.chargingPile.api.model.TParkingRecord;
+import com.ruoyi.chargingPile.api.query.ParkingRecordQuery;
 import com.ruoyi.chargingPile.api.vo.GetParkingRecord;
+import com.ruoyi.chargingPile.api.vo.TParkingRecordPageInfoVO;
+import com.ruoyi.chargingPile.api.vo.TParkingRecordVO;
 import com.ruoyi.chargingPile.dto.ParkingRecordPageQuery;
 import com.ruoyi.chargingPile.service.TParkingLotService;
 import com.ruoyi.chargingPile.service.TParkingRecordService;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.PageInfo;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 
@@ -49,6 +53,13 @@
         return R.ok(page);
     }
 
+    @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "停车缴费订单列表")
+    @PostMapping(value = "/pageList")
+    public R<PageInfo<TParkingRecordPageInfoVO>> pageList(@RequestBody ParkingRecordQuery query) {
+
+        return R.ok();
+    }
+
     @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "详情")
     @GetMapping(value = "/detail")
     public R<TParkingRecord> detail(Long id) {
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java
index 981cc4b..6820fa6 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java
@@ -35,7 +35,8 @@
 	public AjaxResult<PageInfo<TRepair>> getRepairList(String name, String siteId, BasePage basePage){
 		PageInfo<TRepair> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize());
 		List<TRepair> repairList = repairService.getRepairList(pageInfo, name, siteId);
-		return AjaxResult.success(repairList);
+		pageInfo.setRecords(repairList);
+		return AjaxResult.success(pageInfo);
 	}
 	
 	
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java
index afe8e9f..c9190aa 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.chargingPile.api.model.TRepair;
 import com.ruoyi.common.core.web.page.PageInfo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -24,6 +25,6 @@
 	 * @param siteId
 	 * @return
 	 */
-	List<TRepair> getRepairList(PageInfo<TRepair> pageInfo, String name, String siteId);
+	List<TRepair> getRepairList(PageInfo<TRepair> pageInfo, @Param("name") String name, @Param("siteId") String siteId);
 
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
index 7cf4f33..97458c6 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -378,7 +378,7 @@
 		this.updateById(site);
 		List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, id).eq(TChargingGun::getDelFlag, 0));
 		for (TChargingGun tChargingGun : list) {
-			tChargingGun.setChargingPileId(accountingStrategyId);
+			tChargingGun.setAccountingStrategyId(accountingStrategyId);
 		}
 		chargingGunService.updateBatchById(list);
 	}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
index d497796..00e72b4 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -242,7 +242,7 @@
 		List<Integer> id = setAccountingStrategy.getId();
 		List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, id).eq(TChargingGun::getDelFlag, 0));
 		for (TChargingGun tChargingGun : list) {
-			tChargingGun.setChargingPileId(setAccountingStrategy.getAccountingStrategyId());
+			tChargingGun.setAccountingStrategyId(setAccountingStrategy.getAccountingStrategyId());
 		}
 		chargingGunService.updateBatchById(list);
 	}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml
index ce9ef7e..d20746a 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingLotMapper.xml
@@ -25,8 +25,7 @@
     </sql>
     <select id="pageList" resultType="com.ruoyi.chargingPile.api.vo.TParkingLotVO">
         SELECT
-        tpl.id, tpl.`name`, tpl.code, tpl.site_id, tpl.charge_free_duration, tpl.charge_capping, tpl.charge_rate, tpl.non_charge_free_duration,
-        tpl.non_charge_capping, tpl.non_charge_rate, tpl.remark, tpl.create_time, tpl.del_flag, ts.name AS siteName
+        tpl.*, ts.name AS siteName
         FROM t_parking_lot tpl
         LEFT JOIN t_site ts ON tpl.site_id = ts.id
         <where>
diff --git "a/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\277\220\350\220\245\345\225\206\345\220\215\347\247\2601-\345\205\205\347\224\265\346\241\251\345\220\215\347\247\2601-\347\273\223\347\256\227\345\257\271\350\264\246\345\215\225\346\230\216\347\273\206-\347\273\223\347\256\227\346\234\210\344\273\2751.xlsx" "b/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\277\220\350\220\245\345\225\206\345\220\215\347\247\2601-\345\205\205\347\224\265\346\241\251\345\220\215\347\247\2601-\347\273\223\347\256\227\345\257\271\350\264\246\345\215\225\346\230\216\347\273\206-\347\273\223\347\256\227\346\234\210\344\273\2751.xlsx"
new file mode 100644
index 0000000..807ae43
--- /dev/null
+++ "b/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\277\220\350\220\245\345\225\206\345\220\215\347\247\2601-\345\205\205\347\224\265\346\241\251\345\220\215\347\247\2601-\347\273\223\347\256\227\345\257\271\350\264\246\345\215\225\346\230\216\347\273\206-\347\273\223\347\256\227\346\234\210\344\273\2751.xlsx"
Binary files differ
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java
index aedff15..b3b1995 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java
@@ -9,6 +9,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
@@ -40,6 +41,25 @@
         }
         return R.ok();
     }
+
+    /**
+     * 批量查询
+     * @param orderId
+     * @return
+     */
+    @PostMapping(value = "/getOrderInfoByCodes")
+    public R<List<UploadRealTimeMonitoringData>> getOrderInfoByCodes(@RequestParam("orderId") String orderId){
+        List<UploadRealTimeMonitoringData> res = new ArrayList<>();
+        for (String s : orderId.split(",")) {
+            List<UploadRealTimeMonitoringData> dataByOrderCode = uploadRealTimeMonitoringDataService.getDataByOrderCode(s);
+            if(dataByOrderCode.size() > 0){
+                UploadRealTimeMonitoringData uploadRealTimeMonitoringData = dataByOrderCode.get(dataByOrderCode.size() - 1);
+                res.add(uploadRealTimeMonitoringData);
+            }
+
+        }
+        return R.ok(res);
+    }
     
     
     /**
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java
index 27e04ad..c69b333 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java
@@ -20,15 +20,15 @@
      */
     private String sk;
     /**
-     * endpoint配置  938d8d39e2.iotda.cn-north-4.myhuaweicloud.com
+     * endpoint配置  94cb3eb5f9.st1.iotda-app.cn-south-1.myhuaweicloud.com
      */
     private String endpoint;
     /**
-     * project_id配置  	0cc59978c61e4b4da24e8c3d02937b45
+     * project_id配置  		f31c21e190e04fb0aebf8c0b1e7959cd
      */
     private String projectId;
     /**
-     * Instance-Id配置  	c60f266a-57a2-460c-a24e-eabda84602eb
+     * Instance-Id配置  	d21a37d3-c578-43aa-a1ab-be3854e7c337
      */
     private String instanceId;
 
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/token/IotTokenUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/token/IotTokenUtil.java
index c2a2428..91d8a7f 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/token/IotTokenUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/token/IotTokenUtil.java
@@ -5,9 +5,9 @@
 import com.huaweicloud.sdk.core.exception.ServiceResponseException;
 import com.huaweicloud.sdk.iam.v3.model.*;
 import com.ruoyi.common.redis.service.RedisService;
-import com.ruoyi.integration.iotda.constant.IotConstant;
 import com.ruoyi.integration.iotda.builder.IotBuilder;
 import com.ruoyi.integration.iotda.config.IotAccountConfig;
+import com.ruoyi.integration.iotda.constant.IotConstant;
 import com.ruoyi.integration.iotda.utils.time.UtcToSeconds;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
index 950f938..92990e1 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
@@ -7,9 +7,16 @@
 import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
 import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient;
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.order.api.dto.SettlementConfirmAdd;
+import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.model.TSettlementConfirm;
+import com.ruoyi.order.api.query.SettlementListQuery;
+import com.ruoyi.order.api.vo.SettlementTotalVO;
 import com.ruoyi.order.vo.ChargingOrderListInfoVO;
 import com.ruoyi.order.api.vo.ChargingOrderTimeVO;
 import com.ruoyi.order.api.model.ChargingListQuery;
@@ -18,10 +25,13 @@
 import com.ruoyi.payment.api.feignClient.WxPaymentClient;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
 
 /**
  * <p>
@@ -38,59 +48,60 @@
 
     @Resource
     private TChargingOrderService chargingOrderService;
-    @Autowired
-    private TokenService tokenService;
-    @Autowired
-    private TOrderEvaluateService orderEvaluateService;
-
     @Resource
-    private WxPaymentClient wxPaymentClient;
-
-    @Resource
-    private RedisService redisService;
-
-    @Resource
-    private AliPaymentClient aliPaymentClient;
-    @Resource
-    private TShoppingOrderService shoppingOrderService;
-
-    @Resource
-    private AppUserClient appUserClient;
-
-    @Resource
-    private TVipOrderService vipOrderService;
-    @Resource
-    private ParkingLotClient parkingLotClient;
-    @Resource
-    private TChargingOrderRefundService chargingOrderRefundService;
-
-    @Resource
-    private TShoppingOrderRefundService shoppingOrderRefundService;
-    @Resource
-    private TVipOrderRefundService vipOrderRefundService;
-    @Resource
-    private SiteClient siteClient;
-    @Resource
-    private ChargingPileClient chargingPileClient;
-    @Resource
-    private ChargingGunClient chargingGunClient;
-    @Resource
-    private AppUserCarClient appUserCarClient;
-    @Resource
-    private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
-    @ResponseBody
+    private TSettlementConfirmService tSettlementConfirmService;
     @PostMapping(value = "/chargingList")
     @ApiOperation(value = "充电时段统计列表", tags = {"管理后台-财务结算"})
     public AjaxResult<ChargingOrderTimeVO> chargingList(@RequestBody ChargingListQuery dto) {
         ChargingOrderTimeVO res = chargingOrderService.chargingList(dto);
         return AjaxResult.success(res);
     }
-    @ResponseBody
     @GetMapping(value = "/chargingInfo")
     @ApiOperation(value = "充电时段统计列表-查看详情", tags = {"管理后台-财务结算"})
     public AjaxResult<ChargingOrderListInfoVO> chargingInfo(String uid) {
         ChargingOrderListInfoVO res = chargingOrderService.chargingInfo(uid);
         return AjaxResult.success(res);
     }
+
+    @GetMapping(value = "/settlementTotal")
+    @ApiOperation(value = "结算汇总-列表查询", tags = {"管理后台-财务结算"})
+    @ApiParam(name = "time", value = "汇报时间2024-01-01 00:00:00")
+    public AjaxResult<SettlementTotalVO> settlementTotal(String time) {
+        SettlementTotalVO res = chargingOrderService.settlementTotal(time);
+        return AjaxResult.success(res);
+    }
+    @GetMapping(value = "/settlementTotalR")
+    public R<SettlementTotalVO> settlementTotalR( String time) {
+        SettlementTotalVO res = chargingOrderService.settlementTotal(time);
+        return R.ok(res);
+    }
+    @PostMapping(value = "/settlementAdd")
+    @ApiOperation(value = "结算确认表-生成/保存结算确认表", tags = {"管理后台-财务结算"})
+    public R<TSettlementConfirm> settlementAdd(@RequestBody SettlementConfirmAdd dto) {
+        TSettlementConfirm res = chargingOrderService.settlementAdd(dto);
+        return R.ok(res);
+    }
+    @PostMapping(value = "/settlementList")
+    @ApiOperation(value = "结算表记录-列表查询", tags = {"管理后台-财务结算"})
+    public R<PageInfo<TSettlementConfirm>> settlementList(@RequestBody SettlementListQuery dto) {
+        PageInfo<TSettlementConfirm> res = chargingOrderService.settlementList(dto);
+        return R.ok(res);
+    }
+    @GetMapping(value = "/downloadSettlement/{uid}")
+    public R<TSettlementConfirm> downloadSettlement(@PathVariable("uid") String uid) {
+        TSettlementConfirm byId = tSettlementConfirmService.getById(uid);
+        if (byId!=null){
+            List<TChargingOrder> list = chargingOrderService.lambdaQuery().eq(TChargingOrder::getSiteId, byId.getSiteId())
+                    .between(TChargingOrder::getStartTime, byId.getStartTime(), byId.getEndTime())
+                    .eq(TChargingOrder::getStatus, 5)
+                    .eq(TChargingOrder::getRechargePaymentStatus, 2).list();
+            byId.setList(list);
+            String format = byId.getStartTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
+            String format1 = byId.getEndTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
+            byId.setTime(format+"至"+format1);
+        }
+        return R.ok(byId);
+    }
+
 }
 
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java
new file mode 100644
index 0000000..260ee56
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java
@@ -0,0 +1,33 @@
+package com.ruoyi.order.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.order.api.model.TSettlementConfirm;
+import com.ruoyi.order.api.model.TVipOrder;
+import com.ruoyi.order.api.query.SettlementListQuery;
+import com.ruoyi.order.api.query.VipShoppingOrderQuery;
+import com.ruoyi.order.dto.SixVipDto;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import javax.validation.constraints.Pattern;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-07
+ */
+@Mapper
+public interface TSettlementConfirmMapper extends BaseMapper<TSettlementConfirm> {
+
+
+    List<TSettlementConfirm> settlementList(@Param("pageInfo") PageInfo<TSettlementConfirm> pageInfo, @Param("req") SettlementListQuery dto);
+
+    List<TSettlementConfirm> settlementTotal(@Param("time") String time);
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
index f7da0dc..d62aa72 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -6,15 +6,15 @@
 import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.order.api.dto.SettlementConfirmAdd;
 import com.ruoyi.order.api.model.ChargingListQuery;
 import com.ruoyi.order.api.model.TChargingOrder;
 import com.ruoyi.order.api.model.TChargingOrderRefund;
+import com.ruoyi.order.api.model.TSettlementConfirm;
 import com.ruoyi.order.api.query.ChargingOrderQuery;
+import com.ruoyi.order.api.query.SettlementListQuery;
 import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
-import com.ruoyi.order.api.vo.ChargingOrderTimeVO;
-import com.ruoyi.order.api.vo.ChargingOrderVO;
-import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate;
-import com.ruoyi.order.api.vo.TCharingOrderVO;
+import com.ruoyi.order.api.vo.*;
 import com.ruoyi.order.dto.*;
 import com.ruoyi.order.vo.ChargingOrderListInfoVO;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -156,13 +156,19 @@
 	 * @param orderCode
 	 */
 	void excelEndCharge(String orderCode);
-	
-	
+
+
 	/**
 	 * 根据车牌号和开始时间查询充电数据
 	 * @param query
 	 * @return
 	 */
 	TChargingOrder getChargingOrderByLicensePlate(GetChargingOrderByLicensePlate query);
-	
+
+
+    TSettlementConfirm settlementAdd(SettlementConfirmAdd dto);
+
+	PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto);
+
+    SettlementTotalVO settlementTotal(String time);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TSettlementConfirmService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TSettlementConfirmService.java
new file mode 100644
index 0000000..f46e6dd
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TSettlementConfirmService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.order.api.model.TSettlementConfirm;
+import com.ruoyi.order.api.model.TVipOrder;
+import com.ruoyi.order.api.query.VipShoppingOrderQuery;
+import com.ruoyi.order.dto.SixVipDto;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-07
+ */
+public interface TSettlementConfirmService extends IService<TSettlementConfirm> {
+
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index 928979b..dd605fc 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -1,7 +1,9 @@
 package com.ruoyi.order.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -29,14 +31,17 @@
 import com.ruoyi.integration.api.feignClient.*;
 import com.ruoyi.integration.api.model.*;
 import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply;
+import com.ruoyi.order.api.dto.SettlementConfirmAdd;
 import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient;
 import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
 import com.ruoyi.order.api.model.*;
 import com.ruoyi.order.api.query.ChargingOrderQuery;
+import com.ruoyi.order.api.query.SettlementListQuery;
 import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
 import com.ruoyi.order.api.vo.*;
 import com.ruoyi.order.dto.*;
 import com.ruoyi.order.mapper.TChargingOrderMapper;
+import com.ruoyi.order.mapper.TSettlementConfirmMapper;
 import com.ruoyi.order.service.TChargingOrderAccountingStrategyService;
 import com.ruoyi.order.service.TChargingOrderRefundService;
 import com.ruoyi.order.service.TChargingOrderService;
@@ -47,6 +52,7 @@
 import com.ruoyi.order.vo.ChargingOrderListInfoVO;
 import com.ruoyi.other.api.domain.TIntegralRule;
 import com.ruoyi.other.api.feignClient.IntegralRuleClient;
+import com.ruoyi.other.api.feignClient.OtherClient;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.other.api.feignClient.UserSiteClient;
 import com.ruoyi.payment.api.feignClient.AliPaymentClient;
@@ -56,6 +62,7 @@
 import com.ruoyi.payment.api.model.WxPaymentRefundModel;
 import com.ruoyi.payment.api.vo.*;
 import com.ruoyi.system.api.feignClient.SysUserClient;
+import com.sun.org.apache.bcel.internal.generic.NEW;
 import io.seata.spring.annotation.GlobalTransactional;
 import io.swagger.annotations.ApiModelProperty;
 import org.slf4j.Logger;
@@ -93,10 +100,13 @@
 
 	@Resource
 	private ChargingGunClient chargingGunClient;
-	
+	@Resource
+	private TSettlementConfirmMapper tSettlementConfirmMapper;
+
 	@Resource
 	private SiteClient siteClient;
-	
+
+
 	@Resource
 	private AppUserCarClient appUserCarClient;
 	@Resource
@@ -104,7 +114,6 @@
 
 	@Resource
 	private ChargingPileClient chargingPileClient;
-
 
 	@Resource
 	private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
@@ -117,7 +126,6 @@
 	
 	@Resource
 	private AliPaymentClient aliPaymentClient;
-	
 
 	@Resource
 	private AppCouponClient appCouponClient;
@@ -437,7 +445,7 @@
 					chargingOrder.setVipDiscountAmount(discountAmount);
 				}
 			}
-			
+
 		}
 		this.save(chargingOrder);
 
@@ -1347,7 +1355,6 @@
 			chargingOrderListInfoVO.setTerminalName(data2.getName()+data1.getName());
 		}
 		chargingOrderListInfoVO.setEndMode(chargingOrder.getEndMode());
-		// todo 周一完善
 		// 获取开始SOC 结束soc
 		List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
 		if (!data6.isEmpty()){
@@ -1612,8 +1619,8 @@
 
 		return null;
 	}
-	
-	
+
+
 	/**
 	 * 根据车牌号和开始时间查询充电数据
 	 * @param query
@@ -1630,4 +1637,329 @@
 				.eq(TChargingOrder::getRechargePaymentStatus, 2).ne(TChargingOrder::getStatus, -1));
 		return one;
 	}
+
+	@Override
+	public TSettlementConfirm settlementAdd(SettlementConfirmAdd dto) {
+		List<Site> data = siteClient.getSiteByIds(Arrays.asList(dto.getSiteId())).getData();
+		TSettlementConfirm tSettlementConfirm = new TSettlementConfirm();
+		if (!data.isEmpty()){
+			tSettlementConfirm.setSiteName(data.get(0).getName());
+			tSettlementConfirm.setPartnerId(data.get(0).getPartnerId());
+			if (data.get(0).getPartnerId()!=null){
+				Partner data1 = siteClient.getPartnerR(data.get(0).getPartnerId()).getData();
+				if (data1!=null){
+					tSettlementConfirm.setPartnerName(data1.getName());
+					tSettlementConfirm.setPartnerId(data1.getId());
+				}
+			}
+		}
+		String startTime = dto.getStartTime();
+		String endTime = dto.getEndTime();
+		// 将这两个时间转化为localDateTime
+		tSettlementConfirm.setStartTime(LocalDateTime.parse(startTime));
+		tSettlementConfirm.setEndTime(LocalDateTime.parse(endTime));
+		// 根据站点id和开始时间和结束时间和归属日期 查询充电订单列表
+		QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
+				.eq("site_id", dto.getSiteId())
+				.eq("recharge_payment_status",2);
+		switch (dto.getType()){
+			case 1:
+				eq.between("start_time", startTime, endTime);
+				break;
+			case 2:
+				eq.between("end_time", startTime, endTime);
+				break;
+		}
+		List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
+		// 充电电量 度
+		BigDecimal chargingElectronic = new BigDecimal("0");
+		// 三方收费 分佣
+		BigDecimal sharingAmount = new BigDecimal("0");
+		// 三方交易手续费 三方收费*0.6%
+		BigDecimal commissionAmount = new BigDecimal("0");
+		// 累计电费
+		BigDecimal electrovalence = new BigDecimal("0");
+		// 累计服务费
+		BigDecimal serviceCharge = new BigDecimal("0");
+		// 订单手续费 订单支付金额*0.6%
+		BigDecimal orderCommission = new BigDecimal("0");
+		// 会员抵扣
+		BigDecimal vipDiscount = new BigDecimal("0");
+		// 优惠券抵扣
+		BigDecimal couponDiscount = new BigDecimal("0");
+		// 支付订单金额 需要减去退款金额
+		BigDecimal paymentAmount = new BigDecimal("0");
+		for (TChargingOrder tChargingOrder : tChargingOrders) {
+			// 累加充电总度数
+			chargingElectronic = chargingElectronic.add(tChargingOrder.getChargingCapacity());
+			// 累加分佣
+			sharingAmount = sharingAmount.add(tChargingOrder.getSharingAmount());
+			// 累加电费
+			electrovalence = electrovalence.add(tChargingOrder.getElectrovalence());
+			// 累加服务费
+			serviceCharge = serviceCharge.add(tChargingOrder.getServiceCharge());
+			// 累加会员折扣
+			if (tChargingOrder.getVipDiscountAmount()!=null){
+				vipDiscount = vipDiscount.add(tChargingOrder.getVipDiscountAmount());
+			}
+			// 累加优惠券折扣
+			if (tChargingOrder.getCouponDiscountAmount()!=null){
+				couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount());
+			}
+			if (tChargingOrder.getRefundStatus() == 2){
+				// 如果成功退款 那么减去退款金额
+				paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount().subtract(tChargingOrder.getRefundAmount()));
+			}else{
+				paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
+			}
+		}
+		// 三方交易手续费 三方收费*0.6%
+		commissionAmount = sharingAmount.multiply(new BigDecimal("0.006"));
+		// 订单手续费 订单支付金额 - 退款金额*0.6%
+		orderCommission = paymentAmount.multiply(new BigDecimal("0.006"));
+		tSettlementConfirm.setSharingAmount(sharingAmount);
+		tSettlementConfirm.setCommissionAmount(commissionAmount);
+		tSettlementConfirm.setElectrovalence(electrovalence);
+		// 服务费=总服务费-三费收费-交易手续费-交易手续费-服务费会员抵扣-服务费优惠券抵扣
+		tSettlementConfirm.setServiceCharge(serviceCharge.subtract(commissionAmount).subtract(sharingAmount).subtract(orderCommission).subtract(vipDiscount).subtract(couponDiscount));
+		tSettlementConfirm.setOrderCommission(orderCommission);
+		tSettlementConfirm.setVipDiscount(vipDiscount);
+		tSettlementConfirm.setCouponDiscount(couponDiscount);
+		tSettlementConfirm.setSiteId(dto.getSiteId());
+		tSettlementConfirm.setMeteringElectronic(dto.getData().getMeteringElectronic());
+		tSettlementConfirm.setChargingElectronic(chargingElectronic);
+		tSettlementConfirm.setLossElectronic(dto.getData().getLossElectronic());
+		tSettlementConfirm.setIncome(chargingElectronic.add(serviceCharge));
+		tSettlementConfirm.setVenue(dto.getData().getVenue());
+		tSettlementConfirm.setMetering(dto.getData().getMetering());
+		tSettlementConfirm.setClean(dto.getData().getClean());
+		tSettlementConfirm.setMaintain(dto.getData().getMaintain());
+		tSettlementConfirm.setCost(dto.getData().getVenue().add(dto.getData().getClean()).add(dto.getData().getMaintain()));
+		tSettlementConfirm.setProfitMoney(new BigDecimal("0"));
+		tSettlementConfirm.setNewMoney(new BigDecimal("0"));
+		tSettlementConfirm.setNewSettlement(new BigDecimal("0"));
+		tSettlementConfirm.setVipDiscount(vipDiscount);
+		tSettlementConfirm.setCouponDiscount(couponDiscount);
+		tSettlementConfirm.setSupplyElectronic(dto.getData().getSupplyElectronic());
+		tSettlementConfirm.setType(dto.getType());
+		tSettlementConfirm.setProportionPartner(dto.getData().getProportionPartner());
+		tSettlementConfirm.setProportionMoney(dto.getData().getProportionMoney());
+		tSettlementConfirm.setTotalElectronic(dto.getData().getTotalElectronic());
+		tSettlementConfirm.setTotalService(dto.getData().getTotalService());
+		tSettlementConfirm.setRemark(dto.getData().getRemark());
+		tSettlementConfirm.setServicePartner(dto.getData().getServicePartner());
+		tSettlementConfirm.setServiceMoney(dto.getData().getServiceMoney());
+		tSettlementConfirm.setTotalService(dto.getData().getTotalService());
+		tSettlementConfirm.setServiceRemark(dto.getData().getServiceRemark());
+		tSettlementConfirm.setDistribution(dto.getData().getDistribution());
+		tSettlementConfirm.setIncome(dto.getData().getElectrovalence().add(dto.getData().getServiceCharge()));
+		if (dto.getState() == 2){
+			tSettlementConfirmMapper.insert(tSettlementConfirm);
+		}
+		return tSettlementConfirm;
+	}
+
+	@Override
+	public PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto) {
+		PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
+		List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto);
+		for (TSettlementConfirm tSettlementConfirm : list) {
+			tSettlementConfirm.setUid(tSettlementConfirm.getId().toString());
+			Partner data = siteClient.getPartnerR(tSettlementConfirm.getPartnerId()).getData();
+			List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
+			if (!data1.isEmpty()){
+				tSettlementConfirm.setSiteName(data1.get(0).getName());
+			}
+			if (data!=null){
+				tSettlementConfirm.setPartnerName(data.getName());
+			}
+			String format = tSettlementConfirm.getStartTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
+			String format1 = tSettlementConfirm.getEndTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
+			tSettlementConfirm.setTime(format+"至"+format1);
+
+
+		}
+		pageInfo.setRecords(list);
+		return null;
+	}
+
+	@Override
+	public SettlementTotalVO settlementTotal(String time) {
+		SettlementTotalVO res = new SettlementTotalVO();
+		List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time);
+		LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+		// 减少一个月
+		LocalDateTime minus = parse.minusMonths(1);
+		List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time);
+		// 合计
+		List<TSettlementConfirm> total = new ArrayList<>();
+
+		TSettlementConfirm tSettlementConfirm1 = new TSettlementConfirm();
+		BigDecimal meteringElectronic = new BigDecimal("0");
+		BigDecimal chargingElectronic = new BigDecimal("0");
+		BigDecimal lossElectronic = new BigDecimal("0");
+		BigDecimal income = new BigDecimal("0");
+		BigDecimal venue = new BigDecimal("0");
+		BigDecimal metering = new BigDecimal("0");
+		BigDecimal clean = new BigDecimal("0");
+		BigDecimal maintain = new BigDecimal("0");
+		BigDecimal cost = new BigDecimal("0");
+		BigDecimal profitMoney = new BigDecimal("0");
+		BigDecimal newMoney = new BigDecimal("0");
+		BigDecimal newSettlement = new BigDecimal("0");
+		BigDecimal supplyElectronic = new BigDecimal("0");
+		BigDecimal proportionPartner = new BigDecimal("0");
+		BigDecimal proportionMoney = new BigDecimal("0");
+		BigDecimal totalElectronic = new BigDecimal("0");
+		BigDecimal totalService = new BigDecimal("0");
+		BigDecimal servicePartner = new BigDecimal("0");
+		BigDecimal serviceMoney = new BigDecimal("0");
+		BigDecimal sharingAmount = new BigDecimal("0");
+		BigDecimal commissionAmount = new BigDecimal("0");
+		BigDecimal electrovalence = new BigDecimal("0");
+		BigDecimal serviceCharge = new BigDecimal("0");
+		BigDecimal orderCommission = new BigDecimal("0");
+		BigDecimal vipDiscount = new BigDecimal("0");
+		BigDecimal couponDiscount = new BigDecimal("0");
+//		tSettlementConfirm1.setIncomePercentage();
+//		tSettlementConfirm1.setTotalPercentage();
+		tSettlementConfirm1.setElectronicRefund(0);
+// 上月成本合计
+		BigDecimal beforeCost= new BigDecimal("0");
+		// 上月利润合计
+		BigDecimal beforeIncome= new BigDecimal("0");
+		for (TSettlementConfirm tSettlementConfirm : list1) {
+			List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
+			if (!data1.isEmpty()){
+				tSettlementConfirm.setSiteName(data1.get(0).getName());
+			}
+			meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
+			chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
+			lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
+			income = income.add(tSettlementConfirm.getIncome());
+			venue = venue.add(tSettlementConfirm.getVenue());
+			metering = metering.add(tSettlementConfirm.getMetering());
+			clean = clean.add(tSettlementConfirm.getClean());
+			maintain = maintain.add(tSettlementConfirm.getMaintain());
+			cost = cost.add(tSettlementConfirm.getCost());
+			profitMoney = profitMoney.add(tSettlementConfirm.getProfitMoney());
+			newMoney = newMoney.add(tSettlementConfirm.getNewMoney());
+			newSettlement = newSettlement.add(tSettlementConfirm.getNewSettlement());
+			supplyElectronic = supplyElectronic.add(tSettlementConfirm.getSupplyElectronic());
+			proportionPartner = proportionPartner.add(tSettlementConfirm.getProportionPartner());
+			proportionMoney = proportionMoney.add(tSettlementConfirm.getProportionMoney());
+			totalElectronic = totalElectronic.add(tSettlementConfirm.getTotalElectronic());
+			totalService = totalService.add(tSettlementConfirm.getTotalService());
+			servicePartner = servicePartner.add(tSettlementConfirm.getServicePartner());
+			serviceMoney = serviceMoney.add(tSettlementConfirm.getServiceMoney());
+			sharingAmount = sharingAmount.add(tSettlementConfirm.getSharingAmount());
+			commissionAmount = commissionAmount.add(tSettlementConfirm.getCommissionAmount());
+			electrovalence = electrovalence.add(tSettlementConfirm.getElectrovalence());
+			serviceCharge = serviceCharge.add(tSettlementConfirm.getServiceCharge());
+			orderCommission = orderCommission.add(tSettlementConfirm.getOrderCommission());
+			vipDiscount = vipDiscount.add(tSettlementConfirm.getVipDiscount());
+			couponDiscount = couponDiscount.add(tSettlementConfirm.getCouponDiscount());
+
+			// 查询结算确认单开始时间和结束时间的单子
+			QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
+					.eq("site_id", tSettlementConfirm.getSiteId())
+					.eq("recharge_payment_status",2);
+			switch (tSettlementConfirm.getType()){
+				case 1:
+					eq.between("start_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
+					break;
+				case 2:
+					eq.between("end_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
+					break;
+			}
+			List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
+			Map<String,TChargingOrder> map = new HashMap<>();
+			StringBuilder stringBuilder = new StringBuilder();
+			for (TChargingOrder tChargingOrder : tChargingOrders) {
+				stringBuilder.append(tChargingOrder.getCode()).append(",");
+			}
+			Long temp = 0L;
+			if (StringUtils.hasLength(stringBuilder.toString())){
+				List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getOrderInfoByCodes(stringBuilder.substring(0,stringBuilder.length()-1)).getData();
+				temp+=data6.stream().mapToLong(UploadRealTimeMonitoringData::getCumulative_charging_time).sum();
+			}
+			List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
+			// 计算充电桩的功率平均值
+			BigDecimal bigDecimal = new BigDecimal("0");
+			for (TChargingPile datum : data) {
+				bigDecimal = bigDecimal.add(datum.getRatedPower());
+			}
+			BigDecimal bigDecimal1 = bigDecimal.divide(new BigDecimal(data.size())).setScale(2, RoundingMode.HALF_DOWN);
+
+			tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
+			// todo 计算利用率 该电站充电桩本月利用率:
+			//利用率=充电量/(桩数量*功率*时间)
+
+			for (TSettlementConfirm settlementConfirm : list2) {
+				settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
+				if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
+					// 电站相同比较收入涨幅跌幅
+					BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome()).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+					tSettlementConfirm.setIncomePercentage(subtract+"%");
+					// 比较总利润 收入合计-成本合计
+					BigDecimal subtract1 = tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost());
+					BigDecimal subtract2 = settlementConfirm.getIncome().subtract(settlementConfirm.getCost());
+					tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
+				}
+				beforeCost = beforeCost.add(settlementConfirm.getCost());
+				beforeIncome = beforeIncome.add(settlementConfirm.getIncome());
+
+
+			}
+		}
+		TSettlementConfirm tSettlementConfirm = new TSettlementConfirm();
+		tSettlementConfirm.setMeteringElectronic(meteringElectronic);
+		tSettlementConfirm.setChargingElectronic(chargingElectronic);
+		tSettlementConfirm.setLossElectronic(lossElectronic);
+		tSettlementConfirm.setIncome(income);
+		tSettlementConfirm.setVenue(venue);
+		tSettlementConfirm.setMetering(metering);
+		tSettlementConfirm.setClean(clean);
+		tSettlementConfirm.setMaintain(maintain);
+		tSettlementConfirm.setCost(cost);
+		tSettlementConfirm.setProfitMoney(profitMoney);
+		tSettlementConfirm.setNewMoney(newMoney);
+		tSettlementConfirm.setNewSettlement(newSettlement);
+		tSettlementConfirm.setSupplyElectronic(supplyElectronic);
+		tSettlementConfirm.setProportionPartner(proportionPartner);
+		tSettlementConfirm.setProportionMoney(proportionMoney);
+		tSettlementConfirm.setTotalElectronic(totalElectronic);
+		tSettlementConfirm.setTotalService(totalService);
+		tSettlementConfirm.setServicePartner(servicePartner);
+		tSettlementConfirm.setServiceMoney(serviceMoney);
+		tSettlementConfirm.setSharingAmount(sharingAmount);
+		tSettlementConfirm.setCommissionAmount(commissionAmount);
+		tSettlementConfirm.setElectrovalence(electrovalence);
+		tSettlementConfirm.setServiceCharge(serviceCharge);
+		tSettlementConfirm.setOrderCommission(orderCommission);
+		tSettlementConfirm.setVipDiscount(vipDiscount);
+		tSettlementConfirm.setCouponDiscount(couponDiscount);
+		// 本月
+		BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
+		tSettlementConfirm.setIncomePercentage(subtract+"%");
+		// 比较总利润 收入合计-成本合计
+		BigDecimal subtract1 = income.subtract(cost);
+		BigDecimal subtract2 = beforeIncome.subtract(beforeCost);
+		tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
+		tSettlementConfirm.setIncomePercentage(subtract+"%");
+		tSettlementConfirm.setElectronicRefund(0);
+		// 查询上次汇报数据 进行比对涨幅跌幅
+		total.add(tSettlementConfirm);
+		res.setList1(list1);
+		res.setList2(total);
+		return res;
+	}
+
+	public static void main(String[] args) {
+//		String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
+//		String format1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
+//		System.err.println(format+"至"+format1);
+//		LocalDateTime parse = LocalDateTime.parse("2024-01-12 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+//		System.err.println(parse.format(DateTimeFormatter.ofPattern("yyyy-dd")));
+	}
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TSettlementConfirmServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TSettlementConfirmServiceImpl.java
new file mode 100644
index 0000000..c1f0076
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TSettlementConfirmServiceImpl.java
@@ -0,0 +1,34 @@
+package com.ruoyi.order.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.order.api.model.TSettlementConfirm;
+import com.ruoyi.order.api.model.TVipOrder;
+import com.ruoyi.order.api.query.VipShoppingOrderQuery;
+import com.ruoyi.order.dto.SixVipDto;
+import com.ruoyi.order.mapper.TSettlementConfirmMapper;
+import com.ruoyi.order.mapper.TVipOrderMapper;
+import com.ruoyi.order.service.TSettlementConfirmService;
+import com.ruoyi.order.service.TVipOrderService;
+import com.ruoyi.other.api.domain.TVip;
+import com.ruoyi.other.api.feignClient.VipClient;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author xiaochen
+ * @since 2024-08-07
+ */
+@Service
+public class TSettlementConfirmServiceImpl extends ServiceImpl<TSettlementConfirmMapper, TSettlementConfirm> implements TSettlementConfirmService {
+
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml
new file mode 100644
index 0000000..00179ec
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.order.mapper.TSettlementConfirmMapper">
+    <select id="settlementTotal" resultType="com.ruoyi.order.api.model.TSettlementConfirm">
+        select t1.* from
+            t_settlement_confirm t1
+        where 1=1
+        <if test="time != null and time!='' ">
+            AND DATE_FORMAT(t1.start_time, '%Y-%m') = DATE_FORMAT(#{time}, '%Y-%m')
+        </if>
+    </select>
+    <select id="settlementList" resultType="com.ruoyi.order.api.model.TSettlementConfirm">
+select t1.* from
+                t_settlement_confirm t1
+where 1=1
+        <if test="req.type != null ">
+            and t1.type = #{req.type}
+        </if>
+        <if test="req.partnerId != null ">
+            and t1.partnerId = #{req.partnerId}
+        </if>
+        <if test="req.type == 1 ">
+            <if test="req.startTime != null and req.startTime!=''">
+                and (t1.start_time between #{req.startTime} and #{req.endTime}
+            </if>
+        </if>
+        <if test="req.siteIds != null and req.siteIds.size() > 0">
+            AND t1.site_id IN
+            <foreach collection="req.siteIds" item="siteId" open="(" separator="," close=")">
+                #{siteId}
+            </foreach>
+        </if>
+        <if test="req.type == 2 ">
+            <if test="req.startTime != null and req.startTime!=''">
+                and (t1.end_time between #{req.startTime} and #{req.endTime}
+            </if>
+        </if>
+    </select>
+</mapper>

--
Gitblit v1.7.1