修改了convertedwindspeed为float
This commit is contained in:
42
src/main.rs
42
src/main.rs
@@ -144,46 +144,30 @@ async fn login(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 检查用户是否已存在,不存在则创建
|
// 【核心修改】使用标准的 UPSERT 语法,原子性地创建或获取用户
|
||||||
let query = r#"
|
let upsert_query = r#"
|
||||||
INSERT INTO users (openid, name, type)
|
INSERT INTO users (openid, name, type)
|
||||||
VALUES ($1, left($1, 8), 2)
|
VALUES ($1, left($1, 8), 2)
|
||||||
ON CONFLICT (openid) DO NOTHING
|
ON CONFLICT (openid) DO UPDATE SET
|
||||||
|
-- 这里可以更新一些需要变更的字段,例如最后登录时间
|
||||||
|
-- 如果没有需要更新的,可以使用一个技巧来确保 RETURNING 总是有效
|
||||||
|
id = users.id
|
||||||
RETURNING 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)
|
.bind(&openid)
|
||||||
.fetch_optional(pool.get_ref())
|
.fetch_one(pool.get_ref()) // <--- 注意这里是 fetch_one
|
||||||
.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())
|
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok((id,)) => {
|
Ok((id,)) => {
|
||||||
info!("新用户创建成功,用户ID: {}", id);
|
// 无论是新用户还是老用户,都成功获取了 ID
|
||||||
|
info!("用户登录/注册成功,用户ID: {}", id);
|
||||||
id
|
id
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
error!("新用户创建后查询ID失败: {}", e);
|
error!("用户信息处理失败: {}", e);
|
||||||
return HttpResponse::InternalServerError().json(ErrorResponse {
|
|
||||||
error: "创建用户后查询ID失败".to_string(),
|
|
||||||
errcode: Some(500),
|
|
||||||
errmsg: Some(e.to_string()),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
error!("用户查询/创建失败: {}", e);
|
|
||||||
return HttpResponse::InternalServerError().json(ErrorResponse {
|
return HttpResponse::InternalServerError().json(ErrorResponse {
|
||||||
error: "用户信息处理失败".to_string(),
|
error: "用户信息处理失败".to_string(),
|
||||||
errcode: Some(500),
|
errcode: Some(500),
|
||||||
|
|||||||
@@ -169,10 +169,9 @@ pub struct WeatherData {
|
|||||||
|
|
||||||
// --- 以下是修改的重点 ---
|
// --- 以下是修改的重点 ---
|
||||||
// 这些字段在前端是条件性发送的,因此在 Rust 中也必须是可选的
|
// 这些字段在前端是条件性发送的,因此在 Rust 中也必须是可选的
|
||||||
|
|
||||||
#[serde(rename = "convertedWindSpeed")]
|
#[serde(rename = "convertedWindSpeed")]
|
||||||
#[sqlx(rename = "convertedwindspeed")]
|
#[sqlx(rename = "convertedwindspeed")]
|
||||||
pub converted_wind_speed: Option<i32>, // <-- 修改: i32 -> Option<i32>
|
pub converted_wind_speed: Option<f64>,
|
||||||
|
|
||||||
pub date: NaiveDate,
|
pub date: NaiveDate,
|
||||||
|
|
||||||
|
|||||||
@@ -53,11 +53,11 @@
|
|||||||
<div class="formula">
|
<div class="formula">
|
||||||
<h3 onclick="toggleFormula(this)">太阳倾角计算公式:▶</h3>
|
<h3 onclick="toggleFormula(this)">太阳倾角计算公式:▶</h3>
|
||||||
<div class="content" style="display: none;">
|
<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>
|
<p>参数说明:</p>
|
||||||
<ul>
|
<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>
|
<li class="parameter"><strong>$d_n$</strong>:一年中的日期序数,0, 1, 2, ..., 364</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user