From ffcaaa7e21b3a33aa2f8321bc198b8586b27dc30 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期日, 04 一月 2026 18:04:46 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java                    |  242 ++++--
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java |    2 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingSettlementBill.java                         |  110 +++
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TVipOrderRefund.java                                 |    9 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java                               |   26 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TAccountSettlementStatementMapper.java                  |    7 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TAccountSettlementStatementServiceImpl.java       |   11 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TAccountSettlementStatementMapper.xml                        |    6 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITAccountSettlementStatementService.java               |    7 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingBillMapper.java                                |    6 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java                             |   25 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java    |   36 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingSettlementBillService.java                   |   33 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml                                     |  136 +++
 ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java                            |    5 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java          |    2 
 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml                  |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java                     |  745 ++++++++++++++++++--
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java                         |   20 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TAccountSettlementStatement.java                     |   80 ++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java                                        |  381 +++++++---
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingSettlementBillMapper.xml                            |   82 ++
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java                        |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingSettlementBillMapper.java                      |   38 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java            |    3 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillWapper.java                                 |   53 +
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java                               |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingSettlementBillServiceImpl.java           |   44 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java                       |   10 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java                            |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingBillService.java                              |    9 
 31 files changed, 1,778 insertions(+), 358 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java
index 255976e..62a1a48 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/ChargingListQuery.java
@@ -46,5 +46,7 @@
     private List<Long> carIds;
     @ApiModelProperty("站点ids 前端忽略")
     private List<Integer> siteIds;
+    @ApiModelProperty("账单周期")
+    private List<String> dateRange;
 
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TAccountSettlementStatement.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TAccountSettlementStatement.java
new file mode 100644
index 0000000..412b1ae
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TAccountSettlementStatement.java
@@ -0,0 +1,80 @@
+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 lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 账户结算账单
+ */
+@Data
+@TableName("t_account_settlement_statement")
+public class TAccountSettlementStatement {
+    /**
+     * id
+     */
+    @TableId(value = "id", type = IdType.NONE)
+    private Long id;
+    /**
+     * 站点id,0表示全站
+     */
+    @TableField("site_id")
+    private Integer siteId;
+    /**
+     * 账单周期
+     */
+    @TableField("billing_cycle")
+    private LocalDate billingCycle;
+    /**
+     * 账单状态(1=未出账单,2=已出账单)
+     */
+    @TableField("status")
+    private Integer status;
+    /**
+     * 账单编号
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 账户类型(1=微信,2=支付宝)
+     */
+    @TableField("account_type")
+    private Integer accountType;
+    /**
+     * 支付结算金额
+     */
+    @TableField("recharge_amount")
+    private BigDecimal rechargeAmount;
+    /**
+     * 退款结算金额
+     */
+    @TableField("refund_amount")
+    private BigDecimal refundAmount;
+    /**
+     * 平台手续费
+     */
+    @TableField("platform_fee")
+    private BigDecimal platformFee;
+    /**
+     * 三方平台分佣
+     */
+    @TableField("tripartite_commission")
+    private BigDecimal tripartiteCommission;
+    /**
+     * 入账金额
+     */
+    @TableField("recorded_amount")
+    private BigDecimal recordedAmount;
+    /**
+     * 账单生成日期
+     */
+    @TableField("create_time")
+    private LocalDateTime createTime;
+}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingSettlementBill.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingSettlementBill.java
new file mode 100644
index 0000000..8ab91ce
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingSettlementBill.java
@@ -0,0 +1,110 @@
+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 lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 充电结算账单
+ */
+@Data
+@TableName("t_charging_settlement_bill")
+public class TChargingSettlementBill {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.NONE)
+    private Long id;
+    /**
+     * 站点id,0表示全站
+     */
+    @TableField("site_id")
+    private Integer siteId;
+    /**
+     * 站点名称
+     */
+    @TableField(exist = false)
+    private String siteName;
+    /**
+     * 统计日期类型(1=开始时间,2=结束时间)
+     */
+    @TableField("statistical_date_type")
+    private Integer statisticalDateType;
+    /**
+     * 账单周期
+     */
+    @TableField("billing_cycle")
+    private LocalDate billingCycle;
+    /**
+     * 账单状态(1=未出账单,2=已出账单)
+     */
+    @TableField("status")
+    private Integer status;
+    /**
+     * 账单编号
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 充电时长(秒)
+     */
+    @TableField("charging_duration")
+    private Long chargingDuration;
+    /**
+     * 订单数
+     */
+    @TableField("order_number")
+    private Integer orderNumber;
+    /**
+     * 总金额
+     */
+    @TableField("total_amount")
+    private BigDecimal totalAmount;
+    /**
+     * 优惠券抵扣金额
+     */
+    @TableField("coupon_deduction")
+    private BigDecimal couponDeduction;
+    /**
+     * 平台手续费
+     */
+    @TableField("platform_fee")
+    private BigDecimal platformFee;
+    /**
+     * 三方平台分佣
+     */
+    @TableField("tripartite_commission")
+    private BigDecimal tripartiteCommission;
+    /**
+     * 实收金额
+     */
+    @TableField("funds_received")
+    private BigDecimal fundsReceived;
+    /**
+     * 总电量
+     */
+    @TableField("total_electricity")
+    private BigDecimal totalElectricity;
+    /**
+     * 总电费
+     */
+    @TableField("total_electricity_charge")
+    private BigDecimal totalElectricityCharge;
+    /**
+     * 总服务费
+     */
+    @TableField("total_service_fee")
+    private BigDecimal totalServiceFee;
+    /**
+     * 账单生成日期
+     */
+    @TableField("create_time")
+    private LocalDateTime createTime;
+}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TVipOrderRefund.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TVipOrderRefund.java
index f732c39..532ee19 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TVipOrderRefund.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TVipOrderRefund.java
@@ -33,6 +33,14 @@
     @TableField("id")
     private Long id;
 
+    @ApiModelProperty(value = "支付时间")
+    @TableField("pay_time")
+    private LocalDateTime payTime;
+
+    @ApiModelProperty(value = "支付流水号")
+    @TableField("pay_code")
+    private String payCode;
+
     @ApiModelProperty(value = "累计退款金额")
     @TableField("pay_amount")
     private BigDecimal payAmount;
@@ -40,7 +48,6 @@
     @ApiModelProperty(value = "1wx2ali")
     @TableField("pay_type")
     private Integer payType;
