129 lines
3.6 KiB
Dart
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;
|
|
}
|
|
}
|