From 68cdd1ca0cf5dbc1f61cdc2a633b36473eccad2d Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期一, 28 十月 2024 11:05:02 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java                      |    4 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java                                    |   56 +++++-
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java                                     |   24 +-
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java                                              |   12 +
 ruoyi-service/ruoyi-chargingPile/src/main/resources/template/运营商名称1-充电桩名称1-结算对账单明细-结算月份1.xlsx                                          |    0 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementExportVO.java                                                 |  107 +++++++++++++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java                                         |   14 +
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java                     |  205 ++++++++++++++++++++++++-
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java                                  |    4 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java                                                  |    4 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/PageChargingOrderAndUploadRealTimeMonitoringDataDto.java |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java                                       |    2 
 12 files changed, 395 insertions(+), 39 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/PageChargingOrderAndUploadRealTimeMonitoringDataDto.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/PageChargingOrderAndUploadRealTimeMonitoringDataDto.java
index 1416c44..7057e39 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/PageChargingOrderAndUploadRealTimeMonitoringDataDto.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/PageChargingOrderAndUploadRealTimeMonitoringDataDto.java
@@ -17,7 +17,7 @@
 public class PageChargingOrderAndUploadRealTimeMonitoringDataDto extends BaseModel {
 
     private List<ChargingOrderAndUploadRealTimeMonitoringDataDto> records;
-    private Long count;
+    private Long total;
 
 
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
index c029cb1..5c6b7a4 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
@@ -31,6 +31,9 @@
     @ApiModelProperty(value = "主键")
     @TableId(value = "id", type = IdType.NONE)
     private Long id;
+    @ApiModelProperty(value = "序号")
+    @TableField(exist = false)
+    private Integer xuhao;
 
     @ApiModelProperty(value = "订单编号")
     @TableField("code")
@@ -69,6 +72,7 @@
     @TableField("site_id")
     private Integer siteId;
 
+
     @ApiModelProperty(value = "停车场id")
     @TableField("parking_lot_id")
     private Integer parkingLotId;
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
index 06c7c6e..ba76c18 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
@@ -47,6 +47,9 @@
     @ApiModelProperty(value = "结算服务费备注")
     @TableField("service_remark")
     private String serviceRemark;
+    @ApiModelProperty(value = "电费结算方编码")
+    @TableField("confirm_code")
+    private String confirmCode;
 
     @ApiModelProperty(value = "计量电量(电量合计)")
     @TableField("metering_electronic")
@@ -107,6 +110,12 @@
     @ApiModelProperty(value = "合作商充电服务费根据合同约定分成比例")
     @TableField("service_partner")
     private BigDecimal servicePartner;
+    @ApiModelProperty(value = "合作商充电服务费根据合同约定分成比例")
+    @TableField(exist = false)
+    private String servicePartnerString;
+    @ApiModelProperty(value = "平台充电服务费根据合同约定分成比例")
+    @TableField(exist = false)
+    private String platformString;
     @ApiModelProperty(value = "合作商充电服务费根据合同约定分成金额")
     @TableField("service_money")
     private BigDecimal serviceMoney;
@@ -147,6 +156,9 @@
     @ApiModelProperty(value = "站点名称")
     @TableField(exist = false)
     private String siteName;
+    @ApiModelProperty(value = "服务费:合计可分配金额")
+    @TableField(exist = false)
+    private String serviceChargeTotal;
     @ApiModelProperty(value = "合作商名称")
     @TableField(exist = false)
     private String partnerName;
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementExportVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementExportVO.java
new file mode 100644
index 0000000..bcf7852
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementExportVO.java
@@ -0,0 +1,107 @@
+package com.ruoyi.order.api.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.order.api.model.TChargingOrder;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "SettlementExportVO对象", description = "结算下载导出信息")
+public class SettlementExportVO extends TChargingOrder {
+
+    @ApiModelProperty(value = "站点编号")
+    private String siteCode;
+    @ApiModelProperty(value = "站点名称")
+    private String siteName;
+    @ApiModelProperty(value = "终端名称")
+    private String name;
+    @ApiModelProperty(value = "所属城市")
+    private String city;
+    @ApiModelProperty(value = "所属市区")
+    private String districts;
+    @ApiModelProperty(value = "所属合作商")
+    private String partnerName;
+    @ApiModelProperty(value = "电站类型")
+    private String siteType;
+    @ApiModelProperty(value = "售电模式")
+    private String electronicType;
+    @ApiModelProperty(value = "站点状态")
+    private String siteStatus;
+    @ApiModelProperty(value = "运营类型")
+    private String businessCategory;
+    @ApiModelProperty(value = "计费策略")
+    private String accountingStrategy;
+    @ApiModelProperty(value = "收款方式")
+    private String payTypeName;
+    @ApiModelProperty(value = "订单创建时间")
+    private String createTime1;
+    @ApiModelProperty(value = "充电开始时间")
+    private String startTime1;
+    @ApiModelProperty(value = "充电结束时间")
+    private String endTime1;
+    @ApiModelProperty(value = "订单状态")
+    private String statusName;
+    @ApiModelProperty(value = "订单类型")
+    private String orderTypeName;
+    @ApiModelProperty(value = "充电形式")
+    private String chargingType;
+    @ApiModelProperty(value = "充电结束账号")
+    private String phone;
+    @ApiModelProperty(value = "是否免费订单")
+    private String isFree;
+    @ApiModelProperty(value = "平均电费单价")
+    private String averageElectronic;
+    @ApiModelProperty(value = "平均服务费实际单价")
+    private String averageServiceChargeReal;
+    @ApiModelProperty(value = "平均服务费挂牌单价")
+    private String averageServiceCharge;
+
+    @ApiModelProperty(value = "充电时长(分钟)")
+    private String chargingSecond;
+    @ApiModelProperty(value = "充电前soc")
+    private String startSoc;
+    @ApiModelProperty(value = "充电后soc")
+    private String endSoc;
+    @ApiModelProperty(value = "是否限制SOC")
+    private String isSoc;
+    @ApiModelProperty(value = "限制SOC方式")
+    private String socType;
+    @ApiModelProperty(value = "限制Soc值")
+    private String socValue;
+    @ApiModelProperty(value = "客户类型")
+    private String userType;
+    @ApiModelProperty(value = "会员类型")
+    private String vipType;
+    @ApiModelProperty(value = "是否PLUS订单")
+    private String isPlus;
+    @ApiModelProperty(value = "客户编号")
+    private String userCode;
+    @ApiModelProperty(value = "真实姓名")
+    private String realName;
+    @ApiModelProperty(value = "设备号")
+    private String deviceCode;
+    @ApiModelProperty(value = "手机号")
+    private String userPhone;
+    @ApiModelProperty(value = "车牌号")
+    private String licensePlate;
+    @ApiModelProperty(value = "选择车型")
+    private String vehicleModel;
+    @ApiModelProperty(value = "车辆品牌")
+    private String vehicleBrand;
+
+    @ApiModelProperty(value = "电费结算方编码")
+    private String confirmCode;
+    @ApiModelProperty(value = "电费结算方法名称(管理公司)")
+    private String companyName;
+    @ApiModelProperty(value = "计费方式")
+    private String moneyType;
+    @ApiModelProperty(value = "设备接入方式")
+    private String deviceType;
+    @ApiModelProperty(value = "预支付类型")
+    private String beforePayType;
+    @ApiModelProperty(value = "是否安全防护订单")
+    private String isSafe;
+}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
index 4170703..8c10da3 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -2,18 +2,25 @@
 import java.time.LocalDateTime;
 import java.math.BigDecimal;
 
