|
@@ -0,0 +1,173 @@
|
|
|
+package com.dskj.znzn.transData.web.dataTransfer.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.dskj.znzn.transData.common.base.PageR;
|
|
|
+import com.dskj.znzn.transData.common.base.R;
|
|
|
+import com.dskj.znzn.transData.common.exception.BusinessException;
|
|
|
+import com.dskj.znzn.transData.web.dataTransfer.entity.DataTransfer;
|
|
|
+import com.dskj.znzn.transData.web.dataTransfer.inData.AddDataTransferTaskInData;
|
|
|
+import com.dskj.znzn.transData.web.dataTransfer.inData.EditDataTransferTaskInData;
|
|
|
+import com.dskj.znzn.transData.web.dataTransfer.inData.GetDataTransferInData;
|
|
|
+import com.dskj.znzn.transData.web.dataTransfer.inData.GetTimeRangeInData;
|
|
|
+import com.dskj.znzn.transData.web.dataTransfer.mapper.DataTransferMapper;
|
|
|
+import com.dskj.znzn.transData.web.dataTransfer.outData.GetTimeRangeOutData;
|
|
|
+import com.dskj.znzn.transData.web.dataTransfer.service.IDataTransferService;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 数据操作 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author 魏志亮
|
|
|
+ * @since 2025-01-09
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor(onConstructor = @__({@Autowired}))
|
|
|
+public class DataTransferServiceImpl extends ServiceImpl<DataTransferMapper, DataTransfer> implements IDataTransferService {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageR<DataTransfer> getDataTransfer(GetDataTransferInData data) {
|
|
|
+ IPage<DataTransfer> queryPage = Page.of(data.getPageNo(), data.getPageSize());
|
|
|
+ LambdaQueryWrapper<DataTransfer> wrapper = Wrappers.lambdaQuery();
|
|
|
+ wrapper.eq(StringUtils.isNotBlank(data.getWindFarmCode()), DataTransfer::getWindFarmCode, data.getWindFarmCode());
|
|
|
+ wrapper.eq(null != data.getTransferStatus(), DataTransfer::getTransferStatus, data.getTransferStatus());
|
|
|
+ wrapper.eq(StringUtils.isNotBlank(data.getTransferType()), DataTransfer::getTransferType, data.getTransferType());
|
|
|
+ wrapper.eq(DataTransfer::getStatus, 1);
|
|
|
+ wrapper.orderByDesc(DataTransfer::getUpdateTime);
|
|
|
+ IPage<DataTransfer> pageData = page(queryPage, wrapper);
|
|
|
+ return PageR.page(pageData, pageData.getRecords());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void addDataTransferTask(AddDataTransferTaskInData data) {
|
|
|
+ DataTransfer dataTransfer = new DataTransfer();
|
|
|
+ BeanUtils.copyProperties(data, dataTransfer);
|
|
|
+ dataTransfer.setTransferStatus(-1);
|
|
|
+ dataTransfer.setCreateTime(new Date());
|
|
|
+ save(dataTransfer);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void editDataTransferTask(EditDataTransferTaskInData data) {
|
|
|
+
|
|
|
+ DataTransfer query = getById(data.getId());
|
|
|
+ if (query == null || query.getStatus() == 0) {
|
|
|
+ throw new RuntimeException("数据不存在");
|
|
|
+ }
|
|
|
+ if (query.getTransferStatus() == 0 || query.getTransferStatus() == 1) {
|
|
|
+ throw new RuntimeException("转换中或转换成功不能编辑");
|
|
|
+ }
|
|
|
+
|
|
|
+ DataTransfer dataTransfer = new DataTransfer();
|
|
|
+ BeanUtils.copyProperties(data, dataTransfer);
|
|
|
+ updateById(dataTransfer);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void reTransfer(Integer id) {
|
|
|
+ DataTransfer dataTransfer = getById(id);
|
|
|
+ if (dataTransfer == null || dataTransfer.getStatus() == 0) {
|
|
|
+ throw new RuntimeException("数据不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dataTransfer.getTransferStatus() != 2) {
|
|
|
+ throw new RuntimeException("转换失败后才能重新转换");
|
|
|
+ }
|
|
|
+ dataTransfer = new DataTransfer();
|
|
|
+ dataTransfer.setId(id);
|
|
|
+ dataTransfer.setTransferStatus(-1);
|
|
|
+ updateById(dataTransfer);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deleteDataTransferTask(Integer id) {
|
|
|
+ DataTransfer query = getById(id);
|
|
|
+ if (query == null || query.getStatus() == 0) {
|
|
|
+ throw new RuntimeException("数据不存在");
|
|
|
+ }
|
|
|
+ if (query.getTransferStatus() == 0 || query.getTransferStatus() == 1) {
|
|
|
+ throw new RuntimeException("转换中或转换成功不能删除");
|
|
|
+ }
|
|
|
+ DataTransfer dataTransfer = new DataTransfer();
|
|
|
+ dataTransfer.setId(id);
|
|
|
+ dataTransfer.setStatus(0);
|
|
|
+ updateById(dataTransfer);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<GetTimeRangeOutData> getTimeRange(GetTimeRangeInData data) {
|
|
|
+ LambdaQueryWrapper<DataTransfer> wrapper = Wrappers.lambdaQuery();
|
|
|
+ wrapper.eq(DataTransfer::getWindFarmCode, data.getWindFarmCode())
|
|
|
+ .eq(DataTransfer::getTransferType, data.getTransferType())
|
|
|
+ .eq(DataTransfer::getTransferStatus, 1)
|
|
|
+ .eq(DataTransfer::getStatus, 1);
|
|
|
+
|
|
|
+ List<DataTransfer> datas = list(wrapper);
|
|
|
+ if (null == datas) {
|
|
|
+ throw new BusinessException("未查询到已转化完成数据");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<GetTimeRangeOutData> results = new ArrayList<>(datas.size());
|
|
|
+ for (DataTransfer dataTransfer : datas) {
|
|
|
+ results.add(new GetTimeRangeOutData(dataTransfer.getDataMinTime(), dataTransfer.getDataMaxTime()));
|
|
|
+ }
|
|
|
+
|
|
|
+ return mergePeriods(results);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static List<GetTimeRangeOutData> mergePeriods(List<GetTimeRangeOutData> periods) {
|
|
|
+ if (periods.size() <= 1) {
|
|
|
+ return periods;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按开始时间排序
|
|
|
+ periods.sort(Comparator.comparing(GetTimeRangeOutData::getStartTime));
|
|
|
+
|
|
|
+ List<GetTimeRangeOutData> merged = new ArrayList<>();
|
|
|
+ GetTimeRangeOutData current = periods.get(0);
|
|
|
+
|
|
|
+ for (int i = 1; i < periods.size(); i++) {
|
|
|
+ GetTimeRangeOutData next = periods.get(i);
|
|
|
+
|
|
|
+ if (current.getEndTime().after(next.getStartTime()) || current.getEndTime().equals(next.getStartTime())) {
|
|
|
+ current.setEndTime(current.getEndTime().after(next.getEndTime()) ? current.getEndTime() : next.getEndTime());
|
|
|
+ } else {
|
|
|
+ // 无重叠,添加当前时间段到结果列表,并移动到下一个时间段
|
|
|
+ merged.add(current);
|
|
|
+ current = next;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 添加最后一个时间段
|
|
|
+ merged.add(current);
|
|
|
+
|
|
|
+ return merged;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) throws ParseException {
|
|
|
+ List<GetTimeRangeOutData> results = new ArrayList<>();
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ List<GetTimeRangeOutData> periods = new ArrayList<>();
|
|
|
+ periods.add(new GetTimeRangeOutData(sdf.parse("2024-01-01 00:00:00"), sdf.parse("2024-03-31 23:59:59")));
|
|
|
+ periods.add(new GetTimeRangeOutData(sdf.parse("2024-08-01 00:00:00"), sdf.parse("2024-12-31 23:59:59")));
|
|
|
+ periods.add(new GetTimeRangeOutData(sdf.parse("2024-02-01 00:00:00"), sdf.parse("2024-05-31 23:59:59")));
|
|
|
+
|
|
|
+ List<GetTimeRangeOutData> mergedPeriods = mergePeriods(periods);
|
|
|
+ for (GetTimeRangeOutData period : mergedPeriods) {
|
|
|
+ System.out.println(sdf.format(period.getStartTime()) + " " + sdf.format(period.getEndTime()));
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|