阿伏兔
2024-08-28 c2e2ce9e6e64d6d88de294afbaa09c3d6c2a2df5
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.dingzhuo.energy.project.electricityTypeSetting.service.impl;
 
 
import cn.hutool.core.date.DateUtil;
import com.dingzhuo.energy.common.utils.time.TimeType;
import com.dingzhuo.energy.data.model.domain.vo.ModelNodeIndexInfor;
import com.dingzhuo.energy.data.model.mapper.ModelNodeMapper;
import com.dingzhuo.energy.project.electricityTypeSetting.domain.dto.ElectricityDataItemListDTO;
import com.dingzhuo.energy.project.electricityTypeSetting.domain.entity.ElectricityDataItem;
import com.dingzhuo.energy.project.electricityTypeSetting.domain.enums.ElectricityTypeEnum;
import com.dingzhuo.energy.project.electricityTypeSetting.domain.vo.PeakAndValleyReportVO;
import com.dingzhuo.energy.project.electricityTypeSetting.mapper.ElectricityDataItemMapper;
import com.dingzhuo.energy.project.electricityTypeSetting.service.IElectricityDataItemService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * 尖峰平谷数据Service业务层处理
 *
 * @author sys
 * @date 2024-08-27
 */
@Service
public class ElectricityDataItemServiceImpl implements IElectricityDataItemService {
    @Resource
    private ModelNodeMapper modelNodeMapper;
    @Resource
    private ElectricityDataItemMapper electricityDataItemMapper;
 
 
    /**
     * 查询统计数据
     *
     * @param dto 请求参数
     * @return 结果
     */
    @Override
    public List<PeakAndValleyReportVO> getDataStatistics(ElectricityDataItemListDTO dto) {
        List<PeakAndValleyReportVO> reportVOList = new ArrayList<>();
        // 查询时间范围
        Date startTime = DateUtil.beginOfMonth(dto.getQueryTime());
        Date endTime = DateUtil.endOfMonth(startTime);
        String timeType = dto.getTimeType();
 
        Map<String, List<ElectricityDataItem>> electricityDataMap = new HashMap<>();
        // 查询点位信息
        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(dto.getModelCode(), dto.getNodeId());
        if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
            List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, startTime, endTime, timeType);
 
            electricityDataMap = dataItemList.stream()
                    .collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
        }
        while (!startTime.after(endTime)) {
            String mapKey = DateUtil.formatDateTime(startTime);
            List<ElectricityDataItem> dataItemList = electricityDataMap.get(mapKey);
 
            BigDecimal sharpFee = BigDecimal.ZERO;
            BigDecimal sharpPower = BigDecimal.ZERO;
            BigDecimal peakFee = BigDecimal.ZERO;
            BigDecimal peakPower = BigDecimal.ZERO;
            BigDecimal flatFee = BigDecimal.ZERO;
            BigDecimal flatPower = BigDecimal.ZERO;
            BigDecimal valleyFee = BigDecimal.ZERO;
            BigDecimal valleyPower = BigDecimal.ZERO;
 
            if (CollectionUtils.isNotEmpty(dataItemList)) {
                for (ElectricityDataItem electricityDataItem : dataItemList) {
                    String electricityType = electricityDataItem.getElectricityType();
 
                    if (ElectricityTypeEnum.SHARP.name().equals(electricityType)) {
                        sharpFee = sharpFee.add(electricityDataItem.getCost());
                        sharpPower = sharpPower.add(electricityDataItem.getElectricity());
                    } else if (ElectricityTypeEnum.PEAK.name().equals(electricityType)) {
                        peakFee = peakFee.add(electricityDataItem.getCost());
                        peakPower = peakPower.add(electricityDataItem.getElectricity());
                    } else if (ElectricityTypeEnum.FLAT.name().equals(electricityType)) {
                        flatFee = flatFee.add(electricityDataItem.getCost());
                        flatPower = flatPower.add(electricityDataItem.getElectricity());
                    } else {
                        valleyFee = valleyFee.add(electricityDataItem.getCost());
                        valleyPower = valleyPower.add(electricityDataItem.getElectricity());
                    }
                }
            }
            PeakAndValleyReportVO peakAndValleyReportVO = new PeakAndValleyReportVO(startTime, sharpFee, sharpPower,
                    peakFee, peakPower, flatFee, flatPower, valleyFee, valleyPower);
 
            reportVOList.add(peakAndValleyReportVO);
            switch (TimeType.valueOf(timeType)) {
                case HOUR:
                    startTime = DateUtil.offsetHour(startTime, 1);
                    break;
                case DAY:
                    startTime = DateUtil.offsetDay(startTime, 1);
                    break;
                case MONTH:
                    startTime = DateUtil.offsetMonth(startTime, 1);
                    break;
                default:
                    startTime = DateUtil.offsetMonth(startTime, 12);
                    break;
            }
        }
 
        return reportVOList;
    }
}