73 lines
1.8 KiB
Dart
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');
|
|
}
|
|
}
|