在weather_data表中添加了一个字段

This commit is contained in:
2025-09-29 16:02:50 +08:00
parent 8c92834e3b
commit 9880124c87
3 changed files with 41 additions and 10 deletions

View File

@@ -5,7 +5,7 @@ use std::error::Error;
// 从 models 模块引入 WeatherData 结构体
use crate::models::{WeatherData, WeatherDataBrief, WeatherListResponse};
// 这个函数封装了所有与数据库交互的逻辑
// 用于插入weather_data的数据
pub async fn insert_weather_data(pool: &PgPool, weather_data: &WeatherData) -> Result<i32, String> {
// 1. 根据 openid 查询 user_id
let user_id = match sqlx::query_as::<_, (i32,)>("SELECT id FROM users WHERE openid = $1")
@@ -32,16 +32,16 @@ pub async fn insert_weather_data(pool: &PgPool, weather_data: &WeatherData) -> R
atmosphericstability, suitabilitydegree, winddirection, averagewinddirection,
winddirectionstandarddeviation, windspeed, averagewindspeed, windspeedsuitability,
winddirectionsuitability, overallsuitability, inspectiontype, assignmentnumber,
calculatedwindspeed
calculatedwindspeed, hasspotcheckwindspeed
) VALUES (
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19,
$20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34
$20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35
) RETURNING id
"#;
// 转换经纬度为字符串
let longitude_str = weather_data.longitude.to_string();
let latitude_str = weather_data.latitude.to_string();
//let longitude_str = weather_data.longitude.to_string();
//let latitude_str = weather_data.latitude.to_string();
// 3. 执行插入操作
let inserted_id = match sqlx::query_as::<_, (i32,)>(insert_query)
@@ -50,8 +50,8 @@ pub async fn insert_weather_data(pool: &PgPool, weather_data: &WeatherData) -> R
.bind(weather_data.date) // NaiveDate 类型sqlx 会自动处理
.bind(weather_data.hours)
.bind(weather_data.min)
.bind(&longitude_str)
.bind(&latitude_str)
.bind(&weather_data.longitude)
.bind(&weather_data.latitude)
.bind(weather_data.day_since_jan_first)
.bind(weather_data.theta)
.bind(weather_data.solar_declination)
@@ -85,6 +85,7 @@ pub async fn insert_weather_data(pool: &PgPool, weather_data: &WeatherData) -> R
.bind(&weather_data.inspection_type)
.bind(&weather_data.assignment_number)
.bind(weather_data.calculated_wind_speed)
.bind(weather_data.has_spot_check_wind_speed)
.fetch_one(pool)
.await
{
@@ -135,7 +136,7 @@ pub async fn get_weather_details(pool: &PgPool, weather_id: i32) -> Result<Weath
wd.suitabilitydegree, wd.winddirection, wd.averagewinddirection,
wd.winddirectionstandarddeviation, wd.windspeed, wd.averagewindspeed,
wd.windspeedsuitability, wd.winddirectionsuitability, wd.overallsuitability,
wd.inspectiontype, wd.assignmentnumber, wd.calculatedwindspeed,
wd.inspectiontype, wd.assignmentnumber, wd.calculatedwindspeed, wd.hasspotcheckwindspeed,
u.openid
FROM weather_data wd
JOIN users u ON wd.user_id = u.id

View File

@@ -152,6 +152,10 @@ pub struct WeatherData {
#[sqlx(rename = "hasmeasuredwindspeed")]
pub has_measured_wind_speed: bool,
#[serde(rename = "hasSpotCheckWindSpeed")]
#[sqlx(rename = "hasspotcheckwindspeed")]
pub has_spot_check_wind_speed: bool,
#[serde(rename = "hours")]
#[sqlx(rename = "hour")] // 数据库中是 hour 字段
pub hours: i32,

View File

@@ -240,21 +240,47 @@ function downloadpdf(data, version) {
<div class="divider"></div>
<!-- 原有数据网格:始终显示风速/风向的前十项 -->
<div class="data-grid">
<div class="data-row-long">
<div class="data-label">十次风速值:</div>
<div class="data-value">
<div class="ten-values">${data.windSpeed}</div>
<!-- 截取前10项确保无抽测时显示全部有抽测时只显示基础10项 -->
<div class="ten-values">${data.windSpeed.slice(0, 10).join('')}</div>
</div>
</div>
<div class="data-row-long">
<div class="data-label">十次风向值:</div>
<div class="data-value">
<div class="ten-values">${data.windDirection}</div>
<div class="ten-values">${data.windDirection.slice(0, 10).join('')}</div>
</div>
</div>
</div>
<!-- 新增仅当有抽测时显示展示后5项抽测数据 -->
${data.hasSpotCheckWindSpeed ? `
<div class="data-grid" style="margin-top: 16px;"> <!-- 加间距区分基础数据与抽测数据 -->
<div class="data-row-long">
<div class="data-label">抽测风速值:</div>
<div class="data-value">
<!-- 截取后5项索引10-14用空字符串处理可能的null -->
<div class="ten-values">${data.windSpeed.slice(10, 15).map(val => val ?? '').join('')}</div>
</div>
</div>
<div class="data-row-long">
<div class="data-label">抽测风向值:</div>
<div class="data-value">
<div class="ten-values">${data.windDirection.slice(10, 15).map(val => val ?? '').join('')}</div>
</div>
</div>
</div>
` : ''}
<!-- 修复字段名拼写原hasspotwindspeed改为正确的hasSpotCheckWindSpeed -->
<div class="data-row-long">
<div class="data-label">是否有抽测风速:${data.hasSpotCheckWindSpeed ? '是' : '否'}</div>
</div>
<div class="divider"></div>
<div class="data-grid">