chore(project): 初始化项目基础配置文件
- 添加 CodeGraph、Android 和通用 gitignore 配置 - 创建项目元数据文件跟踪 Flutter 项目属性 - 添加 Codex AI 指导文档 AGENTS.md 说明项目架构 - 配置代码分析选项 analysis_options.yaml - 设置 Android 应用清单权限和 Kiosk 模式配置 - 实现中英文国际化支持 AppLocalizations - 配置 GoRouter 应用路由导航 - 创建明亮工业控制风格的主题配置 AppTheme
This commit is contained in:
164
lib/core/database/database_service.dart
Normal file
164
lib/core/database/database_service.dart
Normal file
@@ -0,0 +1,164 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user