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<String, Object> 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());
|
}
|
}
|