Files
biz_xfj_cloud/lib/common/services/database/database.dart
T
2026-09-04 13:15:55 +08:00

129 lines
3.6 KiB
Dart

import 'dart:async';
import 'package:floor/floor.dart';
import 'package:pj_supermarket_cloud/common/index.dart';
import 'package:pj_supermarket_cloud/common/services/database/database_migration.dart';
import 'package:sqflite/sqflite.dart' as sqflite;
part 'database.g.dart';
/// Floor 代码生成器使用的全部业务实体类型,新增实体时必须同步数据库版本和连续迁移。
const entities = <Type>[
BroadcastEntity,
OrderEntity,
OrderHoldBillEntity,
CanteenSpuEntity,
CanteenSpuComboItemEntity,
SupermarketSkuEntity,
SupermarketSpuEntity,
SupermarketCodeEntity,
ShopCardEntity,
ClassifyEntity,
PrintHistoryEntity,
UserEntity,
FaceEntity,
SettingEntity,
ScheduledTaskEntity,
ScheduledTaskLogEntity,
FileUploadRecordEntity,
OrderEvidenceUploadTaskEntity,
];
/// Floor 在实体字段与 SQLite 基础类型之间使用的全局转换器集合。
const typeConverters = <Type>[
DateTimeConverter,
DateTimeEmptyConverter,
OrderStatusConverter,
OrderTypeConverter,
OrderPayTypeConverter,
SysTypeConverter,
PrintStatusConverter,
ProductHourTypeConverter,
SupermarketNatureConverter,
DiscountsTypeConverter,
ListDiscountsConverter,
ListIntConverter,
BoolConverter,
];
/// 收银终端共享 SQLite 数据库入口,统一暴露各业务 DAO 和带迁移的建库方法。
@Database(version: 13, entities: entities)
@TypeConverters(typeConverters)
abstract class AppDatabase extends FloorDatabase {
/// 取餐广播队列 DAO。
BroadcastDao get getBroadcastDao;
/// 本地订单及离线订单 DAO。
OrderDao get getOrderDao;
/// 挂单数据 DAO。
OrderHoldBillDao get getOrderHoldBillDao;
/// 食堂商品 DAO。
CanteenSpuDao get getCanteenSpuDao;
/// 超市 SKU DAO。
SupermarketSkuDao get getSupermarketSkuDao;
/// 超市 SPU DAO。
SupermarketSpuDao get getSupermarketSpuDao;
/// 超市商品条码 DAO。
SupermarketCodeDao get getSupermarketCodeDao;
/// 店铺卡配置 DAO。
ShopCardDao get getShopCardDao;
/// 商品分类 DAO。
ClassifyDao get getClassifyDao;
/// 打印历史记录 DAO。
PrintHistoryDao get getPrintHistoryDao;
/// 本地用户数据 DAO。
UserDao get getUserDao;
/// 本地人脸数据 DAO。
FaceDao get getFaceDao;
/// 终端设置 DAO。
SettingDao get getSettingDao;
/// 定时任务配置及最近执行快照 DAO。
ScheduledTaskDao get getScheduledTaskDao;
/// 定时任务结构化执行日志 DAO。
ScheduledTaskLogDao get getScheduledTaskLogDao;
/// 文件上传状态与幂等快照 DAO。
FileUploadRecordDao get getFileUploadRecordDao;
/// 订单识别证据待对账、提交、上传和永久缺失上报 DAO。
OrderEvidenceUploadTaskDao get getOrderEvidenceUploadTaskDao;
/// 使用统一外部存储路径打开数据库并按版本顺序执行全部 Floor Migration。
static Future<AppDatabase> getDataBase() async {
final dbPath = await AppFileTool.getDatabasePath();
final name = "$dbPath/${Constants.databaseName}";
final dataBase = await $FloorAppDatabase
.databaseBuilder(name)
.addCallback(
Callback(
onCreate: (database, version) async {
logger.i('数据库已创建,版本: $version');
},
onOpen: (database) async {
logger.i('数据库已打开');
},
onUpgrade: (database, startVersion, endVersion) {
logger.i('数据库已升级,版本: $startVersion -> $endVersion');
},
),
)
.addMigrations(DatabaseMigration.getDatabaseMigrations())
.build();
return dataBase;
}
}