-
 
     @ApiModelProperty(value = "订单id")
     @TableField("vip_order_id")
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillWapper.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillWapper.java
new file mode 100644
index 0000000..da4f1f3
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillWapper.java
@@ -0,0 +1,53 @@
+package com.ruoyi.order.api.vo;
+
+import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.order.api.model.TChargingOrder;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@Data
+@ApiModel(value = "ChargingBillVO对象",description = "充电算帐单")
+public class ChargingBillWapper {
+    @ApiModelProperty(value = "充电总度数")
+    private BigDecimal chargingCapacity;
+    @ApiModelProperty(value = "实收金额")
+    private BigDecimal paymentAmount;
+    @ApiModelProperty(value = "订单总金额")
+    private BigDecimal orderAmount;
+    @ApiModelProperty(value = "总退款金额")
+    private BigDecimal refundAmount;
+    @ApiModelProperty(value = "累计电费")
+    private BigDecimal electrovalence;
+    @ApiModelProperty(value = "累计服务费")
+    private BigDecimal serviceCharge;
+    @ApiModelProperty(value = "订单数量")
+    private Integer orderCount;
+    @ApiModelProperty(value = "平台手续费")
+    private BigDecimal commissionAmount;
+    @ApiModelProperty(value = "三方平台分佣")
+    private BigDecimal sharingAmount;
+    @ApiModelProperty(value = "优惠抵扣")
+    private BigDecimal discount;
+    @ApiModelProperty(value = "账单分类 1全站 2各个站点 前端忽略")
+    private String category;
+    @ApiModelProperty(value = "账单类型 月结 前端忽略")
+    private String type;
+    @ApiModelProperty(value = "站点名称 前端忽略")
+    private String siteName;
+    @ApiModelProperty(value = "账单周期 前端忽略")
+    private String billWeek;
+    @ApiModelProperty(value = "账单生成日期 前端忽略")
+    private String createTime;
+    @ApiModelProperty(value = "账单编号 前端忽略")
+    private String code;
+    @ApiModelProperty(value = "充电时长 前端忽略")
+    private String chargingTime;
+    @ApiModelProperty(value = "列表数据")
+    private PageInfo<Map<String, Object>> list;
+
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
index 108f0ac..72bde3b 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
@@ -11,7 +11,7 @@
      * 缓存有效期,默认720(分钟)
      */
     public final static long EXPIRATION = 720;
-    public final static long EXPIRATION_APPLET = 7 * 24 * 60;
+    public final static long EXPIRATION_APPLET = 365 * 24 * 60;
 
     /**
      * 缓存刷新时间,默认120(分钟)
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
index fac99a8..5d7e960 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -80,6 +80,8 @@
 
     @Resource
     private ChengDuJianGuanClient chengDuJianGuanClient;
+    @Autowired
+    private TokenService tokenService;
 
 
     @Autowired
@@ -123,6 +125,8 @@
     public AjaxResult<Integer> add(@RequestBody TAccountingStrategyDTO dto) {
         if(null != dto.getSiteId()){
             dto.setAuditStatus(3);
+        }else{
+            dto.setAuditStatus(1);
         }
         Boolean flag = accountingStrategyDetailService.isStrategy24Hour(dto.getAccountingStrategyDetails());
         if(flag){
@@ -180,6 +184,8 @@
                 // 删除计费策略明细信息
                 accountingStrategyDetailService.remove(Wrappers.lambdaQuery(TAccountingStrategyDetail.class)
                         .eq(TAccountingStrategyDetail::getAccountingStrategyId, children.getId()));
+                accountingStrategyService.removeById(children.getId());
+
                 dto.setAuditStatus(1);
                 accountingStrategyService.updateById(dto);
                 // 添加明细
@@ -207,8 +213,10 @@
             // 删除计费策略明细信息
             accountingStrategyDetailService.remove(Wrappers.lambdaQuery(TAccountingStrategyDetail.class)
                     .eq(TAccountingStrategyDetail::getAccountingStrategyId, dto.getId()));
-            dto.setAuditStatus(1);
-            accountingStrategyService.updateById(dto);
+            if(null != dto.getSiteId()){
+                dto.setAuditStatus(1);
+                accountingStrategyService.updateById(dto);
+            }
             // 添加明细
             dto.getAccountingStrategyDetails().forEach(detail -> {
                 detail.setAccountingStrategyId(dto.getId());
@@ -357,7 +365,6 @@
     @ApiOperation(tags = {"后台-申请表单-计费模板审核"},value = "查询计费审核分页列表")
     @PostMapping(value = "/auth/pageList")
     public AjaxResult<PageInfo<TAccountingStrategyVO>> authPageList(@RequestBody TAccountingStrategyQuery query) {
-
         return AjaxResult.ok(accountingStrategyService.pageList1(query));
     }
     
@@ -389,25 +396,24 @@
 
                 //如果parentId不为空,则将parentId对应的siteId改为现在的,并且将parenId对应的数据删除
                 if (byId.getParentId()!=null) {
-                    TAccountingStrategy one = accountingStrategyService.lambdaQuery().eq(TAccountingStrategy::getId, byId.getParentId()).one();
+                    TAccountingStrategy one = accountingStrategyService.getById(byId.getParentId());
                     byId.setSiteId(one.getSiteId());
                     //将site表对应的模板id修改为新的这个
                     List<Site> list = siteService.lambdaQuery().eq(Site::getAccountingStrategyId, one.getId()).list();
-                    for (Site site : list) {
-                        site.setAccountingStrategyId(byId.getId());
+                    if(!list.isEmpty()){
+                        for (Site site : list) {
+                            site.setAccountingStrategyId(byId.getId());
+                        }
+                        siteService.updateBatchById(list);
+                        //推送三方平台
+                        List<Integer> siteIds = list.stream().filter(s->1 == s.getIsOpenSynchronization()).map(Site::getId).collect(Collectors.toList());
+                        if(!siteIds.isEmpty()){
+                            tcecClient.notificationStationChange(siteIds);
+                        }
                     }
-                    siteService.updateBatchById(list);
                     accountingStrategyService.removeById(one.getId());
-    
-                    //推送三方平台
-                    List<Integer> siteIds = list.stream().filter(s->1 == s.getIsOpenSynchronization()).map(Site::getId).collect(Collectors.toList());
-                    if(!siteIds.isEmpty()){
-                        tcecClient.notificationStationChange(siteIds);
-                    }
-                    
                 }
                 //硬件
-    
                 List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>()
                         .eq(TAccountingStrategyDetail::getAccountingStrategyId, byId.getId()).eq(TAccountingStrategyDetail::getDelFlag, 0));
                 List<TChargingPile> list = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, byId.getSiteId()).list();
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java
index efbf492..2d8cf82 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TAccountingStrategyMapper.java
@@ -28,6 +28,9 @@
      * @return
      */
     List<TAccountingStrategyVO> pageList(@Param("query") TAccountingStrategyQuery query, @Param("pageInfo")PageInfo<TAccountingStrategyVO> pageInfo);
+
+
+
     List<TAccountingStrategyVO> pageList1(@Param("query") TAccountingStrategyQuery query, @Param("pageInfo")PageInfo<TAccountingStrategyVO> pageInfo);
 
     
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java
index f805cd0..2c965cc 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyService.java
@@ -24,6 +24,8 @@
      * @return
      */
     PageInfo<TAccountingStrategyVO> pageList(TAccountingStrategyQuery query);
+
+
     PageInfo<TAccountingStrategyVO> pageList1(TAccountingStrategyQuery query);
 
     /**
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java
index 2077b20..71409cd 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java
@@ -73,8 +73,6 @@
     public PageInfo<TAccountingStrategyVO> pageList1(TAccountingStrategyQuery query) {
         PageInfo<TAccountingStrategyVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize());
         List<TAccountingStrategyVO> list = this.baseMapper.pageList1(query,pageInfo);
-        List<Integer> parentIds = list.stream().map(TAccountingStrategyVO::getId).collect(Collectors.toList());
-
         for (TAccountingStrategyVO tAccountingStrategyVO : list) {
             SysUser data = sysUserClient.getSysUser(tAccountingStrategyVO.getUserId()).getData();
             tAccountingStrategyVO.setUserName(data.getNickName());
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml
index 34cc583..a557970 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml
@@ -56,8 +56,6 @@
                 AND audit_status = #{query.auditStatus}
             </if>
             AND site_id IS NULL
-            AND (parent_id IS NULL OR audit_status = 1 OR audit_status = 2)
-
         </where>
         ORDER BY create_time DESC
     </select>
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
index 6db46cb..4b26ca7 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java
@@ -20,10 +20,7 @@
 import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.order.api.model.*;
 import com.ruoyi.order.api.query.TOrderInvoiceQuery;
-import com.ruoyi.order.api.vo.AccountListVO;
-import com.ruoyi.order.api.vo.ChargingBillListVO;
-import com.ruoyi.order.api.vo.ChargingBillVO;
-import com.ruoyi.order.api.vo.TOrderInvoiceVO;
+import com.ruoyi.order.api.vo.*;
 import com.ruoyi.order.export.*;
 import com.ruoyi.order.service.*;
 import com.ruoyi.order.vo.StatisticsOfBatteryVO;
@@ -161,19 +158,28 @@
         accountListVO.setOrderList(res.getExportList());
         return R.ok(accountListVO);
     }
+
+
     
     @RequiresPermissions(value = {"/chargeBill"}, logical = Logical.OR)
     @PostMapping(value = "/chargingBillList")
     @ApiOperation(value = "充电算帐单列表查询", tags = {"管理后台-充电算账单"})
-    public AjaxResult<ChargingBillVO> chargingBillList(@RequestBody ChargingListQuery dto) {
-        ChargingBillVO res = chargingBillService.chargingBillList(dto);
+    public AjaxResult<ChargingBillWapper> chargingBillList(@RequestBody ChargingListQuery dto) {
+//        ChargingBillVO res = chargingBillService.chargingBillList(dto);
+        ChargingBillWapper res = chargingBillService.chargingBillList2(dto);
         return AjaxResult.success(res);
     }
+
+
+
     @PostMapping(value = "/chargingBillListR")
     public R<ChargingBillVO> chargingBillListR(@RequestBody ChargingListQuery dto) {
         ChargingBillVO res = chargingBillService.chargingBillList(dto);
         return R.ok(res);
     }
+
+
+
     @GetMapping(value = "/chargingBillListExport")
     public R<ChargingBillVO> chargingBillListExport(String uid) {
         return R.ok(null);
@@ -186,7 +192,7 @@
     public void export(@RequestBody ChargingListQuery dto)
     {
 
-        ChargingBillVO res = chargingBillService.chargingBillList(dto);
+        ChargingBillVO res = chargingBillService.chargingBillListExport(dto);
         List<ChargingBillListVO> list = res.getList().getRecords();
         List<TChargingBillExport> tChargingBillExports = new ArrayList<>();
         for (ChargingBillListVO orderInvoiceVO : list) {
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
index 9c4540d..2a03221 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java
@@ -99,15 +99,15 @@
 	 */
 	@ResponseBody
 	@PostMapping(value = "/shoppingOrderWxRefund")
-	public void shoppingOrderWxRefund(@RequestParam("out_trade_no") String out_refund_no,
-													@RequestParam("out_trade_no") String refund_id,
-													@RequestParam("out_trade_no") String tradeState,
-													@RequestParam("out_trade_no") String success_time){
+	public void shoppingOrderWxRefund(@RequestParam("out_refund_no") String out_refund_no,
+													@RequestParam("refund_id") String refund_id,
+													@RequestParam("tradeState") String tradeState,
+													@RequestParam("success_time") String success_time){
 		if("SUCCESS".equals(tradeState)){
 			TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper<TShoppingOrderRefund>().eq(TShoppingOrderRefund::getRefundCode, out_refund_no));
 			one.setRefundSerialNumber(refund_id);
 			one.setRefundStatus(2);
-			one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE")));
+			one.setRefundTime(LocalDateTime.now());
 			shoppingOrderRefundService.updateById(one);
 			TShoppingOrder byId = shoppingOrderService.getById(one.getShoppingOrderId());
 			byId.setStatus(4);
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
index 96b1f7f..15554ef 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
@@ -155,7 +155,7 @@
             TVipOrderRefund vipOrderRefund = vipOrderRefundService.getOne(new LambdaUpdateWrapper<TVipOrderRefund>().eq(TVipOrderRefund::getRefundCode, out_refund_no));
             vipOrderRefund.setRefundSerialNumber(refund_id);
             vipOrderRefund.setRefundStatus(2);
-            vipOrderRefund.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE")));
+            vipOrderRefund.setRefundTime(LocalDateTime.now());
             vipOrderRefundService.updateById(vipOrderRefund);
             TVipOrder vipOrder = vipOrderService.getById(vipOrderRefund.getVipOrderId());
             vipOrder.setRefundStatus(2);
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TAccountSettlementStatementMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TAccountSettlementStatementMapper.java
new file mode 100644
index 0000000..f6ab633
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TAccountSettlementStatementMapper.java
@@ -0,0 +1,7 @@
+package com.ruoyi.order.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.order.api.model.TAccountSettlementStatement;
+
+public interface TAccountSettlementStatementMapper extends BaseMapper<TAccountSettlementStatement> {
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingBillMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingBillMapper.java
index faa0889..e155d8d 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingBillMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingBillMapper.java
@@ -26,10 +26,16 @@
             @Param("req") ChargingListQuery dto,
             @Param("startTime1")String startTime1,
             @Param("startTime2")String startTime2);
+
+
+
     List<ChargingBillListVO> chargingBillListNoLimit(
             @Param("req") ChargingListQuery dto,
             @Param("startTime1")String startTime1,
             @Param("startTime2")String startTime2);
+
+
+
     List<ChargingBillListVO> chargingBillList1(
             @Param("pageInfo") PageInfo<ChargingBillListVO> pageInfo,
             @Param("req") ChargingListQuery dto,
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
index 2549d63..f0df172 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -1,6 +1,7 @@
 package com.ruoyi.order.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.dto.ChargingOrderGroup;
 import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
 import com.ruoyi.common.core.web.page.PageInfo;
@@ -183,4 +184,29 @@
 	 * @return
 	 */
 	List<TChargingOrder> findEndChargingOrder();
+
+
+	/**
+	 * 获取需要手动修改订单状态的数据
+	 * @return
+	 */
+	List<TChargingOrder> findUpStatusChargingOrder();
+
+
+	/**
+	 * 查询充电算账单数据
+	 * @param startTime
+	 * @param endTime
+	 */
+	List<Map<String, Object>> getChargingSettlementBill(@Param("startTime") String startTime, @Param("endTime") String endTime,
+														@Param("dateType") Integer dateType);
+
+
+	/**
+	 * 查询账户结算账单数据
+	 * @param startTime
+	 * @param endTime
+	 */
+	List<Map<String, Object>> getAccountSettlementStatement(@Param("startTime") String startTime, @Param("endTime") String endTime,
+															@Param("rechargePaymentType") Integer rechargePaymentType);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingSettlementBillMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingSettlementBillMapper.java
new file mode 100644
index 0000000..a6c0d80
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingSettlementBillMapper.java
@@ -0,0 +1,38 @@
+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.TChargingSettlementBill;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface TChargingSettlementBillMapper extends BaseMapper<TChargingSettlementBill> {
+
+
+    /**
+     * 获取列表数据
+     * @param page
+     * @param type 订单分类(1全站 2各个站点)
+     * @param status 状态(1未出账 2已出账)
+     * @param dateRange 账单周期
+     * @return
+     */
+    List<Map<String, Object>> queryList(PageInfo<Map<String, Object>> page, @Param("type") Integer type,
+                                        @Param("status") Integer status, @Param("dateRange") List<String> dateRange,
+                                        @Param("statisticalDateType") Integer statisticalDateType, @Param("siteIds") List<Integer> siteIds);
+
+
+    /**
+     * 获取汇总数据
+     * @param type
+     * @param status
+     * @param dateRange
+     * @param statisticalDateType
+     * @return
+     */
+    Map<String, Object> queryListSum(@Param("type") Integer type, @Param("status") Integer status,
+                                     @Param("dateRange") List<String> dateRange, @Param("statisticalDateType") Integer statisticalDateType,
+                                     @Param("siteIds") List<Integer> siteIds);
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITAccountSettlementStatementService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITAccountSettlementStatementService.java
new file mode 100644
index 0000000..c6e8a17
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITAccountSettlementStatementService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.order.api.model.TAccountSettlementStatement;
+
+public interface ITAccountSettlementStatementService extends IService<TAccountSettlementStatement> {
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingSettlementBillService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingSettlementBillService.java
new file mode 100644
index 0000000..0a1f973
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ITChargingSettlementBillService.java
@@ -0,0 +1,33 @@
+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.TChargingSettlementBill;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ITChargingSettlementBillService extends IService<TChargingSettlementBill> {
+
+
+    /**
+     * 获取列表数据
+     * @param page
+     * @param type
+     * @param status
+     * @param dateRange
+     * @return
+     */
+    List<Map<String, Object>> queryList(PageInfo<Map<String, Object>> page, Integer type, Integer status, List<String> dateRange, Integer statisticalDateType, List<Integer> siteIds);
+
+
+    /**
+     * 获取汇总数据
+     * @param type
+     * @param status
+     * @param dateRange
+     * @param statisticalDateType
+     * @return
+     */
+    Map<String, Object> queryListSum(Integer type, Integer status, List<String> dateRange, Integer statisticalDateType, List<Integer> siteIds);
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingBillService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingBillService.java
index 4e4388b..c8ec84f 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingBillService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingBillService.java
@@ -4,6 +4,7 @@
 import com.ruoyi.order.api.model.TChargingBill;
 import com.ruoyi.order.api.vo.ChargingBillVO;
 import com.ruoyi.order.api.model.ChargingListQuery;
+import com.ruoyi.order.api.vo.ChargingBillWapper;
 
 /**
  * <p>
@@ -16,6 +17,14 @@
 public interface TChargingBillService extends IService<TChargingBill> {
 
     ChargingBillVO chargingBillList(ChargingListQuery dto);
+
+
+    ChargingBillWapper chargingBillList2(ChargingListQuery dto);
+
+
     ChargingBillVO chargingBillList1(ChargingListQuery dto);
 
+
+    ChargingBillVO chargingBillListExport(ChargingListQuery dto);
+
 }
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 ce49663..8476b6c 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
@@ -363,4 +363,29 @@
 	 * @return
 	 */
 	List<TChargingOrder> findEndChargingOrder();
+
+	/**
+	 * 获取需要手动修改订单状态的数据
+	 * @return
+	 */
+	List<TChargingOrder> findUpStatusChargingOrder();
+
+
+
+	/**
+	 * 查询充电算账单数据
+	 * @param startTime
+	 * @param endTime
+	 * @param dateType
+	 */
+	List<Map<String, Object>> getChargingSettlementBill(String startTime, String endTime, Integer dateType);
+
+
+	/**
+	 * 查询账户结算账单数据
+	 * @param startTime
+	 * @param endTime
+	 * @return
+	 */
+	List<Map<String, Object>> getAccountSettlementStatement(String startTime, String endTime, Integer rechargePaymentType);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TAccountSettlementStatementServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TAccountSettlementStatementServiceImpl.java
new file mode 100644
index 0000000..6c71f13
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TAccountSettlementStatementServiceImpl.java
@@ -0,0 +1,11 @@
+package com.ruoyi.order.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.order.api.model.TAccountSettlementStatement;
+import com.ruoyi.order.mapper.TAccountSettlementStatementMapper;
+import com.ruoyi.order.service.ITAccountSettlementStatementService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TAccountSettlementStatementServiceImpl extends ServiceImpl<TAccountSettlementStatementMapper, TAccountSettlementStatement> implements ITAccountSettlementStatementService {
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
index 529c1fb..e5b8809 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java
@@ -1,7 +1,6 @@
 package com.ruoyi.order.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.api.feignClient.AppUserCarClient;
 import com.ruoyi.account.api.feignClient.AppUserClient;
 import com.ruoyi.account.api.model.TAppUser;
@@ -14,40 +13,31 @@
 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.common.security.service.TokenService;
-import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
-import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.order.api.model.*;
 import com.ruoyi.order.api.vo.ChargingBillListVO;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.order.api.vo.ChargingBillVO;
+import com.ruoyi.order.api.vo.ChargingBillWapper;
 import com.ruoyi.order.mapper.TChargingBillMapper;
 import com.ruoyi.order.mapper.TChargingOrderMapper;
-import com.ruoyi.order.service.TChargingBillService;
-import com.ruoyi.order.service.TChargingOrderAccountingStrategyService;
-import com.ruoyi.order.service.TChargingOrderRefundService;
+import com.ruoyi.order.service.*;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
-import com.ruoyi.system.api.model.SysUserRoleVo;
-import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
-import org.omg.CORBA.PRIVATE_MEMBER;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.time.LocalTime;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -82,6 +72,12 @@
     private TokenService tokenService;
     @Resource
     private PartnerClient partnerClient;
+    @Resource
+    private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
+    @Resource
+    private TChargingOrderService chargingOrderService;
+    @Resource
+    private ITChargingSettlementBillService chargingSettlementBillService;
 
 
     @Override
@@ -524,8 +520,6 @@
         chargingBillVO.setList(pageInfo);
         return chargingBillVO;
     }
-    @Resource
-    private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
 
     @Override
     public ChargingBillVO chargingBillList(ChargingListQuery dto) {
@@ -560,34 +554,34 @@
         Integer roleType = sysUser.getRoleType();
         //如果没传siteId,获取当前登陆人所有的siteIds
         List<Integer> siteIds = new ArrayList<>();
-            //如果没传siteId,获取当前登陆人所有的siteIds
-            if (dto.getSiteId()==null){
-                if (userId != null){
-                    List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
-                    for (GetSiteListDTO datum : data) {
-                        siteIds.add(datum.getId());
-                    }
+        //如果没传siteId,获取当前登陆人所有的siteIds
+        if (dto.getSiteId()==null){
+            if (userId != null){
+                List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+                for (GetSiteListDTO datum : data) {
+                    siteIds.add(datum.getId());
                 }
-            }else {
-                siteIds.add(dto.getSiteId());
             }
-            if (siteIds.isEmpty()){
-                siteIds.add(-1);
-            }else{
-                if (roleType == 2){
-                    List<Integer> integers = new ArrayList<>();
-                    for (Integer siteId : siteIds) {
-                        // 校验有没有这个站点的权限
-                        List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),siteId).getData();
+        }else {
+            siteIds.add(dto.getSiteId());
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }else{
+            if (roleType == 2){
+                List<Integer> integers = new ArrayList<>();
+                for (Integer siteId : siteIds) {
+                    // 校验有没有这个站点的权限
+                    List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),siteId).getData();
 
-                        Boolean b = t1.get(1);
-                        if (b){
-                            integers.add(siteId);
-                        }
+                    Boolean b = t1.get(1);
+                    if (b){
+                        integers.add(siteId);
                     }
-                    siteIds = integers;
                 }
+                siteIds = integers;
             }
+        }
 
         if (roleType==1){
             siteIds.add(0);
@@ -595,7 +589,7 @@
         if (siteIds.isEmpty()){
             siteIds.add(-1);
         }
-            dto.setSiteIds(siteIds);
+        dto.setSiteIds(siteIds);
         List<ChargingBillListVO> list = this.baseMapper.chargingBillList(pageInfo,dto,startTime1,startTime2);
         List<ChargingBillListVO> list1 = this.baseMapper.chargingBillListNoLimit(dto,startTime1,startTime2);
         BigDecimal paymentAmountTotal = new BigDecimal("0");
@@ -761,21 +755,21 @@
                     chargingSecond+=between;
                     // 将其转化为xx小时xx分钟xx秒显示 如果是0小时则不展示小时 如果是0分钟则不展示分钟
 
-                        // 计算小时、分钟和秒
-                        long hours = between / 60 / 60;
-                        long minutes = (between % 3600) / 60;
-                        long seconds = between % 60; // 如果没有秒数,则默认是0
-                        StringBuilder result = new StringBuilder();
-                        if (hours > 0) {
-                            result.append(hours).append("小时");
-                        }
-                        if (minutes > 0) {
-                            result.append(minutes).append("分钟");
-                        }
-                        if (seconds > 0 || result.length() == 0) { // 如果秒数大于0,或者小时和分钟都为0,则显示秒数
-                            result.append(seconds).append("秒");
-                        }
-                        tChargingOrder.setChargingTime(result.toString());
+                    // 计算小时、分钟和秒
+                    long hours = between / 60 / 60;
+                    long minutes = (between % 3600) / 60;
+                    long seconds = between % 60; // 如果没有秒数,则默认是0
+                    StringBuilder result = new StringBuilder();
+                    if (hours > 0) {
+                        result.append(hours).append("小时");
+                    }
+                    if (minutes > 0) {
+                        result.append(minutes).append("分钟");
+                    }
+                    if (seconds > 0 || result.length() == 0) { // 如果秒数大于0,或者小时和分钟都为0,则显示秒数
+                        result.append(seconds).append("秒");
+                    }
+                    tChargingOrder.setChargingTime(result.toString());
 
                 }
 
@@ -806,7 +800,7 @@
                 }
                 // 总金额
                 if (tChargingOrder.getRechargeAmount()!=null){
-                orderAmount = orderAmount.add(tChargingOrder.getRechargeAmount());
+                    orderAmount = orderAmount.add(tChargingOrder.getRechargeAmount());
                 }
                 // 累加累计电费
                 electrovalence = electrovalence.add(electronic_reduce);
@@ -815,17 +809,17 @@
                 }
                 // 累加累计服务费
 
-                    if (tChargingOrder.getOrderSource().equals(2)) {
-                        serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
-                        // 累加平台分佣
-                        sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN));
-                        // 累加实收
-                        paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN));
-                        BigDecimal add = electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")));
-                        tChargingOrder.setTotalAmount(add.toString());
-                    }else {
-                        serviceCharge = serviceCharge.add(service_reduce);
-                    }
+                if (tChargingOrder.getOrderSource().equals(2)) {
+                    serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+                    // 累加平台分佣
+                    sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN));
+                    // 累加实收
+                    paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN));
+                    BigDecimal add = electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")));
+                    tChargingOrder.setTotalAmount(add.toString());
+                }else {
+                    serviceCharge = serviceCharge.add(service_reduce);
+                }
 
                 // 累加平台手续费
                 if (tChargingOrder.getRechargeAmount()!=null){
@@ -941,28 +935,28 @@
                     refundAmountTotal = refundAmountTotal.add(tChargingOrder.getRefundAmount());
                 }
                 // 累加累计服务费
