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 'type_converter/face_timestamp_converter.dart'; import 'package:sqflite/sqflite.dart' as sqflite; part 'database.g.dart'; const entities = [ BroadcastEntity, OrderEntity, OrderHoldBillEntity, CanteenSpuEntity, SupermarketSkuEntity, SupermarketSpuEntity, SupermarketCodeEntity, ShopCardEntity, ClassifyEntity, PrintHistoryEntity, UserEntity, FaceEntity, SettingEntity, ScheduledTaskEntity, ScheduledTaskLogEntity, FileUploadRecordEntity, OrderEvidenceUploadTaskEntity, ]; const typeConverters = [ DateTimeConverter, DateTimeEmptyConverter, OrderStatusConverter, OrderTypeConverter, OrderPayTypeConverter, SysTypeConverter, PrintStatusConverter, ProductHourTypeConverter, SupermarketNatureConverter, DiscountsTypeConverter, ListDiscountsConverter, ListIntConverter, BoolConverter, ]; // 版本必须与原生 DatabaseHelper.DATABASE_VERSION 同步修改 // (android/.../facediscern/database/DatabaseHelper.java)。 // 11-13 区间曾被原生历史版本以 13 提前盖章 user_version 占用,Flutter 侧从 10 直接跳到 14。 // 15:为收银热表补建二级索引(sku/spu/face),迁移 DDL 与实体 @Index 声明同名。 @Database(version: 15, entities: entities) @TypeConverters(typeConverters) abstract class AppDatabase extends FloorDatabase { BroadcastDao get getBroadcastDao; OrderDao get getOrderDao; OrderHoldBillDao get getOrderHoldBillDao; CanteenSpuDao get getCanteenSpuDao; SupermarketSkuDao get getSupermarketSkuDao; SupermarketSpuDao get getSupermarketSpuDao; SupermarketCodeDao get getSupermarketCodeDao; ShopCardDao get getShopCardDao; ClassifyDao get getClassifyDao; PrintHistoryDao get getPrintHistoryDao; UserDao get getUserDao; FaceDao get getFaceDao; SettingDao get getSettingDao; ScheduledTaskDao get getScheduledTaskDao; ScheduledTaskLogDao get getScheduledTaskLogDao; FileUploadRecordDao get getFileUploadRecordDao; OrderEvidenceUploadTaskDao get getOrderEvidenceUploadTaskDao; 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; } }