Răsfoiți Sursa

[0903]短期功率预测、超短期功率预测取值调整;export js 修复

taosj 2 luni în urmă
părinte
comite
32b6d3a5b4

+ 22 - 24
forecast-backend-server/src/main/java/com/ufo/project/forecast/shortterm/power/controller/ShortTermPowerForecastingController.java

@@ -3,8 +3,6 @@ package com.ufo.project.forecast.shortterm.power.controller;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,11 +17,10 @@ import com.ufo.base.framework.aspectj.lang.annotation.Log;
 import com.ufo.base.framework.aspectj.lang.enums.BusinessType;
 import com.ufo.base.framework.web.controller.BaseController;
 import com.ufo.base.framework.web.domain.AjaxResult;
-import com.ufo.project.forecast.shortterm.power.domain.ShortTermPowerForecastCsvRow;
+import com.ufo.project.forecast.shortterm.power.domain.DataShortTermPowerForecastIssued;
 import com.ufo.project.forecast.shortterm.power.domain.ShortTermPowerForecastData;
+import com.ufo.project.forecast.shortterm.power.service.IDataShortTermPowerForecastIssuedService;
 import com.ufo.project.forecast.shortterm.power.util.ExcelForecastFileUtil;
-import com.ufo.project.model.domain.ModelPredictionTasks;
-import com.ufo.project.model.service.IModelPredictionTasksService;
 
 /**
  * 短期功率预测Controller
@@ -35,7 +32,7 @@ import com.ufo.project.model.service.IModelPredictionTasksService;
 public class ShortTermPowerForecastingController extends BaseController
 {
     @Autowired
-    private IModelPredictionTasksService modelPredictionTasksService;
+    private IDataShortTermPowerForecastIssuedService dataShortTermPowerForecastIssuedService;
 
     /**
      * 获取短期功率预测数据
@@ -77,34 +74,35 @@ public class ShortTermPowerForecastingController extends BaseController
     }
 
     /**
-     * 查询预测任务并按 time 顺序解析其 result_path 对应的 csv 文件
+     * 查询场站指定时间范围内的短期功率下发数据
      */
     private List<ShortTermPowerForecastData> queryForecastData(Long stationId, Integer forecastHours)
     {
         List<ShortTermPowerForecastData> result = new ArrayList<>();
-        Date startTime = new Date();
-        Date endTime = new Date(System.currentTimeMillis() + (long) forecastHours * 3600L * 1000L);
-        List<ModelPredictionTasks> tasks = modelPredictionTasksService
-                .selectPredictionTasks(stationId, "short_term", startTime, endTime);
-        for (ModelPredictionTasks task : tasks)
+        long now = System.currentTimeMillis() / 1000L;
+        long end = now + (long) forecastHours * 3600L;
+        List<DataShortTermPowerForecastIssued> issuedList = dataShortTermPowerForecastIssuedService
+                .selectByTimeRange(stationId.toString(), now, end);
+        if (issuedList == null)
         {
-            List<ShortTermPowerForecastCsvRow> rows = ExcelForecastFileUtil.readResultFile(
-                    task.getResultPath(), ShortTermPowerForecastCsvRow.class);
-            if (rows == null)
+            return result;
+        }
+        for (DataShortTermPowerForecastIssued issued : issuedList)
+        {
+            ShortTermPowerForecastData data = new ShortTermPowerForecastData();
+            data.setTime(ExcelForecastFileUtil.formatTime(String.valueOf(issued.getStartTime())));
+            try
             {
-                continue;
+                data.setPower(Double.parseDouble(issued.getPower()));
             }
-            for (ShortTermPowerForecastCsvRow row : rows)
+            catch (NumberFormatException e)
             {
-                ShortTermPowerForecastData data = new ShortTermPowerForecastData();
-                data.setTime(ExcelForecastFileUtil.formatTime(row.getTime()));
-                data.setPower(row.getPower());
-                data.setTheoreticalPower(row.getTheoreticalPower());
-                data.setCurtailmentPower(row.getCurtailmentPower());
-                result.add(data);
+                data.setPower(0.0);
             }
+            data.setTheoreticalPower(0.0);
+            data.setCurtailmentPower(0.0);
+            result.add(data);
         }
-        result.sort(Comparator.comparing(ShortTermPowerForecastData::getTime));
         return result;
     }
 }

+ 38 - 139
forecast-backend-server/src/main/java/com/ufo/project/forecast/shortterm/power/controller/UltraShortTermPowerForecastingController.java

@@ -1,21 +1,11 @@
 package com.ufo.project.forecast.shortterm.power.controller;
 
 import java.io.IOException;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
-import java.time.Instant;
-import java.time.ZoneOffset;
 import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Comparator;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.TreeSet;
 import javax.servlet.http.HttpServletResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -26,19 +16,15 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import com.alibaba.excel.EasyExcel;
-import com.ufo.base.common.utils.StringUtils;
 import com.ufo.base.framework.aspectj.lang.annotation.Log;
 import com.ufo.base.framework.aspectj.lang.enums.BusinessType;
 import com.ufo.base.framework.web.controller.BaseController;
 import com.ufo.base.framework.web.domain.AjaxResult;
-import com.ufo.project.forecast.shortterm.power.domain.UltraShortTermPowerForecastCsvRow;
 import com.ufo.project.forecast.shortterm.power.domain.UltraShortTermPowerForecastData;
 import com.ufo.project.forecast.shortterm.power.domain.UltraShortTermPowerSingleExport;
 import com.ufo.project.forecast.shortterm.power.util.ExcelForecastFileUtil;