+import com.ruoyi.account.api.feignClient.AppUserCarClient;
+import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppUser;
+import com.ruoyi.account.api.model.TAppUserCar;
+import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
 import com.ruoyi.chargingPile.api.model.Partner;
 import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.chargingPile.api.model.TChargingGun;
 import com.ruoyi.common.core.utils.WebUtils;
 import com.ruoyi.common.core.web.domain.BasePojo;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
+import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.order.api.model.ExportUidDto;
 import com.ruoyi.order.api.feignClient.OrderClient;
 import com.ruoyi.order.api.model.TChargingOrder;
 import com.ruoyi.order.api.model.TSettlementConfirm;
-import com.ruoyi.order.api.vo.AccountListVO;
-import com.ruoyi.order.api.vo.ChargingBillListVO;
+import com.ruoyi.order.api.vo.*;
 
 
 import com.alibaba.excel.EasyExcel;
@@ -45,8 +52,8 @@
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import com.ruoyi.order.api.model.ChargingListQuery;
-import com.ruoyi.order.api.vo.ChargingBillVO;
-import com.ruoyi.order.api.vo.SettlementTotalVO;
+import com.ruoyi.other.api.feignClient.OtherClient;
+import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.codec.CharEncoding;
 import org.springframework.beans.BeanUtils;
