2026-03-27提交:分时图导入进度接口;调整任务接口位置到taskcontroller

This commit is contained in:
junzhangfm 2026-03-27 16:47:53 +08:00
parent 7c0db4830d
commit e753f81909
7 changed files with 119 additions and 24 deletions

View File

@ -8,7 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import java.util.List;
@ -23,9 +22,6 @@ import java.util.List;
@RequestMapping("/api/v1/dner")
@Slf4j
public class DnerController {
@Autowired
private IImportTaskService importTaskService;
@Autowired
private IDnerHourlyPowerOutageEventService dnerHourlyPowerOutageEventService;
@ -84,18 +80,6 @@ public class DnerController {
orgCode, startDate, endDate, eventId));
}
/**
* 通过easyexcel流式读取导入数据 -- 异步导入
*
* @param file 文件
* @return 返回结果
*/
@PostMapping("/excel/import")
public Result<String> importExcel(@RequestParam("file") MultipartFile file,
@RequestParam("eventId") Long eventId) {
return Result.success(importTaskService.importExcel(file, eventId));
}
/**
* 下载附件
*
@ -107,12 +91,6 @@ public class DnerController {
return dnerEventAttachmentService.downloadExcel(attachmentId);
}
// 2. 查询导入进度
@GetMapping("/progress/{taskNo}")
public Result<ImportTask> getProgress(@PathVariable String taskNo) {
ImportTask task = importTaskService.getProgress(taskNo);
return Result.success(task);
}
/**
* 同步区域气象数据

View File

@ -0,0 +1,59 @@
package com.southern.power.grid.controller;
import com.southern.power.grid.common.Result;
import com.southern.power.grid.entity.ImportTask;
import com.southern.power.grid.entity.ProgressVO;
import com.southern.power.grid.service.IImportTaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
* 导入任务Controller
*
* @Author junzhangfm
* @Date 2026-03-27
*/
@RestController
@RequestMapping("/api/v1/task")
@Slf4j
public class ImportTaskController {
@Autowired
private IImportTaskService importTaskService;
/**
* 通过easyexcel流式读取导入数据 -- 异步导入
*
* @param file 文件
* @return 返回结果
*/
@PostMapping("/excel/import")
public Result<String> importExcel(@RequestParam("file") MultipartFile file,
@RequestParam("eventId") Long eventId) {
return Result.success(importTaskService.importExcel(file, eventId));
}
/**
* 根据任务编号查询任务信息
*
* @param taskNo 任务编号
* @return 查询结果
*/
@GetMapping("/progress/{taskNo}")
public Result<ImportTask> getProgress(@PathVariable String taskNo) {
ImportTask task = importTaskService.getProgress(taskNo);
return Result.success(task);
}
/**
* 查询日K图同步进度
*
* @param eventId 事件ID
* @return 结果
*/
@GetMapping("/syncDailyProgress/{eventId}")
public Result<ProgressVO> getSyncDailyProgress(@PathVariable String eventId) {
return Result.success(importTaskService.getSyncDailyProgress(eventId));
}
}

View File

@ -2,7 +2,9 @@ package com.southern.power.grid.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.southern.power.grid.entity.DnerDailyPowerOutageEventSync;
import com.southern.power.grid.entity.ProgressVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
@ -13,5 +15,11 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface DnerDailyPowerOutageEventSyncMapper extends BaseMapper<DnerDailyPowerOutageEventSync> {
/**
* 统计日K图同步成功数和失败书
*
* @param eventId 事件ID
* @return 统计结果
*/
ProgressVO countSync(@Param("eventId") String eventId);
}

View File

@ -0,0 +1,20 @@
package com.southern.power.grid.entity;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 进度VO
*
* @Author junzhangfm
* @Date 2026-03-27
*/
@Data
@Accessors(chain = true)
public class ProgressVO {
private Integer total;
private Integer successCount;
private Integer failCount;
}

View File

@ -1,6 +1,7 @@
package com.southern.power.grid.service;
import com.southern.power.grid.entity.ImportTask;
import com.southern.power.grid.entity.ProgressVO;
import org.springframework.web.multipart.MultipartFile;
/**
@ -13,4 +14,12 @@ public interface IImportTaskService {
String importExcel(MultipartFile file, Long eventId);
ImportTask getProgress(String taskNo);
/**
* 查询日K图同步进度
*
* @param eventId 事件ID
* @return 结果
*/
ProgressVO getSyncDailyProgress(String eventId);
}

View File

@ -1,11 +1,12 @@
package com.southern.power.grid.service.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.southern.power.grid.dao.DnerDailyPowerOutageEventSyncMapper;
import com.southern.power.grid.dao.ImportTaskMapper;
import com.southern.power.grid.entity.ImportTask;
import com.southern.power.grid.entity.ProgressVO;
import com.southern.power.grid.enums.ImportTaskStatusEnum;
import com.southern.power.grid.service.IFileService;
import com.southern.power.grid.service.IImportTaskService;
@ -37,6 +38,9 @@ public class ImportTaskServiceImpl extends ServiceImpl<ImportTaskMapper, ImportT
@Autowired
private IFileService fileService;
@Autowired
private DnerDailyPowerOutageEventSyncMapper dnerDailyPowerOutageEventSyncMapper;
@Override
public String importExcel(MultipartFile file, Long eventId) {
// 把上传的文件流转成 **字节数组输入流**保存到内存避免Tomcat删除
@ -80,4 +84,11 @@ public class ImportTaskServiceImpl extends ServiceImpl<ImportTaskMapper, ImportT
public ImportTask getProgress(String taskNo) {
return importTaskMapper.selectOne(new LambdaQueryWrapper<ImportTask>().eq(ImportTask::getTaskNo, taskNo));
}
@Override
public ProgressVO getSyncDailyProgress(String eventId) {
// 拿这个事件ID查询分时图表按日期的年月日还有区域ID分组就是同步的总条数
// 根据事件ID查询dner_daily_power_outage_event_sync这张表就能知道这1000条里成功了多少条失败了多少条
return dnerDailyPowerOutageEventSyncMapper.countSync(eventId);
}
}

View File

@ -5,4 +5,14 @@
<!-- namespace 必须 = Mapper 接口全类名 -->
<mapper namespace="com.southern.power.grid.dao.DnerDailyPowerOutageEventSyncMapper">
<select id="countSync" resultType="com.southern.power.grid.entity.ProgressVO"
parameterType="java.lang.String">
SELECT IFNULL((SELECT COUNT(DISTINCT CONCAT(DATE(data_time), '_', org_code))
FROM dner_hourly_power_outage_event
WHERE event_id = #{eventId}), 0) AS total,
IFNULL(SUM(IF(sync.sync_status = 1, 1, 0)), 0) AS successCount,
IFNULL(SUM(IF(sync.sync_status = 2, 1, 0)), 0) AS failCount
FROM dner_daily_power_outage_event_sync sync
WHERE sync.event_id = #{eventId}
</select>
</mapper>