Files
report-manage/lib/models/models.dart
2026-05-26 20:40:05 +08:00

73 lines
1.8 KiB
Dart

import 'package:drift/drift.dart';
import 'package:drift_flutter/drift_flutter.dart';
part 'models.g.dart';
/// 导入记录表定义
class ImportRecord extends Table {
/// 导入记录 ID
IntColumn get id => integer().autoIncrement()();
/// 导入时间
DateTimeColumn get createTime => dateTime()();
/// 导入文件名称
TextColumn get fileName => text()();
}
/// 进销明细表
class SaleDetail extends Table {
/// 记录唯一 ID
IntColumn get id => integer().autoIncrement()();
/// 进销单据编号
TextColumn get detailNo => text()();
/// 交易对象名称
TextColumn get objName => text()();
/// 进销单据性质
TextColumn get type => text().map(const SaleDetailTypeConverter())();
/// 关联导入记录 ID
IntColumn get importId => integer().references(ImportRecord, #id)();
}
enum SaleDetailType {
bill('挂账', 'BILL', ['挂账']),
cash('现金', 'CASH', ['挂账']),
online('线上支付', 'ONLINE', ['挂账']);
final String desc;
final String code;
final List<String> identity;
static final Map<String, SaleDetailType> map = {
for (var type in SaleDetailType.values) type.code: type,
};
const SaleDetailType(this.desc, this.code, this.identity);
static SaleDetailType? of(String param) => map[param];
}
class SaleDetailTypeConverter extends TypeConverter<SaleDetailType, String> {
const SaleDetailTypeConverter();
@override
SaleDetailType fromSql(String code) => SaleDetailType.of(code)!;
@override
String toSql(SaleDetailType type) => type.code;
}
// 添加数据库类
@DriftDatabase(tables: [ImportRecord, SaleDetail])
class AppDatabase extends _$AppDatabase {
AppDatabase([QueryExecutor? executor]) : super(executor ?? _openConnection());
@override
int get schemaVersion => 1;
static QueryExecutor _openConnection() {
return driftDatabase(name: 'my_database');
}
}