Files
pj_supermarket_cloud/lib/common/services/database/database.dart
T
dzc 7c20242ad7 perf: optimize face library startup and differential sync
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.
2026-10-22 16:35:52 +08:00

96 lines
3.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}