-import com.ufo.project.model.domain.DataElectricityLocal;
-import com.ufo.project.model.domain.ModelPredictionTasks;
-import com.ufo.project.model.service.IDataElectricityLocalService;
-import com.ufo.project.model.service.IModelPredictionTasksService;
+import com.ufo.project.forecast.supershort.domain.DataUltraShortTermPowerForecasting;
+import com.ufo.project.forecast.supershort.service.IDataUltraShortTermPowerForecastingService;
 
 /**
  * 超短期功率预测Controller
@@ -52,14 +38,10 @@ public class UltraShortTermPowerForecastingController extends BaseController
     private static final Logger log = LoggerFactory.getLogger(UltraShortTermPowerForecastingController.class);
 
     private static final String PATTERN_SECOND = "yyyy-MM-dd HH:mm:ss";
-    private static final String PATTERN_MINUTE = "yyyy-MM-dd HH:mm";
     private static final String PATTERN_COMPACT = "yyyyMMddHHmm";
 
     @Autowired
-    private IModelPredictionTasksService modelPredictionTasksService;
-
-    @Autowired
-    private IDataElectricityLocalService dataElectricityLocalService;
+    private IDataUltraShortTermPowerForecastingService dataUltraShortTermPowerForecastingService;
 
     /**
      * 获取超短期功率预测数据(预测 + 实发功率合并)
@@ -120,7 +102,7 @@ public class UltraShortTermPowerForecastingController extends BaseController
     }
 
     /**
-     * 查询预测任务并解析 result_path 对应文件,与实发功率按时间 merge
+     * 查询超短期功率预测数据,从 data_ultra_short_term_power_forecasting 表获取
      */
     private List<UltraShortTermPowerForecastData> queryForecastData(Long stationId, String startTimeStr, String endTimeStr)
     {
@@ -131,60 +113,18 @@ public class UltraShortTermPowerForecastingController extends BaseController
             Date startTime = sdf.parse(startTimeStr);
             Date endTime = sdf.parse(endTimeStr);
 
-            // 逻辑#1 预测数据: target_time 在 [startTime当日0点, endTime当日23:59:59] 区间
-            Date queryStart = startOfDay(startTime);
-            Date queryEnd = endOfDay(endTime);
-            List<ModelPredictionTasks> tasks = modelPredictionTasksService
-                    .selectPredictionTasks(stationId, "ultra_short", queryStart, queryEnd);
-            Map<String, UltraShortTermPowerForecastData> forecastMap = new TreeMap<>();
-            for (ModelPredictionTasks task : tasks)
-            {
-                List<UltraShortTermPowerForecastCsvRow> rows = ExcelForecastFileUtil.readResultFile(
-                        task.getResultPath(), UltraShortTermPowerForecastCsvRow.class);
-                if (rows == null)
-                {
-                    continue;
-                }
-                for (UltraShortTermPowerForecastCsvRow row : rows)
-                {
-                    String time = ExcelForecastFileUtil.formatTime(row.getTime());
-                    if (StringUtils.isEmpty(time) || !inRange(time, startTime, endTime))
-                    {
-                        continue;
-                    }
-                    forecastMap.put(time, toData(row));
-                }
-            }
-
-            // 逻辑#2 实发功率
             long startUnix = startTime.getTime() / 1000;
             long endUnix = endTime.getTime() / 1000;
-            List<DataElectricityLocal> actualList = dataElectricityLocalService
-                    .selectActualPowerList(stationId, formatOffsetDateTime(startUnix), formatOffsetDateTime(endUnix));
-            Map<String, Double> actualMap = new HashMap<>();
-            for (DataElectricityLocal actual : actualList)
+            List<DataUltraShortTermPowerForecasting> dataList = dataUltraShortTermPowerForecastingService
+                    .selectByTimeRange(stationId.toString(), startUnix, endUnix);
+            if (dataList == null)
             {
-                actualMap.put(formatDate(actual.getTm(), PATTERN_MINUTE), actual.getActualPower());
+                return result;
             }
-
-            // merge:两边时间并集,缺失补 0
-            TreeSet<String> keys = new TreeSet<>(forecastMap.keySet());
-            keys.addAll(actualMap.keySet());
-            for (String key : keys)
+            for (DataUltraShortTermPowerForecasting data : dataList)
             {
-                UltraShortTermPowerForecastData data = forecastMap.get(key);
-                if (data == null)
-                {
-                    data = new UltraShortTermPowerForecastData();
-                    data.setTime(key);
-                }
-                Double monitored = actualMap.get(key);
-                data.setMonitoredPower(monitored == null ? 0D : monitored);
-                double power = data.getPower() == null ? 0D : data.getPower();
-                data.setBias(round2(data.getMonitoredPower() - power));
-                result.add(data);
+                result.add(toData(data));
             }
-            result.sort(Comparator.comparing(UltraShortTermPowerForecastData::getTime));
         }
         catch (Exception e)
         {
@@ -194,37 +134,28 @@ public class UltraShortTermPowerForecastingController extends BaseController
         return result;
     }
 
-    private UltraShortTermPowerForecastData toData(UltraShortTermPowerForecastCsvRow row)
-    {
-        UltraShortTermPowerForecastData data = new UltraShortTermPowerForecastData();
-        data.setTime(ExcelForecastFileUtil.formatTime(row.getTime()));
-        data.setPower(row.getPower());
-        data.setPower15(row.getPower15());
-        data.setPower30(row.getPower30());
-        data.setPower45(row.getPower45());
-        data.setPower60(row.getPower60());
-        data.setPower75(row.getPower75());
-        data.setPower90(row.getPower90());
-        data.setPower105(row.getPower105());
-        data.setPower120(row.getPower120());
-        data.setPower135(row.getPower135());
-        data.setPower150(row.getPower150());
-        data.setPower165(row.getPower165());
-        data.setPower180(row.getPower180());
-        data.setPower195(row.getPower195());
-        data.setPower210(row.getPower210());
-        data.setPower225(row.getPower225());
-        data.setPower240(row.getPower240());
-        return data;
-    }
-
-    /**
-     * 判断格式化时间(yyyy-MM-dd HH:mm)是否在 [startTime, endTime] 区间内(字符串比较,无需时区换算)
-     */
-    private boolean inRange(String timeKey, Date startTime, Date endTime)
+    private UltraShortTermPowerForecastData toData(DataUltraShortTermPowerForecasting data)
     {
-        return timeKey.compareTo(formatDate(startTime, PATTERN_MINUTE)) >= 0
-                && timeKey.compareTo(formatDate(endTime, PATTERN_MINUTE)) <= 0;
+        UltraShortTermPowerForecastData result = new UltraShortTermPowerForecastData();
+        result.setTime(ExcelForecastFileUtil.formatTime(String.valueOf(data.getStartTime())));
+        result.setMonitoredPower(parseDouble(data.getPower()));
+        result.setPower15(parseDouble(data.getPower15()));
+        result.setPower30(parseDouble(data.getPower30()));
+        result.setPower45(parseDouble(data.getPower45()));
+        result.setPower60(parseDouble(data.getPower60()));
+        result.setPower75(parseDouble(data.getPower75()));
+        result.setPower90(parseDouble(data.getPower90()));
+        result.setPower105(parseDouble(data.getPower105()));
+        result.setPower120(parseDouble(data.getPower120()));
+        result.setPower135(parseDouble(data.getPower135()));
+        result.setPower150(parseDouble(data.getPower150()));
+        result.setPower165(parseDouble(data.getPower165()));
+        result.setPower180(parseDouble(data.getPower180()));
+        result.setPower195(parseDouble(data.getPower195()));
+        result.setPower210(parseDouble(data.getPower210()));
+        result.setPower225(parseDouble(data.getPower225()));
+        result.setPower240(parseDouble(data.getPower240()));
+        return result;
     }
 
     private String formatDate(Date date, String pattern)
