Stream and validate native feature loading with fast decoding and bounded SDK batches. Reconcile authoritative department snapshots with rollback-safe metadata and file updates. Bound downloads, isolate duplicate identifiers, and defer unchanged invalid photo versions. Remove unused legacy face APIs and document device measurements. Validation: 42 Flutter tests in an isolated source snapshot; native unit and device checks; all 5,537 registered features verified byte-for-byte, plus real SDK photo searches and metadata checks.
96 lines
3.0 KiB
Dart
96 lines
3.0 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 'type_converter/face_timestamp_converter.dart';
|
||
|
||
import 'package:sqflite/sqflite.dart' as sqflite;
|
||
|
||
part 'database.g.dart';
|
||
|
||
const entities = <Type>[
|
||
BroadcastEntity,
|
||
OrderEntity,
|
||
OrderHoldBillEntity,
|
||
CanteenSpuEntity,
|
||
SupermarketSkuEntity,
|
||
SupermarketSpuEntity,
|
||
SupermarketCodeEntity,
|
||
ShopCardEntity,
|
||
ClassifyEntity,
|
||
PrintHistoryEntity,
|
||
UserEntity,
|
||
FaceEntity,
|
||
SettingEntity,
|
||
ScheduledTaskEntity,
|
||
ScheduledTaskLogEntity,
|
||
FileUploadRecordEntity,
|
||
OrderEvidenceUploadTaskEntity,
|
||
];
|
||
|
||
const typeConverters = <Type>[
|
||
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<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;
|
||
}
|
||
}
|