修改了convertedwindspeed为float

This commit is contained in:
2025-10-17 19:39:12 +08:00
parent e294c00c0b
commit bd60a72e68
3 changed files with 20 additions and 37 deletions

View File

@@ -144,46 +144,30 @@ async fn login(
}
};
// 检查用户是否已存在,不存在则创建
let query = r#"
// 【核心修改】使用标准的 UPSERT 语法,原子性地创建或获取用户
let upsert_query = r#"
INSERT INTO users (openid, name, type)
VALUES ($1, left($1, 8), 2)
ON CONFLICT (openid) DO NOTHING
ON CONFLICT (openid) DO UPDATE SET
-- 这里可以更新一些需要变更的字段,例如最后登录时间
-- 如果没有需要更新的,可以使用一个技巧来确保 RETURNING 总是有效
id = users.id
RETURNING id
"#;
let user_id = match sqlx::query_as::<_, (i32,)>(query)
// 使用 fetch_one因为我们确定这个查询总能返回一个 id
let user_id = match sqlx::query_as::<_, (i32,)>(upsert_query)
.bind(&openid)
.fetch_optional(pool.get_ref())
.await
{
Ok(Some((id,))) => {
info!("用户已存在用户ID: {}", id);
id
}
Ok(None) => {
// 新用户创建成功查询ID
match sqlx::query_as::<_, (i32,)>("SELECT id FROM users WHERE openid = $1")
.bind(&openid)
.fetch_one(pool.get_ref())
.fetch_one(pool.get_ref()) // <--- 注意这里是 fetch_one
.await
{
Ok((id,)) => {
info!("新用户创建成功用户ID: {}", id);
// 无论是新用户还是老用户,都成功获取了 ID
info!("用户登录/注册成功用户ID: {}", id);
id
}
Err(e) => {
error!("用户创建后查询ID失败: {}", e);
return HttpResponse::InternalServerError().json(ErrorResponse {
error: "创建用户后查询ID失败".to_string(),
errcode: Some(500),
errmsg: Some(e.to_string()),
});
}
}
}
Err(e) => {
error!("用户查询/创建失败: {}", e);
error!("用户信息处理失败: {}", e);
return HttpResponse::InternalServerError().json(ErrorResponse {
error: "用户信息处理失败".to_string(),
errcode: Some(500),

View File

@@ -169,10 +169,9 @@ pub struct WeatherData {
// --- 以下是修改的重点 ---
// 这些字段在前端是条件性发送的,因此在 Rust 中也必须是可选的
#[serde(rename = "convertedWindSpeed")]
#[sqlx(rename = "convertedwindspeed")]
pub converted_wind_speed: Option<i32>, // <-- 修改: i32 -> Option<i32>
pub converted_wind_speed: Option<f64>,
pub date: NaiveDate,

View File

@@ -53,11 +53,11 @@
<div class="formula">
<h3 onclick="toggleFormula(this)">太阳倾角计算公式:▶</h3>
<div class="content" style="display: none;">
<p>$\sigma=\begin{bmatrix} 0.006\ 918 & -0.399\ 12 \cos\theta+0.070\ 257& \sin\theta_0 \\ 0.006\ 758 & \cos2\theta_0+0.000\ 907 & \sin2\theta_0 \\ 0.002\ 679 & \cos3\theta_0+0.001\ 480 & \sin3\theta_0 \end{bmatrix} \ 180/\pi$</p>
<p>$\sigma=\begin{bmatrix} 0.006\ 918 & -0.399\ 912 \cos\theta+0.070\ 257& \sin\theta_0 \\ 0.006\ 758 & \cos2\theta_0+0.000\ 907 & \sin2\theta_0 \\ 0.002\ 679 & \cos3\theta_0+0.001\ 480 & \sin3\theta_0 \end{bmatrix} \ 180/\pi$</p>
<p>参数说明:</p>
<ul>
<li class="parameter"><strong>$\theta_0$</strong>$360d_n / 365$,单位为度(°)</li>
<li class="parameter"><strong>$\theta_0$</strong>$2\pi(n-1)/365$,单位为</li>
<li class="parameter"><strong>$d_n$</strong>一年中的日期序数0, 1, 2, ..., 364</li>
</ul>
</div>