浏览代码

etl提取出来后接口添加

wzl 6 月之前
父节点
当前提交
b4739991b3

+ 24 - 5
src/main/java/com/dskj/znzn/transData/web/dataTransfer/controller/DataTransferController.java

@@ -3,10 +3,9 @@ package com.dskj.znzn.transData.web.dataTransfer.controller;
 import com.dskj.znzn.transData.common.base.PageR;
 import com.dskj.znzn.transData.common.base.PageR;
 import com.dskj.znzn.transData.common.base.R;
 import com.dskj.znzn.transData.common.base.R;
 import com.dskj.znzn.transData.web.dataTransfer.entity.DataTransfer;
 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.inData.*;
+import com.dskj.znzn.transData.web.dataTransfer.outData.ClassificationImportDataDetailsOutData;
+import com.dskj.znzn.transData.web.dataTransfer.outData.GetStatisticalOutData;
 import com.dskj.znzn.transData.web.dataTransfer.outData.GetTimeRangeOutData;
 import com.dskj.znzn.transData.web.dataTransfer.outData.GetTimeRangeOutData;
 import com.dskj.znzn.transData.web.dataTransfer.service.IDataTransferService;
 import com.dskj.znzn.transData.web.dataTransfer.service.IDataTransferService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
@@ -68,7 +67,7 @@ public class DataTransferController {
         return R.ok();
         return R.ok();
     }
     }
 
 