@@ -61,11 +68,10 @@
 import java.net.URL;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -88,6 +94,12 @@
     private OrderClient orderClient;
     @Resource
     private SiteClient siteClient;
+    @Resource
+    private ChargingGunClient chargingGunClient;
+    @Resource
+    private AppUserClient appUserClient;
+    @Resource
+    private AppUserCarClient appUserCarClient;
 
     @Autowired
     public TApplyChargingPileController(TApplyChargingPileService applyChargingPileService, TokenService tokenService, RedisService redisService) {
@@ -366,12 +378,186 @@
         }
         return R.ok();
     }
+    @Resource
+    private OtherClient otherClient;
+    @Resource
+    private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
     @ApiOperation(value = "下载", tags = {"管理后台-结算表记录"})
     @PutMapping("/downloadSettlement")
     @Log(title = "【结算表记录】下载结算表", businessType = BusinessType.EXPORT)
     public R downloadSettlement(@RequestBody ExportUidDto uid,HttpServletResponse response)
     {
         TSettlementConfirm data = chargingOrderClient.downloadSettlement(uid.getUid()).getData();
+        for (TChargingOrder chargingOrder : data.getList()) {
+            SettlementExportVO settlementExportVO = new SettlementExportVO();
+
+            BeanUtils.copyProperties(data, settlementExportVO);
+            List<Site> data3 = siteClient.getSiteByIds(Arrays.asList(data.getSiteId())).getData();
+            if (data3!=null && (!data3.isEmpty())){
+                TAppUser data4 = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
+                if (data4.getVipId()== null ){
+                    settlementExportVO.setVipType("非会员");
+                }else{
+                    List<Integer> vipIds = new ArrayList<>();
+                    //获取会员map
+                    R<Map<Integer, String>> vipMap = otherClient.getVipMap(vipIds);
+                    settlementExportVO.setVipType(vipMap.getData().get(data4.getVipId()));
+                }
+                settlementExportVO.setPhone(data4.getPhone());
+                settlementExportVO.setRealName(data4.getName());
+                if (chargingOrder.getAppUserCarId()!=null){
+                    List<TAppUserCar> data5 = appUserCarClient.getCarByIds(Arrays.asList(chargingOrder.getAppUserCarId())).getData();
+                    if (!data5.isEmpty()){
+                        settlementExportVO.setLicensePlate(data5.get(0).getLicensePlate());
+                        settlementExportVO.setVehicleModel(data5.get(0).getVehicleModel());
+                        settlementExportVO.setVehicleBrand(data5.get(0).getVehicleBrand());
+                    }
+
+                }
+                settlementExportVO.setSiteCode(data3.get(0).getCode());
+                settlementExportVO.setSiteName(data3.get(0).getName());
+                settlementExportVO.setCity(data3.get(0).getCity());
+                settlementExportVO.setDistricts(data3.get(0).getDistricts());
+                Partner data1 = siteClient.getPartnerR(data3.get(0).getPartnerId()).getData();
+                if (data1!=null){
+                    settlementExportVO.setPartnerName(data1.getName());
+                }
+                switch (data3.get(0).getSiteType()){
+                    case 0:
+                        settlementExportVO.setSiteType("其他");
+                        break;
+                    case 1:
+                        settlementExportVO.setSiteType("公共");
+                        break;
+                    case 2:
+                        settlementExportVO.setSiteType("个人");
+                        break;
+                    case 3:
+                        settlementExportVO.setSiteType("公交(专业)");
+                        break;
+                    case 4:
+                        settlementExportVO.setSiteType("环卫(专用)");
+                        break;
+                    case 5:
+                        settlementExportVO.setSiteType("物流(专用)");
+                        break;
+                    case 6:
+                        settlementExportVO.setSiteType("出租车(专用)");
+                        break;
+                }
+                switch (data3.get(0).getStatus()){
+                    case 1:
+                        settlementExportVO.setSiteStatus("正常使用");
+                        break;
+                    case 2:
+                        settlementExportVO.setSiteStatus("维修中");
+                        break;
+                    case 3:
+                        settlementExportVO.setSiteStatus("关闭下线");
+                        break;
+                }
+                switch (data3.get(0).getBusinessCategory()){
+                    case 1:
+                        settlementExportVO.setBusinessCategory("直营");
+                        break;
+                    case 2:
+                        settlementExportVO.setBusinessCategory("非直营");
+                        break;
+                }
+                // todo 查询站点计费策略名称
+//            settlementExportVO.setAccountingStrategy();
+
+
+            }
+            TChargingGun data4 = chargingGunClient.getChargingGunById(settlementExportVO.getChargingGunId())
+                    .getData();
+            if (data4!=null){
+                settlementExportVO.setName(data4.getName());
+                settlementExportVO.setDeviceCode(data4.getCode());
+            }
+
+            settlementExportVO.setElectronicType("转售");
+            settlementExportVO.setPayTypeName("线上结算");
+            LocalDateTime createTime = settlementExportVO.getCreateTime();
+            LocalDateTime startTime = settlementExportVO.getStartTime();
+            LocalDateTime endTime = settlementExportVO.getEndTime();
+            settlementExportVO.setCreateTime1(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            settlementExportVO.setStartTime1(startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            settlementExportVO.setEndTime1(endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            switch (settlementExportVO.getStatus()){
+                case 0:
+                    settlementExportVO.setStatusName("未知");
+                    break;
+                case 1:
+                    settlementExportVO.setStatusName("等待中/已插枪");
+                    break;
+                case 2:
+                    settlementExportVO.setStatusName("启动中");
+                    break;
+                case 3:
+                    settlementExportVO.setStatusName("充电中");
+                    break;
+                case 4:
+                    settlementExportVO.setStatusName("停止中");
+                    break;
+                case 5:
+                    settlementExportVO.setStatusName("已结束");
+                    break;
+
+            }
+            settlementExportVO.setOrderTypeName("充电订单");
+            settlementExportVO.setChargingType("单桩双充");
+            settlementExportVO.setIsFree("否");
+            settlementExportVO.setAverageElectronic("");
+            settlementExportVO.setAverageServiceChargeReal("");
+            settlementExportVO.setAverageServiceCharge("");
+            // 获取充电时间
+            UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrder.getCode()).getData();
+            if (data5!=null){
+                if (data5.getCumulative_charging_time()!=null){
+                    settlementExportVO.setChargingSecond(data5.getCumulative_charging_time()+"");
+
+                }
+            }
+            // 获取开始SOC 结束soc
+            if (chargingOrder.getCode()!=null){
+                List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
+                if (data6!=null && !data6.isEmpty()){
+                    // 第一条数据soc为开始 最后一条数据soc为结束soc
+                    settlementExportVO.setStartSoc(data6.get(0).getSoc()+"%");
+                    settlementExportVO.setEndSoc(data6.get(data6.size()-1).getSoc()+"%");
+                }
+            }
+            settlementExportVO.setIsSoc("否");
+            settlementExportVO.setSocType("");
+            settlementExportVO.setSocValue("");
+            settlementExportVO.setUserType("普通个人用户");
+
+            if (chargingOrder.getVipDiscountAmount()!=null && chargingOrder.getVipDiscountAmount().compareTo(BigDecimal.ZERO)>0){
+                settlementExportVO.setIsPlus("是");
+
+            }else {
+                settlementExportVO.setIsPlus("否");
+
+            }
+            settlementExportVO.setUserCode("");
+
+
+            settlementExportVO.setConfirmCode(data.getConfirmCode());
+            settlementExportVO.setCompanyName("四川明星新能源有限科技公司");
+            settlementExportVO.setMoneyType("线上计费");
+            settlementExportVO.setDeviceType("设备直连(自由集控)");
+            settlementExportVO.setBeforePayType("先付后退");
+            settlementExportVO.setIsSafe("是");
+            // 顶部合计数据
+            data.setServiceChargeTotal(data.getServiceCharge().add(data.getVenue())
+                    .add(data.getVenue()).add(data.getMaintain()).add(data.getClean())+"");
+
+            data.setServicePartnerString(data.getServicePartner()+"%");
+            BigDecimal bigDecimal = new BigDecimal("100");
+            data.setPlatformString(bigDecimal.subtract(data.getServicePartner())+"%");
+        }
+
         List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(data.getSiteId())).getData();
         if (!data1.isEmpty()){
             data.setSiteName(data1.get(0).getName());
@@ -400,10 +586,11 @@
                 WriteSheet writeSheet = EasyExcel.writerSheet().build();
                 WriteSheet writeSheet2 = EasyExcel.writerSheet().build();
                 WriteSheet writeSheet3 = EasyExcel.writerSheet().build();
-                FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
+                FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build();
                 excelWriter.fill(new FillWrapper("data1", chargingBillVOS), fillConfig, writeSheet);
                 excelWriter.fill(new FillWrapper("data2", chargingBillVOS), fillConfig, writeSheet2);
                 excelWriter.fill(new FillWrapper("data3", data.getList()), fillConfig, writeSheet3);
+                excelWriter.fill(new FillWrapper("data4", data.getList()), fillConfig, writeSheet3);
                 excelWriter.finish();
             } catch (Exception e) {
                 return R.fail("excel导出失败!");
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java
index 7048099..1f67215 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java
@@ -59,7 +59,9 @@
                         .eq(TParkingLot::getSiteId, site.getId()));
                 List<Integer> lotIds = tParkingLots.stream().map(TParkingLot::getId).collect(Collectors.toList());
                 if(CollectionUtils.isEmpty(lotIds)){
-                    return new TParkingRecordPageInfoVO();
+                    TParkingRecordPageInfoVO tParkingRecordPageInfoVO = new TParkingRecordPageInfoVO();
+                    tParkingRecordPageInfoVO.setParkingRecordVOS(new PageInfo<TParkingRecordVO>());
+                    return tParkingRecordPageInfoVO;
                 }
                 query.setLotIds(lotIds);
             }
diff --git "a/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\277\220\350\220\245\345\225\206\345\220\215\347\247\2601-\345\205\205\347\224\265\346\241\251\345\220\215\347\247\2601-\347\273\223\347\256\227\345\257\271\350\264\246\345\215\225\346\230\216\347\273\206-\347\273\223\347\256\227\346\234\210\344\273\2751.xlsx" "b/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\277\220\350\220\245\345\225\206\345\220\215\347\247\2601-\345\205\205\347\224\265\346\241\251\345\220\215\347\247\2601-\347\273\223\347\256\227\345\257\271\350\264\246\345\215\225\346\230\216\347\273\206-\347\273\223\347\256\227\346\234\210\344\273\2751.xlsx"
index 807ae43..52f3fb9 100644
--- "a/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\277\220\350\220\245\345\225\206\345\220\215\347\247\2601-\345\205\205\347\224\265\346\241\251\345\220\215\347\247\2601-\347\273\223\347\256\227\345\257\271\350\264\246\345\215\225\346\230\216\347\273\206-\347\273\223\347\256\227\346\234\210\344\273\2751.xlsx"
+++ "b/ruoyi-service/ruoyi-chargingPile/src/main/resources/template/\350\277\220\350\220\245\345\225\206\345\220\215\347\247\2601-\345\205\205\347\224\265\346\241\251\345\220\215\347\247\2601-\347\273\223\347\256\227\345\257\271\350\264\246\345\215\225\346\230\216\347\273\206-\347\273\223\347\256\227\346\234\210\344\273\2751.xlsx"
Binary files differ
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 05cf05f..a89d01e 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
@@ -291,10 +291,8 @@
         int i =1;
         for (TChargingOrder tChargingOrder : tChargingOrders) {
             // 账单信息
-            paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
-            if (tChargingOrder.getRefundStatus()!=null && tChargingOrder.getRefundStatus()==2){
-                refundAmount = refundAmount.add(tChargingOrder.getRefundAmount());
-            }
+            paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount());
+
             // 退款信息
             ChargingBillRefundExport chargingBillRefundExport = new ChargingBillRefundExport();
             ChargingBillPayExport chargingBillPayExport = new ChargingBillPayExport();
@@ -314,12 +312,16 @@
                     chargingBillPayExport.setPlatformPay("支付宝小程序支付");
 
             }