@@ -233,36 +164,15 @@ public class UltraShortTermPowerForecastingController extends BaseController
     }
 
     /**
-     * 取日期当天 0 点
+     * 字符串转 Double,空值返回 null
      */
-    private Date startOfDay(Date date)
+    private Double parseDouble(String value)
     {
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(date);
-        cal.set(Calendar.HOUR_OF_DAY, 0);
-        cal.set(Calendar.MINUTE, 0);
-        cal.set(Calendar.SECOND, 0);
-        cal.set(Calendar.MILLISECOND, 0);
-        return cal.getTime();
-    }
-
-    /**
-     * 取日期当天 23:59:59
-     */
-    private Date endOfDay(Date date)
-    {
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(date);
-        cal.set(Calendar.HOUR_OF_DAY, 23);
-        cal.set(Calendar.MINUTE, 59);
-        cal.set(Calendar.SECOND, 59);
-        cal.set(Calendar.MILLISECOND, 0);
-        return cal.getTime();
-    }
-
-    private double round2(double value)
-    {
-        return BigDecimal.valueOf(value).setScale(2, RoundingMode.HALF_UP).doubleValue();
+        if (value == null || value.trim().isEmpty())
+        {
+            return null;
+        }
+        return Double.parseDouble(value);
     }
 
     private String buildFileName(String startTime, String endTime)
@@ -278,15 +188,4 @@ public class UltraShortTermPowerForecastingController extends BaseController
             return "超短期预测.xlsx";
         }
     }
-
-    /**
-     * 将 unix 秒转换为带时区的 ISO 8601 字符串(+08:00)
-     * 例:2026-08-02T00:00:00+08:00
-     */
-    private String formatOffsetDateTime(Long unixSeconds)
-    {
-        return Instant.ofEpochSecond(unixSeconds)
-                .atOffset(ZoneOffset.ofHours(8))
-                .toString();
-    }
 }

+ 365 - 0
forecast-backend-server/src/main/java/com/ufo/project/forecast/supershort/domain/DataUltraShortTermPowerForecasting.java