-    @ApiOperation("重新转换")
+    @ApiOperation("重新导入")
     @GetMapping("/reTransfer/{id}")
     @GetMapping("/reTransfer/{id}")
     public R reTransfer(@Valid @NotNull @PathVariable Integer id) {
     public R reTransfer(@Valid @NotNull @PathVariable Integer id) {
         dataTransferService.reTransfer(id);
         dataTransferService.reTransfer(id);
@@ -80,4 +79,24 @@ public class DataTransferController {
     public R<List<GetTimeRangeOutData>> getTimeRange(@Valid @RequestBody GetTimeRangeInData data) {
     public R<List<GetTimeRangeOutData>> getTimeRange(@Valid @RequestBody GetTimeRangeInData data) {
         return R.ok(dataTransferService.getTimeRange(data));
         return R.ok(dataTransferService.getTimeRange(data));
     }
     }
+
+    @ApiOperation("获取统计信息")
+    @PostMapping("/getStatisticalData")
+    public R<GetStatisticalOutData> getStatisticalData() {
+        return R.ok(dataTransferService.getStatisticalData());
+    }
+
+    @ApiOperation("最近导入成功的数据")
+    @PostMapping("/recentlyImportedSuccessfulData")
+    public R<DataTransfer> recentlyImportedSuccessfulData() {
+        return R.ok(dataTransferService.recentlyImportedSuccessfulData());
+    }
+
+
+    @ApiOperation("分类导入数据详情")
+    @PostMapping("/classificationImportDataDetails")
+    public R<List<ClassificationImportDataDetailsOutData>> classificationImportDataDetails() {
+        return R.ok(dataTransferService.classificationImportDataDetails());
+    }
+
 }
 }

+ 3 - 0
src/main/java/com/dskj/znzn/transData/web/dataTransfer/entity/DataTransfer.java

@@ -52,6 +52,9 @@ public class DataTransfer implements Serializable {
     @ApiModelProperty("数据文件读取路径")
     @ApiModelProperty("数据文件读取路径")
     private String readDir;
     private String readDir;
 
 
+    @ApiModelProperty("归档路径")
+    private String archivePath;
+
     @ApiModelProperty("收资人")
     @ApiModelProperty("收资人")
     private String dataCollector;
     private String dataCollector;
 
 

+ 6 - 0
src/main/java/com/dskj/znzn/transData/web/dataTransfer/mapper/DataTransferMapper.java

@@ -2,8 +2,12 @@ package com.dskj.znzn.transData.web.dataTransfer.mapper;
 
 
 import com.dskj.znzn.transData.web.dataTransfer.entity.DataTransfer;
 import com.dskj.znzn.transData.web.dataTransfer.entity.DataTransfer;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dskj.znzn.transData.web.dataTransfer.outData.ClassificationImportDataDetailsOutData;
+import com.dskj.znzn.transData.web.dataTransfer.outData.ClassificationImportDataDetailsQuery;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
 
 
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  * 数据操作  Mapper 接口
  * 数据操作  Mapper 接口
@@ -15,4 +19,6 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 @Mapper
 public interface DataTransferMapper extends BaseMapper<DataTransfer> {
 public interface DataTransferMapper extends BaseMapper<DataTransfer> {
 
 
+    List<ClassificationImportDataDetailsQuery> classificationImportDataDetails();
+
 }
 }

+ 21 - 0
src/main/java/com/dskj/znzn/transData/web/dataTransfer/outData/ClassificationImportDataDetailsOutData.java

@@ -0,0 +1,21 @@
+package com.dskj.znzn.transData.web.dataTransfer.outData;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel
+public class ClassificationImportDataDetailsOutData {
+
+    @ApiModelProperty("风场编码")
+    private String windFarmCode;
+
+    @ApiModelProperty("风场名称")
+    private String windFarmName;
+
+    @ApiModelProperty("类型数组")
+    List<TypeCountData> typeCountDataList;
+}

+ 32 - 0
src/main/java/com/dskj/znzn/transData/web/dataTransfer/outData/ClassificationImportDataDetailsQuery.java

@@ -0,0 +1,32 @@
+package com.dskj.znzn.transData.web.dataTransfer.outData;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel
+public class ClassificationImportDataDetailsQuery {
+
+    @ApiModelProperty("风场编码")
+    private String windFarmCode;
+
+    @ApiModelProperty("风场名称")
+    private String windFarmName;
+
+    @ApiModelProperty("导入类型")
+    private String transferType;
+
+    @ApiModelProperty("导入类型名称")
+    private String transferName;
+
+    @ApiModelProperty("数量")
+    private Integer count;
+
+    @ApiModelProperty("最近入库时间")
+    private Date latestStorageTime;
+
+
+}

+ 20 - 0
src/main/java/com/dskj/znzn/transData/web/dataTransfer/outData/GetStatisticalOutData.java

@@ -0,0 +1,20 @@
+package com.dskj.znzn.transData.web.dataTransfer.outData;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel
+@Data
+public class GetStatisticalOutData {
+
+    @ApiModelProperty("数据入库风场统计")
+    private Integer windFarmCount;
+
+    @ApiModelProperty("导入任务成功数量")
+    private String transSuccessCount;
+
+    @ApiModelProperty("导入任务失败数量")
+    private Integer transFailCount;
+
+}

+ 27 - 0
src/main/java/com/dskj/znzn/transData/web/dataTransfer/outData/TypeCountData.java

@@ -0,0 +1,27 @@
+package com.dskj.znzn.transData.web.dataTransfer.outData;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel
+public class TypeCountData {
+
+    @ApiModelProperty("导入类型")
+    private String transferType;
+
+    @ApiModelProperty("导入类型名称")
+    private String transferName;
+
+    @ApiModelProperty("数量")
+    private Integer count = 0;
+
+    @ApiModelProperty("最近入库时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date latestStorageTime;
+
+}

+ 8 - 0
src/main/java/com/dskj/znzn/transData/web/dataTransfer/service/IDataTransferService.java

@@ -8,6 +8,8 @@ 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.EditDataTransferTaskInData;
 import com.dskj.znzn.transData.web.dataTransfer.inData.GetDataTransferInData;
 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.inData.GetTimeRangeInData;
+import com.dskj.znzn.transData.web.dataTransfer.outData.ClassificationImportDataDetailsOutData;
+import com.dskj.znzn.transData.web.dataTransfer.outData.GetStatisticalOutData;
 import com.dskj.znzn.transData.web.dataTransfer.outData.GetTimeRangeOutData;
 import com.dskj.znzn.transData.web.dataTransfer.outData.GetTimeRangeOutData;
 
 
 import java.util.List;
 import java.util.List;
@@ -33,4 +35,10 @@ public interface IDataTransferService extends IService<DataTransfer> {
     void deleteDataTransferTask(Integer id);
     void deleteDataTransferTask(Integer id);
 
 
     List<GetTimeRangeOutData> getTimeRange(GetTimeRangeInData data);
     List<GetTimeRangeOutData> getTimeRange(GetTimeRangeInData data);
+
+    GetStatisticalOutData getStatisticalData();
+
+    DataTransfer recentlyImportedSuccessfulData();
+
+    List<ClassificationImportDataDetailsOutData> classificationImportDataDetails();
 }
 }

+ 99 - 11
src/main/java/com/dskj/znzn/transData/web/dataTransfer/service/impl/DataTransferServiceImpl.java

@@ -7,13 +7,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dskj.znzn.transData.common.base.PageR;
 import com.dskj.znzn.transData.common.base.PageR;
 import com.dskj.znzn.transData.common.base.R;
 import com.dskj.znzn.transData.common.base.R;
 import com.dskj.znzn.transData.common.exception.BusinessException;
 import com.dskj.znzn.transData.common.exception.BusinessException;
+import com.dskj.znzn.transData.web.common.entity.SysConf;
+import com.dskj.znzn.transData.web.common.service.ISysConfService;
 import com.dskj.znzn.transData.web.dataTransfer.entity.DataTransfer;
 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.AddDataTransferTaskInData;
 import com.dskj.znzn.transData.web.dataTransfer.inData.EditDataTransferTaskInData;
 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.GetDataTransferInData;
 import com.dskj.znzn.transData.web.dataTransfer.inData.GetTimeRangeInData;
 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.mapper.DataTransferMapper;
-import com.dskj.znzn.transData.web.dataTransfer.outData.GetTimeRangeOutData;
+import com.dskj.znzn.transData.web.dataTransfer.outData.*;
 import com.dskj.znzn.transData.web.dataTransfer.service.IDataTransferService;
 import com.dskj.znzn.transData.web.dataTransfer.service.IDataTransferService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
@@ -38,6 +40,10 @@ import java.util.*;
 @RequiredArgsConstructor(onConstructor = @__({@Autowired}))
 @RequiredArgsConstructor(onConstructor = @__({@Autowired}))
 public class DataTransferServiceImpl extends ServiceImpl<DataTransferMapper, DataTransfer> implements IDataTransferService {
 public class DataTransferServiceImpl extends ServiceImpl<DataTransferMapper, DataTransfer> implements IDataTransferService {
 
 
+    private final DataTransferMapper dataTransferMapper;
+
+    private final ISysConfService sysConfService;
+
     @Override
     @Override
     public PageR<DataTransfer> getDataTransfer(GetDataTransferInData data) {
     public PageR<DataTransfer> getDataTransfer(GetDataTransferInData data) {
         IPage<DataTransfer> queryPage = Page.of(data.getPageNo(), data.getPageSize());
         IPage<DataTransfer> queryPage = Page.of(data.getPageNo(), data.getPageSize());
@@ -57,6 +63,7 @@ public class DataTransferServiceImpl extends ServiceImpl<DataTransferMapper, Dat
         BeanUtils.copyProperties(data, dataTransfer);
         BeanUtils.copyProperties(data, dataTransfer);
         dataTransfer.setTransferStatus(-1);
         dataTransfer.setTransferStatus(-1);
         dataTransfer.setCreateTime(new Date());
         dataTransfer.setCreateTime(new Date());
+        dataTransfer.setTransferStatus(0);
         save(dataTransfer);
         save(dataTransfer);
     }
     }
 
 
@@ -68,7 +75,7 @@ public class DataTransferServiceImpl extends ServiceImpl<DataTransferMapper, Dat
             throw new RuntimeException("数据不存在");
             throw new RuntimeException("数据不存在");
         }
         }
         if (query.getTransferStatus() == 0 || query.getTransferStatus() == 1) {
         if (query.getTransferStatus() == 0 || query.getTransferStatus() == 1) {
-            throw new RuntimeException("转换中或转换成功不能编辑");
+            throw new RuntimeException("导入中或导入成功不能编辑");
         }
         }
 
 
         DataTransfer dataTransfer = new DataTransfer();
         DataTransfer dataTransfer = new DataTransfer();
@@ -84,7 +91,7 @@ public class DataTransferServiceImpl extends ServiceImpl<DataTransferMapper, Dat
         }
         }
 
 
         if (dataTransfer.getTransferStatus() != 2) {
         if (dataTransfer.getTransferStatus() != 2) {
-            throw new RuntimeException("转换失败后才能重新转换");
+            throw new RuntimeException("导入失败后才能重新导入");
         }
         }
         dataTransfer = new DataTransfer();
         dataTransfer = new DataTransfer();
         dataTransfer.setId(id);
         dataTransfer.setId(id);