-            List<TChargingOrderRefund> one1 = tChargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId()).list();
+            List<TChargingOrderRefund> one1 = tChargingOrderRefundService.lambdaQuery()
+                    .eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId())
+                    .eq(TChargingOrderRefund::getRefundStatus, 2)
+                    .list();
             for (TChargingOrderRefund one : one1) {
+                refundAmount= refundAmount.add(one.getRefundAmount());
                 chargingBillRefundExport.setRechargeSerialNumber(tChargingOrder.getRechargeSerialNumber());
                 chargingBillRefundExport.setCode(tChargingOrder.getCode());
                 chargingBillRefundExport.setPayTime(tChargingOrder.getCreateTime()!=null?DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(tChargingOrder.getCreateTime())):"");
-                if (tChargingOrder.getRefundTime()!=null){
+                if (one.getRefundTime()!=null){
                     chargingBillRefundExport.setRefundTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",DateUtils.toDate(one.getRefundTime())));
                 }
                 chargingBillRefundExport.setRefundMoney(one.getRefundAmount().toString());
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
index b5f7dd1..dba6fe2 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
@@ -248,6 +248,10 @@
                     .between(TChargingOrder::getStartTime, byId.getStartTime(), byId.getEndTime())
                     .eq(TChargingOrder::getStatus, 5)
                     .eq(TChargingOrder::getRechargePaymentStatus, 2).list();
+            int i = 1;
+            for (TChargingOrder chargingOrder : list) {
+
+            }
             byId.setList(list);
             String format = byId.getStartTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
             String format1 = byId.getEndTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
index 2118771..4046d55 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -833,7 +833,7 @@
         }
 
         PageChargingOrderAndUploadRealTimeMonitoringDataDto page = new PageChargingOrderAndUploadRealTimeMonitoringDataDto();
