- 添加 CodeGraph、Android 和通用 gitignore 配置 - 创建项目元数据文件跟踪 Flutter 项目属性 - 添加 Codex AI 指导文档 AGENTS.md 说明项目架构 - 配置代码分析选项 analysis_options.yaml - 设置 Android 应用清单权限和 Kiosk 模式配置 - 实现中英文国际化支持 AppLocalizations - 配置 GoRouter 应用路由导航 - 创建明亮工业控制风格的主题配置 AppTheme
164 lines
4.5 KiB
Dart
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);
|
|
}
|
|
}
|
|
}
|
|
} |