@@ -99,7 +106,7 @@ public class DataTransferServiceImpl extends ServiceImpl<DataTransferMapper, Dat
             throw new RuntimeException("数据不存在");
             throw new RuntimeException("数据不存在");
         }
         }
         if (query.getTransferStatus() == 0 || query.getTransferStatus() == 1) {
         if (query.getTransferStatus() == 0 || query.getTransferStatus() == 1) {
-            throw new RuntimeException("转换中或转换成功不能删除");
+            throw new RuntimeException("导入中或导入成功不能删除");
         }
         }
         DataTransfer dataTransfer = new DataTransfer();
         DataTransfer dataTransfer = new DataTransfer();
         dataTransfer.setId(id);
         dataTransfer.setId(id);
@@ -113,11 +120,13 @@ public class DataTransferServiceImpl extends ServiceImpl<DataTransferMapper, Dat
         wrapper.eq(DataTransfer::getWindFarmCode, data.getWindFarmCode())
         wrapper.eq(DataTransfer::getWindFarmCode, data.getWindFarmCode())
                 .eq(DataTransfer::getTransferType, data.getTransferType())
                 .eq(DataTransfer::getTransferType, data.getTransferType())
                 .eq(DataTransfer::getTransferStatus, 1)
                 .eq(DataTransfer::getTransferStatus, 1)