-        page.setCount(data1.getCount());
+        page.setTotal(data1.getCount());
         page.setRecords(dtos);
 
         return R.ok(page);
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 06f5be7..22f1e35 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
@@ -13,6 +13,7 @@
 import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.order.api.model.TChargingOrderRefund;
 import com.ruoyi.order.api.vo.ChargingBillListVO;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -23,6 +24,7 @@
 import com.ruoyi.order.mapper.TChargingBillMapper;
 import com.ruoyi.order.mapper.TChargingOrderMapper;
 import com.ruoyi.order.service.TChargingBillService;
+import com.ruoyi.order.service.TChargingOrderRefundService;
 import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
 import org.omg.CORBA.PRIVATE_MEMBER;
 import org.springframework.stereotype.Service;
@@ -63,6 +65,8 @@
     private AppUserClient appUserClient;
     @Resource
     private AppUserCarClient appUserCarClient;
+    @Resource
+    private TChargingOrderRefundService chargingOrderRefundService;
     @Override
     public ChargingBillVO chargingBillList1(ChargingListQuery dto) {
         if (dto.getState()!=null){
@@ -244,9 +248,9 @@
                     }
                 }
                 if (data3!=null)tChargingOrder.setUserName(data3.getName());
-                // 累加实收金额 支付金额减去退款金额
-                if (tChargingOrder.getPaymentAmount()!=null){
-                    paymentAmount = paymentAmount.add(tChargingOrder.getPaymentAmount());
+                // 累加实收金额
+                if (tChargingOrder.getOrderAmount()!=null){
+                    paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount());
                 }
                 // 累加订单金额
                 if (tChargingOrder.getOrderAmount()!=null){
@@ -256,8 +260,10 @@
                 if (tChargingOrder.getElectrovalence()!=null){
                     electrovalence = electrovalence.add(tChargingOrder.getElectrovalence());
                 }
-                if (tChargingOrder.getRefundAmount()!=null && tChargingOrder.getRefundStatus()!=null && tChargingOrder.getRefundStatus()== 2){
-                    refundAmount = refundAmount.add(tChargingOrder.getRefundAmount());
+                List<TChargingOrderRefund> list2 = chargingOrderRefundService.lambdaQuery().eq(TChargingOrderRefund::getRefundStatus, 2)
+                        .eq(TChargingOrderRefund::getChargingOrderId, tChargingOrder.getId()).list();
+                for (TChargingOrderRefund tChargingOrderRefund : list2) {
+                    refundAmount = refundAmount.add(tChargingOrderRefund.getRefundAmount());
                 }
                 // 累加累计服务费
                 if (tChargingOrder.getServiceCharge()!=null){
@@ -265,8 +271,7 @@
                 }
                 // 累加平台手续费
                 if (tChargingOrder.getOrderAmount()!=null){
-                    commissionAmount = commissionAmount.add(tChargingOrder.getOrderAmount().multiply(BigDecimal.valueOf(0.006))
-                            .setScale(2,RoundingMode.HALF_DOWN));
+                    commissionAmount = commissionAmount.add(tChargingOrder.getOrderAmount().multiply(BigDecimal.valueOf(0.006)));
                 }
                 // 累加平台分佣
                 if (tChargingOrder.getSharingAmount()!=null){
@@ -499,7 +504,6 @@
             BigDecimal commissionAmount = new BigDecimal("0");
             BigDecimal sharingAmount = new BigDecimal("0");
             BigDecimal chargingCapacity = new BigDecimal("0");
-            orderCount+=tChargingOrders.size();
             chargingBillVO.setCategory("");
             chargingBillListVO.setOrderCount(tChargingOrders.size());
             chargingBillVO.setExportList(tChargingOrders);
@@ -702,7 +706,7 @@
                 eq.eq("site_id", chargingBillListVO.getSiteId());
             }
             List<TChargingOrder> tChargingOrders = chargingOrderList.selectList(eq);
-            int chargingSecond = 0;
+            orderCount+=tChargingOrders.size();
             BigDecimal paymentAmount = new BigDecimal("0");
             BigDecimal orderAmount = new BigDecimal("0");
             BigDecimal electrovalence = new BigDecimal("0");
@@ -710,7 +714,7 @@
             BigDecimal commissionAmount = new BigDecimal("0");
             BigDecimal sharingAmount = new BigDecimal("0");
             BigDecimal chargingCapacity = new BigDecimal("0");
-            orderCount+=tChargingOrders.size();
+            chargingBillListVO.setOrderCount(tChargingOrders.size());
             for (TChargingOrder tChargingOrder : tChargingOrders) {
                 // 累加实收金额 支付金额减去退款金额
                 if (tChargingOrder.getRefundAmount()!=null && tChargingOrder.getPaymentAmount()!=null){
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 a5b335c..e7152ca 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
@@ -2321,6 +2321,7 @@
 		// 根据站点id和开始时间和结束时间和归属日期 查询充电订单列表
 		QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
 				.eq("site_id", dto.getSiteId())
+				.eq("status", 5)
 				.eq("recharge_payment_status",2);
 		switch (dto.getType()){
 			case 1:
@@ -2388,21 +2389,17 @@
 		// 三方交易手续费 三方收费*0.6%
 		commissionAmount = sharingAmount.multiply(new BigDecimal("0.006"));
 		// 订单手续费 订单支付金额 - 退款金额*0.6%
-		orderCommission = paymentAmount.multiply(new BigDecimal("0.006"));
+		orderCommission = paymentAmount.multiply(new BigDecimal("0.006").setScale(2,RoundingMode.HALF_DOWN));
 		tSettlementConfirm.setSharingAmount(sharingAmount.setScale(2, RoundingMode.HALF_DOWN));
 		tSettlementConfirm.setCommissionAmount(commissionAmount.setScale(2, RoundingMode.HALF_DOWN));
-		tSettlementConfirm.setElectrovalence(electrovalence);
-		// 服务费=总服务费-三费收费-交易手续费-交易手续费-服务费会员抵扣-服务费优惠券抵扣
-		tSettlementConfirm.setServiceCharge(serviceCharge.subtract(commissionAmount).subtract(sharingAmount).subtract(orderCommission).subtract(vipDiscount).subtract(couponDiscount));
+		tSettlementConfirm.setElectrovalence(electrovalence.setScale(2, RoundingMode.HALF_DOWN));
+		tSettlementConfirm.setServiceCharge(serviceCharge.setScale(2, RoundingMode.HALF_DOWN));
 		tSettlementConfirm.setOrderCommission(orderCommission);
 		tSettlementConfirm.setVipDiscount(vipDiscount);
 		tSettlementConfirm.setCouponDiscount(couponDiscount);
 		tSettlementConfirm.setSiteId(dto.getSiteId());
 		tSettlementConfirm.setChargingElectronic(chargingElectronic);
 		tSettlementConfirm.setIncome(chargingElectronic.add(serviceCharge));
-		tSettlementConfirm.setProfitMoney(new BigDecimal("0"));
-		tSettlementConfirm.setNewMoney(new BigDecimal("0"));
-		tSettlementConfirm.setNewSettlement(new BigDecimal("0"));
 		tSettlementConfirm.setVipDiscount(vipDiscount);
 		tSettlementConfirm.setCouponDiscount(couponDiscount);
 		tSettlementConfirm.setType(dto.getType());
@@ -2423,11 +2420,23 @@
 			tSettlementConfirm.setRemark(dto.getRemark());
 			tSettlementConfirm.setServicePartner(dto.getServicePartner());
 			tSettlementConfirm.setServiceMoney(dto.getServiceMoney());
+			BigDecimal subtract = new BigDecimal("1").subtract(dto.getProportionPartner());
+			// 总电损费用
+			BigDecimal divide = tSettlementConfirm.getProportionMoney().divide(subtract, 2, RoundingMode.HALF_DOWN);
+			// 平台承担电损
+			BigDecimal subtract1 = divide.subtract(tSettlementConfirm.getProportionMoney());
+			BigDecimal multiply = dto.getServiceMoney().multiply(subtract);
+			BigDecimal subtract2 = multiply.subtract(subtract1);
+			tSettlementConfirm.setNewMoney(subtract2);
+
 			tSettlementConfirm.setTotalService(dto.getTotalService());
 			tSettlementConfirm.setServiceRemark(dto.getServiceRemark());
 			tSettlementConfirm.setDistribution(dto.getDistribution());
 			tSettlementConfirm.setIncome(dto.getElectrovalence().add(dto.getServiceCharge()));
-			tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()));
+			tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()).add(dto.getMetering()));
+			tSettlementConfirm.setProfitMoney(chargingElectronic.add(serviceCharge).subtract(tSettlementConfirm.getCost()));
+			tSettlementConfirm.setNewSettlement(subtract2.subtract(tSettlementConfirm.getCost()));
+
 			tSettlementConfirmMapper.insert(tSettlementConfirm);
 		}
 		return tSettlementConfirm;
