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