@@ -0,0 +1,365 @@
+package com.ufo.project.forecast.supershort.domain;
+
+import com.ufo.base.framework.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ufo.base.framework.aspectj.lang.annotation.Excel;
+
+/**
+ * 超短期功率预测数据对象 data_ultra_short_term_power_forecasting
+ *
+ * @author ufo
+ * @date 2026-05-05
+ */
+public class DataUltraShortTermPowerForecasting extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 唯一标识 */
+    @Excel(name = "唯一标识")
+    private Long Id;
+
+    /** 数据源抓取ID */
+    @Excel(name = "数据源抓取ID")
+    private Long dataSourcegrabId;
+
+    /** 数据抓取模式名称 */
+    @Excel(name = "数据抓取模式名称")
+    private String dataSourcegrabPatternName;
+
+    /** 实体ID */
+    @Excel(name = "实体ID")
+    private String entityId;
+
+    /** 实体类型(场站/交易主体/省域) */
+    @Excel(name = "实体类型(场站/交易主体/省域)")
+    private Long entityType;
+
+    /** 实体名称 */
+    @Excel(name = "实体名称")
+    private String entityName;
+
+    /** 创建时间 */
+    @Excel(name = "创建时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Long createTime;
+
+    /** 起报时间(日期) */
+    @Excel(name = "起报时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Long startTime;
+
+    /** 实发功率 */
+    @Excel(name = "实发功率")
+    private String power;
+
+    /** t+15min预测功率 */
+    @Excel(name = "t+15min预测功率")
+    private String power15;
+
+    /** t+30min预测功率 */
+    @Excel(name = "t+30min预测功率")
+    private String power30;
+
+    /** t+45min预测功率 */
+    @Excel(name = "t+45min预测功率")
+    private String power45;
+
+    /** t+60min预测功率 */
+    @Excel(name = "t+60min预测功率")
+    private String power60;
+
+    /** t+75min预测功率 */
+    @Excel(name = "t+75min预测功率")
+    private String power75;
+
+    /** t+90min预测功率 */
+    @Excel(name = "t+90min预测功率")
+    private String power90;
+
+    /** t+105min预测功率 */
+    @Excel(name = "t+105min预测功率")
+    private String power105;
+
+    /** t+120min预测功率 */
+    @Excel(name = "t+120min预测功率")
+    private String power120;
+
+    /** t+135min预测功率 */
+    @Excel(name = "t+135min预测功率")
+    private String power135;
+
+    /** t+150min预测功率 */
+    @Excel(name = "t+150min预测功率")
+    private String power150;
+
+    /** t+165min预测功率 */
+    @Excel(name = "t+165min预测功率")
+    private String power165;
+
+    /** t+180min预测功率 */
+    @Excel(name = "t+180min预测功率")
+    private String power180;
+
+    /** t+195min预测功率 */
+    @Excel(name = "t+195min预测功率")
+    private String power195;
+
+    /** t+210min预测功率 */
+    @Excel(name = "t+210min预测功率")
+    private String power210;
+
+    /** t+225min预测功率 */
+    @Excel(name = "t+225min预测功率")
+    private String power225;
+
+    /** t+240min预测功率 */
+    @Excel(name = "t+240min预测功率")
+    private String power240;
+
+    public void setId(Long Id)
+    {
+        this.Id = Id;
+    }
+
+    public Long getId()
+    {
+        return Id;
+    }
+    public void setDataSourcegrabId(Long dataSourcegrabId)
+    {
+        this.dataSourcegrabId = dataSourcegrabId;
+    }
+
+    public Long getDataSourcegrabId()
+    {
+        return dataSourcegrabId;
+    }
+    public void setDataSourcegrabPatternName(String dataSourcegrabPatternName)
+    {
+        this.dataSourcegrabPatternName = dataSourcegrabPatternName;
+    }
+
+    public String getDataSourcegrabPatternName()
+    {
+        return dataSourcegrabPatternName;
+    }
+    public void setEntityId(String entityId)
+    {
+        this.entityId = entityId;
+    }
+
+    public String getEntityId()
+    {
+        return entityId;
+    }
+    public void setEntityType(Long entityType)
+    {
+        this.entityType = entityType;
+    }
+
+    public Long getEntityType()
+    {
+        return entityType;
+    }
+    public void setEntityName(String entityName)
+    {
+        this.entityName = entityName;
+    }
+
+    public String getEntityName()
+    {
+        return entityName;
+    }
+    public void setStartTime(Long startTime)
+    {
+        this.startTime = startTime;
+    }
+
+    public Long getStartTime()
+    {
+        return startTime;
+    }
+    public void setPower(String power)
+    {
+        this.power = power;
+    }
+
+    public String getPower()
+    {
+        return power;
+    }
+    public void setPower15(String power15)
+    {
+        this.power15 = power15;
+    }
+
+    public String getPower15()
+    {
+        return power15;
+    }
+    public void setPower30(String power30)
+    {
+        this.power30 = power30;
+    }
+
+    public String getPower30()
+    {
+        return power30;
+    }
+    public void setPower45(String power45)
+    {
+        this.power45 = power45;
+    }
+
+    public String getPower45()
+    {
+        return power45;
+    }
+    public void setPower60(String power60)
+    {
+        this.power60 = power60;
+    }
+
+    public String getPower60()
+    {
+        return power60;
+    }
+    public void setPower75(String power75)
+    {
+        this.power75 = power75;
+    }
+
+    public String getPower75()
+    {
+        return power75;
+    }
+    public void setPower90(String power90)
+    {
+        this.power90 = power90;
+    }
+
+    public String getPower90()
+    {
+        return power90;
+    }
+    public void setPower105(String power105)
+    {
+        this.power105 = power105;
+    }
+
+    public String getPower105()
+    {
+        return power105;
+    }
+    public void setPower120(String power120)
+    {
+        this.power120 = power120;
+    }
+
+    public String getPower120()
+    {
+        return power120;
+    }
+    public void setPower135(String power135)
+    {
+        this.power135 = power135;
+    }
+
+    public String getPower135()
+    {
+        return power135;
+    }
+    public void setPower150(String power150)
+    {
+        this.power150 = power150;
+    }
+
+    public String getPower150()
+    {
+        return power150;
+    }
+    public void setPower165(String power165)
+    {
+        this.power165 = power165;
+    }
+
+    public String getPower165()
+    {
+        return power165;
+    }
+    public void setPower180(String power180)
+    {
+        this.power180 = power180;
+    }
+
+    public String getPower180()
+    {
+        return power180;
+    }
+    public void setPower195(String power195)
+    {
+        this.power195 = power195;
+    }
+
+    public String getPower195()
+    {
+        return power195;
+    }
+    public void setPower210(String power210)
+    {
+        this.power210 = power210;
+    }
+
+    public String getPower210()
+    {
+        return power210;
+    }
+    public void setPower225(String power225)
+    {
+        this.power225 = power225;
+    }
+
+    public String getPower225()
+    {
+        return power225;
+    }
+    public void setPower240(String power240)
+    {
+        this.power240 = power240;
+    }
+
+    public String getPower240()
+    {
+        return power240;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("Id", getId())
+            .append("dataSourcegrabId", getDataSourcegrabId())
+            .append("dataSourcegrabPatternName", getDataSourcegrabPatternName())
+            .append("entityId", getEntityId())
+            .append("entityType", getEntityType())
+            .append("entityName", getEntityName())
+            .append("createTime", getCreateTime())
+            .append("startTime", getStartTime())
+            .append("power", getPower())
+            .append("power15", getPower15())
+            .append("power30", getPower30())
+            .append("power45", getPower45())
+            .append("power60", getPower60())
+            .append("power75", getPower75())
+            .append("power90", getPower90())
+            .append("power105", getPower105())
+            .append("power120", getPower120())
+            .append("power135", getPower135())
+            .append("power150", getPower150())
+            .append("power165", getPower165())
+            .append("power180", getPower180())
+            .append("power195", getPower195())
+            .append("power210", getPower210())
+            .append("power225", getPower225())
+            .append("power240", getPower240())
+            .toString();
+    }
+}

+ 73 - 0
forecast-backend-server/src/main/java/com/ufo/project/forecast/supershort/mapper/DataUltraShortTermPowerForecastingMapper.java

@@ -0,0 +1,73 @@
+package com.ufo.project.forecast.supershort.mapper;
+
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import com.ufo.project.forecast.supershort.domain.DataUltraShortTermPowerForecasting;
+
+/**
+ * 超短期功率预测数据Mapper接口
+ *
+ * @author ufo
+ * @date 2026-05-05
+ */
+public interface DataUltraShortTermPowerForecastingMapper
+{
+    /**
+     * 查询超短期功率预测数据
+     *
+     * @param Id 超短期功率预测数据主键
+     * @return 超短期功率预测数据
+     */
+    public DataUltraShortTermPowerForecasting selectDataUltraShortTermPowerForecastingById(Long Id);
+
+    /**
+     * 查询超短期功率预测数据列表
+     *
+     * @param dataUltraShortTermPowerForecasting 超短期功率预测数据
+     * @return 超短期功率预测数据集合
+     */
+    public List<DataUltraShortTermPowerForecasting> selectDataUltraShortTermPowerForecastingList(DataUltraShortTermPowerForecasting dataUltraShortTermPowerForecasting);
+
+    /**
+     * 新增超短期功率预测数据
+     *
+     * @param dataUltraShortTermPowerForecasting 超短期功率预测数据
+     * @return 结果
+     */
+    public int insertDataUltraShortTermPowerForecasting(DataUltraShortTermPowerForecasting dataUltraShortTermPowerForecasting);
+
+    /**
+     * 修改超短期功率预测数据
+     *
+     * @param dataUltraShortTermPowerForecasting 超短期功率预测数据
+     * @return 结果
+     */
+    public int updateDataUltraShortTermPowerForecasting(DataUltraShortTermPowerForecasting dataUltraShortTermPowerForecasting);
+
+    /**
+     * 删除超短期功率预测数据
+     *
+     * @param Id 超短期功率预测数据主键
+     * @return 结果
+     */
+    public int deleteDataUltraShortTermPowerForecastingById(Long Id);
+
+    /**
+     * 批量删除超短期功率预测数据
+     *
+     * @param Ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteDataUltraShortTermPowerForecastingByIds(Long[] Ids);
+
+    /**
+     * 查询场站指定时间范围内的预测数据
+     *
+     * @param entityId 实体ID
+     * @param startTime 起始时间(unix秒)
+     * @param endTime 结束时间(unix秒)
+     * @return 预测数据集合
+     */
+    public List<DataUltraShortTermPowerForecasting> selectByTimeRange(@Param("entityId") String entityId,
+            @Param("startTime") Long startTime, @Param("endTime") Long endTime);
+}

+ 71 - 0
forecast-backend-server/src/main/java/com/ufo/project/forecast/supershort/service/IDataUltraShortTermPowerForecastingService.java

@@ -0,0 +1,71 @@
+package com.ufo.project.forecast.supershort.service;
+
+import java.util.List;
+import com.ufo.project.forecast.supershort.domain.DataUltraShortTermPowerForecasting;
+
+/**
+ * 超短期功率预测数据Service接口
+ *
+ * @author ufo
+ * @date 2026-05-05
+ */
+public interface IDataUltraShortTermPowerForecastingService
+{
+    /**
+     * 查询超短期功率预测数据
+     *
+     * @param Id 超短期功率预测数据主键
+     * @return 超短期功率预测数据
+     */
+    public DataUltraShortTermPowerForecasting selectDataUltraShortTermPowerForecastingById(Long Id);
+
+    /**
+     * 查询超短期功率预测数据列表
+     *
+     * @param dataUltraShortTermPowerForecasting 超短期功率预测数据
+     * @return 超短期功率预测数据集合
+     */
+    public List<DataUltraShortTermPowerForecasting> selectDataUltraShortTermPowerForecastingList(DataUltraShortTermPowerForecasting dataUltraShortTermPowerForecasting);
+
+    /**
+     * 新增超短期功率预测数据
+     *
+     * @param dataUltraShortTermPowerForecasting 超短期功率预测数据
+     * @return 结果
+     */
+    public int insertDataUltraShortTermPowerForecasting(DataUltraShortTermPowerForecasting dataUltraShortTermPowerForecasting);
+
+    /**
+     * 修改超短期功率预测数据
+     *
+     * @param dataUltraShortTermPowerForecasting 超短期功率预测数据
+     * @return 结果
+     */
+    public int updateDataUltraShortTermPowerForecasting(DataUltraShortTermPowerForecasting dataUltraShortTermPowerForecasting);
+
+    /**
+     * 批量删除超短期功率预测数据
+     *
+     * @param Ids 需要删除的超短期功率预测数据主键集合
+     * @return 结果
+     */
+    public int deleteDataUltraShortTermPowerForecastingByIds(Long[] Ids);
+
+    /**
+     * 删除超短期功率预测数据信息
+     *
+     * @param Id 超短期功率预测数据主键
+     * @return 结果
+     */
+    public int deleteDataUltraShortTermPowerForecastingById(Long Id);
+
+    /**
+     * 查询场站指定时间范围内的预测数据
+     *
+     * @param entityId 实体ID
+     * @param startTime 起始时间(unix秒)
+     * @param endTime 结束时间(unix秒)
+     * @return 预测数据集合
+     */
+    public List<DataUltraShortTermPowerForecasting> selectByTimeRange(String entityId, Long startTime, Long endTime);
+}

+ 109 - 0
forecast-backend-server/src/main/java/com/ufo/project/forecast/supershort/service/impl/DataUltraShortTermPowerForecastingServiceImpl.java

@@ -0,0 +1,109 @@
+package com.ufo.project.forecast.supershort.service.impl;
+
+import java.util.List;
+import com.ufo.base.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ufo.project.forecast.supershort.mapper.DataUltraShortTermPowerForecastingMapper;
+import com.ufo.project.forecast.supershort.domain.DataUltraShortTermPowerForecasting;
+import com.ufo.project.forecast.supershort.service.IDataUltraShortTermPowerForecastingService;
+
+/**
+ * 超短期功率预测数据Service业务层处理
+ *
+ * @author ufo
+ * @date 2026-05-05
+ */
+@Service
+public class DataUltraShortTermPowerForecastingServiceImpl implements IDataUltraShortTermPowerForecastingService
+{
+    @Autowired
+    private DataUltraShortTermPowerForecastingMapper dataUltraShortTermPowerForecastingMapper;
+
+    /**
+     * 查询超短期功率预测数据
+     *
+     * @param Id 超短期功率预测数据主键
+     * @return 超短期功率预测数据
+     */
+    @Override
+    public DataUltraShortTermPowerForecasting selectDataUltraShortTermPowerForecastingById(Long Id)
+    {
+        return dataUltraShortTermPowerForecastingMapper.selectDataUltraShortTermPowerForecastingById(Id);
+    }
+
+    /**
+     * 查询超短期功率预测数据列表
+     *
+     * @param dataUltraShortTermPowerForecasting 超短期功率预测数据
+     * @return 超短期功率预测数据
+     */
+    @Override
+    public List<DataUltraShortTermPowerForecasting> selectDataUltraShortTermPowerForecastingList(DataUltraShortTermPowerForecasting dataUltraShortTermPowerForecasting)
+    {
+        return dataUltraShortTermPowerForecastingMapper.selectDataUltraShortTermPowerForecastingList(dataUltraShortTermPowerForecasting);
+    }
+
+    /**
+     * 新增超短期功率预测数据
+     *
+     * @param dataUltraShortTermPowerForecasting 超短期功率预测数据
+     * @return 结果
+     */
+    @Override
+    public int insertDataUltraShortTermPowerForecasting(DataUltraShortTermPowerForecasting dataUltraShortTermPowerForecasting)
+    {
+        dataUltraShortTermPowerForecasting.setCreateTime(DateUtils.getNowDate());
+        return dataUltraShortTermPowerForecastingMapper.insertDataUltraShortTermPowerForecasting(dataUltraShortTermPowerForecasting);
+    }
+
+    /**
+     * 修改超短期功率预测数据
+     *
+     * @param dataUltraShortTermPowerForecasting 超短期功率预测数据
+     * @return 结果
+     */
+    @Override
+    public int updateDataUltraShortTermPowerForecasting(DataUltraShortTermPowerForecasting dataUltraShortTermPowerForecasting)
+    {
+        return dataUltraShortTermPowerForecastingMapper.updateDataUltraShortTermPowerForecasting(dataUltraShortTermPowerForecasting);
+    }
+
+    /**
+     * 批量删除超短期功率预测数据
+     *
+     * @param Ids 需要删除的超短期功率预测数据主键
+     * @return 结果
+     */
+    @Override
+    public int deleteDataUltraShortTermPowerForecastingByIds(Long[] Ids)
+    {
+        return dataUltraShortTermPowerForecastingMapper.deleteDataUltraShortTermPowerForecastingByIds(Ids);
+    }
+
+    /**
+     * 删除超短期功率预测数据信息
+     *
+     * @param Id 超短期功率预测数据主键
+     * @return 结果
+     */
+    @Override
+    public int deleteDataUltraShortTermPowerForecastingById(Long Id)
+    {
+        return dataUltraShortTermPowerForecastingMapper.deleteDataUltraShortTermPowerForecastingById(Id);
+    }
+
+    /**
+     * 查询场站指定时间范围内的预测数据
+     *
+     * @param entityId 实体ID
+     * @param startTime 起始时间(unix秒)
+     * @param endTime 结束时间(unix秒)
+     * @return 预测数据集合
+     */
+    @Override
+    public List<DataUltraShortTermPowerForecasting> selectByTimeRange(String entityId, Long startTime, Long endTime)
+    {
+        return dataUltraShortTermPowerForecastingMapper.selectByTimeRange(entityId, startTime, endTime);
+    }
+}

+ 176 - 0
forecast-backend-server/src/main/resources/mybatis/supershort/DataUltraShortTermPowerForecastingMapper.xml

@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ufo.project.forecast.supershort.mapper.DataUltraShortTermPowerForecastingMapper">
+
+    <resultMap type="DataUltraShortTermPowerForecasting" id="DataUltraShortTermPowerForecastingResult">
+        <result property="Id"    column="_id"    />
+        <result property="dataSourcegrabId"    column="data_sourcegrab_id"    />
+        <result property="dataSourcegrabPatternName"    column="data_sourcegrab_pattern_name"    />
+        <result property="entityId"    column="entity_id"    />
+        <result property="entityType"    column="entity_type"    />
+        <result property="entityName"    column="entity_name"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="startTime"    column="start_time"    />
+        <result property="power"    column="power"    />
+        <result property="power15"    column="power15"    />
+        <result property="power30"    column="power30"    />
+        <result property="power45"    column="power45"    />
+        <result property="power60"    column="power60"    />
+        <result property="power75"    column="power75"    />
+        <result property="power90"    column="power90"    />
+        <result property="power105"    column="power105"    />
+        <result property="power120"    column="power120"    />
+        <result property="power135"    column="power135"    />
+        <result property="power150"    column="power150"    />
+        <result property="power165"    column="power165"    />
+        <result property="power180"    column="power180"    />
+        <result property="power195"    column="power195"    />
+        <result property="power210"    column="power210"    />
+        <result property="power225"    column="power225"    />
+        <result property="power240"    column="power240"    />
+    </resultMap>
+
+    <sql id="selectDataUltraShortTermPowerForecastingVo">
+        select _id, data_sourcegrab_id, data_sourcegrab_pattern_name, entity_id, entity_type, entity_name, to_timestamp(create_time) AS create_time, start_time, power, power15, power30, power45, power60, power75, power90, power105, power120, power135, power150, power165, power180, power195, power210, power225, power240 from data_ultra_short_term_power_forecasting
+    </sql>
+
+    <select id="selectDataUltraShortTermPowerForecastingList" parameterType="DataUltraShortTermPowerForecasting" resultMap="DataUltraShortTermPowerForecastingResult">
+        <include refid="selectDataUltraShortTermPowerForecastingVo"/>
+        <where>
+            <if test="dataSourcegrabId != null "> and data_sourcegrab_id = #{dataSourcegrabId}</if>
+            <if test="dataSourcegrabPatternName != null  and dataSourcegrabPatternName != ''"> and data_sourcegrab_pattern_name like concat('%', #{dataSourcegrabPatternName}, '%')</if>
+            <if test="entityId != null  and entityId != ''"> and entity_id = #{entityId}</if>
+            <if test="entityType != null "> and entity_type = #{entityType}</if>
+            <if test="entityName != null  and entityName != ''"> and entity_name like concat('%', #{entityName}, '%')</if>
+            <if test="startTime != null "> and start_time = #{startTime}</if>
+            <if test="power != null  and power != ''"> and power = #{power}</if>
+            <if test="power15 != null  and power15 != ''"> and power15 = #{power15}</if>
+            <if test="power30 != null  and power30 != ''"> and power30 = #{power30}</if>
+            <if test="power45 != null  and power45 != ''"> and power45 = #{power45}</if>
+            <if test="power60 != null  and power60 != ''"> and power60 = #{power60}</if>
+            <if test="power75 != null  and power75 != ''"> and power75 = #{power75}</if>
+            <if test="power90 != null  and power90 != ''"> and power90 = #{power90}</if>
+            <if test="power105 != null  and power105 != ''"> and power105 = #{power105}</if>
+            <if test="power120 != null  and power120 != ''"> and power120 = #{power120}</if>
+            <if test="power135 != null  and power135 != ''"> and power135 = #{power135}</if>
+            <if test="power150 != null  and power150 != ''"> and power150 = #{power150}</if>
+            <if test="power165 != null  and power165 != ''"> and power165 = #{power165}</if>
+            <if test="power180 != null  and power180 != ''"> and power180 = #{power180}</if>
+            <if test="power195 != null  and power195 != ''"> and power195 = #{power195}</if>
+            <if test="power210 != null  and power210 != ''"> and power210 = #{power210}</if>
+            <if test="power225 != null  and power225 != ''"> and power225 = #{power225}</if>
+            <if test="power240 != null  and power240 != ''"> and power240 = #{power240}</if>
+        </where>
+    </select>
+
+    <select id="selectDataUltraShortTermPowerForecastingById" parameterType="Long" resultMap="DataUltraShortTermPowerForecastingResult">
+        <include refid="selectDataUltraShortTermPowerForecastingVo"/>
+        where _id = #{Id}
+    </select>
+
+    <select id="selectByTimeRange" resultMap="DataUltraShortTermPowerForecastingResult">
+        <include refid="selectDataUltraShortTermPowerForecastingVo"/>
+        where entity_id = #{entityId} and start_time between #{startTime} and #{endTime}
+        order by start_time asc
+    </select>
+
+    <insert id="insertDataUltraShortTermPowerForecasting" parameterType="DataUltraShortTermPowerForecasting" useGeneratedKeys="true" keyProperty="Id">
+        insert into data_ultra_short_term_power_forecasting
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="dataSourcegrabId != null">data_sourcegrab_id,</if>
+            <if test="dataSourcegrabPatternName != null and dataSourcegrabPatternName != ''">data_sourcegrab_pattern_name,</if>
+            <if test="entityId != null and entityId != ''">entity_id,</if>
+            <if test="entityType != null">entity_type,</if>
+            <if test="entityName != null">entity_name,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="startTime != null">start_time,</if>
+            <if test="power != null">power,</if>
+            <if test="power15 != null">power15,</if>
+            <if test="power30 != null">power30,</if>
+            <if test="power45 != null">power45,</if>
+            <if test="power60 != null">power60,</if>
+            <if test="power75 != null">power75,</if>
+            <if test="power90 != null">power90,</if>
+            <if test="power105 != null">power105,</if>
+            <if test="power120 != null">power120,</if>
+            <if test="power135 != null">power135,</if>
+            <if test="power150 != null">power150,</if>
+            <if test="power165 != null">power165,</if>
+            <if test="power180 != null">power180,</if>
+            <if test="power195 != null">power195,</if>
+            <if test="power210 != null">power210,</if>
+            <if test="power225 != null">power225,</if>
+            <if test="power240 != null">power240,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="dataSourcegrabId != null">#{dataSourcegrabId},</if>
+            <if test="dataSourcegrabPatternName != null and dataSourcegrabPatternName != ''">#{dataSourcegrabPatternName},</if>
+            <if test="entityId != null and entityId != ''">#{entityId},</if>
+            <if test="entityType != null">#{entityType},</if>
+            <if test="entityName != null">#{entityName},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="startTime != null">#{startTime},</if>
+            <if test="power != null">#{power},</if>
+            <if test="power15 != null">#{power15},</if>
+            <if test="power30 != null">#{power30},</if>
+            <if test="power45 != null">#{power45},</if>
+            <if test="power60 != null">#{power60},</if>
+            <if test="power75 != null">#{power75},</if>
+            <if test="power90 != null">#{power90},</if>
+            <if test="power105 != null">#{power105},</if>
+            <if test="power120 != null">#{power120},</if>
+            <if test="power135 != null">#{power135},</if>
+            <if test="power150 != null">#{power150},</if>
+            <if test="power165 != null">#{power165},</if>
+            <if test="power180 != null">#{power180},</if>
+            <if test="power195 != null">#{power195},</if>
+            <if test="power210 != null">#{power210},</if>
+            <if test="power225 != null">#{power225},</if>
+            <if test="power240 != null">#{power240},</if>
+         </trim>
+    </insert>
+
+    <update id="updateDataUltraShortTermPowerForecasting" parameterType="DataUltraShortTermPowerForecasting">
+        update data_ultra_short_term_power_forecasting
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="dataSourcegrabId != null">data_sourcegrab_id = #{dataSourcegrabId},</if>
+            <if test="dataSourcegrabPatternName != null and dataSourcegrabPatternName != ''">data_sourcegrab_pattern_name = #{dataSourcegrabPatternName},</if>
+            <if test="entityId != null and entityId != ''">entity_id = #{entityId},</if>
+            <if test="entityType != null">entity_type = #{entityType},</if>
+            <if test="entityName != null">entity_name = #{entityName},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="power != null">power = #{power},</if>
+            <if test="power15 != null">power15 = #{power15},</if>
+            <if test="power30 != null">power30 = #{power30},</if>
+            <if test="power45 != null">power45 = #{power45},</if>
+            <if test="power60 != null">power60 = #{power60},</if>
+            <if test="power75 != null">power75 = #{power75},</if>
+            <if test="power90 != null">power90 = #{power90},</if>
+            <if test="power105 != null">power105 = #{power105},</if>
+            <if test="power120 != null">power120 = #{power120},</if>
+            <if test="power135 != null">power135 = #{power135},</if>
+            <if test="power150 != null">power150 = #{power150},</if>
+            <if test="power165 != null">power165 = #{power165},</if>
+            <if test="power180 != null">power180 = #{power180},</if>
+            <if test="power195 != null">power195 = #{power195},</if>
+            <if test="power210 != null">power210 = #{power210},</if>
+            <if test="power225 != null">power225 = #{power225},</if>
+            <if test="power240 != null">power240 = #{power240},</if>
+        </trim>
+        where _id = #{Id}
+    </update>
+
+    <delete id="deleteDataUltraShortTermPowerForecastingById" parameterType="Long">
+        delete from data_ultra_short_term_power_forecasting where _id = #{Id}
+    </delete>
+
+    <delete id="deleteDataUltraShortTermPowerForecastingByIds" parameterType="String">
+        delete from data_ultra_short_term_power_forecasting where _id in
+        <foreach item="Id" collection="array" open="(" separator="," close=")">
+            #{Id}
+        </foreach>
+    </delete>
+</mapper>

+ 2 - 2
forecast-backend-vue/src/api/power/shortTermPowerForecasting.js

@@ -13,8 +13,8 @@ export function reportShortTermPowerForecasting(query) {
 export function exportShortTermPowerForecasting(data) {
   return request({
     url: '/power/shortTermPowerForecasting/export/excel',
-    method: 'post',
-    data: data,
+    method: 'get',
+    params: data,
     responseType: 'blob',
     timeout: 120000
   })

+ 2 - 2
forecast-backend-vue/src/api/power/ultraShortTermPowerForecasting.js

@@ -13,8 +13,8 @@ export function reportUltraShortTermPowerForecasting(query) {
 export function exportUltraShortTermPowerForecasting(data) {
   return request({
     url: '/power/ultraShortTermPowerForecasting/export/excel',
-    method: 'post',
-    data: data,
+    method: 'get',
+    params: data,
     responseType: 'blob',
     timeout: 120000
   })

+ 63 - 0
release_note/2026.09.03/20260903_dp.sql

@@ -66,3 +66,66 @@ WHERE NOT EXISTS (
     SELECT 1 FROM sys_menu WHERE menu_name = '超短期预测功率'
 );
 
+-- 创建序列
+CREATE SEQUENCE IF NOT EXISTS data_ultra_short_term_power_forecasting_id_seq;
+
+DROP TABLE IF EXISTS data_ultra_short_term_power_forecasting;
+-- 建表语句
+CREATE TABLE data_ultra_short_term_power_forecasting (
+    _id BIGINT NOT NULL DEFAULT nextval('data_ultra_short_term_power_forecasting_id_seq'::regclass),
+    data_sourcegrab_id INTEGER NOT NULL,
+    data_sourcegrab_pattern_name VARCHAR(255) NOT NULL,
+    entity_id VARCHAR(255) NOT NULL,
+    entity_type INTEGER NOT NULL,
+    entity_name VARCHAR(255),
+    create_time INTEGER NOT NULL,
+    start_time INTEGER NOT NULL,
+    power VARCHAR(255),
+    power15 VARCHAR(255),
+    power30 VARCHAR(255),
+    power45 VARCHAR(255),
+    power60 VARCHAR(255),
+    power75 VARCHAR(255),
+    power90 VARCHAR(255),
+    power105 VARCHAR(255),
+    power120 VARCHAR(255),
+    power135 VARCHAR(255),
+    power150 VARCHAR(255),
+    power165 VARCHAR(255),
+    power180 VARCHAR(255),
+    power195 VARCHAR(255),
+    power210 VARCHAR(255),
+    power225 VARCHAR(255),
+    power240 VARCHAR(255),
+    CONSTRAINT data_ultra_short_term_power_forecasting_pkey PRIMARY KEY (_id)
+);
+
+-- 表注释
+COMMENT ON TABLE "public"."data_ultra_short_term_power_forecasting" IS '超短期功率预测数据表';
+
+-- 字段注释
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."_id" IS '唯一标识';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."data_sourcegrab_id" IS '数据源抓取ID';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."data_sourcegrab_pattern_name" IS '数据抓取模式名称';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."entity_id" IS '实体ID';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."entity_type" IS '实体类型(场站/交易主体/省域)';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."entity_name" IS '实体名称';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."create_time" IS '创建时间';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."start_time" IS '起报时间(日期)';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power" IS '实发功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power15" IS 't+15min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power30" IS 't+30min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power45" IS 't+45min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power60" IS 't+60min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power75" IS 't+75min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power90" IS 't+90min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power105" IS 't+105min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power120" IS 't+120min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power135" IS 't+135min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power150" IS 't+150min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power165" IS 't+165min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power180" IS 't+180min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power195" IS 't+195min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power210" IS 't+210min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power225" IS 't+225min预测功率';
+COMMENT ON COLUMN "public"."data_ultra_short_term_power_forecasting"."power240" IS 't+240min预测功率';

+ 8 - 7
release_note/2026.09.03/readme_tsj.md

@@ -1,15 +1,15 @@
 改动内容
 
-1. 调整 短期功率预测、超短期功率预测 报表取值
-2. 短期预测信息查看
-3. 超短期预测信息查看
-4. 短期预测信息校正
-5. 超短期预测信息校正
+1. 调整 短期功率预测、超短期功率预测 报表取值 改为新表 data_ultra_short_term_power_forecasting
+2. 短期预测信息查看 data_short_term_power_forecast_issued
+3. 超短期预测信息查看   data_super_short_term_forecast_issued
+4. 短期预测信息校正 data_short_term_power_forecast_correct
+5. 超短期预测信息校正   data_super_short_term_forecast_correct
 6. 辐照度功率对比
 
 
 [更新说明]
-1. 执行 [20260820_dp.sql]
+1. 执行 [20260903_dp.sql]
 2. 更新服务端jar
 3. 更新前端dist
 
@@ -18,4 +18,5 @@
 data_short_term_power_forecast_issued
 data_short_term_power_forecast_correct
 data_super_short_term_forecast_issued
-data_super_short_term_forecast_correct
+data_super_short_term_forecast_correct
+data_ultra_short_term_power_forecasting