|
@@ -1,6 +1,7 @@
|
|
|
package com.ufo.project.data.controller;
|
|
package com.ufo.project.data.controller;
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.time.Instant;
|
|
import java.time.Instant;
|
|
|
import java.time.ZoneOffset;
|
|
import java.time.ZoneOffset;
|
|
@@ -225,8 +226,8 @@ public class DataController extends BaseController
|
|
|
private List<PvMeteorologicalResourceDataVO> buildMeteorologicalList(String entityId, String startTime, String endTime)
|
|
private List<PvMeteorologicalResourceDataVO> buildMeteorologicalList(String entityId, String startTime, String endTime)
|
|
|
{
|
|
{
|
|
|
Long stationId = parseLong(entityId);
|
|
Long stationId = parseLong(entityId);
|
|
|
- String startStr = formatOffsetDateTimeDay(startTime);
|
|
|
|
|
- String endStr = formatOffsetDateTimeDay(endTime);
|
|
|
|
|
|
|
+ String startStr = startTime + "T00:00:00+08:00";
|
|
|
|
|
+ String endStr = endTime + "T23:59:59+08:00";
|
|
|
List<DataWeatherLocal> list = weatherLocalService.selectWeatherFieldsByTimeRange(stationId, startStr, endStr);
|
|
List<DataWeatherLocal> list = weatherLocalService.selectWeatherFieldsByTimeRange(stationId, startStr, endStr);
|
|
|
if (list == null || list.isEmpty()) return new ArrayList<>();
|
|
if (list == null || list.isEmpty()) return new ArrayList<>();
|
|
|
|
|
|
|
@@ -235,8 +236,9 @@ public class DataController extends BaseController
|
|
|
{
|
|
{
|
|
|
if (item.getTm() == null) continue;
|
|
if (item.getTm() == null) continue;
|
|
|
PvMeteorologicalResourceDataVO vo = new PvMeteorologicalResourceDataVO();
|
|
PvMeteorologicalResourceDataVO vo = new PvMeteorologicalResourceDataVO();
|
|
|
|
|
+
|
|
|
vo.setTime(new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(item.getTm()));
|
|
vo.setTime(new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(item.getTm()));
|
|
|
- vo.setTotalIrradiation(toDecimal(item.getIrradiance()));
|
|
|
|
|
|
|
+ vo.setTotalIrradiation(toDecimal(null == item.getIrradiance() ? item.getDailyIrradiance() : item.getIrradiance()));
|
|
|
vo.setBoardTemperature(toDecimal(item.getBoardTemperature()));
|
|
vo.setBoardTemperature(toDecimal(item.getBoardTemperature()));
|
|
|
vo.setWindSpeed(toDecimal(item.getWindSpeed()));
|
|
vo.setWindSpeed(toDecimal(item.getWindSpeed()));
|
|
|
vo.setWindDirection(toDecimal(item.getWindDirection()));
|
|
vo.setWindDirection(toDecimal(item.getWindDirection()));
|
|
@@ -271,29 +273,34 @@ public class DataController extends BaseController
|
|
|
{
|
|
{
|
|
|
return Collections.emptyList();
|
|
return Collections.emptyList();
|
|
|
}
|
|
}
|
|
|
|
|
+ String startStr = startTime + "T00:00:00+08:00";
|
|
|
|
|
+ String endStr = endTime + "T23:59:59+08:00";
|
|
|
List<DataWeatherLocal> rawData = weatherLocalService.selectForCumulativeIrradiance(
|
|
List<DataWeatherLocal> rawData = weatherLocalService.selectForCumulativeIrradiance(
|
|
|
- entityId, startTime, endTime);
|
|
|
|
|
|
|
+ entityId, startStr, endStr);
|
|
|
if (rawData == null || rawData.isEmpty())
|
|
if (rawData == null || rawData.isEmpty())
|
|
|
{
|
|
{
|
|
|
return Collections.emptyList();
|
|
return Collections.emptyList();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
List<CumulativeIrradianceVO> result = new ArrayList<>();
|
|
List<CumulativeIrradianceVO> result = new ArrayList<>();
|
|
|
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
|
|
+ SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
for (DataWeatherLocal item : rawData)
|
|
for (DataWeatherLocal item : rawData)
|
|
|
{
|
|
{
|
|
|
CumulativeIrradianceVO vo = new CumulativeIrradianceVO();
|
|
CumulativeIrradianceVO vo = new CumulativeIrradianceVO();
|
|
|
if (item.getTm() != null)
|
|
if (item.getTm() != null)
|
|
|
{
|
|
{
|
|
|
- vo.setTime(dateFormat.format(item.getTm()));
|
|
|
|
|
|
|
+ vo.setTime(timeFormat.format(item.getTm()));
|
|
|
}
|
|
}
|
|
|
- vo.setTotalIrradiation(toBigDecimal(item.getIrradiance()));
|
|
|
|
|
- vo.setBoardTemperature(toBigDecimal(item.getBoardTemperature()));
|
|
|
|
|
- vo.setWindSpeed(toBigDecimal(item.getWindSpeed()));
|
|
|
|
|
- vo.setWindDirection(toBigDecimal(item.getWindDirection()));
|
|
|
|
|
- vo.setTemperature(toBigDecimal(item.getTemperature()));
|
|
|
|
|
- vo.setHumidity(toBigDecimal(item.getHumidity()));
|
|
|
|
|
- vo.setPressure(toBigDecimal(item.getPressure()));
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // dailyIrradiance: 优先取 irradiance,为空或<=0 时取 daily_irradiance
|
|
|
|
|
+ // 注意: 数据库单位为 W/㎡,需要转换为 Mj/㎡(1 W/㎡ = 3.6 Mj/㎡ 日累计)
|
|
|
|
|
+ Double irradianceValue = null == item.getIrradiance() ? item.getDailyIrradiance() : item.getIrradiance();
|
|
|
|
|
+ BigDecimal dailyValue = toBigDecimal(irradianceValue).multiply(new BigDecimal("3.6"))
|
|
|
|
|
+ .setScale(3, RoundingMode.HALF_UP);
|
|
|
|
|
+ vo.setDailyIrradiance(dailyValue);
|
|
|
|
|
+
|
|
|
|
|
+ // hourlyIrradiance: 日累计 / 24
|
|
|
|
|
+ vo.setHourlyIrradiance(dailyValue.divide(new BigDecimal("24"), 3, RoundingMode.HALF_UP));
|
|
|
|
|
|
|
|
result.add(vo);
|
|
result.add(vo);
|
|
|
}
|
|
}
|
|
@@ -306,16 +313,7 @@ public class DataController extends BaseController
|
|
|
private BigDecimal toDecimal(Double value)
|
|
private BigDecimal toDecimal(Double value)
|
|
|
{
|
|
{
|
|
|
if (value == null) return BigDecimal.ZERO;
|
|
if (value == null) return BigDecimal.ZERO;
|
|
|
- return new BigDecimal(value);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 将 yyyy-MM-dd 转换为 ISO 8601 格式的当天起止时间(+08:00)
|
|
|
|
|
- */
|
|
|
|
|
- private String formatOffsetDateTimeDay(String dateStr)
|
|
|
|
|
- {
|
|
|
|
|
- if (dateStr == null || dateStr.isEmpty()) return dateStr;
|
|
|
|
|
- return dateStr + "T00:00:00+08:00";
|
|
|
|
|
|
|
+ return BigDecimal.valueOf(value).setScale(3, RoundingMode.HALF_UP);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|