无关风月
2024-10-27 af68ac0a16d176674e38920db4a11ddf36b2c4fd
bug修改
8个文件已修改
1个文件已添加
426 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementExportVO.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/运营商名称1-充电桩名称1-结算对账单明细-结算月份1.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingBillServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
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;
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementExportVO.java
New file
@@ -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;
}
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导出失败!");
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/运营商名称1-充电桩名称1-结算对账单明细-结算月份1.xlsx
Binary files differ
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());
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"));
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){
@@ -243,9 +247,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){
@@ -255,8 +259,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){
@@ -264,8 +270,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){
@@ -498,7 +503,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);
@@ -701,7 +705,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");
@@ -709,7 +713,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){
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -2252,6 +2252,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:
@@ -2319,21 +2320,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());
@@ -2354,11 +2351,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;
@@ -2430,11 +2439,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());
@@ -2487,11 +2497,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();
            // 计算充电桩的功率平均值
@@ -2502,11 +2515,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){