@@ -2511,11 +2520,12 @@
 //		tSettlementConfirm1.setIncomePercentage();
 //		tSettlementConfirm1.setTotalPercentage();
 		tSettlementConfirm1.setElectronicRefund(0);
-// 上月成本合计
+		// 上月成本合计
 		BigDecimal beforeCost= new BigDecimal("0");
 		// 上月利润合计
 		BigDecimal beforeIncome= new BigDecimal("0");
 		for (TSettlementConfirm tSettlementConfirm : list1) {
+			tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
 			List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
 			if (!data1.isEmpty()){
 				tSettlementConfirm.setSiteName(data1.get(0).getName());
@@ -2568,11 +2578,14 @@
 			StringBuilder stringBuilder = new StringBuilder();
 			for (TChargingOrder tChargingOrder : tChargingOrders) {
 				stringBuilder.append(tChargingOrder.getCode()).append(",");
+
 			}
+			// 充电总时长
+
 			Long temp = 0L;
 			if (StringUtils.hasLength(stringBuilder.toString())){
 				List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getOrderInfoByCodes(stringBuilder.substring(0,stringBuilder.length()-1)).getData();
-				temp+=data6.stream().mapToLong(UploadRealTimeMonitoringData::getCumulative_charging_time).sum();
+				temp+=(data6.stream().mapToLong(UploadRealTimeMonitoringData::getCumulative_charging_time).sum()*60);
 			}
 			List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
 			// 计算充电桩的功率平均值
@@ -2583,11 +2596,32 @@
 
 
 			tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
-			// todo 计算利用率 该电站充电桩本月利用率:
 			//利用率=充电量/(桩数量*功率*时间)
+			List<TChargingPile> data2 = chargingPileClient.getChargingPileBySiteId(tSettlementConfirm.getSiteId()).getData();
+			BigDecimal bigDecimal2 = new BigDecimal("0");
+
+			if (data2!=null && (!data2.isEmpty())){
+				for (TChargingPile tChargingPile : data2) {
+					bigDecimal2 = bigDecimal2.add(tChargingPile.getRatedPower());
+				}
+				BigDecimal bigDecimal1 = new BigDecimal(data2.size()+"");
+				// 平均功率
+				BigDecimal divide = bigDecimal2.divide(bigDecimal1, 2, RoundingMode.HALF_DOWN);
+				// 充电量
+				BigDecimal chargingElectronic1 = tSettlementConfirm.getChargingElectronic();
+				// 桩数量
+				BigDecimal bigDecimal3 = new BigDecimal(data2.size());
+				BigDecimal multiply = chargingElectronic1.multiply(new BigDecimal("24"));
+				BigDecimal multiply1 = bigDecimal3.multiply(divide).multiply(new BigDecimal(temp));
+				tSettlementConfirm.setRate(chargingElectronic1.divide(multiply1,2,RoundingMode.HALF_DOWN)+"");
+			}else{
+				tSettlementConfirm.setRate("");
+			}
+
 
 			for (TSettlementConfirm settlementConfirm : list2) {
 				settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
+				tSettlementConfirm.setMetering(tSettlementConfirm.getSupplyElectronic());
 				if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
 					// 电站相同比较收入涨幅跌幅
 					if (tSettlementConfirm.getIncome().compareTo(BigDecimal.ZERO)>0){

--
Gitblit v1.7.1