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 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 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 electricityPriceList) { if(CollectionUtil.isEmpty(electricityPriceList)){ throw new RuntimeException("价格明细不能为空!"); } //校验时间是否重叠 boolean isOverlap = checkIntersection(electricityPriceList); if(isOverlap){ throw new RuntimeException("时间段存在重叠,请检查!"); } HashMap 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 queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ElectricityPrice::getParentId,parentId); if(electricityPriceMapper.selectCount(queryWrapper)>0) { electricityPriceMapper.delete(queryWrapper); } Collection collection = new ArrayList<>(electricityPriceList); saveBatch(collection); } public static boolean checkIntersection(List 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 } }