package com.ruoyi.order.service.impl; import com.ruoyi.order.mapper.TCardChargingOrderMapper; import com.ruoyi.order.mapper.TChargingOrderAccountingStrategyMapper; import com.ruoyi.order.mapper.TVinChargingOrderMapper; import com.ruoyi.order.service.FleetOrderAggregateService; import com.ruoyi.other.api.vo.FleetOrderAggregateVO; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Map; /** * 车队完成订单累计聚合实现:分别从三类订单表(VIN 码 / 刷卡 / 白名单)SUM * 已完成(status=5)订单的充电量、电费、服务费,三类求和返回。 * 白名单订单主表无累计字段,借计费明细表 per-stage SUM。 */ @Service public class FleetOrderAggregateServiceImpl implements FleetOrderAggregateService { @Resource private TVinChargingOrderMapper vinMapper; @Resource private TCardChargingOrderMapper cardMapper; @Resource private TChargingOrderAccountingStrategyMapper chargingStrategyMapper; @Override public FleetOrderAggregateVO aggregateByFleet(Integer fleetId) { FleetOrderAggregateVO vo = new FleetOrderAggregateVO(); if (fleetId == null) { vo.setCumulativeCharge(BigDecimal.ZERO); vo.setCumulativeElectrovalence(BigDecimal.ZERO); vo.setCumulativeServiceCharge(BigDecimal.ZERO); return vo; } BigDecimal charge = BigDecimal.ZERO; BigDecimal electrovalence = BigDecimal.ZERO; BigDecimal serviceCharge = BigDecimal.ZERO; charge = charge.add(toBigDecimal(vinMapper.fleetAggregateByFleet(fleetId), "cumulativeCharge")); electrovalence = electrovalence.add(toBigDecimal(vinMapper.fleetAggregateByFleet(fleetId), "cumulativeElectrovalence")); serviceCharge = serviceCharge.add(toBigDecimal(vinMapper.fleetAggregateByFleet(fleetId), "cumulativeServiceCharge")); charge = charge.add(toBigDecimal(cardMapper.fleetAggregateByFleet(fleetId), "cumulativeCharge")); electrovalence = electrovalence.add(toBigDecimal(cardMapper.fleetAggregateByFleet(fleetId), "cumulativeElectrovalence")); serviceCharge = serviceCharge.add(toBigDecimal(cardMapper.fleetAggregateByFleet(fleetId), "cumulativeServiceCharge")); charge = charge.add(toBigDecimal(chargingStrategyMapper.fleetAggregateByFleet(fleetId), "cumulativeCharge")); electrovalence = electrovalence.add(toBigDecimal(chargingStrategyMapper.fleetAggregateByFleet(fleetId), "cumulativeElectrovalence")); serviceCharge = serviceCharge.add(toBigDecimal(chargingStrategyMapper.fleetAggregateByFleet(fleetId), "cumulativeServiceCharge")); vo.setCumulativeCharge(charge); vo.setCumulativeElectrovalence(electrovalence); vo.setCumulativeServiceCharge(serviceCharge); return vo; } private BigDecimal toBigDecimal(Map map, String key) { if (map == null) return BigDecimal.ZERO; Object value = map.get(key); if (value == null) return BigDecimal.ZERO; if (value instanceof BigDecimal) return (BigDecimal) value; return new BigDecimal(value.toString()); } }