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.xlsxBinary 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