fix: H5 decimal 类型兼容 - energy 用 String 接收避免 DECIMAL 解码错误
This commit is contained in:
parent
4765fc9ead
commit
6b31a61387
@ -87,7 +87,7 @@ struct ChargeRecordBriefRow {
|
|||||||
id: i64,
|
id: i64,
|
||||||
start_time: Option<chrono::NaiveDateTime>,
|
start_time: Option<chrono::NaiveDateTime>,
|
||||||
end_time: Option<chrono::NaiveDateTime>,
|
end_time: Option<chrono::NaiveDateTime>,
|
||||||
energy: Option<f64>,
|
energy: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 柜子 IMEI 查询行(用于指令下发)
|
/// 柜子 IMEI 查询行(用于指令下发)
|
||||||
@ -298,19 +298,19 @@ async fn sum_today_energy(
|
|||||||
pool: &sqlx::MySqlPool,
|
pool: &sqlx::MySqlPool,
|
||||||
is_super: bool,
|
is_super: bool,
|
||||||
org_id: Option<i64>,
|
org_id: Option<i64>,
|
||||||
) -> Result<f64, AppError> {
|
) -> Result<i64, AppError> {
|
||||||
if !is_super && org_id.is_none() {
|
if !is_super && org_id.is_none() {
|
||||||
return Ok(0.0);
|
return Ok(0);
|
||||||
}
|
}
|
||||||
let energy: Option<f64> = if is_super {
|
let energy: Option<i64> = if is_super {
|
||||||
sqlx::query_scalar(
|
sqlx::query_scalar(
|
||||||
"SELECT CAST(SUM(energy) AS DECIMAL(10,2)) FROM charge_records WHERE DATE(start_time) = CURDATE()",
|
"SELECT COALESCE(SUM(energy), 0) FROM charge_records WHERE DATE(start_time) = CURDATE()",
|
||||||
)
|
)
|
||||||
.fetch_one(pool)
|
.fetch_one(pool)
|
||||||
.await?
|
.await?
|
||||||
} else {
|
} else {
|
||||||
sqlx::query_scalar(
|
sqlx::query_scalar(
|
||||||
r#"SELECT CAST(SUM(cr.energy) AS DECIMAL(10,2)) FROM charge_records cr
|
r#"SELECT COALESCE(SUM(cr.energy), 0) FROM charge_records cr
|
||||||
INNER JOIN cabinets cab ON cr.cabinet_id = cab.id
|
INNER JOIN cabinets cab ON cr.cabinet_id = cab.id
|
||||||
INNER JOIN projects p ON cab.project_id = p.id
|
INNER JOIN projects p ON cab.project_id = p.id
|
||||||
WHERE DATE(cr.start_time) = CURDATE() AND p.organization_id = ?"#,
|
WHERE DATE(cr.start_time) = CURDATE() AND p.organization_id = ?"#,
|
||||||
@ -319,20 +319,20 @@ async fn sum_today_energy(
|
|||||||
.fetch_one(pool)
|
.fetch_one(pool)
|
||||||
.await?
|
.await?
|
||||||
};
|
};
|
||||||
Ok(energy.unwrap_or(0.0))
|
Ok(energy.unwrap_or(0))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 今日充电时长(小时,带组织隔离)
|
/// 今日充电时长(秒,带组织隔离)
|
||||||
async fn sum_today_charge_hours(
|
async fn sum_today_charge_hours(
|
||||||
pool: &sqlx::MySqlPool,
|
pool: &sqlx::MySqlPool,
|
||||||
is_super: bool,
|
is_super: bool,
|
||||||
org_id: Option<i64>,
|
org_id: Option<i64>,
|
||||||
) -> Result<f64, AppError> {
|
) -> Result<i64, AppError> {
|
||||||
if !is_super && org_id.is_none() {
|
if !is_super && org_id.is_none() {
|
||||||
return Ok(0.0);
|
return Ok(0);
|
||||||
}
|
}
|
||||||
// 计算总秒数(未结束的记录用 NOW() 代替 end_time)
|
// 计算总秒数(未结束的记录用 NOW() 代替 end_time)
|
||||||
let total_seconds: f64 = if is_super {
|
let total_seconds: Option<i64> = if is_super {
|
||||||
sqlx::query_scalar(
|
sqlx::query_scalar(
|
||||||
r#"SELECT COALESCE(SUM(
|
r#"SELECT COALESCE(SUM(
|
||||||
TIMESTAMPDIFF(SECOND, start_time, COALESCE(end_time, NOW()))
|
TIMESTAMPDIFF(SECOND, start_time, COALESCE(end_time, NOW()))
|
||||||
@ -354,8 +354,7 @@ async fn sum_today_charge_hours(
|
|||||||
.fetch_one(pool)
|
.fetch_one(pool)
|
||||||
.await?
|
.await?
|
||||||
};
|
};
|
||||||
// 秒转小时,保留1位小数
|
Ok(total_seconds.unwrap_or(0))
|
||||||
Ok((total_seconds / 3600.0 * 10.0).round() / 10.0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 获取故障告警列表(返回项目名+柜名+通道号,带组织隔离)
|
/// 获取故障告警列表(返回项目名+柜名+通道号,带组织隔离)
|
||||||
@ -794,7 +793,7 @@ pub async fn get_compartment_detail(
|
|||||||
|
|
||||||
// 查询最近充电记录
|
// 查询最近充电记录
|
||||||
let records: Vec<ChargeRecordBriefRow> = sqlx::query_as::<_, ChargeRecordBriefRow>(
|
let records: Vec<ChargeRecordBriefRow> = sqlx::query_as::<_, ChargeRecordBriefRow>(
|
||||||
r#"SELECT id, start_time, end_time, CAST(energy AS DOUBLE) AS energy
|
r#"SELECT id, start_time, end_time, energy
|
||||||
FROM charge_records
|
FROM charge_records
|
||||||
WHERE compartment_id = ?
|
WHERE compartment_id = ?
|
||||||
ORDER BY start_time DESC LIMIT 10"#,
|
ORDER BY start_time DESC LIMIT 10"#,
|
||||||
@ -810,7 +809,7 @@ pub async fn get_compartment_detail(
|
|||||||
"id": r.id,
|
"id": r.id,
|
||||||
"start_time": r.start_time.map(|t| t.to_string()),
|
"start_time": r.start_time.map(|t| t.to_string()),
|
||||||
"end_time": r.end_time.map(|t| t.to_string()),
|
"end_time": r.end_time.map(|t| t.to_string()),
|
||||||
"energy_kwh": r.energy.unwrap_or(0.0),
|
"energy_kwh": r.energy.unwrap_or_default().parse::<i64>().unwrap_or(0),
|
||||||
"cost": 0,
|
"cost": 0,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -823,10 +822,10 @@ pub async fn get_compartment_detail(
|
|||||||
"channel_id": channel_id,
|
"channel_id": channel_id,
|
||||||
"status": status,
|
"status": status,
|
||||||
"cabin_board_id": cabin_board_id,
|
"cabin_board_id": cabin_board_id,
|
||||||
"voltage": realtime.get("voltage").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
"voltage": realtime.get("voltage").and_then(|v| v.as_i64()).unwrap_or(0),
|
||||||
"current": realtime.get("current").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
"current": realtime.get("current").and_then(|v| v.as_i64()).unwrap_or(0),
|
||||||
"power": realtime.get("power").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
"power": realtime.get("power").and_then(|v| v.as_i64()).unwrap_or(0),
|
||||||
"energy": realtime.get("energy").and_then(|v| v.as_f64()).unwrap_or(0.0),
|
"energy": realtime.get("energy").and_then(|v| v.as_i64()).unwrap_or(0),
|
||||||
"soc": realtime.get("soc").and_then(|v| v.as_i64()).unwrap_or(0),
|
"soc": realtime.get("soc").and_then(|v| v.as_i64()).unwrap_or(0),
|
||||||
"soh": realtime.get("soh").and_then(|v| v.as_i64()).unwrap_or(0),
|
"soh": realtime.get("soh").and_then(|v| v.as_i64()).unwrap_or(0),
|
||||||
"cell_voltages": realtime.get("cell_voltages").cloned().unwrap_or(json!([])),
|
"cell_voltages": realtime.get("cell_voltages").cloned().unwrap_or(json!([])),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user