无关风月
2024-09-07 6ff86d171b7621b4200d2e25176e08c171bd3809
代码提交
1个文件已添加
16个文件已修改
369 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementTotalVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/运营商名称1-充电桩名称1-结算对账单明细-结算月份1.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java
@@ -4,6 +4,7 @@
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
import com.ruoyi.chargingPile.api.model.Partner;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.common.core.domain.R;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -26,7 +27,12 @@
    public SiteClient create(Throwable throwable) {
        log.error("站点调用失败:{}", throwable.getMessage());
        return new SiteClient() {
            @Override
            public R<List<TChargingPile>> getPileListBySiteId(Integer siteId) {
                return R.fail("根据站点id 查询所有充电桩:" + throwable.getMessage());
            }
            @Override
            public R<List<Site>> getSiteByIds(List<Integer> ids) {
                return R.fail("根据id集合获取站点数据调用失败:" + throwable.getMessage());
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java
@@ -4,6 +4,7 @@
import com.ruoyi.chargingPile.api.factory.SiteFallbackFactory;
import com.ruoyi.chargingPile.api.model.Partner;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import org.springframework.cloud.openfeign.FeignClient;
@@ -17,6 +18,8 @@
 */
@FeignClient(contextId = "SiteClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = SiteFallbackFactory.class)
public interface SiteClient {
    @GetMapping("/site/getPileListBySiteId/{siteId}")
    public R<List<TChargingPile>> getPileListBySiteId(@PathVariable("siteId")Integer siteId);
    
    /**
     * 根据id集合获取数据
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java
@@ -31,7 +31,12 @@
            public R<UploadRealTimeMonitoringData> chargingOrderInfo(String orderId) {
                return R.fail("查询充电桩实时监测数据失败:" + throwable.getMessage());
            }
            @Override
            public R<List<UploadRealTimeMonitoringData>> getOrderInfoByCodes(String orderId) {
                return R.fail("根据订单编号s获取所有监测数据失败:" + throwable.getMessage());
            }
            @Override
            public R<List<UploadRealTimeMonitoringData>> getDataByOrderCode(String code) {
                return R.fail("根据订单编号获取所有监测数据失败:" + throwable.getMessage());
ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java
@@ -25,7 +25,14 @@
     */
    @PostMapping("/uploadRealTimeMonitoringData/getOrderInfoByCode")
    R<UploadRealTimeMonitoringData> chargingOrderInfo(String orderId);
    /**
     * 批量查询
     * @param orderId
     * @return
     */
    @PostMapping(value = "/uploadRealTimeMonitoringData/getOrderInfoByCodes")
    public R<List<UploadRealTimeMonitoringData>> getOrderInfoByCodes(@RequestParam("orderId") String orderId);
    /**
     * 根据订单编号获取所有监测数据
     * @param code
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java
@@ -11,6 +11,7 @@
import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
import com.ruoyi.order.api.vo.ChargingBillVO;
import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate;
import com.ruoyi.order.api.vo.SettlementTotalVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
@@ -102,6 +103,11 @@
            public R<TSettlementConfirm> downloadSettlement(String uid) {
                return R.fail("通过id查询结算确认失败:" + throwable.getMessage());
            }
            @Override
            public R<SettlementTotalVO> settlementTotalR(String time) {
                return R.fail("查询结算汇总表导出列表失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
@@ -11,6 +11,7 @@
import com.ruoyi.order.api.query.TChargingCountQuery;
import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
import com.ruoyi.order.api.vo.ChargingBillVO;
import com.ruoyi.order.api.vo.SettlementTotalVO;
import io.swagger.annotations.ApiOperation;
import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate;
import org.springframework.cloud.openfeign.FeignClient;
@@ -114,4 +115,7 @@
     */
    @GetMapping(value = "/financial/settlement/downloadSettlement/{uid}")
    public R<TSettlementConfirm> downloadSettlement(@PathVariable("uid") String uid);
    @GetMapping(value = "/financial/settlement/settlementTotalR")
    public R<SettlementTotalVO> settlementTotalR(String time);
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TSettlementConfirm.java
@@ -58,8 +58,9 @@
    @TableField("loss_electronic")
    private BigDecimal lossElectronic;
    @ApiModelProperty(value = "收入合计")
    @TableField("income")
    @TableField("收入合计")
    private BigDecimal income;
    @ApiModelProperty(value = "场地费")
    @TableField("venue")
    private BigDecimal venue;
@@ -72,9 +73,12 @@
    @ApiModelProperty(value = "日常维护费")
    @TableField("maintain")
    private BigDecimal maintain;
    @ApiModelProperty(value = "成本(可分配合计)")
    @ApiModelProperty(value = "成本")
    @TableField("cost")
    private BigDecimal cost;
    @ApiModelProperty(value = "合计可分配金额")
    @TableField("distribution")
    private BigDecimal distribution;
    @ApiModelProperty(value = "利润")
    @TableField("profit_money")
    private BigDecimal profitMoney;
@@ -173,14 +177,24 @@
    @ApiModelProperty(value = "uid")
    @TableField(exist = false)
    private String uid;
    @ApiModelProperty(value = "合计可分配金额")
    @TableField(exist = false)
    private BigDecimal distribution;
    @ApiModelProperty(value = "结账日期 2024年09月06日17:10:06至2024年09月06日17:10:06")
    @TableField(exist = false)
    private String time;
    @ApiModelProperty(value = "充电记录明细")
    @TableField(exist = false)
    private List<TChargingOrder> list;
    @ApiModelProperty(value = "收入合计涨幅/跌幅 正数为涨幅负数为跌幅 字段为空 说明没有上月记录 不展示涨幅跌幅")
    @TableField(exist = false)
    private String incomePercentage;
    @ApiModelProperty(value = "总利润涨幅/跌幅 正数为涨幅负数为跌幅 字段为空 说明没有上月记录 不展示涨幅跌幅")
    @TableField(exist = false)
    private String totalPercentage;
    @ApiModelProperty(value = "利用率")
    @TableField(exist = false)
    private String rate;
    @ApiModelProperty(value = "参与电力市场交易退补电费")
    @TableField(exist = false)
    private Integer electronicRefund;
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/SettlementTotalVO.java
New file
@@ -0,0 +1,21 @@
package com.ruoyi.order.api.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
import com.ruoyi.order.api.model.TSettlementConfirm;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Data
@ApiModel(value = "SettlementTotalVO对象",description = "结算汇总表列表VO")
public class SettlementTotalVO {
    @ApiModelProperty(value = "列表数据")
    List<TSettlementConfirm> list1;
    @ApiModelProperty(value = "合计数据")
    List<TSettlementConfirm> list2;
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -82,6 +82,17 @@
    @Resource
    private ChargingOrderClient chargingOrderClient;
    /**
     * 根据站点id 查询所有充电桩
     * @param siteId
     * @return
     */
    @GetMapping("/getPileListBySiteId/{siteId}")
    public R<List<TChargingPile>> getPileListBySiteId(@PathVariable("siteId")Integer siteId){
        return R.ok(chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, siteId).list());
    }
    /**
     * 小程序扫一扫
     * @param number
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -42,6 +42,7 @@
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.order.api.model.ChargingListQuery;
import com.ruoyi.order.api.vo.ChargingBillVO;
import com.ruoyi.order.api.vo.SettlementTotalVO;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.codec.CharEncoding;
import org.springframework.beans.BeanUtils;
@@ -281,7 +282,41 @@
        }
        return R.ok();
    }
    @ApiOperation(value = "导出", tags = {"管理后台-结算汇总表"})
    @GetMapping("/downloadSettlementTotal")
    public R downloadSettlementTotal(String time,HttpServletResponse response)
    {
        SettlementTotalVO data = chargingOrderClient.settlementTotalR(time).getData();
        try {
            response.setCharacterEncoding(Constants.UTF8);
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
            response.setHeader("Content-Disposition", "attachment;filename=" +
                    URLEncoder.encode("结算确认单", CharEncoding.UTF_8) + ".xlsx");
        } catch (UnsupportedEncodingException e) {
            return R.fail("excel导出失败!");
        }
        try {
            // excel模板封装
            ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream());
            InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" +"运营商名称1-充电桩名称1-结算对账单明细-结算月份1" + ".xlsx");
            // 自动释放资源
            try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) {
                WriteSheet writeSheet = EasyExcel.writerSheet().build();
                FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build();
                excelWriter.fill(new FillWrapper("data1", data.getList1()), fillConfig, writeSheet);
                excelWriter.fill(new FillWrapper("data2", data.getList2()), fillConfig, writeSheet);
                excelWriter.finish();
            } catch (Exception e) {
                return R.fail("excel导出失败!");
            }
        } catch (IOException e) {
            return R.fail("excel导出失败!");
        }
        return R.ok();
    }
    @ApiOperation(value = "下载", tags = {"管理后台-结算表记录"})
    @GetMapping("/downloadSettlement")
    public R downloadSettlement(String uid,HttpServletResponse response)
ruoyi-service/ruoyi-chargingPile/src/main/resources/template/运营商名称1-充电桩名称1-结算对账单明细-结算月份1.xlsx
Binary files differ
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java
@@ -9,6 +9,7 @@
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -40,6 +41,25 @@
        }
        return R.ok();
    }
    /**
     * 批量查询
     * @param orderId
     * @return
     */
    @PostMapping(value = "/getOrderInfoByCodes")
    public R<List<UploadRealTimeMonitoringData>> getOrderInfoByCodes(@RequestParam("orderId") String orderId){
        List<UploadRealTimeMonitoringData> res = new ArrayList<>();
        for (String s : orderId.split(",")) {
            List<UploadRealTimeMonitoringData> dataByOrderCode = uploadRealTimeMonitoringDataService.getDataByOrderCode(s);
            if(dataByOrderCode.size() > 0){
                UploadRealTimeMonitoringData uploadRealTimeMonitoringData = dataByOrderCode.get(dataByOrderCode.size() - 1);
                res.add(uploadRealTimeMonitoringData);
            }
        }
        return R.ok(res);
    }
    
    
    /**
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/FinancialSettlementController.java
@@ -16,6 +16,7 @@
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.api.model.TSettlementConfirm;
import com.ruoyi.order.api.query.SettlementListQuery;
import com.ruoyi.order.api.vo.SettlementTotalVO;
import com.ruoyi.order.vo.ChargingOrderListInfoVO;
import com.ruoyi.order.api.vo.ChargingOrderTimeVO;
import com.ruoyi.order.api.model.ChargingListQuery;
@@ -63,10 +64,16 @@
    }
    @GetMapping(value = "/settlementTotal")
    @ApiOperation(value = "结算确认表-列表查询", tags = {"管理后台-财务结算"})
    @ApiParam(name = "time", value = "汇报时间yyyy-MM")
    public AjaxResult<ChargingOrderListInfoVO> settlementTotal(String time) {
        return AjaxResult.success(null);
    @ApiOperation(value = "结算汇总-列表查询", tags = {"管理后台-财务结算"})
    @ApiParam(name = "time", value = "汇报时间2024-01-01 00:00:00")
    public AjaxResult<SettlementTotalVO> settlementTotal(String time) {
        SettlementTotalVO res = chargingOrderService.settlementTotal(time);
        return AjaxResult.success(res);
    }
    @GetMapping(value = "/settlementTotalR")
    public R<SettlementTotalVO> settlementTotalR( String time) {
        SettlementTotalVO res = chargingOrderService.settlementTotal(time);
        return R.ok(res);
    }
    @PostMapping(value = "/settlementAdd")
    @ApiOperation(value = "结算确认表-生成/保存结算确认表", tags = {"管理后台-财务结算"})
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TSettlementConfirmMapper.java
@@ -28,4 +28,6 @@
    List<TSettlementConfirm> settlementList(@Param("pageInfo") PageInfo<TSettlementConfirm> pageInfo, @Param("req") SettlementListQuery dto);
    List<TSettlementConfirm> settlementTotal(@Param("time") String time);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -14,10 +14,7 @@
import com.ruoyi.order.api.query.ChargingOrderQuery;
import com.ruoyi.order.api.query.SettlementListQuery;
import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery;
import com.ruoyi.order.api.vo.ChargingOrderTimeVO;
import com.ruoyi.order.api.vo.ChargingOrderVO;
import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate;
import com.ruoyi.order.api.vo.TCharingOrderVO;
import com.ruoyi.order.api.vo.*;
import com.ruoyi.order.dto.*;
import com.ruoyi.order.vo.ChargingOrderListInfoVO;
import org.springframework.web.bind.annotation.RequestBody;
@@ -172,4 +169,6 @@
    TSettlementConfirm settlementAdd(SettlementConfirmAdd dto);
    PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto);
    SettlementTotalVO settlementTotal(String time);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -62,6 +62,7 @@
import com.ruoyi.payment.api.model.WxPaymentRefundModel;
import com.ruoyi.payment.api.vo.*;
import com.ruoyi.system.api.feignClient.SysUserClient;
import com.sun.org.apache.bcel.internal.generic.NEW;
import io.seata.spring.annotation.GlobalTransactional;
import io.swagger.annotations.ApiModelProperty;
import org.slf4j.Logger;
@@ -1354,7 +1355,6 @@
            chargingOrderListInfoVO.setTerminalName(data2.getName()+data1.getName());
        }
        chargingOrderListInfoVO.setEndMode(chargingOrder.getEndMode());
        // todo 周一完善
        // 获取开始SOC 结束soc
        List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData();
        if (!data6.isEmpty()){
@@ -1734,7 +1734,7 @@
        tSettlementConfirm.setMetering(dto.getData().getMetering());
        tSettlementConfirm.setClean(dto.getData().getClean());
        tSettlementConfirm.setMaintain(dto.getData().getMaintain());
        tSettlementConfirm.setCost(dto.getData().getCost());
        tSettlementConfirm.setCost(dto.getData().getVenue().add(dto.getData().getClean()).add(dto.getData().getMaintain()));
        tSettlementConfirm.setProfitMoney(new BigDecimal("0"));
        tSettlementConfirm.setNewMoney(new BigDecimal("0"));
        tSettlementConfirm.setNewSettlement(new BigDecimal("0"));
@@ -1751,6 +1751,8 @@
        tSettlementConfirm.setServiceMoney(dto.getData().getServiceMoney());
        tSettlementConfirm.setTotalService(dto.getData().getTotalService());
        tSettlementConfirm.setServiceRemark(dto.getData().getServiceRemark());
        tSettlementConfirm.setDistribution(dto.getData().getDistribution());
        tSettlementConfirm.setIncome(dto.getData().getElectrovalence().add(dto.getData().getServiceCharge()));
        if (dto.getState() == 2){
            tSettlementConfirmMapper.insert(tSettlementConfirm);
        }
@@ -1781,9 +1783,183 @@
        return null;
    }
    @Override
    public SettlementTotalVO settlementTotal(String time) {
        SettlementTotalVO res = new SettlementTotalVO();
        List<TSettlementConfirm> list1 = tSettlementConfirmMapper.settlementTotal(time);
        LocalDateTime parse = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        // 减少一个月
        LocalDateTime minus = parse.minusMonths(1);
        List<TSettlementConfirm> list2 = tSettlementConfirmMapper.settlementTotal(time);
        // 合计
        List<TSettlementConfirm> total = new ArrayList<>();
        TSettlementConfirm tSettlementConfirm1 = new TSettlementConfirm();
        BigDecimal meteringElectronic = new BigDecimal("0");
        BigDecimal chargingElectronic = new BigDecimal("0");
        BigDecimal lossElectronic = new BigDecimal("0");
        BigDecimal income = new BigDecimal("0");
        BigDecimal venue = new BigDecimal("0");
        BigDecimal metering = new BigDecimal("0");
        BigDecimal clean = new BigDecimal("0");
        BigDecimal maintain = new BigDecimal("0");
        BigDecimal cost = new BigDecimal("0");
        BigDecimal profitMoney = new BigDecimal("0");
        BigDecimal newMoney = new BigDecimal("0");
        BigDecimal newSettlement = new BigDecimal("0");
        BigDecimal supplyElectronic = new BigDecimal("0");
        BigDecimal proportionPartner = new BigDecimal("0");
        BigDecimal proportionMoney = new BigDecimal("0");
        BigDecimal totalElectronic = new BigDecimal("0");
        BigDecimal totalService = new BigDecimal("0");
        BigDecimal servicePartner = new BigDecimal("0");
        BigDecimal serviceMoney = new BigDecimal("0");
        BigDecimal sharingAmount = new BigDecimal("0");
        BigDecimal commissionAmount = new BigDecimal("0");
        BigDecimal electrovalence = new BigDecimal("0");
        BigDecimal serviceCharge = new BigDecimal("0");
        BigDecimal orderCommission = new BigDecimal("0");
        BigDecimal vipDiscount = new BigDecimal("0");
        BigDecimal couponDiscount = new BigDecimal("0");
//        tSettlementConfirm1.setIncomePercentage();
//        tSettlementConfirm1.setTotalPercentage();
        tSettlementConfirm1.setElectronicRefund(0);
// 上月成本合计
        BigDecimal beforeCost= new BigDecimal("0");
        // 上月利润合计
        BigDecimal beforeIncome= new BigDecimal("0");
        for (TSettlementConfirm tSettlementConfirm : list1) {
            List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
            if (!data1.isEmpty()){
                tSettlementConfirm.setSiteName(data1.get(0).getName());
            }
            meteringElectronic = meteringElectronic.add(tSettlementConfirm.getMeteringElectronic());
            chargingElectronic = chargingElectronic.add(tSettlementConfirm.getChargingElectronic());
            lossElectronic = lossElectronic.add(tSettlementConfirm.getLossElectronic());
            income = income.add(tSettlementConfirm.getIncome());
            venue = venue.add(tSettlementConfirm.getVenue());
            metering = metering.add(tSettlementConfirm.getMetering());
            clean = clean.add(tSettlementConfirm.getClean());
            maintain = maintain.add(tSettlementConfirm.getMaintain());
            cost = cost.add(tSettlementConfirm.getCost());
            profitMoney = profitMoney.add(tSettlementConfirm.getProfitMoney());
            newMoney = newMoney.add(tSettlementConfirm.getNewMoney());
            newSettlement = newSettlement.add(tSettlementConfirm.getNewSettlement());
            supplyElectronic = supplyElectronic.add(tSettlementConfirm.getSupplyElectronic());
            proportionPartner = proportionPartner.add(tSettlementConfirm.getProportionPartner());
            proportionMoney = proportionMoney.add(tSettlementConfirm.getProportionMoney());
            totalElectronic = totalElectronic.add(tSettlementConfirm.getTotalElectronic());
            totalService = totalService.add(tSettlementConfirm.getTotalService());
            servicePartner = servicePartner.add(tSettlementConfirm.getServicePartner());
            serviceMoney = serviceMoney.add(tSettlementConfirm.getServiceMoney());
            sharingAmount = sharingAmount.add(tSettlementConfirm.getSharingAmount());
            commissionAmount = commissionAmount.add(tSettlementConfirm.getCommissionAmount());
            electrovalence = electrovalence.add(tSettlementConfirm.getElectrovalence());
            serviceCharge = serviceCharge.add(tSettlementConfirm.getServiceCharge());
            orderCommission = orderCommission.add(tSettlementConfirm.getOrderCommission());
            vipDiscount = vipDiscount.add(tSettlementConfirm.getVipDiscount());
            couponDiscount = couponDiscount.add(tSettlementConfirm.getCouponDiscount());
            // 查询结算确认单开始时间和结束时间的单子
            QueryWrapper<TChargingOrder> eq = new QueryWrapper<TChargingOrder>()
                    .eq("site_id", tSettlementConfirm.getSiteId())
                    .eq("recharge_payment_status",2);
            switch (tSettlementConfirm.getType()){
                case 1:
                    eq.between("start_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
                    break;
                case 2:
                    eq.between("end_time", tSettlementConfirm.getStartTime(), tSettlementConfirm.getEndTime());
                    break;
            }
            List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
            Map<String,TChargingOrder> map = new HashMap<>();
            StringBuilder stringBuilder = new StringBuilder();
            for (TChargingOrder tChargingOrder : tChargingOrders) {
                stringBuilder.append(tChargingOrder.getCode()).append(",");
            }
            Long temp = 0L;
            if (StringUtils.hasLength(stringBuilder.toString())){
                List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getOrderInfoByCodes(stringBuilder.substring(0,stringBuilder.length()-1)).getData();
                temp+=data6.stream().mapToLong(UploadRealTimeMonitoringData::getCumulative_charging_time).sum();
            }
            List<TChargingPile> data = siteClient.getPileListBySiteId(tSettlementConfirm.getSiteId()).getData();
            // 计算充电桩的功率平均值
            BigDecimal bigDecimal = new BigDecimal("0");
            for (TChargingPile datum : data) {
                bigDecimal = bigDecimal.add(datum.getRatedPower());
            }
            BigDecimal bigDecimal1 = bigDecimal.divide(new BigDecimal(data.size())).setScale(2, RoundingMode.HALF_DOWN);
            tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
            // todo 计算利用率 该电站充电桩本月利用率:
            //利用率=充电量/(桩数量*功率*时间)
            for (TSettlementConfirm settlementConfirm : list2) {
                settlementConfirm.setIncome(settlementConfirm.getElectrovalence().add(settlementConfirm.getServiceCharge()));
                if (tSettlementConfirm.getSiteId().equals(settlementConfirm.getSiteId())){
                    // 电站相同比较收入涨幅跌幅
                    BigDecimal subtract = tSettlementConfirm.getIncome().subtract(settlementConfirm.getIncome()).divide(tSettlementConfirm.getIncome()).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
                    tSettlementConfirm.setIncomePercentage(subtract+"%");
                    // 比较总利润 收入合计-成本合计
                    BigDecimal subtract1 = tSettlementConfirm.getIncome().subtract(tSettlementConfirm.getCost());
                    BigDecimal subtract2 = settlementConfirm.getIncome().subtract(settlementConfirm.getCost());
                    tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
                }
                beforeCost = beforeCost.add(settlementConfirm.getCost());
                beforeIncome = beforeIncome.add(settlementConfirm.getIncome());
            }
        }
        TSettlementConfirm tSettlementConfirm = new TSettlementConfirm();
        tSettlementConfirm.setMeteringElectronic(meteringElectronic);
        tSettlementConfirm.setChargingElectronic(chargingElectronic);
        tSettlementConfirm.setLossElectronic(lossElectronic);
        tSettlementConfirm.setIncome(income);
        tSettlementConfirm.setVenue(venue);
        tSettlementConfirm.setMetering(metering);
        tSettlementConfirm.setClean(clean);
        tSettlementConfirm.setMaintain(maintain);
        tSettlementConfirm.setCost(cost);
        tSettlementConfirm.setProfitMoney(profitMoney);
        tSettlementConfirm.setNewMoney(newMoney);
        tSettlementConfirm.setNewSettlement(newSettlement);
        tSettlementConfirm.setSupplyElectronic(supplyElectronic);
        tSettlementConfirm.setProportionPartner(proportionPartner);
        tSettlementConfirm.setProportionMoney(proportionMoney);
        tSettlementConfirm.setTotalElectronic(totalElectronic);
        tSettlementConfirm.setTotalService(totalService);
        tSettlementConfirm.setServicePartner(servicePartner);
        tSettlementConfirm.setServiceMoney(serviceMoney);
        tSettlementConfirm.setSharingAmount(sharingAmount);
        tSettlementConfirm.setCommissionAmount(commissionAmount);
        tSettlementConfirm.setElectrovalence(electrovalence);
        tSettlementConfirm.setServiceCharge(serviceCharge);
        tSettlementConfirm.setOrderCommission(orderCommission);
        tSettlementConfirm.setVipDiscount(vipDiscount);
        tSettlementConfirm.setCouponDiscount(couponDiscount);
        // 本月
        BigDecimal subtract = income.subtract(beforeIncome).divide(beforeIncome).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"));
        tSettlementConfirm.setIncomePercentage(subtract+"%");
        // 比较总利润 收入合计-成本合计
        BigDecimal subtract1 = income.subtract(cost);
        BigDecimal subtract2 = beforeIncome.subtract(beforeCost);
        tSettlementConfirm.setTotalPercentage(subtract1.subtract(subtract2).divide(subtract2).setScale(2, RoundingMode.HALF_DOWN).multiply(new BigDecimal("100"))+"%");
        tSettlementConfirm.setIncomePercentage(subtract+"%");
        tSettlementConfirm.setElectronicRefund(0);
        // 查询上次汇报数据 进行比对涨幅跌幅
        total.add(tSettlementConfirm);
        res.setList1(list1);
        res.setList2(total);
        return res;
    }
    public static void main(String[] args) {
        String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
        String format1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
        System.err.println(format+"至"+format1);
//        String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
//        String format1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
//        System.err.println(format+"至"+format1);
//        LocalDateTime parse = LocalDateTime.parse("2024-01-12 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//        System.err.println(parse.format(DateTimeFormatter.ofPattern("yyyy-dd")));
    }
}
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TSettlementConfirmMapper.xml
@@ -1,8 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.order.mapper.TSettlementConfirmMapper">
    <select id="pageList" resultType="com.ruoyi.order.api.model.TSettlementConfirm">
    <select id="settlementTotal" resultType="com.ruoyi.order.api.model.TSettlementConfirm">
        select t1.* from
            t_settlement_confirm t1
        where 1=1
        <if test="time != null and time!='' ">
            AND DATE_FORMAT(t1.start_time, '%Y-%m') = DATE_FORMAT(#{time}, '%Y-%m')
        </if>
    </select>
    <select id="settlementList" resultType="com.ruoyi.order.api.model.TSettlementConfirm">
select t1.* from
                t_settlement_confirm t1
where 1=1