baoshiwei
2025-04-19 5d36e1f987ef21e44ded2e8a1d06c28094ec1e76
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package com.zhitan.peakvalley.service.impl;
 
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhitan.common.utils.DateUtils;
import com.zhitan.common.utils.StringUtils;
import com.zhitan.common.utils.time.Time24HourUtil;
import com.zhitan.peakvalley.domain.ElectricityPrice;
import com.zhitan.peakvalley.mapper.ElectricityPriceMapper;
import com.zhitan.peakvalley.service.IElectricityPriceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
 
/**
 * 【尖峰平谷电价明细】Service业务层处理
 *
 * @author ZhiTan
 * @date 2024-10-10
 */
@Service
public class ElectricityPriceServiceImpl extends ServiceImpl<ElectricityPriceMapper, ElectricityPrice> implements IElectricityPriceService {
    @Autowired
    private ElectricityPriceMapper electricityPriceMapper;
 
    /**
     * 查询【尖峰平谷电价明细】
     *
     * @param id 【尖峰平谷电价明细】主键
     * @return 【尖峰平谷电价明细】
     */
    @Override
    public ElectricityPrice selectElectricityPriceById(String id) {
        return electricityPriceMapper.selectElectricityPriceById(id);
    }
 
    /**
     * 查询【尖峰平谷电价明细】列表
     *
     * @param electricityPrice 【尖峰平谷电价明细】
     * @return 【尖峰平谷电价明细】
     */
    @Override
    public List<ElectricityPrice> selectElectricityPriceList(ElectricityPrice electricityPrice) {
        if(StringUtils.isEmpty(electricityPrice.getParentId())){
            throw new RuntimeException("父级id不能为空");
        }
        return electricityPriceMapper.selectElectricityPriceList(electricityPrice);
    }
 
    /**
     * 新增【尖峰平谷电价明细】
     *
     * @param electricityPrice 【尖峰平谷电价明细】
     * @return 结果
     */
    @Override
    public int insertElectricityPrice(ElectricityPrice electricityPrice) {
        electricityPrice.setCreateTime(DateUtils.getNowDate());
        return electricityPriceMapper.insertElectricityPrice(electricityPrice);
    }
 
    /**
     * 修改【尖峰平谷电价明细】
     *
     * @param electricityPrice 【尖峰平谷电价明细】
     * @return 结果
     */
    @Override
    public int updateElectricityPrice(ElectricityPrice electricityPrice) {
        electricityPrice.setUpdateTime(DateUtils.getNowDate());
        return electricityPriceMapper.updateElectricityPrice(electricityPrice);
    }
 
    /**
     * 批量删除【尖峰平谷电价明细】
     *
     * @param ids 需要删除的【尖峰平谷电价明细】主键
     * @return 结果
     */
    @Override
    public int deleteElectricityPriceByIds(String[] ids) {
        return electricityPriceMapper.deleteElectricityPriceByIds(ids);
    }
 
    /**
     * 删除【尖峰平谷电价明细】信息
     *
     * @param id 【尖峰平谷电价明细】主键
     * @return 结果
     */
    @Override
    public int deleteElectricityPriceById(String id) {
        return electricityPriceMapper.deleteElectricityPriceById(id);
    }
 
    @Override
    public void saveList(List<ElectricityPrice> electricityPriceList) {
        if(CollectionUtil.isEmpty(electricityPriceList)){
            throw new RuntimeException("价格明细不能为空!");
        }
        
        //校验时间是否重叠
        boolean isOverlap = checkIntersection(electricityPriceList);
        if(isOverlap){
            throw new RuntimeException("时间段存在重叠,请检查!");
        }
 
        HashMap<String,String> collect = new HashMap<>();
        electricityPriceList.forEach(electricityPrice -> {
            collect.put(DateUtils.getHhMmSs(electricityPrice.getStartTime()) + "-" + DateUtils.getHhMmSs(electricityPrice.getStopTime()),electricityPrice.getType());
        });
        boolean is24Hour = Time24HourUtil.checkTimeSpan(collect);
        if(!is24Hour){
            throw new RuntimeException("时间没有覆盖24小时");
        }
 
        String parentId = electricityPriceList.get(0).getParentId();
        LambdaQueryWrapper<ElectricityPrice> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ElectricityPrice::getParentId,parentId);
        if(electricityPriceMapper.selectCount(queryWrapper)>0) {
            electricityPriceMapper.delete(queryWrapper);
        }
        Collection<ElectricityPrice> collection = new ArrayList<>(electricityPriceList);
        saveBatch(collection);
    }
 
    public static boolean checkIntersection(List<ElectricityPrice> dtoList) {
        int length = dtoList.size();
        for (int i = 0; i < length; i++) {
            long startTimeI = dtoList.get(i).getStartTime().getTime();
            long endTimeI = dtoList.get(i).getStopTime().getTime();
 
            for (int j = i + 1; j < length; j++) {
                long startTimeJ = dtoList.get(j).getStartTime().getTime();
                long endTimeJ = dtoList.get(j).getStopTime().getTime();
 
                if (startTimeI < endTimeJ && startTimeJ < endTimeI) {
                    return true;  // 存在相交,返回true
                }
            }
        }
        return false;  // 不存在相交,返回false
    }
}