准备更新temp_avg相关字段能力
This commit is contained in:
@@ -87,25 +87,39 @@ class BatteryDataService {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 提取电压极值
|
||||
// 提取电压极值与平均温度
|
||||
final voltReg = RegExp(r'vbat=(\d+)');
|
||||
final tempReg = RegExp(r'tbat=(\d+)');
|
||||
double? maxVolt, minVolt;
|
||||
double tempSum = 0;
|
||||
int tempCount = 0;
|
||||
|
||||
for (String line in lines) {
|
||||
if (!line.contains('tbat=')) continue;
|
||||
final match = voltReg.firstMatch(line);
|
||||
if (match != null) {
|
||||
final v = int.parse(match.group(1)!) / 1000000;
|
||||
|
||||
final vMatch = voltReg.firstMatch(line);
|
||||
if (vMatch != null) {
|
||||
final v = int.parse(vMatch.group(1)!) / 1000000;
|
||||
if (maxVolt == null || v > maxVolt) maxVolt = v;
|
||||
if (minVolt == null || v < minVolt) minVolt = v;
|
||||
}
|
||||
|
||||
final tMatch = tempReg.firstMatch(line);
|
||||
if (tMatch != null) {
|
||||
tempSum += double.parse(tMatch.group(1)!);
|
||||
tempCount++;
|
||||
}
|
||||
}
|
||||
if (maxVolt == null || minVolt == null) continue;
|
||||
|
||||
final tempAvg = tempCount > 0 ? tempSum / tempCount : 0.0;
|
||||
|
||||
await _dbService.insertOrUpdate(
|
||||
dateStr,
|
||||
validatedCap,
|
||||
maxVolt,
|
||||
minVolt,
|
||||
tempAvg: tempAvg, // 🆕
|
||||
);
|
||||
dev.log(
|
||||
'🔵 插入数据库: $dateStr, cap=$validatedCap',
|
||||
|
||||
@@ -6,22 +6,21 @@ import 'package:path/path.dart';
|
||||
class DatabaseService {
|
||||
static Database? _database;
|
||||
static const String _tableName = 'battery_data';
|
||||
static const int _dbVersion = 2; // 🆕 1.7.1 加入 temp_avg
|
||||
|
||||
/// 获取数据库实例(单例)
|
||||
Future<Database> get database async {
|
||||
if (_database != null) return _database!;
|
||||
_database = await _initDatabase();
|
||||
return _database!;
|
||||
}
|
||||
|
||||
/// 初始化数据库
|
||||
Future<Database> _initDatabase() async {
|
||||
final dbPath = await getDatabasesPath();
|
||||
final path = join(dbPath, 'battery_health.db');
|
||||
|
||||
return await openDatabase(
|
||||
path,
|
||||
version: 1,
|
||||
version: _dbVersion,
|
||||
onCreate: (db, version) async {
|
||||
await db.execute('''
|
||||
CREATE TABLE $_tableName (
|
||||
@@ -29,6 +28,7 @@ class DatabaseService {
|
||||
capacity INTEGER NOT NULL,
|
||||
volt_max REAL NOT NULL,
|
||||
volt_min REAL NOT NULL,
|
||||
temp_avg REAL NOT NULL DEFAULT 0,
|
||||
updated_at TEXT NOT NULL
|
||||
)
|
||||
''');
|
||||
@@ -37,6 +37,15 @@ class DatabaseService {
|
||||
''');
|
||||
dev.log('✅ 数据库表创建成功', name: 'DatabaseService');
|
||||
},
|
||||
onUpgrade: (db, oldVersion, newVersion) async {
|
||||
// 🆕 1.7.1 v1 -> v2:添加 temp_avg 字段
|
||||
if (oldVersion < 2) {
|
||||
await db.execute(
|
||||
'ALTER TABLE $_tableName ADD COLUMN temp_avg REAL NOT NULL DEFAULT 0',
|
||||
);
|
||||
dev.log('✅ 数据库升级 v1->v2:已添加 temp_avg 字段', name: 'DatabaseService');
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -45,8 +54,9 @@ class DatabaseService {
|
||||
String date,
|
||||
int capacity,
|
||||
double voltMax,
|
||||
double voltMin,
|
||||
) async {
|
||||
double voltMin, {
|
||||
double tempAvg = 0, // 🆕
|
||||
}) async {
|
||||
final db = await database;
|
||||
final now = DateTime.now().toIso8601String();
|
||||
|
||||
@@ -55,9 +65,13 @@ class DatabaseService {
|
||||
'capacity': capacity,
|
||||
'volt_max': voltMax,
|
||||
'volt_min': voltMin,
|
||||
'temp_avg': tempAvg,
|
||||
'updated_at': now,
|
||||
}, conflictAlgorithm: ConflictAlgorithm.replace);
|
||||
dev.log('📝 数据已保存: $date, cap=$capacity', name: 'DatabaseService');
|
||||
dev.log(
|
||||
'📝 数据已保存: $date, cap=$capacity, tempAvg=${tempAvg.toStringAsFixed(1)}',
|
||||
name: 'DatabaseService',
|
||||
);
|
||||
}
|
||||
|
||||
/// 查询最近 N 条数据(按日期倒序)
|
||||
|
||||
Reference in New Issue
Block a user