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 = [ BroadcastEntity, OrderEntity, OrderHoldBillEntity, CanteenSpuEntity, CanteenSpuComboItemEntity, SupermarketSkuEntity, SupermarketSpuEntity, SupermarketCodeEntity, ShopCardEntity, ClassifyEntity, PrintHistoryEntity, UserEntity, FaceEntity, SettingEntity, ScheduledTaskEntity, ScheduledTaskLogEntity, FileUploadRecordEntity, OrderEvidenceUploadTaskEntity, ]; /// Floor 在实体字段与 SQLite 基础类型之间使用的全局转换器集合。 const typeConverters = [ 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 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; } }