From b69dc1e3b43a642b8c24a1d42381d76d982bbd22 Mon Sep 17 00:00:00 2001 From: junzhangfm Date: Tue, 24 Mar 2026 10:14:42 +0800 Subject: [PATCH] =?UTF-8?q?2026-03-24=E6=8F=90=E4=BA=A4=EF=BC=9A=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E4=BA=8B=E4=BB=B6=E9=83=A8=E5=88=86=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=9B=E6=9F=A5=E8=AF=A2=E5=9B=BE=E6=8E=A5=E5=8F=A3=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=95=85=E9=9A=9C=E5=81=9C=E7=94=B5=E5=92=8C=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E5=81=9C=E7=94=B5=E7=94=A8=E6=88=B7=EF=BC=8C=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E6=8F=90=E7=A4=BA=E6=A1=86=E6=B1=87=E6=80=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../grid/controller/DnerEventController.java | 68 ++++++++++ .../grid/dao/DnerEventAttachmentMapper.java | 16 +++ .../grid/dao/DnerEventExportRecordMapper.java | 16 +++ .../power/grid/dao/DnerEventMapper.java | 24 ++++ .../power/grid/entity/AreaTreeReq.java | 30 +++++ .../grid/entity/DailyChartCollectVO.java | 74 +++++++++++ .../grid/entity/DailyPowerOutageEventVO.java | 33 +++++ .../entity/DnerDailyPowerOutageEvent.java | 10 ++ .../southern/power/grid/entity/DnerEvent.java | 56 +++++++++ .../grid/entity/DnerEventAttachment.java | 64 ++++++++++ .../grid/entity/DnerEventExportRecord.java | 57 +++++++++ .../power/grid/entity/DnerEventVO.java | 77 ++++++++++++ .../grid/entity/HourlyChartCollectVO.java | 54 ++++++++ .../entity/HourlyPowerOutageEventChartVO.java | 27 ++++ .../service/DnerEventAttachmentService.java | 14 +++ .../service/DnerEventExportRecordService.java | 14 +++ .../power/grid/service/DnerEventService.java | 22 ++++ .../DnerDailyPowerOutageEventServiceImpl.java | 118 ++++++++++-------- .../impl/DnerEventAttachmentServiceImpl.java | 20 +++ .../DnerEventExportRecordServiceImpl.java | 20 +++ .../service/impl/DnerEventServiceImpl.java | 55 ++++++++ ...DnerHourlyPowerOutageEventServiceImpl.java | 67 +++++----- .../DnerSiteAreaConfigurationServiceImpl.java | 54 ++++++-- .../southern/power/grid/utils/TimeUtil.java | 22 +++- .../DnerDailyPowerOutageEventMapper.xml | 2 +- src/main/resources/mapper/DnerEventMapper.xml | 15 +++ .../DnerHourlyPowerOutageEventMapper.xml | 3 +- .../DnerSiteAreaConfigurationMapper.xml | 70 ++++++++++- src/main/resources/sql/20260313-001.sql | 116 ++++++++++++----- 29 files changed, 1088 insertions(+), 130 deletions(-) create mode 100644 src/main/java/com/southern/power/grid/controller/DnerEventController.java create mode 100644 src/main/java/com/southern/power/grid/dao/DnerEventAttachmentMapper.java create mode 100644 src/main/java/com/southern/power/grid/dao/DnerEventExportRecordMapper.java create mode 100644 src/main/java/com/southern/power/grid/dao/DnerEventMapper.java create mode 100644 src/main/java/com/southern/power/grid/entity/DailyChartCollectVO.java create mode 100644 src/main/java/com/southern/power/grid/entity/DnerEvent.java create mode 100644 src/main/java/com/southern/power/grid/entity/DnerEventAttachment.java create mode 100644 src/main/java/com/southern/power/grid/entity/DnerEventExportRecord.java create mode 100644 src/main/java/com/southern/power/grid/entity/DnerEventVO.java create mode 100644 src/main/java/com/southern/power/grid/entity/HourlyChartCollectVO.java create mode 100644 src/main/java/com/southern/power/grid/service/DnerEventAttachmentService.java create mode 100644 src/main/java/com/southern/power/grid/service/DnerEventExportRecordService.java create mode 100644 src/main/java/com/southern/power/grid/service/DnerEventService.java create mode 100644 src/main/java/com/southern/power/grid/service/impl/DnerEventAttachmentServiceImpl.java create mode 100644 src/main/java/com/southern/power/grid/service/impl/DnerEventExportRecordServiceImpl.java create mode 100644 src/main/java/com/southern/power/grid/service/impl/DnerEventServiceImpl.java create mode 100644 src/main/resources/mapper/DnerEventMapper.xml diff --git a/src/main/java/com/southern/power/grid/controller/DnerEventController.java b/src/main/java/com/southern/power/grid/controller/DnerEventController.java new file mode 100644 index 0000000..748d84c --- /dev/null +++ b/src/main/java/com/southern/power/grid/controller/DnerEventController.java @@ -0,0 +1,68 @@ +package com.southern.power.grid.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.southern.power.grid.common.Result; +import com.southern.power.grid.entity.DnerEvent; +import com.southern.power.grid.entity.DnerEventVO; +import com.southern.power.grid.service.DnerEventService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 配网抢修事件 控制层 + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +@RestController +@RequestMapping("/api/v1/event") +public class DnerEventController { + + @Autowired + private DnerEventService dnerEventService; + + /** + * 新增事件 + */ + @PostMapping("/add") + public Result add(@RequestBody DnerEvent event) { + return Result.success(dnerEventService.save(event)); + } + + /** + * 根据ID删除事件(级联删除附件、导出记录) + */ + @DeleteMapping("/delete/{id}") + public Result delete(@PathVariable Long id) { + return Result.success(dnerEventService.removeById(id)); + } + + /** + * 修改事件 + */ + @PutMapping("/update") + public Result update(@RequestBody DnerEvent event) { + return Result.success(dnerEventService.updateById(event)); + } + + /** + * 根据ID查询事件 + */ + @GetMapping("/get/{id}") + public DnerEvent getById(@PathVariable Long id) { + return dnerEventService.getById(id); + } + + /** + * 查询所有事件 + */ + @GetMapping("/list") + public Result> list() { + return Result.success(dnerEventService.listVO()); + } +} diff --git a/src/main/java/com/southern/power/grid/dao/DnerEventAttachmentMapper.java b/src/main/java/com/southern/power/grid/dao/DnerEventAttachmentMapper.java new file mode 100644 index 0000000..ddf6383 --- /dev/null +++ b/src/main/java/com/southern/power/grid/dao/DnerEventAttachmentMapper.java @@ -0,0 +1,16 @@ +package com.southern.power.grid.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.southern.power.grid.entity.DnerEventAttachment; +import org.apache.ibatis.annotations.Mapper; + +/** + * 事件附件 Mapper + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +@Mapper +public interface DnerEventAttachmentMapper extends BaseMapper { + +} diff --git a/src/main/java/com/southern/power/grid/dao/DnerEventExportRecordMapper.java b/src/main/java/com/southern/power/grid/dao/DnerEventExportRecordMapper.java new file mode 100644 index 0000000..c5c5f18 --- /dev/null +++ b/src/main/java/com/southern/power/grid/dao/DnerEventExportRecordMapper.java @@ -0,0 +1,16 @@ +package com.southern.power.grid.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.southern.power.grid.entity.DnerEventExportRecord; +import org.apache.ibatis.annotations.Mapper; + +/** + * 事件导出记录 Mapper + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +@Mapper +public interface DnerEventExportRecordMapper extends BaseMapper { + +} diff --git a/src/main/java/com/southern/power/grid/dao/DnerEventMapper.java b/src/main/java/com/southern/power/grid/dao/DnerEventMapper.java new file mode 100644 index 0000000..3a82638 --- /dev/null +++ b/src/main/java/com/southern/power/grid/dao/DnerEventMapper.java @@ -0,0 +1,24 @@ +package com.southern.power.grid.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.southern.power.grid.entity.DnerEvent; +import com.southern.power.grid.entity.DnerEventVO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 配网抢修事件 Mapper + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +@Mapper +public interface DnerEventMapper extends BaseMapper { + /** + * 查询事件列表,包含事件、附件信息 + * + * @return 事件列表 + */ + List listVO(); +} diff --git a/src/main/java/com/southern/power/grid/entity/AreaTreeReq.java b/src/main/java/com/southern/power/grid/entity/AreaTreeReq.java index b6b0bb3..f615771 100644 --- a/src/main/java/com/southern/power/grid/entity/AreaTreeReq.java +++ b/src/main/java/com/southern/power/grid/entity/AreaTreeReq.java @@ -80,6 +80,36 @@ public class AreaTreeReq { */ Double pastTimePowerOutageRatioCount; + /** + * 未来XX小时/天 + */ + Integer rainFutureTime; + + /** + * 未来XX小时/天的累计降雨量超过的mm + */ + Double futureTimeRainCount; + + /** + * 未来XX小时/天 + */ + Integer futureTempPastTime; + + /** + * 未来XX小时/天的平均气温超过的℃ + */ + Double futureTimeAvgTempCount; + + /** + * 未来XX小时/天 + */ + Integer futureWindPastTime; + + /** + * 未来XX小时/天的极大风速超过的m/s + */ + Double futureTimeMaxWindCount; + // ============== 其他属性 ============ /** * 是否开启高级筛选 0-未开启 1-开启 diff --git a/src/main/java/com/southern/power/grid/entity/DailyChartCollectVO.java b/src/main/java/com/southern/power/grid/entity/DailyChartCollectVO.java new file mode 100644 index 0000000..2d5106c --- /dev/null +++ b/src/main/java/com/southern/power/grid/entity/DailyChartCollectVO.java @@ -0,0 +1,74 @@ +package com.southern.power.grid.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * K线图单个时间点汇总对象 + * + * @author: junzhangfm + * @date: 2026/3/24 + **/ +@Data +@Accessors(chain = true) +public class DailyChartCollectVO { + /** + * 日累计停电影响数 + */ + private Integer userCount; + + /** + * 故障停电影响用户总数 + */ + private Integer faultUserCount; + + /** + * 计划停电影响用户数 + */ + private Integer scheduledUserCount; + + /** + * K线数组,每一项包含起始值、结束值、最低、最高 + */ + private List klineObj; + + /** + * 近5/10/20/30日其下各县区23时停电用户数累加/县数量 + */ + private Integer ma5Obj; + private Integer ma10Obj; + private Integer ma20Obj; + private Integer ma30Obj; + + /** + * 日累计降雨量 + */ + private Double cumulativeRainObj; + + /** + * 平均降雨量 + */ + private Double avgRainObj; + + /** + * 平均气温 + */ + private Double avgTempObj; + + /** + * 最大气温 + */ + private Double maxTempObj; + + /** + * 最低气温 + */ + private Double minTempObj; + + /** + * 风速 + */ + private Double windSpeedObj; +} diff --git a/src/main/java/com/southern/power/grid/entity/DailyPowerOutageEventVO.java b/src/main/java/com/southern/power/grid/entity/DailyPowerOutageEventVO.java index 005d596..38ab76d 100644 --- a/src/main/java/com/southern/power/grid/entity/DailyPowerOutageEventVO.java +++ b/src/main/java/com/southern/power/grid/entity/DailyPowerOutageEventVO.java @@ -2,6 +2,7 @@ package com.southern.power.grid.entity; import lombok.Data; +import java.util.ArrayList; import java.util.List; /** @@ -22,6 +23,16 @@ public class DailyPowerOutageEventVO { */ private List userCounts; + /** + * 故障停电影响用户总数 + */ + private List faultUserCountList; + + /** + * 计划停电影响用户数 + */ + private List scheduledUserCountList; + /** * K线数组,每一项包含起始值、结束值、最低、最高 */ @@ -64,4 +75,26 @@ public class DailyPowerOutageEventVO { * 风速 */ private List windSpeed; + + /** + * 汇总集合 + */ + List collectVOList; + + public void initList() { + kline = new ArrayList<>(); + userCounts = new ArrayList<>(); + cumulativeRain = new ArrayList<>(); + avgRain = new ArrayList<>(); + avgTemp = new ArrayList<>(); + maxTemp = new ArrayList<>(); + minTemp = new ArrayList<>(); + windSpeed = new ArrayList<>(); + ma5 = new ArrayList<>(); + ma10 = new ArrayList<>(); + ma20 = new ArrayList<>(); + ma30 = new ArrayList<>(); + faultUserCountList = new ArrayList<>(); + scheduledUserCountList = new ArrayList<>(); + } } diff --git a/src/main/java/com/southern/power/grid/entity/DnerDailyPowerOutageEvent.java b/src/main/java/com/southern/power/grid/entity/DnerDailyPowerOutageEvent.java index 96d6ef1..4e7f97c 100644 --- a/src/main/java/com/southern/power/grid/entity/DnerDailyPowerOutageEvent.java +++ b/src/main/java/com/southern/power/grid/entity/DnerDailyPowerOutageEvent.java @@ -93,6 +93,16 @@ public class DnerDailyPowerOutageEvent { */ private Integer maxUserCount; + /** + * 故障停电影响用户总数 + */ + private Integer faultUserCount; + + /** + * 计划停电影响用户数 + */ + private Integer scheduledUserCount; + /** * 停电状态(1-待停电;2-停电中;3-已复电) */ diff --git a/src/main/java/com/southern/power/grid/entity/DnerEvent.java b/src/main/java/com/southern/power/grid/entity/DnerEvent.java new file mode 100644 index 0000000..8ccfda5 --- /dev/null +++ b/src/main/java/com/southern/power/grid/entity/DnerEvent.java @@ -0,0 +1,56 @@ +package com.southern.power.grid.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 配网抢修事件主表 + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +@Data +@TableName("dner_event") +public class DnerEvent { + + /** + * 事件ID + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 事件名称 + */ + private String eventName; + + /** + * 事件描述 + */ + private String eventDesc; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime createTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime updateTime; +} diff --git a/src/main/java/com/southern/power/grid/entity/DnerEventAttachment.java b/src/main/java/com/southern/power/grid/entity/DnerEventAttachment.java new file mode 100644 index 0000000..57f352d --- /dev/null +++ b/src/main/java/com/southern/power/grid/entity/DnerEventAttachment.java @@ -0,0 +1,64 @@ +package com.southern.power.grid.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 事件附件表 + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +@Data +@TableName("dner_event_attachment") +public class DnerEventAttachment { + + /** + * 附件ID + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 关联事件ID + */ + private Long eventId; + + /** + * 文件名 + */ + private String fileName; + + /** + * 文件存储路径 + */ + private String filePath; + + /** + * 文件类型 + */ + private String fileType; + + /** + * 文件大小(字节) + */ + private Long fileSize; + + /** + * 是否最新附件(1:是 0:否) + */ + private Integer isLatest; + + /** + * 上传人 + */ + private String creator; + + /** + * 上传时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; +} diff --git a/src/main/java/com/southern/power/grid/entity/DnerEventExportRecord.java b/src/main/java/com/southern/power/grid/entity/DnerEventExportRecord.java new file mode 100644 index 0000000..5abd493 --- /dev/null +++ b/src/main/java/com/southern/power/grid/entity/DnerEventExportRecord.java @@ -0,0 +1,57 @@ +package com.southern.power.grid.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 事件导出记录表 + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +@Data +@TableName("dner_event_export_record") +public class DnerEventExportRecord { + + /** + * 导出记录ID + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 关联事件ID + */ + private Long eventId; + + /** + * 导出时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime exportTime; + + /** + * 导出人 + */ + private String exporter; + + /** + * 导出文件名 + */ + private String fileName; + + /** + * 导出文件路径 + */ + private String filePath; + + /** + * 导出文件类型 + */ + private String fileType; +} \ No newline at end of file diff --git a/src/main/java/com/southern/power/grid/entity/DnerEventVO.java b/src/main/java/com/southern/power/grid/entity/DnerEventVO.java new file mode 100644 index 0000000..163a5c0 --- /dev/null +++ b/src/main/java/com/southern/power/grid/entity/DnerEventVO.java @@ -0,0 +1,77 @@ +package com.southern.power.grid.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 配网抢修事件VO + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +@Data +public class DnerEventVO { + /** + * 事件ID + */ + private Long id; + + /** + * 事件名称 + */ + private String eventName; + + /** + * 事件描述 + */ + private String eventDesc; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime createTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime updateTime; + + // ========================= 附件信息 =================================== + /** + * 附件ID + */ + private Long attachmentId; + + /** + * 文件名 + */ + private String fileName; + + /** + * 文件类型 + */ + private String fileType; + + // =========================== 导出图表记录 ===================================== + /** + * 导出图表记录 + */ + private List eventExportRecordList; +} diff --git a/src/main/java/com/southern/power/grid/entity/HourlyChartCollectVO.java b/src/main/java/com/southern/power/grid/entity/HourlyChartCollectVO.java new file mode 100644 index 0000000..ad59ffb --- /dev/null +++ b/src/main/java/com/southern/power/grid/entity/HourlyChartCollectVO.java @@ -0,0 +1,54 @@ +package com.southern.power.grid.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 分时图单个时间点汇总对象 + * + * @author: junzhangfm + * @date: 2026/3/24 + **/ +@Data +@Accessors(chain = true) +public class HourlyChartCollectVO { + /** + * 停电影响用户总数 + */ + private Integer powerOutageUserCount; + + /** + * 平均气温 + */ + private Double avgTem; + + /** + * 小时最大气温 + */ + private Double maxTem; + + /** + * 小时最低气温 + */ + private Double minTem; + + /** + * 小时降雨量 + */ + private Double prec; + + /** + * 小时极大风速 + */ + private Double wind; + + /** + * 故障停电影响用户总数 + */ + private Integer faultUserCount; + + /** + * 计划停电影响用户数 + */ + private Integer scheduledUserCount; +} diff --git a/src/main/java/com/southern/power/grid/entity/HourlyPowerOutageEventChartVO.java b/src/main/java/com/southern/power/grid/entity/HourlyPowerOutageEventChartVO.java index b358011..cee617f 100644 --- a/src/main/java/com/southern/power/grid/entity/HourlyPowerOutageEventChartVO.java +++ b/src/main/java/com/southern/power/grid/entity/HourlyPowerOutageEventChartVO.java @@ -2,6 +2,7 @@ package com.southern.power.grid.entity; import lombok.Data; +import java.util.ArrayList; import java.util.List; /** @@ -22,6 +23,16 @@ public class HourlyPowerOutageEventChartVO { */ private List powerOutageUserCountList; + /** + * 故障停电影响用户总数 + */ + private List faultUserCountList; + + /** + * 计划停电影响用户数 + */ + private List scheduledUserCountList; + /** * 平均气温 */ @@ -46,4 +57,20 @@ public class HourlyPowerOutageEventChartVO { * 小时极大风速 */ private List windList; + + /** + * 汇总集合 + */ + private List collectVOList; + + public void initList() { + powerOutageUserCountList = new ArrayList<>(); + faultUserCountList = new ArrayList<>(); + scheduledUserCountList = new ArrayList<>(); + avgTemList = new ArrayList<>(); + maxTemList = new ArrayList<>(); + minTemList = new ArrayList<>(); + precList = new ArrayList<>(); + windList = new ArrayList<>(); + } } diff --git a/src/main/java/com/southern/power/grid/service/DnerEventAttachmentService.java b/src/main/java/com/southern/power/grid/service/DnerEventAttachmentService.java new file mode 100644 index 0000000..020075d --- /dev/null +++ b/src/main/java/com/southern/power/grid/service/DnerEventAttachmentService.java @@ -0,0 +1,14 @@ +package com.southern.power.grid.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.southern.power.grid.entity.DnerEventAttachment; + +/** + * 事件附件 服务接口 + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +public interface DnerEventAttachmentService extends IService { + +} \ No newline at end of file diff --git a/src/main/java/com/southern/power/grid/service/DnerEventExportRecordService.java b/src/main/java/com/southern/power/grid/service/DnerEventExportRecordService.java new file mode 100644 index 0000000..ff0211b --- /dev/null +++ b/src/main/java/com/southern/power/grid/service/DnerEventExportRecordService.java @@ -0,0 +1,14 @@ +package com.southern.power.grid.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.southern.power.grid.entity.DnerEventExportRecord; + +/** + * 事件导出记录 服务接口 + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +public interface DnerEventExportRecordService extends IService { + +} diff --git a/src/main/java/com/southern/power/grid/service/DnerEventService.java b/src/main/java/com/southern/power/grid/service/DnerEventService.java new file mode 100644 index 0000000..9f7a9aa --- /dev/null +++ b/src/main/java/com/southern/power/grid/service/DnerEventService.java @@ -0,0 +1,22 @@ +package com.southern.power.grid.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.southern.power.grid.entity.DnerEvent; +import com.southern.power.grid.entity.DnerEventVO; + +import java.util.List; + +/** + * 配网抢修事件 服务接口 + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +public interface DnerEventService extends IService { + /** + * 查询事件列表 + * + * @return 事件列表 + */ + List listVO(); +} diff --git a/src/main/java/com/southern/power/grid/service/impl/DnerDailyPowerOutageEventServiceImpl.java b/src/main/java/com/southern/power/grid/service/impl/DnerDailyPowerOutageEventServiceImpl.java index 7ccd0a2..20ab310 100644 --- a/src/main/java/com/southern/power/grid/service/impl/DnerDailyPowerOutageEventServiceImpl.java +++ b/src/main/java/com/southern/power/grid/service/impl/DnerDailyPowerOutageEventServiceImpl.java @@ -2,10 +2,12 @@ package com.southern.power.grid.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.southern.power.grid.dao.DnerDailyPowerOutageEventMapper; +import com.southern.power.grid.entity.DailyChartCollectVO; import com.southern.power.grid.entity.DailyPowerOutageEventVO; import com.southern.power.grid.entity.DnerDailyPowerOutageEvent; import com.southern.power.grid.service.IDnerDailyPowerOutageEventService; import com.southern.power.grid.utils.TimeUtil; +import lombok.NonNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -34,69 +36,77 @@ public class DnerDailyPowerOutageEventServiceImpl orgCode, beforeNumDays, endDate); Map dateTimeAndEntityMap = dataList.stream().collect(Collectors.toMap( DnerDailyPowerOutageEvent::getDataTime, Function.identity(), (k1, k2) -> k1)); - List> kline = new ArrayList<>(); - List userCounts = new ArrayList<>(); - List cumulativeRain = new ArrayList<>(); - List avgRain = new ArrayList<>(); - List avgTemp = new ArrayList<>(); - List maxTemp = new ArrayList<>(); - List minTemp = new ArrayList<>(); - List windSpeed = new ArrayList<>(); - List ma5List = new ArrayList<>(); - List ma10List = new ArrayList<>(); - List ma20List = new ArrayList<>(); - List ma30List = new ArrayList<>(); + DailyPowerOutageEventVO result = new DailyPowerOutageEventVO(); + result.initList(); List dateTimeList = TimeUtil.getBetweenDates(startDate, endDate); // 获取开始时间到结束时间每一天的数组 dateTimeList.forEach(e -> { // 遍历开始时间和结束时间的日期 DnerDailyPowerOutageEvent event = dateTimeAndEntityMap.get(e); if (Objects.isNull(event)) { // 数据为空,全部默认为0值 - List klineE = Arrays.asList(0, 0, 0, 0); - kline.add(klineE); - cumulativeRain.add(0.0); - avgRain.add(0.0); - avgTemp.add(0.0); - maxTemp.add(0.0); - minTemp.add(0.0); - ma5List.add(0); - ma10List.add(0); - ma20List.add(0); - ma30List.add(0); - windSpeed.add(0.0); - userCounts.add(0); - } else { - List klineE = Arrays.asList(event.getStarUserCount(), event.getEndUserCount(), - event.getMinUserCount(), event.getMaxUserCount()); - kline.add(klineE); - cumulativeRain.add(Double.valueOf(event.getDailyPrecipitation())); - avgRain.add(Double.valueOf(event.getHourlyPrecipitation())); - avgTemp.add(Double.valueOf(event.getTemperature())); - maxTemp.add(Double.valueOf(event.getHourlyMaxTemperature())); - minTemp.add(Double.valueOf(event.getHourlyMinTemperature())); - ma5List.add(getMa(event, dateTimeAndEntityMap, 5)); - ma10List.add(getMa(event, dateTimeAndEntityMap, 10)); - ma20List.add(getMa(event, dateTimeAndEntityMap, 20)); - ma30List.add(getMa(event, dateTimeAndEntityMap, 30)); - windSpeed.add(Double.valueOf(event.getExtremeWindSpeedHourly())); - userCounts.add(event.getUserCount()); + setZeroData(result); + } else { // 数据不为空,正常赋值 + setDailyData(event, result, dateTimeAndEntityMap); } }); - DailyPowerOutageEventVO result = new DailyPowerOutageEventVO(); - result.setFullDates(dateTimeList); // 日期列表 - result.setKline(kline); // K线数组,每一项包含起始值、结束值、最低、最高 - result.setCumulativeRain(cumulativeRain); // 日累计降雨量 - result.setAvgRain(avgRain); // 平均降雨量 - result.setAvgTemp(avgTemp); // 平均气温 - result.setMaxTemp(maxTemp); // 最大气温 - result.setMinTemp(minTemp); // 最低气温 - result.setMa5(ma5List); // ma5 - result.setMa10(ma10List); - result.setMa20(ma20List); - result.setMa30(ma30List); - result.setWindSpeed(windSpeed); - result.setUserCounts(userCounts); + result.setFullDates(dateTimeList.stream().map( + e -> e.replace("-", "/")).collect(Collectors.toList())); // 日期列表 + result.setCollectVOList(getCollectVOList(result)); return result; } + private static @NonNull List getCollectVOList(DailyPowerOutageEventVO result) { + List collectVOList = new ArrayList<>(); + for (int i = 0; i < result.getUserCounts().size(); i++) { + collectVOList.add(new DailyChartCollectVO().setUserCount(result.getUserCounts().get(i)) + .setKlineObj(result.getKline().get(i)).setMa5Obj(result.getMa5().get(i)) + .setMa10Obj(result.getMa10().get(i)).setMa20Obj(result.getMa20().get(i)) + .setMa30Obj(result.getMa30().get(i)).setCumulativeRainObj(result.getCumulativeRain().get(i)) + .setAvgRainObj(result.getAvgRain().get(i)).setAvgTempObj(result.getAvgTemp().get(i)) + .setMaxTempObj(result.getMaxTemp().get(i)).setMinTempObj(result.getMinTemp().get(i)) + .setWindSpeedObj(result.getWindSpeed().get(i)) + .setFaultUserCount(result.getFaultUserCountList().get(i)) + .setScheduledUserCount(result.getScheduledUserCountList().get(i))); + } + return collectVOList; + } + + private static void setDailyData(DnerDailyPowerOutageEvent event, DailyPowerOutageEventVO result, + Map dateTimeAndEntityMap) { + List klineE = Arrays.asList(event.getStarUserCount(), event.getEndUserCount(), + event.getMinUserCount(), event.getMaxUserCount()); + result.getKline().add(klineE); + result.getCumulativeRain().add(Double.valueOf(event.getDailyPrecipitation())); + result.getAvgRain().add(Double.valueOf(event.getHourlyPrecipitation())); + result.getAvgTemp().add(Double.valueOf(event.getTemperature())); + result.getMaxTemp().add(Double.valueOf(event.getHourlyMaxTemperature())); + result.getMinTemp().add(Double.valueOf(event.getHourlyMinTemperature())); + result.getMa5().add(getMa(event, dateTimeAndEntityMap, 5)); + result.getMa10().add(getMa(event, dateTimeAndEntityMap, 10)); + result.getMa20().add(getMa(event, dateTimeAndEntityMap, 20)); + result.getMa30().add(getMa(event, dateTimeAndEntityMap, 30)); + result.getWindSpeed().add(Double.valueOf(event.getExtremeWindSpeedHourly())); + result.getUserCounts().add(event.getUserCount()); + result.getFaultUserCountList().add(event.getFaultUserCount()); + result.getScheduledUserCountList().add(event.getScheduledUserCount()); + } + + private static void setZeroData(DailyPowerOutageEventVO result) { + List klineE = Arrays.asList(0, 0, 0, 0); + result.getKline().add(klineE); + result.getCumulativeRain().add(0.0); + result.getAvgRain().add(0.0); + result.getAvgTemp().add(0.0); + result.getMaxTemp().add(0.0); + result.getMinTemp().add(0.0); + result.getMa5().add(0); + result.getMa10().add(0); + result.getMa20().add(0); + result.getMa30().add(0); + result.getWindSpeed().add(0.0); + result.getUserCounts().add(0); + result.getFaultUserCountList().add(0); + result.getScheduledUserCountList().add(0); + } + private static int getMa(DnerDailyPowerOutageEvent event, Map dateTimeAndEntityMap, int maNum) { diff --git a/src/main/java/com/southern/power/grid/service/impl/DnerEventAttachmentServiceImpl.java b/src/main/java/com/southern/power/grid/service/impl/DnerEventAttachmentServiceImpl.java new file mode 100644 index 0000000..4a92e7a --- /dev/null +++ b/src/main/java/com/southern/power/grid/service/impl/DnerEventAttachmentServiceImpl.java @@ -0,0 +1,20 @@ +package com.southern.power.grid.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.southern.power.grid.dao.DnerEventAttachmentMapper; +import com.southern.power.grid.entity.DnerEventAttachment; +import com.southern.power.grid.service.DnerEventAttachmentService; +import org.springframework.stereotype.Service; + +/** + * 事件附件 服务实现类 + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +@Service +public class DnerEventAttachmentServiceImpl + extends ServiceImpl + implements DnerEventAttachmentService { + +} diff --git a/src/main/java/com/southern/power/grid/service/impl/DnerEventExportRecordServiceImpl.java b/src/main/java/com/southern/power/grid/service/impl/DnerEventExportRecordServiceImpl.java new file mode 100644 index 0000000..0ec7b2c --- /dev/null +++ b/src/main/java/com/southern/power/grid/service/impl/DnerEventExportRecordServiceImpl.java @@ -0,0 +1,20 @@ +package com.southern.power.grid.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.southern.power.grid.dao.DnerEventExportRecordMapper; +import com.southern.power.grid.entity.DnerEventExportRecord; +import com.southern.power.grid.service.DnerEventExportRecordService; +import org.springframework.stereotype.Service; + +/** + * 事件导出记录 服务实现类 + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +@Service +public class DnerEventExportRecordServiceImpl + extends ServiceImpl + implements DnerEventExportRecordService { + +} \ No newline at end of file diff --git a/src/main/java/com/southern/power/grid/service/impl/DnerEventServiceImpl.java b/src/main/java/com/southern/power/grid/service/impl/DnerEventServiceImpl.java new file mode 100644 index 0000000..4647693 --- /dev/null +++ b/src/main/java/com/southern/power/grid/service/impl/DnerEventServiceImpl.java @@ -0,0 +1,55 @@ +package com.southern.power.grid.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.southern.power.grid.dao.DnerEventExportRecordMapper; +import com.southern.power.grid.dao.DnerEventMapper; +import com.southern.power.grid.entity.DnerEvent; +import com.southern.power.grid.entity.DnerEventExportRecord; +import com.southern.power.grid.entity.DnerEventVO; +import com.southern.power.grid.service.DnerEventService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 配网抢修事件 服务实现类 + * + * @author: junzhangfm + * @date: 2026/3/23 + **/ +@Service +public class DnerEventServiceImpl extends ServiceImpl + implements DnerEventService { + @Autowired + private DnerEventMapper dnerEventMapper; + + @Autowired + private DnerEventExportRecordMapper dnerEventExportRecordMapper; + + @Override + public List listVO() { + List dnerEventVOS = dnerEventMapper.listVO(); + if (!CollectionUtil.isEmpty(dnerEventVOS)) { + List dnerEventExportRecords = dnerEventExportRecordMapper.selectList( + new QueryWrapper().in("event_id", + dnerEventVOS.stream().map(DnerEventVO::getId).collect(Collectors.toList()))); + // 结果按eventId分组获取map + Map> groupMap = dnerEventExportRecords.stream().collect( + Collectors.groupingBy(DnerEventExportRecord::getEventId)); + // map中的value要按导出时间倒叙排列 + groupMap.values().forEach(list -> list.sort(( + a1, a2) -> a2.getExportTime().compareTo(a1.getExportTime()))); + // 塞入导出记录 + dnerEventVOS.forEach(e -> { + e.setEventExportRecordList(groupMap.get(e.getId())); + }); + } + return dnerEventVOS; + } +} diff --git a/src/main/java/com/southern/power/grid/service/impl/DnerHourlyPowerOutageEventServiceImpl.java b/src/main/java/com/southern/power/grid/service/impl/DnerHourlyPowerOutageEventServiceImpl.java index ff56a60..8a4c536 100644 --- a/src/main/java/com/southern/power/grid/service/impl/DnerHourlyPowerOutageEventServiceImpl.java +++ b/src/main/java/com/southern/power/grid/service/impl/DnerHourlyPowerOutageEventServiceImpl.java @@ -3,12 +3,11 @@ package com.southern.power.grid.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.southern.power.grid.dao.DnerHourlyPowerOutageEventMapper; import com.southern.power.grid.entity.DnerHourlyPowerOutageEvent; +import com.southern.power.grid.entity.HourlyChartCollectVO; import com.southern.power.grid.entity.HourlyPowerOutageEventChartVO; import com.southern.power.grid.service.IDnerHourlyPowerOutageEventService; import com.southern.power.grid.utils.TimeUtil; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; @@ -31,9 +30,6 @@ public class DnerHourlyPowerOutageEventServiceImpl @Resource private DnerHourlyPowerOutageEventMapper dnerHourlyPowerOutageEventMapper; - - - @Override public HourlyPowerOutageEventChartVO queryIntradayData(String orgCode, String startDate, String endDate) { startDate = startDate.substring(0, 13) + ":00"; @@ -42,45 +38,52 @@ public class DnerHourlyPowerOutageEventServiceImpl orgCode, startDate, endDate); Map dateTimeAndEntityMap = dataList.stream().collect(Collectors.toMap( DnerHourlyPowerOutageEvent::getDataTime, Function.identity(), (k1, k2) -> k1)); - List powerOutageUserCountList = new ArrayList<>(); - List avgTemList = new ArrayList<>(); - List maxTemList = new ArrayList<>(); - List minTemList = new ArrayList<>(); - List precList = new ArrayList<>(); - List windList = new ArrayList<>(); + HourlyPowerOutageEventChartVO result = new HourlyPowerOutageEventChartVO(); + result.initList(); List dateTimeList = TimeUtil.generateHourListAll(startDate, endDate); // 获取开始时间到结束时间的小时数组 dateTimeList.forEach(e -> { DnerHourlyPowerOutageEvent event = dateTimeAndEntityMap.get(e); if (Objects.isNull(event)) { // 数据为空,全部默认为0值 - powerOutageUserCountList.add(0); // 停电影响用户总数 - avgTemList.add(0.0); // 平均气温 - maxTemList.add(0.0); // 小时最大气温 - minTemList.add(0.0); // 小时最低气温 - precList.add(0.0); // 小时降雨量 - windList.add(0.0); // 小时极大风速 + setZeroData(result); } else { - powerOutageUserCountList.add(event.getUserCount()); // 停电影响用户总数 - avgTemList.add(Double.valueOf(event.getTemperature())); // 平均气温 - maxTemList.add(Double.valueOf(event.getHourlyMaxTemperature())); // 小时最大气温 - minTemList.add(Double.valueOf(event.getHourlyMinTemperature())); // 小时最低气温 - precList.add(Double.valueOf(event.getHourlyPrecipitation())); // 小时降雨量 - windList.add(Double.valueOf(event.getExtremeWindSpeedHourly())); // 小时极大风速 + setHourlyData(result, event); } }); - HourlyPowerOutageEventChartVO result = new HourlyPowerOutageEventChartVO(); result.setDateList(TimeUtil.generateHourList(startDate, endDate)); // 日期列表 - result.setPowerOutageUserCountList(powerOutageUserCountList); - result.setAvgTemList(avgTemList); - result.setMaxTemList(maxTemList); - result.setMinTemList(minTemList); - result.setPrecList(precList); - result.setWindList(windList); + List collectVOList = new ArrayList<>(); + for (int i = 0; i < result.getPowerOutageUserCountList().size(); i++) { + collectVOList.add(new HourlyChartCollectVO() + .setPowerOutageUserCount(result.getPowerOutageUserCountList().get(i)) + .setAvgTem(result.getAvgTemList().get(i)).setMaxTem(result.getMaxTemList().get(i)) + .setMinTem(result.getMinTemList().get(i)).setPrec(result.getPrecList().get(i)) + .setWind(result.getWindList().get(i)).setFaultUserCount(result.getFaultUserCountList().get(i)) + .setScheduledUserCount(result.getScheduledUserCountList().get(i))); + } + result.setCollectVOList(collectVOList); return result; } + private static void setHourlyData(HourlyPowerOutageEventChartVO result, DnerHourlyPowerOutageEvent event) { + result.getPowerOutageUserCountList().add(event.getUserCount()); // 停电影响用户总数 + result.getFaultUserCountList().add(event.getFaultUserCount()); // 故障停电影响用户总数 + result.getScheduledUserCountList().add(event.getScheduledUserCount()); // 计划停电影响用户总数 + result.getAvgTemList().add(Double.valueOf(event.getTemperature())); // 平均气温 + result.getMaxTemList().add(Double.valueOf(event.getHourlyMaxTemperature())); // 小时最大气温 + result.getMinTemList().add(Double.valueOf(event.getHourlyMinTemperature())); // 小时最低气温 + result.getPrecList().add(Double.valueOf(event.getHourlyPrecipitation())); // 小时降雨量 + result.getWindList().add(Double.valueOf(event.getExtremeWindSpeedHourly())); // 小时极大风速 + } - - + private static void setZeroData(HourlyPowerOutageEventChartVO result) { + result.getPowerOutageUserCountList().add(0); // 停电影响用户总数 + result.getFaultUserCountList().add(0); // 故障停电影响用户总数 + result.getScheduledUserCountList().add(0); // 计划停电影响用户总数 + result.getAvgTemList().add(0.0); // 平均气温 + result.getMaxTemList().add(0.0); // 小时最大气温 + result.getMinTemList().add(0.0); // 小时最低气温 + result.getPrecList().add(0.0); // 小时降雨量 + result.getWindList().add(0.0); // 小时极大风速 + } } diff --git a/src/main/java/com/southern/power/grid/service/impl/DnerSiteAreaConfigurationServiceImpl.java b/src/main/java/com/southern/power/grid/service/impl/DnerSiteAreaConfigurationServiceImpl.java index 47a7a80..a1c6cd4 100644 --- a/src/main/java/com/southern/power/grid/service/impl/DnerSiteAreaConfigurationServiceImpl.java +++ b/src/main/java/com/southern/power/grid/service/impl/DnerSiteAreaConfigurationServiceImpl.java @@ -44,14 +44,11 @@ public class DnerSiteAreaConfigurationServiceImpl List dataList; if (ChartQueryTypeEnum.HOURLY_CHART.getCode().equals(req.getQueryType())) { // 分时图 - handleAdvancedFilter(req); // 分时图高级筛选处理 + handleHourlyAdvancedFilter(req); // 分时图高级筛选处理 dataList = dnerSiteAreaConfigurationMapper.selectHourlyChartAreaTree(req); } else { // 日K图 - if ("1".equals(req.getAdvancedFilterFlag())) { - req.setCurrentDateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); - // TODO 日K图高级筛选待完善 - } + handleDailyAdvancedFilter(req); // 日K图高级筛选处理 dataList = dnerSiteAreaConfigurationMapper.selectDailyChartAreaTree(req); } // 最终树 @@ -65,7 +62,37 @@ public class DnerSiteAreaConfigurationServiceImpl return result; } - private static void handleAdvancedFilter(AreaTreeReq req) { + private void handleDailyAdvancedFilter(AreaTreeReq req) { + if ("1".equals(req.getAdvancedFilterFlag())) { + String currentDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + req.setCurrentDateTime(currentDate); + if (!Objects.isNull(req.getRainPastTime()) && req.getRainPastTime() != 0) { + req.setRainStartDateTime(TimeUtil.getBeforeDate(currentDate, req.getRainPastTime())); + } + if (!Objects.isNull(req.getAvgTempPastTime()) && req.getAvgTempPastTime() != 0) { + req.setAvgTempStartDateTime(TimeUtil.getBeforeDate(currentDate, req.getAvgTempPastTime())); + } + if (!Objects.isNull(req.getMaxWindPastTime()) && req.getMaxWindPastTime() != 0) { + req.setMaxWindStartDateTime(TimeUtil.getBeforeDate(currentDate, req.getMaxWindPastTime())); + } + if (!Objects.isNull(req.getPowerOutageTimePastTime()) && req.getPowerOutageTimePastTime() != 0) { + req.setPowerOutageTimeStartDateTime( + TimeUtil.getBeforeDate(currentDate, req.getPowerOutageTimePastTime())); + req.setPastTimePowerOutageTimeCount(Math.round( + req.getPastTimePowerOutageTimeCount() * 60 * 100) / 100.00); // 小时转分钟,四舍五入,取小数点后两位 + } + if (!Objects.isNull(req.getPowerOutageUserPastTime()) && req.getPowerOutageUserPastTime() != 0) { + req.setPowerOutageUserStartDateTime( + TimeUtil.getBeforeDate(currentDate, req.getPowerOutageUserPastTime())); + } + if (!Objects.isNull(req.getPowerOutageRatioPastTime()) && req.getPowerOutageRatioPastTime() != 0) { + req.setPowerOutageRatioStartDateTime( + TimeUtil.getBeforeDate(currentDate, req.getPowerOutageRatioPastTime())); + } + } + } + + private static void handleHourlyAdvancedFilter(AreaTreeReq req) { if ("1".equals(req.getAdvancedFilterFlag())) { String currentDateTime = LocalDateTime.now() // 获取当前时间 .withMinute(0) // 分钟设置为0 @@ -109,6 +136,10 @@ public class DnerSiteAreaConfigurationServiceImpl if (!provinceCodeAndProvinceMap.containsKey(pCode)) { // 判断是否创建省节点 AreaTreeVO province = new AreaTreeVO(); province.setValue(pCode); + // 去掉最后一个省字 + if ("省".equals(pName.charAt(pName.length() - 1) + "")) { + pName = pName.substring(0, pName.length() - 1); + } province.setLabel(pName); province.setChildren(new ArrayList<>()); provinceCodeAndProvinceMap.put(pCode, province); @@ -134,7 +165,11 @@ public class DnerSiteAreaConfigurationServiceImpl if (!cityCodeAndCityMap.containsKey(cCode)) { // 判断是否创建市节点 AreaTreeVO city = new AreaTreeVO(); city.setValue(cCode); - city.setLabel(cName); + // 去掉最后一个市字 + if ("市".equals(cName.charAt(cName.length() - 1) + "")) { + cName = cName.substring(0, cName.length() - 1); + } + city.setLabel(cName + "供电局"); city.setChildren(new ArrayList<>()); cityCodeAndCityMap.put(cCode, city); // 挂到省份下 @@ -154,7 +189,10 @@ public class DnerSiteAreaConfigurationServiceImpl AreaTreeVO district = new AreaTreeVO(); district.setValue(dCode); - district.setLabel(dName); + if ("区".equals(dName.charAt(dName.length() - 1) + "")) { + dName = dName.substring(0, dName.length() - 1); + } + district.setLabel(dName + "供电局"); // 挂到对应市下面 AreaTreeVO city = cityMap.get(pCode).get(cCode); diff --git a/src/main/java/com/southern/power/grid/utils/TimeUtil.java b/src/main/java/com/southern/power/grid/utils/TimeUtil.java index 8209368..98a6090 100644 --- a/src/main/java/com/southern/power/grid/utils/TimeUtil.java +++ b/src/main/java/com/southern/power/grid/utils/TimeUtil.java @@ -17,12 +17,14 @@ public class TimeUtil { // 完整格式:年月日 时分 private static final DateTimeFormatter FULL = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); + private static final DateTimeFormatter FULL_HOUR = DateTimeFormatter.ofPattern("yyyy/MM/dd HH时"); + // 仅小时格式 - private static final DateTimeFormatter HOUR = DateTimeFormatter.ofPattern("HH:mm"); + private static final DateTimeFormatter HOUR = DateTimeFormatter.ofPattern("dd日HH时"); /** * 获取开始时间到结束时间的小时数组,仅当天的第一条数据会展示年月日 - * 比如[2026-03-13 22:00, 23:00, 2026-03-14 00:00, 01:00] + * 比如[2026/03/13/22, 13/23, 2026/03/14/00, 14/01] * * @param startTime 开始时间 * @param endTime 结束时间 @@ -42,7 +44,7 @@ public class TimeUtil { while (!current.isAfter(end)) { // 第一次 或 日期发生变化(跨天0点)→ 显示完整年月日 if (preDate == null || !current.toLocalDate().equals(preDate.toLocalDate())) { - result.add(current.format(FULL)); + result.add(current.format(FULL_HOUR)); } else { // 同一天 → 只显示小时 result.add(current.format(HOUR)); @@ -139,13 +141,25 @@ public class TimeUtil { return beforeHour.format(formatter); } + /** + * 获取前n天的时间 + * + * @param dayTime 指定时间,比如2026-03-17 + * @param beforeDayNum 前n天,比如2 + * @return 前n天的日期,比如2026-03-15 + */ + public static String getBeforeDate(String dayTime, int beforeDayNum) { + return LocalDate.parse(dayTime).minusDays(beforeDayNum).toString(); + } + public static void main(String[] args) { // List strings = generateHourList("2026-03-13 22:00", "2026-03-14 01:00"); // List strings = getBetweenDates("2026-03-10", "2026-03-14"); // String strings = getBeforeNumDays("2026-03-15", 5); // String beforeHourTime = getBeforeHourTime("2026-03-17 11:00", 2); // System.out.println(beforeHourTime); - System.out.println(Math.round(123.1278 * 1000) / 1000.0); +// System.out.println(getBeforeDate("2026-03-20", 2)); + System.out.println(Math.round(12.12345 * 100) / 100.0); } private static final DateTimeFormatter DEFAULT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); diff --git a/src/main/resources/mapper/DnerDailyPowerOutageEventMapper.xml b/src/main/resources/mapper/DnerDailyPowerOutageEventMapper.xml index 9699533..6a2308d 100644 --- a/src/main/resources/mapper/DnerDailyPowerOutageEventMapper.xml +++ b/src/main/resources/mapper/DnerDailyPowerOutageEventMapper.xml @@ -8,7 +8,7 @@ select `id`, `org_code`, `data_time`, `hourly_precipitation`, `daily_precipitation`, `temperature`, `hourly_max_temperature`, `hourly_min_temperature`, `extreme_wind_speed_hourly`, `user_count`, `star_user_count`, `end_user_count`, `min_user_count`, `max_user_count`, `outage_state`, `outage_type`, - `create_by`, `create_time`, `update_by`, `update_time` + `create_by`, `create_time`, `update_by`, `update_time`, `fault_user_count`, `scheduled_user_count` from dner_daily_power_outage_event where org_code = #{orgCode} and data_time >= #{startDate} diff --git a/src/main/resources/mapper/DnerEventMapper.xml b/src/main/resources/mapper/DnerEventMapper.xml new file mode 100644 index 0000000..46e1502 --- /dev/null +++ b/src/main/resources/mapper/DnerEventMapper.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/DnerHourlyPowerOutageEventMapper.xml b/src/main/resources/mapper/DnerHourlyPowerOutageEventMapper.xml index ec9ca60..49c5f88 100644 --- a/src/main/resources/mapper/DnerHourlyPowerOutageEventMapper.xml +++ b/src/main/resources/mapper/DnerHourlyPowerOutageEventMapper.xml @@ -7,7 +7,8 @@ \ No newline at end of file diff --git a/src/main/resources/sql/20260313-001.sql b/src/main/resources/sql/20260313-001.sql index 5412888..4e1c799 100644 --- a/src/main/resources/sql/20260313-001.sql +++ b/src/main/resources/sql/20260313-001.sql @@ -80,7 +80,7 @@ CREATE TABLE `dner_daily_power_outage_event` `hourly_max_temperature` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '日内最高气温', `hourly_min_temperature` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '日内最低气温', `extreme_wind_speed_hourly` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '日内极大风速', - `power_outage_duration` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '停电时长', + `power_outage_duration` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '停电时长', `user_count` int(11) DEFAULT NULL COMMENT '停电影响用户总数', `fault_user_count` int(11) DEFAULT NULL COMMENT '故障停电影响用户总数', `scheduled_user_count` int(11) DEFAULT NULL COMMENT '计划停电影响用户总数', @@ -91,7 +91,7 @@ CREATE TABLE `dner_daily_power_outage_event` `min_user_count` int(11) DEFAULT NULL COMMENT '最低停电影响用户总数', `max_user_count` int(11) DEFAULT NULL COMMENT '最高停电影响用户总数', `outage_state` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '停电状态(1-待停电;2-停电中;3-已复电)', - `outage_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 1 COMMENT '停电类型(1-故障类;2-计划类)', + `outage_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 1 COMMENT '停电类型(1-故障类;2-计划类)', `create_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '修改人', @@ -238,8 +238,9 @@ create table dner_daily_power_outage_event_sync COLLATE = utf8mb4_unicode_ci COMMENT ='日K线停电事件同步记录表'; -- 区域气象数据 -create table regional_weather_data( - id bigint unsigned auto_increment comment '主键ID' primary key, +create table regional_weather_data +( + id bigint unsigned auto_increment comment '主键ID' primary key, org_code varchar(64) not null comment '地区编码', data_time varchar(64) not null comment '资料时次', hourly_precipitation varchar(255) null comment '小时降水量', @@ -252,29 +253,86 @@ create table regional_weather_data( create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间', update_by varchar(64) null comment '修改人', update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '修改时间' -) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci comment '区域气象数据'; +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci comment '区域气象数据'; -CREATE TABLE `pmds_qxj_city_weather` ( - `v01301` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '站号', - `v_acode` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '行政区编码', - `v_prcode` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属省份', - `v_city` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属地市', - `v_county` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属区县', - `v05001` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '纬度', - `v06001` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '经度', - `ddatetime` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预报时次', - `prediction_time` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预报时效,小时', - `weather_type` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '天气现象', - `tem` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '温度', - `tem_max` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最高温度', - `tem_min` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最低温度', - `precipitation` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '降水量,毫米', - `rhum` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '相对湿度', - `wind_speed` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '风速', - `wind_direction` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '风向', - `cloud` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '云量,成', - `vis` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '能见度,km', - `d_updatetime` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资料更新时间', - `rksj` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '入库时间', - PRIMARY KEY (`prediction_time`,`ddatetime`,`v01301`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; \ No newline at end of file +CREATE TABLE `pmds_qxj_city_weather` +( + `v01301` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '站号', + `v_acode` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '行政区编码', + `v_prcode` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属省份', + `v_city` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属地市', + `v_county` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属区县', + `v05001` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '纬度', + `v06001` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '经度', + `ddatetime` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预报时次', + `prediction_time` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预报时效,小时', + `weather_type` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '天气现象', + `tem` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '温度', + `tem_max` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最高温度', + `tem_min` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最低温度', + `precipitation` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '降水量,毫米', + `rhum` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '相对湿度', + `wind_speed` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '风速', + `wind_direction` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '风向', + `cloud` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '云量,成', + `vis` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '能见度,km', + `d_updatetime` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资料更新时间', + `rksj` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '入库时间', + PRIMARY KEY (`prediction_time`, `ddatetime`, `v01301`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + +-- 事件主表 +CREATE TABLE `dner_event` +( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '事件ID', + `event_name` VARCHAR(50) NOT NULL COMMENT '事件名称', + `event_desc` VARCHAR(500) DEFAULT NULL COMMENT '事件描述', + `create_time` DATETIME default current_timestamp NOT NULL COMMENT '创建时间', + `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人', + `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人', + `update_time` DATETIME default current_timestamp not null on update CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='配网抢修事件主表'; + +-- 附件表 +CREATE TABLE `dner_event_attachment` +( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '附件ID', + `event_id` BIGINT NOT NULL COMMENT '关联事件ID', + `file_name` VARCHAR(255) NOT NULL COMMENT '文件名', + `file_path` VARCHAR(512) NOT NULL COMMENT '文件存储路径', + `file_type` VARCHAR(32) NOT NULL COMMENT '文件类型', + `file_size` BIGINT NOT NULL COMMENT '文件大小(字节)', + `is_latest` TINYINT NOT NULL DEFAULT '1' COMMENT '是否最新附件(1:是 0:否)', + `creator` VARCHAR(64) NOT NULL COMMENT '上传人', + `create_time` DATETIME default current_timestamp NOT NULL COMMENT '上传时间', + PRIMARY KEY (`id`), + KEY `idx_event_id` (`event_id`), + CONSTRAINT `fk_attachment_event` FOREIGN KEY (`event_id`) REFERENCES `dner_event` (`id`) + ON DELETE CASCADE + ON UPDATE RESTRICT +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='事件附件表'; + +-- 导出记录表 +CREATE TABLE `dner_event_export_record` +( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '导出记录ID', + `event_id` BIGINT NOT NULL COMMENT '关联事件ID', + `export_time` DATETIME default current_timestamp NOT NULL COMMENT '导出时间', + `exporter` VARCHAR(64) NOT NULL COMMENT '导出人', + `file_name` VARCHAR(255) NOT NULL COMMENT '导出文件名', + `file_path` VARCHAR(512) NOT NULL COMMENT '导出文件路径', + `file_type` VARCHAR(32) NOT NULL COMMENT '导出文件类型', + PRIMARY KEY (`id`), + KEY `idx_event_id` (`event_id`), + CONSTRAINT `fk_export_event` FOREIGN KEY (`event_id`) REFERENCES `dner_event` (`id`) + ON DELETE CASCADE + ON UPDATE RESTRICT +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='事件导出记录表'; \ No newline at end of file