-                .eq(DataTransfer::getStatus, 1);
+                .eq(DataTransfer::getStatus, 1)
+                .isNotNull(DataTransfer::getDataMinTime)
+                .isNotNull(DataTransfer::getDataMaxTime);
 
 
         List<DataTransfer> datas = list(wrapper);
         List<DataTransfer> datas = list(wrapper);
-        if (null == datas) {
-            throw new BusinessException("未查询到已转化完成数据");
+        if (datas.isEmpty()) {
+            throw new BusinessException("未查询到已导入完成的数据");
         }
         }
 
 
         List<GetTimeRangeOutData> results = new ArrayList<>(datas.size());
         List<GetTimeRangeOutData> results = new ArrayList<>(datas.size());
@@ -141,8 +150,8 @@ public class DataTransferServiceImpl extends ServiceImpl<DataTransferMapper, Dat
 
 
         for (int i = 1; i < periods.size(); i++) {
         for (int i = 1; i < periods.size(); i++) {
             GetTimeRangeOutData next = periods.get(i);
             GetTimeRangeOutData next = periods.get(i);
-
-            if (current.getEndTime().after(next.getStartTime()) || current.getEndTime().equals(next.getStartTime())) {
+            // 连续数据可能时间差小一天则合并
+            if (current.getEndTime().after(new Date(next.getStartTime().getTime() - 86400000))) {
                 current.setEndTime(current.getEndTime().after(next.getEndTime()) ? current.getEndTime() : next.getEndTime());
                 current.setEndTime(current.getEndTime().after(next.getEndTime()) ? current.getEndTime() : next.getEndTime());
             } else {
             } else {
                 // 无重叠,添加当前时间段到结果列表,并移动到下一个时间段
                 // 无重叠,添加当前时间段到结果列表,并移动到下一个时间段
@@ -156,18 +165,97 @@ public class DataTransferServiceImpl extends ServiceImpl<DataTransferMapper, Dat
         return merged;
         return merged;
     }
     }
 
 
+
+    @Override
+    public GetStatisticalOutData getStatisticalData() {
+        GetStatisticalOutData data = new GetStatisticalOutData();
+
+        LambdaQueryWrapper<DataTransfer> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(DataTransfer::getStatus, 1).select(DataTransfer::getWindFarmCode, DataTransfer::getId, DataTransfer::getTransferStatus);
+        List<DataTransfer> datas = list(wrapper);
+        data.setWindFarmCount((int) datas.stream().map(DataTransfer::getWindFarmCode).distinct().count());
+
+        int total = datas.size();
+        int success = (int) datas.stream().filter(dataTransfer -> dataTransfer.getTransferStatus() == 1).count();
+        int fail = (int) datas.stream().filter(dataTransfer -> dataTransfer.getTransferStatus() == 2).count();
+
+        data.setTransSuccessCount(String.format("%s/%s", success, total));
+        data.setTransFailCount(fail);
+        return data;
+    }
+
+    @Override
+    public DataTransfer recentlyImportedSuccessfulData() {
+        LambdaQueryWrapper<DataTransfer> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(DataTransfer::getTransferStatus, 1).eq(DataTransfer::getStatus, 1);
+        wrapper.orderByDesc(DataTransfer::getUpdateTime);
+        wrapper.last("limit 1");
+        return getOne(wrapper);
+    }
+
+    @Override
+    public List<ClassificationImportDataDetailsOutData> classificationImportDataDetails() {
+        List<ClassificationImportDataDetailsQuery> datas = dataTransferMapper.classificationImportDataDetails();
+        List<SysConf> confList = sysConfService.getByType("trans_type");
+        Map<String, List<ClassificationImportDataDetailsQuery>> windFarmMap = new HashMap<>();
+
+        for (ClassificationImportDataDetailsQuery query : datas) {
+            if (windFarmMap.containsKey(query.getWindFarmCode())) {
+                windFarmMap.get(query.getWindFarmCode()).add(query);
+            } else {
+                List<ClassificationImportDataDetailsQuery> list = new ArrayList<>();
+                list.add(query);
+                windFarmMap.put(query.getWindFarmCode(), list);
+            }
+        }
+
+        List<ClassificationImportDataDetailsOutData> results = new ArrayList<>();
+        windFarmMap.forEach((key, value) -> {
+            Map<String, ClassificationImportDataDetailsQuery> typeMap = new HashMap<>();
+            for (ClassificationImportDataDetailsQuery query : value) {
+                typeMap.put(query.getTransferType(), query);
+            }
+
+            ClassificationImportDataDetailsOutData outData = new ClassificationImportDataDetailsOutData();
+            outData.setWindFarmCode(key);
+            outData.setWindFarmName(value.get(0).getWindFarmName());
+
+            List<TypeCountData> typeCountDataList = new ArrayList<>();
+            for (SysConf sysConf : confList) {
+                TypeCountData data = new TypeCountData();
+                if (typeMap.containsKey(sysConf.getParamKey())) {
+                    data.setTransferType(sysConf.getParamKey());
+                    data.setTransferName(sysConf.getParamValue());
+                    data.setCount(typeMap.get(sysConf.getParamKey()).getCount());
+                    data.setLatestStorageTime(typeMap.get(sysConf.getParamKey()).getLatestStorageTime());
+                } else {
+                    data.setTransferType(sysConf.getParamKey());
+                    data.setTransferName(sysConf.getParamValue());
+                    data.setCount(0);
+                    data.setLatestStorageTime(null);
+                }
+                typeCountDataList.add(data);
+            }
+            outData.setTypeCountDataList(typeCountDataList);
+            results.add(outData);
+        });
+
+        return results;
+    }
+
+
     public static void main(String[] args) throws ParseException {
     public static void main(String[] args) throws ParseException {
         List<GetTimeRangeOutData> results = new ArrayList<>();
         List<GetTimeRangeOutData> results = new ArrayList<>();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         List<GetTimeRangeOutData> periods = new ArrayList<>();
         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-01-01 00:00:00"), sdf.parse("2024-03-31 23:59:59")));
+        periods.add(new GetTimeRangeOutData(sdf.parse("2024-04-01 00:00:00"), sdf.parse("2024-05-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-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);
         List<GetTimeRangeOutData> mergedPeriods = mergePeriods(periods);
         for (GetTimeRangeOutData period : mergedPeriods) {
         for (GetTimeRangeOutData period : mergedPeriods) {
             System.out.println(sdf.format(period.getStartTime()) + " " + sdf.format(period.getEndTime()));
             System.out.println(sdf.format(period.getStartTime()) + " " + sdf.format(period.getEndTime()));
-
         }
         }
     }
     }
+
 }
 }

+ 8 - 0
src/main/resources/application-dev.yml

@@ -24,4 +24,12 @@ spring:
 
 
 
 
 logging:
 logging:
+  level:
+    com.baomidou.mybatisplus: debug  # MyBatis-Plus 日志级别
+    com.dskj.znzn.transData.web.transConf.mapper: debug
+    com.dskj.znzn.transData.web.waveData.mapper: debug
+    com.dskj.znzn.transData.web.dataTransfer.mapper: debug
+    com.dskj.znzn.transData.web.common.mapper: debug
+
+
   config: classpath:logback-dev.xml
   config: classpath:logback-dev.xml

+ 22 - 0
src/main/resources/mapper/DataTransferMapper.xml

@@ -2,4 +2,26 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.dskj.znzn.transData.web.dataTransfer.mapper.DataTransferMapper">
 <mapper namespace="com.dskj.znzn.transData.web.dataTransfer.mapper.DataTransferMapper">
 
 
+    <select id="classificationImportDataDetails"
+            resultType="com.dskj.znzn.transData.web.dataTransfer.outData.ClassificationImportDataDetailsQuery">
+
+        SELECT t.wind_farm_code      as windFarmCode,
+               t.transfer_type       as transferType,
+               max(a.param_value)    as transferName,
+               max(t.wind_farm_name) as windFarmName,
+               count(t.id) AS count,
+	max( t.transfer_finish_time ) AS latestStorageTime
+        FROM
+            data_transfer t LEFT JOIN sys_conf a
+        on t.transfer_type = a.param_key
+        WHERE
+            a.type = 'trans_type'
+
+          and t.`status` = 1
+          AND t.transfer_status = 1
+        GROUP BY
+            t.wind_farm_code,
+            t.transfer_type
+
+    </select>
 </mapper>
 </mapper>

+ 261 - 0
src/main/resources/static/import_data.html

@@ -0,0 +1,261 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>数据导入</title>
+    <!-- Bootstrap 5 CSS -->
+    <link href="./static/bootstrap.min.css" rel="stylesheet">
+    <style>
+        .data-block {
+            border-radius: 8px;
+            padding: 20px;
+            text-align: center;
+            margin-bottom: 20px;
+            color: #fff; /* 文字颜色为白色 */
+        }
+
+        .data-block h3 {
+            margin-bottom: 10px;
+            font-size: 1.5rem;
+        }
+
+        .data-block p {
+            font-size: 1.2rem;
+        }
+
+        /* 为每个数据块设置不同的背景颜色 */
+        .data-block.success {
+            background-color: #28a745; /* 绿色 */
+        }
+
+        .data-block.info {
+            background-color: #17a2b8; /* 青色 */
+        }
+
+        .data-block.warning {
+            background-color: #dc3545; /* 红色 */
+        }
+
+        .filter-section {
+            margin-bottom: 20px;
+        }
+
+        .filter-section .form-control {
+            margin-right: 10px;
+        }
+
+        .add-button {
+            float: right;
+        }
+    </style>
+</head>
+<body>
+<div class="container mt-5">
+    <!-- 标题 -->
+    <h1 class="text-center mb-4">数据导入及转化</h1>
+
+    <!-- 数据块 -->
+    <div class="row">
+        <div class="col-md-4">
+            <div class="data-block info">
+                <h3>数据入库风场统计(个)</h3>
+                <p>25</p>
+            </div>
+        </div>
+
+        <div class="col-md-4">
+            <div class="data-block success">
+                <h3>转换成功任务数量(个)</h3>
+                <p>150/200</p>
+            </div>
+        </div>
+        <div class="col-md-4">
+            <div class="data-block warning">
+                <h3>转换失败任务数量(个)</h3>
+                <p>49</p>
+            </div>
+        </div>
+    </div>
+
+    <br>
+    <br>
+    <br>
+    <br>
+
+    <!-- 筛选框和新增按钮 -->
+    <div class="filter-section">
+        <div class="row align-items-center">
+            <div class="col-md-3">
+                <select class="form-control">
+                    <option>选择风场</option>
+                    <option>风场A</option>
+                    <option>风场B</option>
+                    <option>风场C</option>
+                </select>
+            </div>
+            <div class="col-md-3">
+                <select class="form-control">
+                    <option>选择转化类型</option>
+                    <option>类型A</option>
+                    <option>类型B</option>
+                    <option>类型C</option>
+                </select>
+            </div>
+            <div class="col-md-3">
+                <select class="form-control">
+                    <option>选择转化状态</option>
+                    <option>成功</option>
+                    <option>失败</option>
+                    <option>进行中</option>
+                </select>
+            </div>
+            <div class="col-md-3">
+                <button class="btn btn-primary w-100" data-bs-toggle="modal" data-bs-target="#addModal">新增转换
+                </button>
+            </div>
+        </div>
+    </div>
+
+    <!-- 表格 -->
+    <div class="table-responsive">
+        <table class="table table-bordered table-hover">
+            <thead>
+            <tr>
+                <th>风场名称</th>
+                <th>任务名称</th>
+                <th>转化类型</th>
+                <th>转化状态</th>
+                <th>操作</th>
+            </tr>
+            </thead>
+            <tbody>
+            <!-- 示例数据 -->
+            <tr data-bs-toggle="collapse" data-bs-target="#row1" aria-expanded="false" aria-controls="row1">
+                <td>张崾先风电场</td>
+                <td>张崾先2024年10月到2024年12月分钟数据</td>
+                <td>SCADA分钟</td>
+                <td>转化完成</td>
+                <td>
+                    <!--                    <button class="btn btn-sm btn-primary">编辑</button>-->
+                    <!--                    <button class="btn btn-sm btn-danger">删除</button>-->
+                    <!--                    <button class="btn btn-sm btn-warning">重新转化</button>-->
+                </td>
+            </tr>
+            <tr class="collapse" id="row1">
+                <td colspan="5">
+                    <div class="p-3">
+                        <p><strong>风场编号:</strong> 001</p>
+                        <p><strong>风场名称:</strong> 张崾先风电场</p>
+                        <p><strong>任务名称:</strong> 张崾先2024年10月到2024年12月分钟数据</p>
+                        <p><strong>收资人:</strong> 魏志亮</p>
+                        <p><strong>原始数据读取路径:</strong> /data/download/collection_data/1进行中/张崾先风电场-陕西-华电/收资数据/sec</p>
+                        <p><strong>标准化数据保存保存路径:</strong> 归档地址</p>
+                        <p><strong>时间跨度:</strong> 2024-10-01 00:00:00 ~ 2024-12-31 23:50:00</p>
+                        <p><strong>时间颗粒度(秒):</strong> 600</p>
+                    </div>
+                </td>
+            </tr>
+            <!-- 更多行数据 -->
+            <tr data-bs-toggle="collapse" data-bs-target="#row2" aria-expanded="false" aria-controls="row2">
+                <td>风场B</td>
+                <td>任务2</td>
+                <td>SCADA秒级</td>
+                <td>转化失败</td>
+                <td>
+                    <button class="btn btn-sm btn-primary">编辑</button>
+                    <button class="btn btn-sm btn-danger">删除</button>
+                    <button class="btn btn-sm btn-warning">重新转化</button>
+                </td>
+            </tr>
+            <tr class="collapse" id="row2">
+                <td colspan="5">
+                    <div class="p-3">
+                        <p><strong>风场编号:</strong> 002</p>
+                        <p><strong>风场名称:</strong> 风场B</p>
+                        <p><strong>任务名称:</strong> 任务2</p>
+                        <p><strong>收资人:</strong> 魏志亮</p>
+                        <p><strong>读取路径:</strong> /path/to/data</p>
+                        <p><strong>归档保存地址:</strong></p>
+                        <p><strong>数据最小时间:</strong> 2024-10-01 00:00:00</p>
+                        <p><strong>数据最大时间:</strong> 2024-12-31 23:59:59</p>
+                        <p><strong>时间颗粒度(秒):</strong> 5</p>
+
+                        <p><strong>失败原因:</strong> 因为测试所以失败</p>
+                    </div>
+                </td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+
+    <!-- 分页 -->
+    <nav aria-label="Page navigation">
+        <ul class="pagination justify-content-center">
+            <li class="page-item disabled">
+                <a class="page-link" href="#" tabindex="-1" aria-disabled="true">上一页</a>
+            </li>
+            <li class="page-item active"><a class="page-link" href="#">1</a></li>
+            <li class="page-item"><a class="page-link" href="#">2</a></li>
+            <li class="page-item"><a class="page-link" href="#">3</a></li>
+            <li class="page-item">
+                <a class="page-link" href="#">下一页</a>
+            </li>
+        </ul>
+    </nav>
+
+    <!-- 新增转换弹窗 -->
+    <div class="modal fade" id="addModal" tabindex="-1" aria-labelledby="addModalLabel" aria-hidden="true">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title" id="addModalLabel">新增转换</h5>
+                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="关闭"></button>
+                </div>
+                <div class="modal-body">
+                    <form>
+                        <div class="mb-3">
+                            <label for="taskName" class="form-label">任务名称</label>
+                            <input type="text" class="form-control" id="taskName" placeholder="请输入任务名称">
+                        </div>
+                        <div class="mb-3">
+                            <label for="windFarm" class="form-label">选择风场名称</label>
+                            <select class="form-control" id="windFarm">
+                                <option>风场A</option>
+                                <option>风场B</option>
+                                <option>风场C</option>
+                            </select>
+                        </div>
+                        <div class="mb-3">
+                            <label for="convertType" class="form-label">选择转化类型</label>
+                            <select class="form-control" id="convertType">
+                                <option>类型A</option>
+                                <option>类型B</option>
+                                <option>类型C</option>
+                            </select>
+                        </div>
+                        <div class="mb-3">
+                            <label for="readPath" class="form-label">选择读取路径</label>
+                            <input type="text" class="form-control" id="readPath" placeholder="请输入读取路径">
+                        </div>
+
+                        <div class="mb-3">
+                            <label for="dataCollector" class="form-label">收资人</label>
+                            <input type="text" class="form-control" id="dataCollector" placeholder="">
+                        </div>
+
+                    </form>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
+                    <button type="button" class="btn btn-primary">提交</button>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!-- Bootstrap 5 JS -->
+<script src="./static/bootstrap.bundle.min.js"></script>
+</body>
+</html>