puzhibing
8 小时以前 e1c8c9d51f1c6e42c9868743f16fa8e52bb419cd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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());
    }
}