-                    if (tChargingOrder.getOrderSource().equals(2)) {
-                        serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
-                        serviceChargeTotal = serviceChargeTotal.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
-                        // 累加平台分佣
-                        sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
-                        sharingAmountTotal = sharingAmountTotal.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
-                        // 累加实收
-                        paymentAmount = paymentAmount.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
-                        paymentAmountTotal = paymentAmountTotal.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
-                    }else{
-                        serviceCharge = serviceCharge.add(service_reduce);
-                        serviceChargeTotal = serviceChargeTotal.add(service_reduce);
-                    }
-                    // 累加平台手续费
+                if (tChargingOrder.getOrderSource().equals(2)) {
+                    serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+                    serviceChargeTotal = serviceChargeTotal.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+                    // 累加平台分佣
+                    sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
+                    sharingAmountTotal = sharingAmountTotal.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
+                    // 累加实收
+                    paymentAmount = paymentAmount.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
+                    paymentAmountTotal = paymentAmountTotal.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
+                }else{
+                    serviceCharge = serviceCharge.add(service_reduce);
+                    serviceChargeTotal = serviceChargeTotal.add(service_reduce);
+                }
+                // 累加平台手续费
                 if (tChargingOrder.getOrderAmount()!=null){
                     commissionAmount = commissionAmount.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
                     commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
                 }
 
                 // 累加充电度数
-                    chargingCapacity = chargingCapacity.add(charging_capacity);
-                    chargingCapacityTotal = chargingCapacityTotal.add(charging_capacity);
+                chargingCapacity = chargingCapacity.add(charging_capacity);
+                chargingCapacityTotal = chargingCapacityTotal.add(charging_capacity);
                 // 累加优惠金额
                 if (tChargingOrder.getCouponDiscountAmount()!=null){
                     discountTotal = discountTotal.add(tChargingOrder.getCouponDiscountAmount());
@@ -986,9 +980,584 @@
         return chargingBillVO;
     }
 
