Files
kuaishai2/lib/core/database/database_service.dart
Developer 5d28bf631b chore(project): 初始化项目基础配置文件
- 添加 CodeGraph、Android 和通用 gitignore 配置
- 创建项目元数据文件跟踪 Flutter 项目属性
- 添加 Codex AI 指导文档 AGENTS.md 说明项目架构
- 配置代码分析选项 analysis_options.yaml
- 设置 Android 应用清单权限和 Kiosk 模式配置
- 实现中英文国际化支持 AppLocalizations
- 配置 GoRouter 应用路由导航
- 创建明亮工业控制风格的主题配置 AppTheme
2026-06-04 11:19:44 +08:00

164 lines
4.5 KiB
Dart

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
/// 数据库服务
class DatabaseService {
static final DatabaseService instance = DatabaseService._internal();
static Database? _database;
DatabaseService._internal();
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, 'kuaishai.db');
return await openDatabase(
path,
version: 2,
onCreate: _onCreate,
onUpgrade: _onUpgrade,
);
}
Future<void> _onCreate(Database db, int version) async {
// 程序表
await db.execute('''
CREATE TABLE programs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
code TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
created_at TEXT NOT NULL,
status INTEGER DEFAULT 1
)
''');
// 步骤表
await db.execute('''
CREATE TABLE steps (
id INTEGER PRIMARY KEY AUTOINCREMENT,
program_id INTEGER NOT NULL,
step_no INTEGER NOT NULL,
position TEXT NOT NULL,
name TEXT NOT NULL,
mix_time INTEGER DEFAULT 0,
magnet_time INTEGER DEFAULT 0,
volume INTEGER DEFAULT 0,
mix_speed TEXT DEFAULT '中速',
blow_speed TEXT DEFAULT '中速',
blow_time INTEGER DEFAULT 0,
needle_speed INTEGER DEFAULT 5,
FOREIGN KEY (program_id) REFERENCES programs(id) ON DELETE CASCADE
)
''');
// 设置表(密码存储)
await db.execute('''
CREATE TABLE settings (
key TEXT PRIMARY KEY,
value TEXT NOT NULL
)
''');
// 初始化默认密码
await db.insert('settings', {'key': 'password', 'value': '123456'});
}
/// 数据库升级
Future<void> _onUpgrade(Database db, int oldVersion, int newVersion) async {
if (oldVersion < 2) {
// 添加 settings 表
await db.execute('''
CREATE TABLE settings (
key TEXT PRIMARY KEY,
value TEXT NOT NULL
)
''');
// 初始化默认密码
await db.insert('settings', {'key': 'password', 'value': '123456'});
}
}
Future<void> close() async {
if (_database != null) {
await _database!.close();
_database = null;
}
}
/// 初始化测试数据(仅调试模式使用)
Future<void> initTestData() async {
final db = await database;
// 检查是否已有数据
final count = Sqflite.firstIntValue(
await db.rawQuery('SELECT COUNT(*) FROM programs'),
);
if (count != null && count > 0) return;
// 插入测试程序并添加步骤
final testPrograms = [
{'code': 'P001', 'name': '标准检测程序', 'created_at': '2026-05-19', 'status': 1},
{'code': 'P002', 'name': '快速检测程序', 'created_at': '2026-05-18', 'status': 1},
{'code': 'P003', 'name': '深度检测程序', 'created_at': '2026-05-17', 'status': 1},
{'code': 'P004', 'name': '样本预处理程序', 'created_at': '2026-05-16', 'status': 0},
{'code': 'P005', 'name': '磁珠分离程序', 'created_at': '2026-05-15', 'status': 1},
];
for (final program in testPrograms) {
final programId = await db.insert('programs', program);
// 为每个程序添加测试步骤
final testSteps = [
{
'program_id': programId,
'step_no': 1,
'position': 'A1',
'name': '混合',
'mix_time': 60,
'magnet_time': 0,
'volume': 100,
'mix_speed': '中速',
'blow_speed': '中速',
'blow_time': 0,
'needle_speed': 5,
},
{
'program_id': programId,
'step_no': 2,
'position': 'A1',
'name': '吸磁',
'mix_time': 0,
'magnet_time': 30,
'volume': 0,
'mix_speed': '中速',
'blow_speed': '中速',
'blow_time': 0,
'needle_speed': 5,
},
{
'program_id': programId,
'step_no': 3,
'position': 'A2',
'name': '吹气',
'mix_time': 0,
'magnet_time': 0,
'volume': 0,
'mix_speed': '中速',
'blow_speed': '高速',
'blow_time': 10,
'needle_speed': 8,
},
];
for (final step in testSteps) {
await db.insert('steps', step);
}
}
}
}