-    public static void main(String[] args) {
-        LocalDateTime localDate = LocalDateTime.now().withMonth(1).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0);
+    @Override
+    public ChargingBillWapper chargingBillList2(ChargingListQuery dto) {
+        if (dto.getState()!=null){
+            if (dto.getState()==1){
+                dto.setState(2);
+            }else {
+                dto.setState(1);
+            }
+        }
+        Integer statisticalDateType = 1;
+        if (StringUtils.hasLength(dto.getEndTime())){
+            statisticalDateType = 2;
+        }
+        Long userId = tokenService.getLoginUser().getUserid();
+        // 查询当前登陆人按钮权限
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+        Integer roleType = sysUser.getRoleType();
+        //如果没传siteId,获取当前登陆人所有的siteIds
+        List<Integer> siteIds = new ArrayList<>();
+        List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+        for (GetSiteListDTO datum : data) {
+            siteIds.add(datum.getId());
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }else{
+            if (roleType == 2){
+                List<Integer> integers = new ArrayList<>();
+                for (Integer siteId : siteIds) {
+                    // 校验有没有这个站点的权限
+                    List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),siteId).getData();
 
+                    Boolean b = t1.get(1);
+                    if (b){
+                        integers.add(siteId);
+                    }
+                }
+                siteIds = integers;
+            }
+        }
+
+        if (roleType==1){
+            siteIds.add(0);
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }
+        dto.setSiteIds(siteIds);
+
+        PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
+        List<Map<String, Object>> list = chargingSettlementBillService.queryList(pageInfo, dto.getType(), dto.getState(), dto.getDateRange(), statisticalDateType, dto.getSiteIds());
+        ChargingBillWapper chargingBillVO = new ChargingBillWapper();
+        List<Map<String, Object>> pageList = new ArrayList<>();
+        if(null != list){
+            for (Map<String, Object> map : list) {
+                Integer site_id = Integer.valueOf(map.get("site_id").toString());
+                String code = map.get("code").toString();
+                String billingCycle = map.get("billingCycle").toString();
+                String createTime = map.get("createTime").toString();
+                String siteName = 1 == dto.getType() ? "全站" : map.get("siteName").toString();
+                Long charging_duration = Long.valueOf(map.get("charging_duration").toString());
+                Integer order_number = Integer.valueOf(map.get("order_number").toString());
+                String orderAmount = map.get("total_amount").toString();
+                String commissionAmount = map.get("platform_fee").toString();
+                String sharingAmount = map.get("tripartite_commission").toString();
+                String paymentAmount = map.get("funds_received").toString();
+                String chargingCapacity = map.get("total_electricity").toString();
+                String electrovalence = map.get("total_electricity_charge").toString();
+                String serviceCharge = map.get("total_service_fee").toString();
+                Map<String, Object> data1 = new HashMap<>();
+                data1.put("code", code);
+                data1.put("orderState", 2);
+                data1.put("type", dto.getType());
+                data1.put("billWeek", billingCycle);
+                data1.put("billTime", createTime);
+                data1.put("chargingSecond", charging_duration);
+                data1.put("orderCount", order_number);
+                data1.put("siteName", siteName);
+                data1.put("orderAmount", orderAmount);
+                data1.put("commissionAmount", commissionAmount);
+                data1.put("sharingAmount", sharingAmount);
+                data1.put("paymentAmount", paymentAmount);
+                data1.put("chargingCapacity", chargingCapacity);
+                data1.put("electrovalence", electrovalence);
+                data1.put("serviceCharge", serviceCharge);
+                data1.put("authDownLoad", true);
+                if (roleType == 2 && 0 != site_id){
+                    // 校验有没有这个站点的权限
+                    List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),site_id).getData();
+                    data1.put("authDownLoad", t1.get(0));
+                }
+                pageList.add(data1);
+            }
+        }
+
+        Map<String,Object> map = chargingSettlementBillService.queryListSum(dto.getType(), dto.getState(), dto.getDateRange(), statisticalDateType, dto.getSiteIds());
+        BigDecimal chargingCapacity = (null == map || null == map.get("totalElectricity")) ? BigDecimal.ZERO : new BigDecimal(map.get("totalElectricity").toString());
+        BigDecimal paymentAmount = (null == map || null == map.get("fundsReceived")) ? BigDecimal.ZERO : new BigDecimal(map.get("fundsReceived").toString());
+        BigDecimal orderAmount = (null == map || null == map.get("totalAmount")) ? BigDecimal.ZERO : new BigDecimal(map.get("totalAmount").toString());
+        BigDecimal electrovalence = (null == map || null == map.get("totalElectricityCharge")) ? BigDecimal.ZERO : new BigDecimal(map.get("totalElectricityCharge").toString());
+        BigDecimal serviceCharge = (null == map || null == map.get("totalServiceFee")) ? BigDecimal.ZERO : new BigDecimal(map.get("totalServiceFee").toString());
+        Integer orderCount = (null == map || null == map.get("orderNumber")) ? 0 : Integer.valueOf(map.get("orderNumber").toString());
+        BigDecimal commissionAmount = (null == map || null == map.get("platformFee")) ? BigDecimal.ZERO : new BigDecimal(map.get("platformFee").toString());
+        BigDecimal sharingAmount = (null == map || null == map.get("tripartiteCommission")) ? BigDecimal.ZERO : new BigDecimal(map.get("tripartiteCommission").toString());
+        BigDecimal discount = (null == map || null == map.get("couponDeduction")) ? BigDecimal.ZERO : new BigDecimal(map.get("couponDeduction").toString());
+        chargingBillVO.setChargingCapacity(chargingCapacity);
+        chargingBillVO.setPaymentAmount(paymentAmount.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setOrderAmount(orderAmount.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setElectrovalence(electrovalence.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setServiceCharge(serviceCharge.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setOrderCount(orderCount);
+        chargingBillVO.setCommissionAmount(commissionAmount.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setSharingAmount(sharingAmount.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setDiscount(discount.setScale(2, BigDecimal.ROUND_DOWN));
+        pageInfo.setRecords(pageList);
+        chargingBillVO.setList(pageInfo);
+        return chargingBillVO;
     }
 
+    @Override
+    public ChargingBillVO chargingBillListExport(ChargingListQuery dto) {
+        if (dto.getState()!=null){
+            if (dto.getState()==1){
+                dto.setState(2);
+            }else {
+                dto.setState(1);
+            }
+        }
+        ChargingBillVO chargingBillVO = new ChargingBillVO();
+        String startTime1 = null;
+        String startTime2 = null;
+        if (StringUtils.hasLength(dto.getStartTime())){
+            String[] split = dto.getStartTime().split(" - ");
+            startTime1 = split[0];
+            startTime2 = split[1];
+        }
+        List<TChargingOrder> total = chargingOrderList.selectList(new LambdaQueryWrapper<>(TChargingOrder.class)
+                .isNotNull(TChargingOrder::getPayTime));
+        PageInfo<ChargingBillListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize());
+        List<Site> data6 = siteClient.getSiteAll().getData();
+        List<TChargingGun> gunList = chargingGunClient.getAllGun().getData();
+        List<TChargingPile> pileList = chargingGunClient.getAllPile().getData();
+        List<TAppUser> userList = appUserClient.getAllUser().getData();
+        List<TAppUserCar> carList = appUserCarClient.getAllCar().getData();
+        List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
+
+        Long userId = tokenService.getLoginUser().getUserid();
+        // 查询当前登陆人按钮权限
+        SysUser sysUser = sysUserClient.getSysUser(tokenService.getLoginUser().getUserid()).getData();
+        Integer roleType = sysUser.getRoleType();
+        //如果没传siteId,获取当前登陆人所有的siteIds
+        List<Integer> siteIds = new ArrayList<>();
+        //如果没传siteId,获取当前登陆人所有的siteIds
+        if (dto.getSiteId()==null){
+            if (userId != null){
+                List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData();
+                for (GetSiteListDTO datum : data) {
+                    siteIds.add(datum.getId());
+                }
+            }
+        }else {
+            siteIds.add(dto.getSiteId());
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }else{
+            if (roleType == 2){
+                List<Integer> integers = new ArrayList<>();
+                for (Integer siteId : siteIds) {
+                    // 校验有没有这个站点的权限
+                    List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),siteId).getData();
+
+                    Boolean b = t1.get(1);
+                    if (b){
+                        integers.add(siteId);
+                    }
+                }
+                siteIds = integers;
+            }
+        }
+
+        if (roleType==1){
+            siteIds.add(0);
+        }
+        if (siteIds.isEmpty()){
+            siteIds.add(-1);
+        }
+        dto.setSiteIds(siteIds);
+        List<ChargingBillListVO> list = this.baseMapper.chargingBillList(pageInfo,dto,startTime1,startTime2);
+        List<ChargingBillListVO> list1 = this.baseMapper.chargingBillListNoLimit(dto,startTime1,startTime2);
+        BigDecimal paymentAmountTotal = new BigDecimal("0");
+        BigDecimal orderAmountTotal = new BigDecimal("0");
+        BigDecimal electrovalenceTotal = new BigDecimal("0");
+        BigDecimal serviceChargeTotal = new BigDecimal("0");
+        BigDecimal commissionAmountTotal = new BigDecimal("0");
+        BigDecimal sharingAmountTotal = new BigDecimal("0");
+        BigDecimal chargingCapacityTotal = new BigDecimal("0");
+        BigDecimal discountTotal = new BigDecimal("0");
+        BigDecimal refundAmountTotal = new BigDecimal("0");
+        int orderCount = 0;
+
+
+        List<ChargingBillListVO> chargingBillListVOS = new ArrayList<>();
+        for (ChargingBillListVO chargingBillListVO : list) {
+            if (roleType==2 && chargingBillListVO.getSiteId()!=0){
+                chargingBillListVOS.add(chargingBillListVO);
+            }
+            if (roleType ==1 && (siteIds.contains(chargingBillListVO.getSiteId())|| chargingBillListVO.getSiteId()==0)){
+                chargingBillListVOS.add(chargingBillListVO);
+            }
+        }
+        for (ChargingBillListVO chargingBillListVO : chargingBillListVOS) {
+            if (chargingBillListVO.getSiteId()!=0&&!siteIds.contains(chargingBillListVO.getSiteId())){
+                continue;
+            }
+            if (roleType == 2){
+                // 校验有没有这个站点的权限
+                List<Boolean> t1= partnerClient.getChargingBillMenu(sysUser.getObjectId(),chargingBillListVO.getSiteId()).getData();
+                chargingBillListVO.setAuthDownLoad(t1.get(0));
+                if (chargingBillListVO.getSiteId()==0){
+                    continue;
+                }
+            }
+            String temp = "";
+            String temp1 = "";
+            switch (chargingBillListVO.getType()){
+                case 1:
+                    temp = "全站账单";
+                    temp1 = "全站";
+                    break;
+                case 2:
+                    temp = "各个站点账单";
+                    Site site = data6.stream().filter(e -> e.getId().equals(chargingBillListVO.getSiteId())).findFirst().orElse(null);
+                    if(site!=null){
+                        temp1 = site.getName();
+                    }
+                    break;
+            }
+            chargingBillVO.setCategory(temp);
+            chargingBillVO.setSiteName(temp1);
+
+            chargingBillVO.setType("月账单");
+            chargingBillVO.setCode(chargingBillListVO.getCode());
+
+            LocalDateTime billTime = chargingBillListVO.getBillTime();
+            // 将其转化为yyyy-MM格式字符串
+            chargingBillVO.setCreateTime(billTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            // 将billTime减去一个月 转化为yyyy-MM格式字符串
+            chargingBillVO.setBillWeek(billTime.minusMonths(1).format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
+
+            chargingBillListVO.setUid(chargingBillListVO.getId().toString());
+            // 根据账单的出账时间 查询上个月的充电订单
+            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
+            // 账单周期
+            chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
+            // 获取 LocalDate 对象
+//            // 获取该月份的第一天
+            // 获取该月份的最后一天
+            LocalDateTime lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
+            LocalDateTime firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
+            List<TChargingOrder> tChargingOrders = new ArrayList<>();
+            if (chargingBillListVO.getType() == 2){
+                tChargingOrders = total.stream().filter(e -> e.getSiteId().equals(chargingBillListVO.getSiteId()) && e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
+                        && e.getPayTime().isAfter(firstDayOfMonth.withHour(0).withMinute(0).withSecond(0))).collect(Collectors.toList());
+            }else{
+                tChargingOrders = total.stream().filter(e ->  e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
+                        && e.getPayTime().isAfter(firstDayOfMonth.withHour(0).withMinute(0).withSecond(0))).collect(Collectors.toList());
+            }
+            int chargingSecond = 0;
+            BigDecimal paymentAmount = new BigDecimal("0");
+            BigDecimal orderAmount = new BigDecimal("0");
+            BigDecimal electrovalence = new BigDecimal("0");
+            BigDecimal serviceCharge = new BigDecimal("0");
+            BigDecimal commissionAmount = new BigDecimal("0");
+            BigDecimal sharingAmount = new BigDecimal("0");
+            BigDecimal chargingCapacity = new BigDecimal("0");
+            BigDecimal refundAmount = new BigDecimal("0");
+            chargingBillVO.setCategory("");
+            chargingBillListVO.setOrderCount(tChargingOrders.size());
+            chargingBillVO.setExportList(tChargingOrders);
+            int t = 1;
+            for (TChargingOrder tChargingOrder : tChargingOrders) {
+                tChargingOrder.setXuhao(t);
+                t++;
+                if (tChargingOrder.getRechargePaymentType()!=null && tChargingOrder.getRechargePaymentType()==1){
+                    chargingBillListVO.setPayTypeName("微信商户");
+                }
+                if (tChargingOrder.getRechargePaymentType()!=null && tChargingOrder.getRechargePaymentType()==2){
+                    if (StringUtils.hasLength(chargingBillListVO.getPayTypeName())){
+                        chargingBillListVO.setPayTypeName("微信商户+支付宝商户");
+                    }else{
+                        chargingBillListVO.setPayTypeName("支付宝商户");
+                    }
+                }
+                chargingBillVO.setSiteName(data6.stream().filter(e->e.getId().equals(chargingBillListVO.getSiteId())).findFirst().orElse(new Site()).getName());
+                TChargingGun data2 = gunList.stream().filter(e -> e.getId().equals(tChargingOrder.getChargingGunId())).findFirst().orElse(null);
+                TChargingPile data1 = pileList.stream().filter(e -> e.getId().equals(tChargingOrder.getChargingPileId())).findFirst().orElse(null);
+                if (data1!=null && data2!=null){
+                    tChargingOrder.setTerminalName(data1.getName()+data2.getName());
+                    tChargingOrder.setTerminalCode(data2.getCode());
+                }
+                tChargingOrder.setOrderClassification1("线上订单");
+                tChargingOrder.setRechargePaymentType1("预付");
+                tChargingOrder.setChargingType("充电桩接口充电服务");
+                if (tChargingOrder.getStatus()!=null){
+                    switch (tChargingOrder.getStatus()){
+                        case 1:
+                            tChargingOrder.setStatus1("等待中");
+                            break;
+                        case 2:
+                            tChargingOrder.setStatus1("启动中");
+                            break;
+                        case 3:
+                            tChargingOrder.setStatus1("充电中");
+                            break;
+                        case 4:
+                            tChargingOrder.setStatus1("停止中");
+                            break;
+                        case 5:
+                            tChargingOrder.setStatus1("已结束");
+                            break;
+                        case 0:
+                            tChargingOrder.setStatus1("未知");
+                            break;
+                    }
+                }
+
+                if (tChargingOrder.getEndMode()!=null){
+                    switch (tChargingOrder.getEndMode()){
+                        case 1:
+                            tChargingOrder.setEndMode1("主动终止");
+                            break;
+                        case 2:
+                            tChargingOrder.setEndMode1("满电终止");
+                            break;
+                        case 3:
+                            tChargingOrder.setEndMode1("费用不足终止");
+                            break;
+                        case 0:
+                            tChargingOrder.setEndMode1("异常终止");
+                            break;
+                    }
+                }
+
+                tChargingOrder.setDiscount(tChargingOrder.getCouponDiscountAmount()!=null?tChargingOrder.getCouponDiscountAmount().toString():"0");
+                if (tChargingOrder.getStartTime()!=null && tChargingOrder.getEndTime()!=null){
+                    LocalDateTime startTime = tChargingOrder.getStartTime();
+                    LocalDateTime endTime = tChargingOrder.getEndTime();
+                    // 计算时间差 单位秒
+                    long between = ChronoUnit.SECONDS.between(startTime, endTime);
+                    chargingSecond+=between;
+                    // 将其转化为xx小时xx分钟xx秒显示 如果是0小时则不展示小时 如果是0分钟则不展示分钟
+
+                    // 计算小时、分钟和秒
+                    long hours = between / 60 / 60;
+                    long minutes = (between % 3600) / 60;
+                    long seconds = between % 60; // 如果没有秒数,则默认是0
+                    StringBuilder result = new StringBuilder();
+                    if (hours > 0) {
+                        result.append(hours).append("小时");
+                    }
+                    if (minutes > 0) {
+                        result.append(minutes).append("分钟");
+                    }
+                    if (seconds > 0 || result.length() == 0) { // 如果秒数大于0,或者小时和分钟都为0,则显示秒数
+                        result.append(seconds).append("秒");
+                    }
+                    tChargingOrder.setChargingTime(result.toString());
+
+                }
+
+                TAppUser data3 = userList.stream().filter(e -> e.getId().equals(tChargingOrder.getAppUserId())).findFirst().orElse(null);
+                if (tChargingOrder.getAppUserCarId()!=null){
+                    TAppUserCar tAppUserCar = carList.stream().filter(e -> e.getId().equals(tChargingOrder.getAppUserCarId())).findFirst().orElse(null);
+                    if (tAppUserCar!=null){
+                        tChargingOrder.setLicensePlate(tAppUserCar.getLicensePlate());
+                        tChargingOrder.setVehicleModel(tAppUserCar.getVehicleModel());
+                    }
+                }else{
+                    tChargingOrder.setLicensePlate(tChargingOrder.getPlateNum());
+                }
+                if (data3!=null){
+                    tChargingOrder.setUserName(data3.getName());
+                    tChargingOrder.setPhone(data3.getPhone());
+                }
+                List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(tChargingOrder.getId())).collect(Collectors.toList());
+                BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal charging_capacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+                if ( !tChargingOrder.getOrderSource().equals(2)){
+                    // 实收
+                    paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce);
+                    BigDecimal add = electronic_reduce.add(service_reduce);
+                    tChargingOrder.setTotalAmount(add.toString());
+                }
+                // 总金额
+                if (tChargingOrder.getRechargeAmount()!=null){
+                    orderAmount = orderAmount.add(tChargingOrder.getRechargeAmount());
+                }
+                // 累加累计电费
+                electrovalence = electrovalence.add(electronic_reduce);
+                if (tChargingOrder.getRefundAmount()!=null && tChargingOrder.getRefundStatus() !=null && tChargingOrder.getRefundStatus() == 2){
+                    refundAmount = refundAmount.add(tChargingOrder.getRefundAmount());
+                }
+                // 累加累计服务费
+
+                if (tChargingOrder.getOrderSource().equals(2)) {
+                    serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+                    // 累加平台分佣
+                    sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2,BigDecimal.ROUND_DOWN));
+                    // 累加实收
+                    paymentAmount = paymentAmount.add(electronic_reduce).add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN));
+                    BigDecimal add = electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")));
+                    tChargingOrder.setTotalAmount(add.toString());
+                }else {
+                    serviceCharge = serviceCharge.add(service_reduce);
+                }
+
+                // 累加平台手续费
+                if (tChargingOrder.getRechargeAmount()!=null){
+                    commissionAmount = commissionAmount.add(tChargingOrder.getRechargeAmount().multiply(BigDecimal.valueOf(0.006)).setScale(2,BigDecimal.ROUND_DOWN));
+                }
+                // 累加充电度数
+                chargingCapacity = chargingCapacity.add(charging_capacity);
+            }
+            // 将chargingSecond 这是以秒为单位存放的总秒数 将其转化为xx小时xx分钟xx秒
+            int hours = chargingSecond / 3600;
+            int minutes = (chargingSecond % 3600) / 60;
+            int seconds = chargingSecond % 60;
+            // 格式化为字符串
+            String timeString = String.format("%d小时%d分钟%d秒", hours, minutes, seconds);
+            chargingBillVO.setChargingTime(timeString);
+            chargingBillListVO.setOrderAmount(paymentAmount);
+
+            chargingBillListVO.setPaymentAmount(paymentAmount.subtract(sharingAmount).setScale(2,BigDecimal.ROUND_DOWN));
+            chargingBillListVO.setElectrovalence(electrovalence);
+            chargingBillListVO.setServiceCharge(serviceCharge.setScale(2,BigDecimal.ROUND_DOWN));
+            chargingBillListVO.setCommissionAmount(commissionAmount.setScale(2,BigDecimal.ROUND_DOWN));
+            chargingBillListVO.setSharingAmount(sharingAmount.setScale(2,BigDecimal.ROUND_DOWN));
+            chargingBillListVO.setChargingCapacity(chargingCapacity);
+            switch (chargingBillListVO.getType()){
+                case 1:
+                    chargingBillListVO.setSiteName("全站");
+                    break;
+                case 2:
+                    Site site = data6.stream().filter(e -> e.getId().equals(chargingBillListVO.getSiteId())).findFirst().orElse(null);
+                    if (site!=null){
+                        chargingBillListVO.setSiteName(site.getName());
+                    }
+                    break;
+            }
+            // 订单数
+            chargingBillListVO.setOrderCount(tChargingOrders.size());
+            // 充电时间秒
+            chargingBillListVO.setChargingSecond(chargingSecond);
+        }
+        for (ChargingBillListVO chargingBillListVO : list1) {
+            if (dto.getType() == 1){
+                if (chargingBillListVO.getSiteId()!=0){
+                    continue;
+                }
+            }else{
+                if (chargingBillListVO.getSiteId()!=0&&!siteIds.contains(chargingBillListVO.getSiteId())){
+                    continue;
+                }
+                if (chargingBillListVO.getType()==1){
+                    continue;
+                }
+            }
+            if (roleType == 2){
+                if (chargingBillListVO.getSiteId()==0){
+                    continue;
+                }
+            }
+            LocalDateTime billTime = chargingBillListVO.getBillTime();
+            // 将其转化为yyyy-MM格式字符串
+            chargingBillVO.setCreateTime(billTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            // 将billTime减去一个月 转化为yyyy-MM格式字符串
+            chargingBillVO.setBillWeek(billTime.minusMonths(1).format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
+
+            chargingBillListVO.setUid(chargingBillListVO.getId().toString());
+            // 根据账单的出账时间 查询上个月的充电订单
+            LocalDateTime localDate = chargingBillListVO.getBillTime().minusMonths(1);
+            // 账单周期
+            chargingBillListVO.setBillWeek(localDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM")));
+            // 获取 LocalDate 对象
+//            // 获取该月份的第一天
+            // 获取该月份的最后一天
+            LocalDateTime lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
+            LocalDateTime firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
+
+            List<TChargingOrder> tChargingOrders = new ArrayList<>();
+            if (chargingBillListVO.getType() == 2){
+                tChargingOrders = total.stream().filter(e -> e.getSiteId().equals(chargingBillListVO.getSiteId()) && e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
+                        && e.getPayTime().isAfter(firstDayOfMonth.withHour(0).withMinute(0).withSecond(0))).collect(Collectors.toList());
+            }else{
+                tChargingOrders = total.stream().filter(e ->  e.getPayTime().isBefore(lastDayOfMonth.withHour(23).withMinute(59).withSecond(59))
+                        && e.getPayTime().isAfter(firstDayOfMonth.withHour(0).withMinute(0).withSecond(0))).collect(Collectors.toList());
+            }
+            orderCount+=tChargingOrders.size();
+            BigDecimal paymentAmount = new BigDecimal("0");
+            BigDecimal orderAmount = new BigDecimal("0");
+            BigDecimal electrovalence = new BigDecimal("0");
+            BigDecimal serviceCharge = new BigDecimal("0");
+            BigDecimal commissionAmount = new BigDecimal("0");
+            BigDecimal sharingAmount = new BigDecimal("0");
+            BigDecimal chargingCapacity = new BigDecimal("0");
+            chargingBillListVO.setOrderCount(tChargingOrders.size());
+            for (TChargingOrder tChargingOrder : tChargingOrders) {
+                List<TChargingOrderAccountingStrategy> list4 = list3.stream().filter(e -> e.getChargingOrderId().equals(tChargingOrder.getId())).collect(Collectors.toList());
+                BigDecimal electronic_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodElectricPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal service_reduce = list4.stream().map(TChargingOrderAccountingStrategy::getPeriodServicePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal charging_capacity = list4.stream().map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+                // 累加实收金额
+                if (!tChargingOrder.getOrderSource().equals(2)){
+                    paymentAmount = paymentAmount.add(electronic_reduce.add(service_reduce));
+                    paymentAmountTotal = paymentAmountTotal.add(electronic_reduce.add(service_reduce));
+                }
+                // 累加订单金额
+                if (tChargingOrder.getRechargeAmount()!=null){
+                    orderAmount = orderAmount.add(tChargingOrder.getRechargeAmount());
+                    orderAmountTotal = orderAmountTotal.add(tChargingOrder.getRechargeAmount());
+                }
+                // 累加累计电费
+                if (tChargingOrder.getElectrovalence()!=null){
+                    electrovalence = electrovalence.add(electronic_reduce);
+                    electrovalenceTotal = electrovalenceTotal.add(electronic_reduce);
+                }
+                if (tChargingOrder.getRefundAmount()!=null && tChargingOrder.getRefundStatus() !=null && tChargingOrder.getRefundStatus() == 2){
+                    refundAmountTotal = refundAmountTotal.add(tChargingOrder.getRefundAmount());
+                }
+                // 累加累计服务费
+                if (tChargingOrder.getOrderSource().equals(2)) {
+                    serviceCharge = serviceCharge.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+                    serviceChargeTotal = serviceChargeTotal.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2, BigDecimal.ROUND_DOWN));
+                    // 累加平台分佣
+                    sharingAmount = sharingAmount.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
+                    sharingAmountTotal = sharingAmountTotal.add(service_reduce.multiply(new BigDecimal("0.2")).setScale(2, BigDecimal.ROUND_DOWN));
+                    // 累加实收
+                    paymentAmount = paymentAmount.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
+                    paymentAmountTotal = paymentAmountTotal.add(electronic_reduce.add(service_reduce.multiply(new BigDecimal("0.8")).setScale(2,BigDecimal.ROUND_DOWN)));
+                }else{
+                    serviceCharge = serviceCharge.add(service_reduce);
+                    serviceChargeTotal = serviceChargeTotal.add(service_reduce);
+                }
+                // 累加平台手续费
+                if (tChargingOrder.getOrderAmount()!=null){
+                    commissionAmount = commissionAmount.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
+                    commissionAmountTotal = commissionAmountTotal.add(tChargingOrder.getRechargeAmount().multiply(new BigDecimal("0.006")).setScale(2,BigDecimal.ROUND_DOWN));
+                }
+
+                // 累加充电度数
+                chargingCapacity = chargingCapacity.add(charging_capacity);
+                chargingCapacityTotal = chargingCapacityTotal.add(charging_capacity);
+                // 累加优惠金额
+                if (tChargingOrder.getCouponDiscountAmount()!=null){
+                    discountTotal = discountTotal.add(tChargingOrder.getCouponDiscountAmount());
+                }
+                if (tChargingOrder.getVipDiscountAmount()!=null){
+                    discountTotal = discountTotal.add(tChargingOrder.getVipDiscountAmount());
+                }
+            }
+        }
+        chargingBillVO.setChargingCapacity(chargingCapacityTotal);
+        chargingBillVO.setPaymentAmount(paymentAmountTotal.subtract(commissionAmountTotal).subtract(sharingAmountTotal).setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setOrderAmount(orderAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setElectrovalence(electrovalenceTotal.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setServiceCharge(serviceChargeTotal.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setOrderCount(orderCount);
+        chargingBillVO.setCommissionAmount(commissionAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setSharingAmount(sharingAmountTotal.setScale(2, BigDecimal.ROUND_DOWN));
+        chargingBillVO.setDiscount(discountTotal.setScale(2, BigDecimal.ROUND_DOWN));
+        pageInfo.setRecords(chargingBillListVOS);
+        chargingBillVO.setList(pageInfo);
+        return chargingBillVO;
+    }
+
+
+
 }
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 dea831a..d72d586 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
@@ -785,15 +785,15 @@
 		});
 
 
-//		//异步线程检测远程启动的应答结果。如果失败,则需要全额退款
-//		Long id = chargingOrder.getId();
-//		//执行5分钟的定时任务检测
-//		ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
-//		scheduler.scheduleAtFixedRate(()->{
-//			if(timingDetection(id)){
-//				scheduler.shutdown();
-//			}
-//		}, 5, 1, TimeUnit.SECONDS);
+		//异步线程检测远程启动的应答结果。如果失败,则需要全额退款
+		Long id = chargingOrder.getId();
+		//执行10分钟的定时任务检测
+		ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+		scheduler.scheduleAtFixedRate(()->{
+			if(timingDetection(id)){
+				scheduler.shutdown();
+			}
+		}, 10, 1, TimeUnit.SECONDS);
 		return AjaxResult.success();
 	}
 	
@@ -814,14 +814,14 @@
 		List<PlatformStartChargingReply> data = platformStartChargingReplyService.getPlatformStartChargingReply(code);
 		log.info(code + ":-------------------开始检查调起充电结果-------------------" + data.toString());
 		Site site = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData().get(0);
-		if (data.size() != 0) {
+		if (!data.isEmpty()) {
 			PlatformStartChargingReply platformStartChargingReply = data.get(1);
 			Integer startup_result = platformStartChargingReply.getStartup_result();
 			Integer failure_cause = platformStartChargingReply.getFailure_cause();
 			Integer counter = counter_map.get(code);
 			PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
-			//5分钟内还未插枪则取消充电,退回金额。
-			if (failure_cause == 5 && (null == counter || counter < 1800)) {
+			//10分钟内还未插枪则取消充电,退回金额。
+			if (failure_cause == 5 && (null == counter || counter < 600)) {
 				counter = (null == counter ? 0 : counter) + 1;
 				counter_map.put(code, counter);
 				//启动失败
@@ -837,27 +837,19 @@
 				//启动失败
 				preChargeCheck1.setStartupSuccess(3);
 				preChargeCheck1.setFailureCause(failure_cause);
+				chargingOrder.setStatus(2);
+				chargingOrder.setEndMode(0);
+				this.updateById(chargingOrder);
 				//启动失败后取消订单,退款操作
 				refund(code);
-				chargingOrder.setStatus(-1);
-				chargingOrder.setEndMode(0);
 			} else {
 				//启动成功
 				preChargeCheck1.setStartupSuccess(2);
 				chargingOrder.setStatus(3);
 				chargingOrder.setStartTime(LocalDateTime.now());
+				this.updateById(chargingOrder);
 			}
-			this.updateById(chargingOrder);
 
-			if (chargingOrder.getStatus() == 3) {
-				//推送监管平台订单状态
-				new Thread(() -> {
-					ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
-					BeanUtils.copyProperties(chargingOrder, chargingOrderVo);
-					chargingMessageClient.pushOrderStatus(chargingOrderVo);
-				}).start();
-			}
-			
 			redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
 			//推送三方平台订单状态
 			if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
@@ -865,6 +857,12 @@
 			}
 			ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
 			threadPoolExecutor.execute(()->{
+				if (chargingOrder.getStatus() == 3) {
+					//推送监管平台订单状态
+					ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
+					BeanUtils.copyProperties(chargingOrder, chargingOrderVo);
+					chargingMessageClient.pushOrderStatus(chargingOrderVo);
+				}
 				//推送成都监管
 				NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
 				vo.setOrderCode(chargingOrder.getCode());
@@ -873,47 +871,77 @@
 			});
 			return true;
 		} else {
-			Integer counter = boot_failed_map.get(code);
-			log.info(code + ":-------------------未上传开启充电结果-------------------" + counter);
 			PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key);
-			//5分钟内未启动成功,退回金额。
-			if (null == counter || counter < 1800) {
-				counter = (null == counter ? 0 : counter) + 1;
-				boot_failed_map.put(code, counter);
-				//启动失败
-				preChargeCheck1.setStartupSuccess(1);
-				preChargeCheck1.setFailureCause(0);
+			UploadRealTimeMonitoringData uploadRealTimeMonitoringData = uploadRealTimeMonitoringDataService.getDataByOrderCode(code, "desc");
+			if(null != uploadRealTimeMonitoringData){
+				//启动成功
+				preChargeCheck1.setStartupSuccess(2);
+				chargingOrder.setStatus(3);
+				chargingOrder.setStartTime(LocalDateTime.now());
+				this.updateById(chargingOrder);
 				redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
-				return false;
+
+				//推送三方平台订单状态
+				if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
+					tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
+				}
+				ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
+				threadPoolExecutor.execute(()->{
+					if (chargingOrder.getStatus() == 3) {
+						//推送监管平台订单状态
+						ChargingOrderVo chargingOrderVo = new ChargingOrderVo();
+						BeanUtils.copyProperties(chargingOrder, chargingOrderVo);
+						chargingMessageClient.pushOrderStatus(chargingOrderVo);
+					}
+					//推送成都监管
+					NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
+					vo.setOrderCode(chargingOrder.getCode());
+					vo.setChargingGunId(chargingOrder.getChargingGunId());
+					chengDuJianGuanClient.notificationConnectorChargeStatus(vo);
+				});
+				return true;
+			}else{
+				Integer counter = boot_failed_map.get(code);
+				log.info(code + ":-------------------未上传开启充电结果-------------------" + counter);
+				//10分钟内未启动成功,退回金额。
+				if (null == counter || counter < 600) {
+					counter = (null == counter ? 0 : counter) + 1;
+					boot_failed_map.put(code, counter);
+					//启动失败
+					preChargeCheck1.setStartupSuccess(1);
+					preChargeCheck1.setFailureCause(0);
+					redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
+					return false;
+				}
+
+				//清除计时器中的无效数据
+				boot_failed_map.remove(code);
+				TChargingOrder order = new TChargingOrder();
+				order.setId(id);
+				order.setAppUserId(chargingOrder.getAppUserId());
+				//启动失败
+				preChargeCheck1.setStartupSuccess(3);
+				preChargeCheck1.setFailureCause(0);
+				order.setStatus(2);
+				order.setEndMode(0);
+				this.updateById(order);
+				//启动失败后取消订单,退款操作
+				refund(code);
+				redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
+				//推送三方平台订单状态
+				if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
+					tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
+				}
+				ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
+				threadPoolExecutor.execute(()->{
+					//推送成都监管
+					NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
+					vo.setOrderCode(chargingOrder.getCode());
+					vo.setChargingGunId(chargingOrder.getChargingGunId());
+					chengDuJianGuanClient.notificationConnectorChargeStatus(vo);
+				});
+				return true;
 			}
-			
-			//清除计时器中的无效数据
-			boot_failed_map.remove(code);
-			TChargingOrder order = new TChargingOrder();
-			order.setId(id);
-			order.setAppUserId(chargingOrder.getAppUserId());
-			//启动失败
-			preChargeCheck1.setStartupSuccess(3);
-			preChargeCheck1.setFailureCause(0);
-			//启动失败后取消订单,退款操作
-			refund(code);
-			order.setStatus(-1);
-			order.setEndMode(0);
-			this.updateById(order);
-			redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
-			//推送三方平台订单状态
-			if (2 == chargingOrder.getOrderSource() && 1 == site.getIsOpenSynchronization()) {
-				tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
-			}
-			ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
-			threadPoolExecutor.execute(()->{
-				//推送成都监管
-				NotificationConnectorChargeStatusVo vo = new NotificationConnectorChargeStatusVo();
-				vo.setOrderCode(chargingOrder.getCode());
-				vo.setChargingGunId(chargingOrder.getChargingGunId());
-				chengDuJianGuanClient.notificationConnectorChargeStatus(vo);
-			});
-			return true;
 		}
 	}
 	
@@ -963,15 +991,17 @@
 			//启动失败
 			preChargeCheck1.setStartupSuccess(3);
 			preChargeCheck1.setFailureCause(failure_cause);
+			order.setStatus(2);
+			order.setEndMode(0);
+			this.updateById(order);
 			//启动失败后取消订单,退款操作
 			refund(code);
-			order.setStatus(-1);
-			order.setEndMode(0);
 		} else {
 			//启动成功
 			preChargeCheck1.setStartupSuccess(2);
 			order.setStatus(3);
 			order.setStartTime(LocalDateTime.now());
+			this.updateById(order);
 			TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
 			chargingGun.setStatus(4);
 			chargingGunClient.updateChargingGunById(chargingGun);
@@ -981,7 +1011,6 @@
 			}
 		}
 		redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
-		this.updateById(order);
 		
 		if (3 == order.getStatus()) {
 			//推送监管平台订单状态
@@ -1004,8 +1033,6 @@
 				tcecClient.notificationStartChargeResult(result);
 				tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
 			}
-			
-
 		}
 	}
 	
@@ -1585,16 +1612,7 @@
 		if (siteIds.isEmpty()) siteIds.add(-1);
 		dto.setSiteIds(siteIds);
 		List<ChargingOrderVO> list = this.baseMapper.chargingOrder(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
-
-		BigDecimal total = new BigDecimal("0");
-		long time = 0L;
-		BigDecimal electronicMoney = new BigDecimal("0");
-		BigDecimal serviceMoney = new BigDecimal("0");
-		BigDecimal commissionMoney = new BigDecimal("0");
-//		 BigDecimal refundMoney = new BigDecimal("0");
-		BigDecimal paymentMoney = new BigDecimal("0");
 		List<TChargingOrderAccountingStrategy> list3 = chargingOrderAccountingStrategyService.list();
-		
 		for (ChargingOrderVO chargingOrderVO : list) {
 			if (roleType == 2) {
 				for (Integer siteId : siteIds) {
@@ -1662,9 +1680,9 @@
 		if (null != map) {
 			tCharingOrderVO.setTotal(map.get("total") == null ? BigDecimal.ZERO : (BigDecimal) map.get("total"));
 			tCharingOrderVO.setTime(map.get("time") == null ? 0L : (Long) map.get("time"));
-			tCharingOrderVO.setIncome((map.get("paymentMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("paymentMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
-			tCharingOrderVO.setElectronicMoney((map.get("electronicMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("electronicMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
-			tCharingOrderVO.setServiceMoney((map.get("serviceMoney") == null ? BigDecimal.ZERO : (BigDecimal) map.get("serviceMoney")).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+			tCharingOrderVO.setIncome(map.get("income") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("income")).setScale(2, RoundingMode.HALF_EVEN));
+			tCharingOrderVO.setElectronicMoney(map.get("electronicMoney") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("electronicMoney")).setScale(2, RoundingMode.HALF_EVEN));
+			tCharingOrderVO.setServiceMoney(map.get("serviceMoney") == null ? BigDecimal.ZERO : ((BigDecimal) map.get("serviceMoney")).setScale(2, RoundingMode.HALF_EVEN));
 		} else {
 			tCharingOrderVO.setTotal(BigDecimal.ZERO);
 			tCharingOrderVO.setTime(0L);
@@ -1770,14 +1788,17 @@
 		String startTime2 = null;
 		String endTime1 = null;
 		String endTime2 = null;
-		
-		List<TChargingGun> allGun = chargingGunClient.getAllGun().getData();
-		List<TChargingPile> allPile = chargingGunClient.getAllPile().getData();
-		
+
 		if (StringUtils.hasLength(dto.getStartTime())) {
 			String[] split = dto.getStartTime().split(" - ");
 			startTime1 = split[0];
 			startTime2 = split[1];
+		}
+
+		if (StringUtils.hasLength(dto.getEndTime())) {
+			String[] split = dto.getEndTime().split(" - ");
+			endTime1 = split[0];
+			endTime2 = split[1];
 		}
 		ChargingOrderTimeVO chargingOrderTimeVO = new ChargingOrderTimeVO();
 		if (StringUtils.hasLength(dto.getPhone())) {
@@ -1967,9 +1988,12 @@
 		List<ChargingOrderListVO> list = new ArrayList<>();
 		List<Map<String, Object>> maps = this.baseMapper.chargingList1(pageInfo, dto, startTime1, startTime2, endTime1, endTime2);
 		for (Map<String, Object> map : maps) {
+			if(null == map){
+				continue;
+			}
 			ChargingOrderListVO chargingOrderListVO = new ChargingOrderListVO();
 			if (roleType == 2) {
-				List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), chargingOrderListVO.getSiteId()).getData();
+				List<Boolean> data = partnerClient.getChargingListMenu(sysUser.getObjectId(), Integer.valueOf(map.get("siteId").toString())).getData();
 				chargingOrderListVO.setAuthInfo(data.get(0));
 				chargingOrderListVO.setAuthCurve(data.get(1));
 			}
@@ -2082,6 +2106,9 @@
 		List<Map<String, Object>> list1 = this.baseMapper.chargingListSum(dto, startTime1, startTime2, endTime1, endTime2);
 		chargingOrderTimeVO.setOrderCount(list1.size());
 		for (Map<String, Object> map : list1) {
+			if(null == map){
+				continue;
+			}
 			electronic = electronic.add(new BigDecimal(null == map.get("electronic") ? "0" : map.get("electronic").toString()));
 			paymentAmount = paymentAmount.add(new BigDecimal(null == map.get("paymentAmount") ? "0" : map.get("paymentAmount").toString()));
 			electrovalence = electrovalence.add(new BigDecimal(null == map.get("electrovalence") ? "0" : map.get("electrovalence").toString()));
@@ -2490,6 +2517,12 @@
 			chargingOrderAccountingStrategyService.remove(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()));
 			SimpleDateFormat sdfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 			List<AccountingStrategyDetailOrderVo> lists = new ArrayList<>();
+			List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
+			if(!dataList.isEmpty()){
+				vo.setStart_time(sdfs.format(dataList.get(dataList.size() - 1).getCreate_time()) + ".00");
+				vo.setEnd_time(sdfs.format(dataList.get(0).getCreate_time()) + ".00");
+			}
+
 			//跨天
 			if (!vo.getStart_time().split(" ")[0].equals(vo.getEnd_time().split(" ")[0])) {
 				//当天的
@@ -2686,13 +2719,7 @@
 			}
 			chargingOrder.setResidualAmount(rechargeAmount.subtract(total).setScale(2, RoundingMode.HALF_EVEN));
 
-			List<UploadRealTimeMonitoringData> dataList = uploadRealTimeMonitoringDataService.getDataByOrderCode(chargingOrder.getCode());
-			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-			if(dataList.isEmpty()){
-				chargingOrder.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
-			}else{
-				chargingOrder.setStartTime(LocalDateTime.parse(sdf.format(dataList.get(dataList.size() - 1).getCreate_time()), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-			}
+			chargingOrder.setStartTime(LocalDateTime.parse(vo.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
 			chargingOrder.setEndTime(LocalDateTime.parse(vo.getEnd_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS")));
 			chargingOrder.setStatus(5);
 			chargingOrder.setOrderAmount(orderAmount.setScale(2, RoundingMode.HALF_EVEN));
@@ -3281,6 +3308,8 @@
 			vipOrderRefund.setVipOrderId(vipOrder.getId());
 			vipOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
 			vipOrderRefund.setRefundStatus(1);
+			vipOrderRefund.setPayTime(vipOrder.getPayTime());
+			vipOrderRefund.setPayCode(vipOrder.getCode());
 			vipOrderRefund.setPayType(vipOrder.getPaymentType());
 			vipOrderRefund.setRefundTime(LocalDateTime.now());
 			vipOrderRefund.setCode(vipOrder.getCode());
@@ -4594,4 +4623,35 @@
 	public List<TChargingOrder> findEndChargingOrder() {
 		return this.baseMapper.findEndChargingOrder();
 	}
+
+	/**
+	 * 获取需要手动修改订单状态的数据
+	 * @return
+	 */
+	@Override
+	public List<TChargingOrder> findUpStatusChargingOrder() {
+		return this.baseMapper.findUpStatusChargingOrder();
+	}
+
+	/**
+	 * 查询充电算账单数据
+	 * @param startTime
+	 * @param endTime
+	 */
+	@Override
+    public List<Map<String, Object>> getChargingSettlementBill(String startTime, String endTime, Integer dateType) {
+		return this.baseMapper.getChargingSettlementBill(startTime, endTime, dateType);
+    }
+
+
+	/**
+	 * 查询账户结算账单数据
+	 * @param startTime
+	 * @param endTime
+	 * @return
+	 */
+	@Override
+	public List<Map<String, Object>> getAccountSettlementStatement(String startTime, String endTime, Integer rechargePaymentType) {
+		return this.baseMapper.getAccountSettlementStatement(startTime, endTime, rechargePaymentType);
+	}
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingSettlementBillServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingSettlementBillServiceImpl.java
new file mode 100644
index 0000000..194880f
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingSettlementBillServiceImpl.java
@@ -0,0 +1,44 @@
+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.TChargingSettlementBill;
+import com.ruoyi.order.mapper.TChargingSettlementBillMapper;
+import com.ruoyi.order.service.ITChargingSettlementBillService;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class TChargingSettlementBillServiceImpl extends ServiceImpl<TChargingSettlementBillMapper, TChargingSettlementBill> implements ITChargingSettlementBillService {
+
+
+    /**
+     * 获取列表数据
+     * @param page
+     * @param type 订单分类(1全站 2各个站点)
+     * @param status 状态(1未出账 2已出账)
+     * @param dateRange 账单周期
+     * @return
+     */
+    @Override
+    public List<Map<String, Object>> queryList(PageInfo<Map<String, Object>> page, Integer type, Integer status, List<String> dateRange, Integer statisticalDateType, List<Integer> siteIds) {
+        return this.baseMapper.queryList(page, type, status, dateRange, statisticalDateType, siteIds);
+    }
+
+
+    /**
+     * 获取汇总数据
+     * @param type
+     * @param status
+     * @param dateRange
+     * @param statisticalDateType
+     * @return
+     */
+    @Override
+    public Map<String, Object> queryListSum(Integer type, Integer status, List<String> dateRange, Integer statisticalDateType, List<Integer> siteIds) {
+        return this.baseMapper.queryListSum(type, status, dateRange, statisticalDateType, siteIds);
+    }
+}
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
index b8aa66e..066024d 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/task/TaskUtil.java
@@ -1,14 +1,13 @@
 package com.ruoyi.order.util.task;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson2.util.UUIDUtils;
-import com.alibaba.nacos.common.utils.UuidUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
 import com.ruoyi.account.api.feignClient.AppCouponClient;
 import com.ruoyi.account.api.feignClient.AppUserClient;
 import com.ruoyi.account.api.feignClient.AppUserIntegralChangeClient;
-import com.ruoyi.account.api.feignClient.AppUserVipDetailClient;
 import com.ruoyi.account.api.model.TAppCoupon;
 import com.ruoyi.account.api.model.TAppUser;
 import com.ruoyi.account.api.model.TAppUserIntegralChange;
@@ -18,17 +17,14 @@
 import com.ruoyi.chargingPile.api.model.TChargingGun;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.integration.api.feignClient.ChargingMessageClient;
 import com.ruoyi.integration.api.feignClient.ChengDuJianGuanClient;
 import com.ruoyi.integration.api.feignClient.TCECClient;
-import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
 import com.ruoyi.integration.api.model.TransactionRecord;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.integration.api.vo.ChargingOrderVo;
 import com.ruoyi.integration.api.vo.NotificationConnectorChargeStatusVo;
 import com.ruoyi.order.api.model.*;
-import com.ruoyi.order.api.vo.AccountingStrategyDetailOrderVo;
 import com.ruoyi.order.api.vo.TransactionRecordMessageVO;
 import com.ruoyi.order.service.*;
 import com.ruoyi.order.util.mongodb.service.TransactionRecordService;
@@ -45,10 +41,7 @@
 import com.ruoyi.payment.api.model.RefundResp;
 import com.ruoyi.payment.api.model.WxPaymentRefundModel;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.logging.log4j.core.util.UuidUtil;
-import org.apache.poi.util.StringUtil;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.web.context.WebServerInitializedEvent;
 import org.springframework.context.ApplicationListener;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -64,6 +57,7 @@
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.concurrent.LinkedBlockingDeque;
 import java.util.concurrent.ThreadPoolExecutor;
@@ -80,6 +74,12 @@
 
     @Resource
     private TChargingBillService chargingBillService;
+
+    @Resource
+    private ITChargingSettlementBillService chargingSettlementBillService;
+
+    @Resource
+    private ITAccountSettlementStatementService accountSettlementStatementService;
     @Resource
     private SiteClient siteClient;
     @Resource
@@ -137,6 +137,23 @@
 
     @Resource
     private ChengDuJianGuanClient chengDuJianGuanClient;
+
+
+    @Scheduled(fixedRate = 1000 * 60)
+    public void taskOneMinutes() {
+        if(null != port && port == 5400){
+            List<TChargingOrder> upStatusChargingOrder = chargingOrderService.findUpStatusChargingOrder();
+            log.info("定时任务执行,查询需要手动修改状态的订单数量:{}", upStatusChargingOrder.size());
+            for (TChargingOrder order : upStatusChargingOrder) {
+                if(2 == order.getStatus()){
+                    order.setStatus(-1);
+                }else{
+                    order.setStatus(5);
+                }
+                chargingOrderService.updateById(order);
+            }
+        }
+    }
 
 
     //十分钟循环执行的定时任务
@@ -250,96 +267,16 @@
 
         }
     }
-    
 
-    @Scheduled(cron = "0 0 0 2 * ?")
+
+    //定时任务添加结算账单汇总数据
+    @Scheduled(cron = "0 30 0 * * ?")
     public void taskMonth() {
         if(null != port && port == 5400){
-            try {
-                // 获取上个月的开始和结束日期
-                LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
-                        withDayOfMonth(2);
-                String string = firstDayOfLastMonth.toString();
-                // 将-替换为空字符串
-                string = string.replace("-", "");
-                // 生成一次全站订单
-                TChargingBill tChargingBill = new TChargingBill();
-                // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置)
-                Random random = new Random();
-                String randomDigits = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
-                        .mapToObj(String::valueOf)
-                        .collect(Collectors.joining()); // 将其连接成一个字符串
-                tChargingBill.setCode("JSD"+string+randomDigits );
-                tChargingBill.setType(1);
-                tChargingBill.setSiteId(0);
-                tChargingBill.setBillTime(LocalDateTime.now());
-                tChargingBill.setStatus(1);
-                tChargingBill.setOrderState(2);
-                tChargingBill.setBillType(1);
-                System.err.println("定时任务生成充电算帐单:全站");
-                chargingBillService.save(tChargingBill);
-                // 生成一次全站订单
-                TChargingBill tChargingBill1 = new TChargingBill();
-                // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置)
-                Random random1 = new Random();
-                String randomDigits1 = random1.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
-                        .mapToObj(String::valueOf)
-                        .collect(Collectors.joining()); // 将其连接成一个字符串
-                tChargingBill1.setCode("JSD"+string+randomDigits1 );
-                tChargingBill1.setType(1);
-                tChargingBill1.setSiteId(0);
-                tChargingBill1.setBillTime(LocalDateTime.now());
-                tChargingBill1.setStatus(1);
-                tChargingBill1.setOrderState(2);
-                tChargingBill1.setBillType(2);
-                System.err.println("定时任务生成账户结算帐单:全站");
-                chargingBillService.save(tChargingBill1);
-                System.err.println("定时任务生成各个站点结算帐单");
-                List<Integer> collect = siteClient.getSiteAll().getData().stream().map(Site::getId).collect(Collectors.toList());
-                // 充电算帐单
-                List<TChargingBill> tChargingBills = new ArrayList<>();
-                // 账户结算账单
-                List<TChargingBill> tChargingBills1 = new ArrayList<>();
-                for (int i = 0; i < collect.size(); i++) {
-                    TChargingBill tChargingBill2 = new TChargingBill();
-                    Random random2 = new Random();
-                    String randomDigits2 = random2.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
-                            .mapToObj(String::valueOf)
-                            .collect(Collectors.joining()); // 将其连接成一个字符串
-                    tChargingBill2.setCode("JSD"+string+randomDigits2+(i+1) );
-                    tChargingBill2.setType(2);
-                    List<TChargingOrder> list = chargingOrderService.lambdaQuery()
-                            .eq(TChargingOrder::getSiteId, collect.get(i)).list();
-                    if (list.isEmpty()){
-                        continue;
-                    }
-                    tChargingBill2.setSiteId(collect.get(i));
-                    tChargingBill2.setBillTime(LocalDateTime.now());
-                    tChargingBill2.setBillType(1);
-                    tChargingBill2.setStatus(1);
-                    tChargingBill2.setOrderState(2);
-                    tChargingBills.add(tChargingBill2);
-                    TChargingBill tChargingBill3 = new TChargingBill();
-                    Random random3 = new Random();
-                    String randomDigits3 = random3.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
-                            .mapToObj(String::valueOf)
-                            .collect(Collectors.joining()); // 将其连接成一个字符串
-                    tChargingBill3.setCode("JSD"+string+randomDigits3+(i+1) );
-                    tChargingBill3.setType(2);
-                    tChargingBill3.setSiteId(collect.get(i));
-                    tChargingBill3.setBillTime(LocalDateTime.now());
-                    tChargingBill3.setBillType(2);
-                    tChargingBill3.setStatus(1);
-                    tChargingBill3.setOrderState(2);
-                    tChargingBills1.add(tChargingBill3);
-                }
-                System.err.println("列表"+tChargingBills);
-                if (!tChargingBills.isEmpty())chargingBillService.saveBatch(tChargingBills);
-                if (!tChargingBills1.isEmpty())chargingBillService.saveBatch(tChargingBills1);
-        
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
+            //添加充电算账单汇总数据
+            addChargingSettlementBill();
+            //添加账户结算账单数据
+            addAccountSettlementStatement();
         }
     }
 
@@ -348,31 +285,23 @@
     public void taskLastDay() {
         if(null != port && port == 5400){
             try {
-                // 获取上个月的开始和结束日期
-                LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
-                        withDayOfMonth(1);
-                LocalDate lastDayOfLastMonth = LocalDate.now().minusMonths(1).
-                        withDayOfMonth(firstDayOfLastMonth.lengthOfMonth());
-                // 将 LocalDate 转换为 LocalDateTime,并设定时间为一天的开始
-                LocalDateTime startDateTime = firstDayOfLastMonth.atStartOfDay();
-                LocalDateTime endDateTime = lastDayOfLastMonth.atTime(23, 59, 59); // 设定到最后一秒
-                // 构建查询条件
-                LambdaQueryWrapper<TChargingBill> queryWrapper = new LambdaQueryWrapper<>();
-                queryWrapper.ge(TChargingBill::getBillTime,
-                                Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()))
-                        .le(TChargingBill::getBillTime,
-                                Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant())); // 使用 le 包括最后一天的记录
-                List<TChargingBill> list = chargingBillService.list(queryWrapper);
-                for (TChargingBill tChargingBill : list) {
-                    tChargingBill.setStatus(2);
+                int dayOfMonth = LocalDate.now().getDayOfMonth();
+                int lastDayOfMonth = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+                //当月最后一天
+                if(dayOfMonth == lastDayOfMonth){
+                    //修改充电结算账单为已出账
+                    chargingSettlementBillService.update(new UpdateWrapper<TChargingSettlementBill>().set("status", 2).set("create_time", LocalDateTime.now()).eq("status", 1));
+                    //修改账户结算账单为已出账
+                    accountSettlementStatementService.update(new UpdateWrapper<TAccountSettlementStatement>().set("status", 2).set("create_time", LocalDateTime.now()).eq("status", 1));
                 }
-                chargingBillService.updateBatchById(list);
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
     }
-    
+
+
+
     @Override
     public void onApplicationEvent(WebServerInitializedEvent event) {
         port = event.getWebServer().getPort();
@@ -799,4 +728,226 @@
             chargingMessageClient.pushOrderStatus(chargingOrderVo);
         }
     }
+
+
+    /**
+     * 添加充电算账单汇总数据
+     */
+    public void addChargingSettlementBill(){
+        try {
+            int day = LocalDate.now().getDayOfMonth();
+            int lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+            //时间在当月的2号到当月的最后一天才执行汇总数据和生成新的汇总数据(中间有修改数据的情况)
+            if(2 <= day && day <= lastDay){
+                // 获取上个月的开始和结束日期
+                LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
+                        withDayOfMonth(2);
+                String string = firstDayOfLastMonth.toString();
+                // 将-替换为空字符串
+                string = string.replace("-", "");
+
+                //上个月
+                String lastMonth = LocalDate.now().minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM"));
+                //统计数据的开始时间
+                String startTime = lastMonth + "-01 00:00:00";
+                //统计数据的结束时间
+                int lasDay = LocalDate.now().minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+                String endTime = lastMonth + "-" + String.format("%02d", lasDay) + " 23:59:59";
+                LocalDateTime createTime = LocalDateTime.parse(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM")) + "-02 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+
+                //删除之前生成的汇总数据,在添加最新的汇总数据
+                String format = firstDayOfLastMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"));
+                chargingSettlementBillService.remove(new QueryWrapper<TChargingSettlementBill>().eq("status", 1).last(" and DATE_FORMAT(billing_cycle, '%Y-%m') = '" + format + "'"));
+
+                //循环生成按照开始时间和结束时间分别统计的汇总数据
+                for (int i = 1; i < 3; i++) {
+                    TChargingSettlementBill chargingSettlementBill = new TChargingSettlementBill();
+                    // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置)
+                    Random random = new Random();
+                    String randomDigits = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+                            .mapToObj(String::valueOf)
+                            .collect(Collectors.joining()); // 将其连接成一个字符串
+                    chargingSettlementBill.setSiteId(0);
+                    chargingSettlementBill.setStatisticalDateType(i);
+                    chargingSettlementBill.setBillingCycle(firstDayOfLastMonth);
+                    chargingSettlementBill.setStatus(1);
+                    chargingSettlementBill.setCode("JSD"+string+randomDigits);
+
+                    //根据业务订单查询汇总数据
+                    List<Map<String, Object>> mapList = chargingOrderService.getChargingSettlementBill(startTime, endTime, i);
+                    Long chargingDuration = 0L;
+                    Integer orderNumber = 0;
+                    BigDecimal totalAmount = BigDecimal.ZERO;
+                    BigDecimal platformFee = BigDecimal.ZERO;
+                    BigDecimal tripartiteCommission = BigDecimal.ZERO;
+                    BigDecimal fundsReceived = BigDecimal.ZERO;
+                    BigDecimal totalElectricity = BigDecimal.ZERO;
+                    BigDecimal totalElectricityCharge = BigDecimal.ZERO;
+                    BigDecimal totalServiceFee = BigDecimal.ZERO;
+                    BigDecimal couponDeduction = BigDecimal.ZERO;
+                    List<TChargingSettlementBill> list = new ArrayList<>();
+                    for (Map<String, Object> map : mapList) {
+                        Long charging_duration = null == map.get("chargingDuration") ? 0L : Long.valueOf(map.get("chargingDuration").toString());
+                        Integer order_number = null == map.get("orderNum") ? 0 : Integer.valueOf(map.get("orderNum").toString());
+                        BigDecimal total_amount = null == map.get("totalAmount") ? BigDecimal.ZERO : new BigDecimal(map.get("totalAmount").toString());
+                        BigDecimal platform_fee = null == map.get("platformFee") ? BigDecimal.ZERO : new BigDecimal(map.get("platformFee").toString());
+                        BigDecimal tripartite_commission = null == map.get("tripartiteCommission") ? BigDecimal.ZERO : new BigDecimal(map.get("tripartiteCommission").toString());
+                        BigDecimal funds_received = total_amount.subtract(platform_fee).subtract(tripartite_commission);
+                        BigDecimal total_electricity = null == map.get("totalElectricity") ? BigDecimal.ZERO : new BigDecimal(map.get("totalElectricity").toString());
+                        BigDecimal total_electricity_charge = null == map.get("totalElectricityCharge") ? BigDecimal.ZERO : new BigDecimal(map.get("totalElectricityCharge").toString());
+                        BigDecimal total_service_fee = null == map.get("totalServiceFee") ? BigDecimal.ZERO : new BigDecimal(map.get("totalServiceFee").toString());
+                        BigDecimal coupon_deduction = null == map.get("couponDeduction") ? BigDecimal.ZERO : new BigDecimal(map.get("couponDeduction").toString());
+                        //构建每个站点的汇总数据
+                        TChargingSettlementBill chargingSettlementBill1 = new TChargingSettlementBill();
+                        String randomDigits1 = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+                                .mapToObj(String::valueOf)
+                                .collect(Collectors.joining()); // 将其连接成一个字符串
+                        chargingSettlementBill1.setSiteId(Integer.valueOf(map.get("siteId").toString()));
+                        chargingSettlementBill1.setStatisticalDateType(i);
+                        chargingSettlementBill1.setBillingCycle(firstDayOfLastMonth);
+                        chargingSettlementBill1.setStatus(1);
+                        chargingSettlementBill1.setCode("JSD"+string+randomDigits1);
+                        chargingSettlementBill1.setChargingDuration(charging_duration);
+                        chargingSettlementBill1.setOrderNumber(order_number);
+                        chargingSettlementBill1.setTotalAmount(total_amount.setScale(2, RoundingMode.HALF_EVEN));
+                        chargingSettlementBill1.setCouponDeduction(coupon_deduction.setScale(2, RoundingMode.HALF_EVEN));
+                        chargingSettlementBill1.setPlatformFee(platform_fee.setScale(2, RoundingMode.HALF_EVEN));
+                        chargingSettlementBill1.setTripartiteCommission(tripartite_commission.setScale(2, RoundingMode.HALF_EVEN));
+                        chargingSettlementBill1.setFundsReceived(funds_received.setScale(2, RoundingMode.HALF_EVEN));
+                        chargingSettlementBill1.setTotalElectricity(total_electricity.setScale(4, RoundingMode.HALF_EVEN));
+                        chargingSettlementBill1.setTotalElectricityCharge(total_electricity_charge.setScale(2, RoundingMode.HALF_EVEN));
+                        chargingSettlementBill1.setTotalServiceFee(total_service_fee.setScale(2, RoundingMode.HALF_EVEN));
+                        chargingSettlementBill1.setCreateTime(createTime);
+                        list.add(chargingSettlementBill1);
+                        //计算全站汇总数据
+                        chargingDuration = chargingDuration + charging_duration;
+                        orderNumber = orderNumber + order_number;
+                        totalAmount = totalAmount.add(total_amount);
+                        platformFee = platformFee.add(platform_fee);
+                        tripartiteCommission = tripartiteCommission.add(tripartite_commission);
+                        fundsReceived = fundsReceived.add(funds_received);
+                        totalElectricity = totalElectricity.add(total_electricity);
+                        totalElectricityCharge = totalElectricityCharge.add(total_electricity_charge);
+                        totalServiceFee = totalServiceFee.add(total_service_fee);
+                        couponDeduction = couponDeduction.add(coupon_deduction);
+                    }
+
+                    chargingSettlementBill.setChargingDuration(chargingDuration);
+                    chargingSettlementBill.setOrderNumber(orderNumber);
+                    chargingSettlementBill.setTotalAmount(totalAmount.setScale(2, RoundingMode.HALF_EVEN));
+                    chargingSettlementBill.setCouponDeduction(couponDeduction.setScale(2, RoundingMode.HALF_EVEN));
+                    chargingSettlementBill.setPlatformFee(platformFee.setScale(2, RoundingMode.HALF_EVEN));
+                    chargingSettlementBill.setTripartiteCommission(tripartiteCommission.setScale(2, RoundingMode.HALF_EVEN));
+                    chargingSettlementBill.setFundsReceived(fundsReceived.setScale(2, RoundingMode.HALF_EVEN));
+                    chargingSettlementBill.setTotalElectricity(totalElectricity.setScale(4, RoundingMode.HALF_EVEN));
+                    chargingSettlementBill.setTotalElectricityCharge(totalElectricityCharge.setScale(2, RoundingMode.HALF_EVEN));
+                    chargingSettlementBill.setTotalServiceFee(totalServiceFee.setScale(2, RoundingMode.HALF_EVEN));
+                    chargingSettlementBill.setCreateTime(createTime);
+                    chargingSettlementBillService.save(chargingSettlementBill);
+                    chargingSettlementBillService.saveBatch(list);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+
+    /**
+     * 添加账户结算账单数据
+     */
+    public void addAccountSettlementStatement(){
+        try {
+            int day = LocalDate.now().getDayOfMonth();
+            int lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+            //时间在当月的2号到当月的最后一天才执行汇总数据和生成新的汇总数据(中间有修改数据的情况)
+            if(2 <= day && day <= lastDay){
+                // 获取上个月的开始和结束日期
+                LocalDate firstDayOfLastMonth = LocalDate.now().minusMonths(1).
+                        withDayOfMonth(2);
+                String string = firstDayOfLastMonth.toString();
+                // 将-替换为空字符串
+                string = string.replace("-", "");
+
+                //上个月
+                String lastMonth = LocalDate.now().minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM"));
+                //统计数据的开始时间
+                String startTime = lastMonth + "-01 00:00:00";
+                //统计数据的结束时间
+                int lasDay = LocalDate.now().minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+                String endTime = lastMonth + "-" + String.format("%02d", lasDay) + " 23:59:59";
+                LocalDateTime createTime = LocalDateTime.parse(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM")) + "-02 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+
+                //删除之前生成的汇总数据,在添加最新的汇总数据
+                String format = firstDayOfLastMonth.format(DateTimeFormatter.ofPattern("yyyy-MM"));
+                accountSettlementStatementService.remove(new QueryWrapper<TAccountSettlementStatement>().eq("status", 1).last(" and DATE_FORMAT(billing_cycle, '%Y-%m') = '" + format + "'"));
+
+                //循环生成账户类型分别统计的汇总数据
+                for (int i = 1; i < 3; i++) {
+                    TAccountSettlementStatement accountSettlementStatement = new TAccountSettlementStatement();
+                    // 订单生成规则JSD+20231201(账单所属月份)+1131304205(随机10位数)+001(当月账单序号,每月重置)
+                    Random random = new Random();
+                    String randomDigits = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+                            .mapToObj(String::valueOf)
+                            .collect(Collectors.joining()); // 将其连接成一个字符串
+                    accountSettlementStatement.setSiteId(0);
+                    accountSettlementStatement.setAccountType(i);
+                    accountSettlementStatement.setBillingCycle(firstDayOfLastMonth);
+                    accountSettlementStatement.setStatus(1);
+                    accountSettlementStatement.setCode("JSD"+string+randomDigits);
+
+                    //根据业务订单查询汇总数据
+                    List<Map<String, Object>> mapList = chargingOrderService.getAccountSettlementStatement(startTime, endTime, i);
+                    BigDecimal rechargeAmount = BigDecimal.ZERO;
+                    BigDecimal refundAmount = BigDecimal.ZERO;
+                    BigDecimal platformFee = BigDecimal.ZERO;
+                    BigDecimal tripartiteCommission = BigDecimal.ZERO;
+                    BigDecimal recordedAmount = BigDecimal.ZERO;
+                    List<TAccountSettlementStatement> list = new ArrayList<>();
+                    for (Map<String, Object> map : mapList) {
+                        BigDecimal recharge_amount = null == map.get("rechargeAmount") ? BigDecimal.ZERO : new BigDecimal(map.get("rechargeAmount").toString());
+                        BigDecimal refund_amount = null == map.get("refundAmount") ? BigDecimal.ZERO : new BigDecimal(map.get("refundAmount").toString());
+                        BigDecimal platform_fee = null == map.get("platformFee") ? BigDecimal.ZERO : new BigDecimal(map.get("platformFee").toString());
+                        BigDecimal tripartite_commission = null == map.get("tripartiteCommission") ? BigDecimal.ZERO : new BigDecimal(map.get("tripartiteCommission").toString());
+                        BigDecimal recorded_amount = recharge_amount.subtract(refund_amount).subtract(platform_fee).subtract(tripartite_commission);
+                        //构建每个站点的汇总数据
+                        TAccountSettlementStatement accountSettlementStatement1 = new TAccountSettlementStatement();
+                        String randomDigits1 = random.ints(10, 0, 10) // 生成10个随机数字,范围在0-9
+                                .mapToObj(String::valueOf)
+                                .collect(Collectors.joining()); // 将其连接成一个字符串
+                        accountSettlementStatement1.setSiteId(Integer.valueOf(map.get("siteId").toString()));
+                        accountSettlementStatement1.setAccountType(i);
+                        accountSettlementStatement1.setBillingCycle(firstDayOfLastMonth);
+                        accountSettlementStatement1.setStatus(1);
+                        accountSettlementStatement1.setCode("JSD"+string+randomDigits1);
+                        accountSettlementStatement1.setRechargeAmount(recharge_amount.setScale(2, RoundingMode.HALF_EVEN));
+                        accountSettlementStatement1.setRefundAmount(refund_amount.setScale(2, RoundingMode.HALF_EVEN));
+                        accountSettlementStatement1.setPlatformFee(platform_fee.setScale(2, RoundingMode.HALF_EVEN));
+                        accountSettlementStatement1.setTripartiteCommission(tripartite_commission.setScale(2, RoundingMode.HALF_EVEN));
+                        accountSettlementStatement1.setRecordedAmount(recorded_amount.setScale(2, RoundingMode.HALF_EVEN));
+                        accountSettlementStatement1.setCreateTime(createTime);
+                        list.add(accountSettlementStatement1);
+                        //计算全站汇总数据
+                        rechargeAmount = rechargeAmount.add(recharge_amount);
+                        refundAmount = refundAmount.add(refund_amount);
+                        platformFee = platformFee.add(platform_fee);
+                        tripartiteCommission = tripartiteCommission.add(tripartite_commission);
+                        recordedAmount = recordedAmount.add(recorded_amount);
+                    }
+
+                    accountSettlementStatement.setRechargeAmount(rechargeAmount.setScale(2, RoundingMode.HALF_EVEN));
+                    accountSettlementStatement.setRefundAmount(refundAmount.setScale(2, RoundingMode.HALF_EVEN));
+                    accountSettlementStatement.setPlatformFee(platformFee.setScale(2, RoundingMode.HALF_EVEN));
+                    accountSettlementStatement.setTripartiteCommission(tripartiteCommission.setScale(2, RoundingMode.HALF_EVEN));
+                    accountSettlementStatement.setRecordedAmount(recordedAmount.setScale(2, RoundingMode.HALF_EVEN));
+                    accountSettlementStatement.setCreateTime(createTime);
+                    accountSettlementStatementService.save(accountSettlementStatement);
+                    accountSettlementStatementService.saveBatch(list);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TAccountSettlementStatementMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TAccountSettlementStatementMapper.xml
new file mode 100644
index 0000000..2d66002
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TAccountSettlementStatementMapper.xml
@@ -0,0 +1,6 @@
+<?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.TAccountSettlementStatementMapper">
+
+
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
index 81c0d09..bef8982 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -1039,6 +1039,7 @@
         select
         aa.id,
         aa.`code`,
+        aa.siteId,
         aa.siteName,
         aa.orderType,
         aa.terminalName,
@@ -1069,6 +1070,7 @@
             select
             b.id,
             b.`code`,
+            b.site_id as siteId,
             c.`name` as siteName,
             b.order_type as orderType,
             CONCAT(d.`name`, '-', e.`name`) as terminalName,
@@ -1143,7 +1145,7 @@
                 and (b.end_time between #{endTime1} and #{endTime2})
             </if>
             and b.start_time IS NOT NULL
-        ) as aa group by aa.id, aa.`code`, aa.siteName, aa.orderType, aa.terminalName, aa.electricity, aa.rechargeAmount, aa.paymentAmount, aa.electrovalence, aa.serviceCharge, aa.tripartitePlatformName,
+        ) as aa group by aa.id, aa.`code`, aa.siteId, aa.siteName, aa.orderType, aa.terminalName, aa.electricity, aa.rechargeAmount, aa.paymentAmount, aa.electrovalence, aa.serviceCharge, aa.tripartitePlatformName,
         aa.startTime, aa.endTime, aa.chargingSecond, aa.startSoc, aa.endSoc, aa.`status`, aa.endMode, aa.phone, aa.licensePlate, aa.orderSource, aa.rechargePaymentType order by aa.startTime desc
     </select>
 
@@ -1930,67 +1932,68 @@
 
     <select id="chargingOrderNolimit" resultType="map">
         select
-        sum(aa.electricity) as total,
-        sum(aa.charging_time) as `time`,
-        sum(aa.charging_amount) as paymentMoney,
-        sum(aa.period_electric_price) as electronicMoney,
-        sum(aa.period_service_price) as serviceMoney
+        sum(aa.time) as `time`,
+        sum(aa.income) as income,
+        sum(aa.electronicMoney) as electronicMoney,
+        sum(aa.serviceMoney) as serviceMoney,
+        sum(aa.total) as total
         from (
             select
-            ifnull(a.electricity, 0) as electricity,
-            UNIX_TIMESTAMP(ifnull(a.end_time, now())) - UNIX_TIMESTAMP(ifnull(a.start_time, now())) as charging_time,
-            ifnull(a.recharge_amount - b.refund_amount, 0) as charging_amount,
-            ifnull(c.period_electric_price, 0) as period_electric_price,
-            ifnull(c.period_service_price, 0) as period_service_price
-            from t_charging_order a
-            left join (select charging_order_id, sum(refund_amount) as refund_amount from t_charging_order_refund where refund_status = 2 group by charging_order_id) b on (a.id = b.charging_order_id)
-            left join (select charging_order_id, sum(period_electric_price) as period_electric_price, sum(period_service_price) as period_service_price from t_charging_order_accounting_strategy group by charging_order_id) c on (a.id = c.charging_order_id)
-            where a.del_flag = 0
+            b.id,
+            (UNIX_TIMESTAMP(b.end_time) - UNIX_TIMESTAMP(b.start_time)) as time,
+            sum(a.charging_capacity) as total,
+            sum(a.period_electric_price) as  electronicMoney,
+            sum(a.period_service_price) as serviceMoney,
+            sum(a.period_electric_price + (CASE WHEN b.order_source = 1 THEN a.period_service_price ELSE a.period_service_price * 0.8 END)) as income
+            from `charging_pile_order`.t_charging_order_accounting_strategy a
+            left join `charging_pile_order`.t_charging_order b on (a.charging_order_id = b.id)
+            where b.del_flag = 0
             <if test="null != req.code and req.code!=''">
-                and a.code LIKE CONCAT('%',#{req.code},'%')
+                and b.code LIKE CONCAT('%',#{req.code},'%')
             </if>
             <if test="null != req.userIds and req.userIds.size()>0">
-                and a.app_user_id in
+                and b.app_user_id in
                 <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
                 </foreach>
             </if>
             <if test="null != req.siteIds and req.siteIds.size()>0">
-                and a.site_id in
+                and b.site_id in
                 <foreach collection="req.siteIds" item="item" index="index" separator="," open="(" close=")">
                     #{item}
                 </foreach>
             </if>
             <if test="req.orderType != null ">
-                and a.order_type = #{req.orderType}
+                and b.order_type = #{req.orderType}
             </if>
             <if test="req.status != null ">
-                and a.status = #{req.status}
+                and b.status = #{req.status}
             </if>
             <if test="req.orderSource != null and req.orderSource == 1 ">
-                and (a.order_source = 0 or a.order_source = 1 )
+                and (b.order_source = 0 or b.order_source = 1 )
             </if>
             <if test="req.orderSource != null and req.orderSource == 2 ">
-                and a.tripartite_platform_name = 'KuaiDian'
+                and b.tripartite_platform_name = 'KuaiDian'
             </if>
             <if test="req.orderSource != null and req.orderSource == 3 ">
-                and a.tripartite_platform_name = 'XinDianTu'
+                and b.tripartite_platform_name = 'XinDianTu'
             </if>
             <if test="req.siteId != null ">
-                and a.site_id = #{req.siteId}
+                and b.site_id = #{req.siteId}
             </if>
             <if test="req.pileId != null ">
-                and a.charging_pile_id = #{req.pileId}
+                and b.charging_pile_id = #{req.pileId}
             </if>
             <if test="req.gunId != null ">
-                and a.charging_gun_id = #{req.gunId}
+                and b.charging_gun_id = #{req.gunId}
             </if>
             <if test="startTime1 != null and startTime1!=''">
-                and (a.start_time between #{startTime1} and #{startTime2})
+                and (b.start_time between #{startTime1} and #{startTime2})
             </if>
             <if test="endTime1 != null and endTime1!=''">
-                and (a.end_time between #{endTime1} and #{endTime2})
+                and (b.end_time between #{endTime1} and #{endTime2})
             </if>
+            group by b.id,time
         ) as aa
     </select>
 
@@ -2090,4 +2093,81 @@
         FROM
         t_charging_order_refund)
     </select>
+
+
+    <select id="findUpStatusChargingOrder" resultType="com.ruoyi.order.api.model.TChargingOrder">
+        select * from t_charging_order where `status` in (2, 3, 4) and id IN (
+        SELECT
+        charging_order_id
+        FROM
+        t_charging_order_refund)
+    </select>
+
+
+
+
+
+    <select id="getChargingSettlementBill" resultType="map">
+        select
+        aa.siteId,
+        count(aa.orderId) as orderNum,
+        sum(aa.chargingDuration) as chargingDuration,
+        sum(aa.totalAmount) as totalAmount,
+        sum(aa.couponDeduction) as couponDeduction,
+        sum(aa.platformFee) as platformFee,
+        SUM(aa.tripartiteCommission) as tripartiteCommission,
+        sum(aa.totalElectricity) as totalElectricity,
+        sum(aa.totalElectricityCharge) as totalElectricityCharge,
+        sum(aa.totalServiceFee) as totalServiceFee
+        from (
+            select
+            b.id as orderId,
+            b.site_id as siteId,
+            UNIX_TIMESTAMP(b.end_time) - UNIX_TIMESTAMP(b.start_time) as chargingDuration,
+            b.payment_amount as totalAmount,
+            b.coupon_discount_amount as couponDeduction,
+            (CASE WHEN b.order_source != 2 THEN b.recharge_amount * 0.006 ELSE 0 END) as platformFee,
+            sum((CASE WHEN b.order_source = 2 THEN a.period_service_price * 0.2 ELSE 0 END)) as tripartiteCommission,
+            sum(a.charging_capacity) as totalElectricity,
+            sum(a.period_electric_price) as totalElectricityCharge,
+            sum(a.period_service_price) as totalServiceFee
+            from `charging_pile_order`.t_charging_order_accounting_strategy a
+            left join `charging_pile_order`.t_charging_order b on (a.charging_order_id = b.id)
+            where b.`status` = 5 and b.del_flag = 0
+            <if test="null != dateType and 1 == dateType">
+                and b.start_time between #{startTime} and #{endTime}
+            </if>
+            <if test="null != dateType and 2 == dateType">
+                and b.end_time between #{startTime} and #{endTime}
+            </if>
+            group by orderId,siteId, chargingDuration, totalAmount, couponDeduction, platformFee
+        ) as aa group by aa.siteId order by aa.siteId
+    </select>
+
+
+
+    <select id="getAccountSettlementStatement" resultType="map">
+        select
+        aa.site_id as siteId,
+        aa.recharge_payment_type as rechargePaymentType,
+        sum(aa.recharge_amount) as rechargeAmount,
+        sum(aa.refund_amount) as refundAmount,
+        sum(aa.platformFee) as platformFee,
+        sum(aa.tripartiteCommission) as tripartiteCommission
+        from (
+            select
+            b.id as orderId,
+            b.recharge_payment_type,
+            b.site_id,
+            b.recharge_amount,
+            ifnull(c.refund_amount, 0) as refund_amount,
+            (CASE WHEN b.order_source != 2 THEN b.recharge_amount * 0.006 ELSE 0 END) as platformFee,
+            sum((CASE WHEN b.order_source = 2 THEN a.period_service_price * 0.2 ELSE 0 END)) as tripartiteCommission
+            from t_charging_order_accounting_strategy a
+            left join t_charging_order b on (a.charging_order_id = b.id)
+            left join t_charging_order_refund c on (b.id = c.charging_order_id)
+            where b.`status` = 5 and b.del_flag = 0 and b.recharge_payment_type = #{rechargePaymentType} and b.start_time between #{startTime} and #{endTime}
+            group by orderId,recharge_payment_type,site_id,recharge_amount,refund_amount,platformFee
+        ) as aa group by aa.site_id,aa.recharge_payment_type order by aa.site_id
+    </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingSettlementBillMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingSettlementBillMapper.xml
new file mode 100644
index 0000000..bd21d02
--- /dev/null
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingSettlementBillMapper.xml
@@ -0,0 +1,82 @@
+<?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.TChargingSettlementBillMapper">
+
+    <select id="queryList" resultType="map">
+        select
+        a.*,
+        b.`name` as siteName,
+        DATE_FORMAT(a.billing_cycle, '%Y-%m') as billingCycle,
+        DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%i:%s') as createTime
+        from `charging_pile_order`.t_charging_settlement_bill a
+        left join `charging_pile_service`.t_site b on (a.site_id = b.id)
+        <where>
+            <if test="null != type and 1 == type">
+                and a.site_id = 0
+            </if>
+            <if test="null != type and 2 == type">
+                and a.site_id != 0
+            </if>
+            <if test="null != status">
+                and a.`status` = #{status}
+            </if>
+            <if test="null != statisticalDateType">
+                and a.statistical_date_type = #{statisticalDateType}
+            </if>
+            <if test="null != dateRange and dateRange.size() > 0">
+                and DATE_FORMAT(a.billing_cycle, '%Y-%m') in
+                <foreach collection="dateRange" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="null != siteIds and siteIds.size() > 0">
+                and a.site_id in
+                <foreach collection="siteIds" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        order by a.site_id
+    </select>
+
+
+    <select id="queryListSum" resultType="map">
+        select
+        sum(total_electricity) as totalElectricity,
+        sum(funds_received) as fundsReceived,
+        sum(total_amount) as totalAmount,
+        sum(total_electricity_charge) as totalElectricityCharge,
+        sum(total_service_fee) as totalServiceFee,
+        sum(platform_fee) as platformFee,
+        sum(tripartite_commission) as tripartiteCommission,
+        sum(order_number) as orderNumber,
+        sum(coupon_deduction) as couponDeduction
+        from t_charging_settlement_bill
+        <where>
+            <if test="null != type and 1 == type">
+                and site_id = 0
+            </if>
+            <if test="null != type and 2 == type">
+                and site_id != 0
+            </if>
+            <if test="null != status">
+                and `status` = #{status}
+            </if>
+            <if test="null != statisticalDateType">
+                and statistical_date_type = #{statisticalDateType}
+            </if>
+            <if test="null != dateRange and dateRange.size() > 0">
+                and DATE_FORMAT(billing_cycle, '%Y-%m') in
+                <foreach collection="dateRange" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="null != siteIds and siteIds.size() > 0">
+                and site_id in
+                <foreach collection="siteIds" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
index 24be986..5754f3b 100644
--- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
+++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.payment.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
@@ -174,8 +175,8 @@
     @PostMapping("refund/notify")
     public void refundNotify(HttpServletRequest request) throws IOException {
         try {
-            Map<String, Object> params = wxV3Pay.verifyNotify(request, new TypeReference<Map<String, Object>>() {
-            });
+            Map<String, Object> params = wxV3Pay.verifyNotify(request, new TypeReference<Map<String, Object>>() {});
+            log.info("退款结果回调:{}", JSON.toJSONString(params));
             // 商户订单号
             String out_trade_no = params.get("out_trade_no").toString();
             // 商户退款单号

--
Gitblit v1.7.1