feat:日志打印

This commit is contained in:
dzc committed 2026-05-11 18:36:26 +08:00
1 parent 561e55b59f
commit c6aabbd1b7
8 files changed
+90 -44

No files matched your search

+5 -1
View File
@@ -4,7 +4,11 @@ flutter pub run build_runner build --delete-conflicting-outputs~
```
## flutter打包
```
flutter build apk --build-name 1.3.0 --build-number 130
flutter build apk --build-name 1.7.4 --build-number 174
--build-name为版本号(展示)
--build-number为版本号(内部比较)
```
## 打印日志
```
adb -s 8d06b935c69accd4 logcat -v time -s flutter
```
@@ -15,7 +15,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_PATH = "pj_cashier/database";
private static final String DATABASE_NAME = "cash_register.db";
private static final int DATABASE_VERSION = 7;
private static final int DATABASE_VERSION = 8;
public DatabaseHelper(Context context) {
super(context, getCustomDatabasePath(context), null, DATABASE_VERSION);
+1 -2
View File
@@ -1,5 +1,4 @@
import 'dart:async';
import 'dart:io';
import 'package:floor/floor.dart';
import 'package:pj_supermarket_cloud/common/index.dart';
@@ -41,7 +40,7 @@ const typeConverters = <Type>[
BoolConverter,
];
@Database(version: 7, entities: entities)
@Database(version: 8, entities: entities)
@TypeConverters(typeConverters)
abstract class AppDatabase extends FloorDatabase {
BroadcastDao get getBroadcastDao;
+24 -24
View File
@@ -104,7 +104,7 @@ class _$AppDatabase extends AppDatabase {
Callback? callback,
]) async {
final databaseOptions = sqflite.OpenDatabaseOptions(
version: 7,
version: 8,
onConfigure: (database) async {
await database.execute('PRAGMA foreign_keys = ON');
await callback?.onConfigure?.call(database);
@@ -473,7 +473,7 @@ class _$OrderDao extends OrderDao {
productDesc: row['productDesc'] as String?,
count: row['count'] as int,
weight: row['weight'] as double,
payTime: _dateTimeEmptyConverter.decode(row['payTime'] as String),
payTime: _dateTimeEmptyConverter.decode(row['payTime'] as String?),
createTime: _dateTimeConverter.decode(row['createTime'] as String)),
arguments: [
status,
@@ -533,7 +533,7 @@ class _$OrderDao extends OrderDao {
productDesc: row['productDesc'] as String?,
count: row['count'] as int,
weight: row['weight'] as double,
payTime: _dateTimeEmptyConverter.decode(row['payTime'] as String),
payTime: _dateTimeEmptyConverter.decode(row['payTime'] as String?),
createTime: _dateTimeConverter.decode(row['createTime'] as String)),
arguments: [
sysType,
@@ -565,7 +565,7 @@ class _$OrderDao extends OrderDao {
productDesc: row['productDesc'] as String?,
count: row['count'] as int,
weight: row['weight'] as double,
payTime: _dateTimeEmptyConverter.decode(row['payTime'] as String),
payTime: _dateTimeEmptyConverter.decode(row['payTime'] as String?),
createTime: _dateTimeConverter.decode(row['createTime'] as String)),
arguments: [id]);
}
@@ -1460,7 +1460,7 @@ class _$PrintHistoryDao extends PrintHistoryDao {
Future<List<PrintHistoryEntity>> getAll(String status) async {
return _queryAdapter.queryList(
'SELECT * FROM print_history WHERE (?1 = \'-1\' OR status = ?1)',
mapper: (Map<String, Object?> row) => PrintHistoryEntity(id: row['id'] as int?, orderId: row['orderId'] as String, serviceOrderId: row['serviceOrderId'] as String, servicePrintId: row['servicePrintId'] as String, invoiceUrl: row['invoiceUrl'] as String, status: _printStatusConverter.decode(row['status'] as String), printTime: row['printTime'] as String?, syncTime: _dateTimeEmptyConverter.decode(row['syncTime'] as String), createTime: _dateTimeConverter.decode(row['createTime'] as String)),
mapper: (Map<String, Object?> row) => PrintHistoryEntity(id: row['id'] as int?, orderId: row['orderId'] as String, serviceOrderId: row['serviceOrderId'] as String, servicePrintId: row['servicePrintId'] as String, invoiceUrl: row['invoiceUrl'] as String, status: _printStatusConverter.decode(row['status'] as String), printTime: row['printTime'] as String?, syncTime: _dateTimeEmptyConverter.decode(row['syncTime'] as String?), createTime: _dateTimeConverter.decode(row['createTime'] as String)),
arguments: [status]);
}
@@ -1598,13 +1598,13 @@ class _$UserDao extends UserDao {
walletBalance: row['walletBalance'] as int?,
canteenId: row['canteenId'] as String?,
createTime:
_dateTimeEmptyConverter.decode(row['createTime'] as String),
_dateTimeEmptyConverter.decode(row['createTime'] as String?),
updateTime:
_dateTimeEmptyConverter.decode(row['updateTime'] as String),
_dateTimeEmptyConverter.decode(row['updateTime'] as String?),
discountsUpdateTime: _dateTimeEmptyConverter
.decode(row['discountsUpdateTime'] as String),
discountsList:
_listDiscountsConverter.decode(row['discountsList'] as String)),
.decode(row['discountsUpdateTime'] as String?),
discountsList: _listDiscountsConverter
.decode(row['discountsList'] as String?)),
arguments: [userId]);
}
@@ -1624,13 +1624,13 @@ class _$UserDao extends UserDao {
walletBalance: row['walletBalance'] as int?,
canteenId: row['canteenId'] as String?,
createTime:
_dateTimeEmptyConverter.decode(row['createTime'] as String),
_dateTimeEmptyConverter.decode(row['createTime'] as String?),
updateTime:
_dateTimeEmptyConverter.decode(row['updateTime'] as String),
_dateTimeEmptyConverter.decode(row['updateTime'] as String?),
discountsUpdateTime: _dateTimeEmptyConverter
.decode(row['discountsUpdateTime'] as String),
discountsList:
_listDiscountsConverter.decode(row['discountsList'] as String)),
.decode(row['discountsUpdateTime'] as String?),
discountsList: _listDiscountsConverter
.decode(row['discountsList'] as String?)),
arguments: [walletCardNumber]);
}
@@ -1780,9 +1780,9 @@ class _$FaceDao extends FaceDao {
path: row['path'] as String?,
faceModel: _listIntConverter.decode(row['faceModel'] as String),
createTime:
_dateTimeEmptyConverter.decode(row['createTime'] as String),
_dateTimeEmptyConverter.decode(row['createTime'] as String?),
updateTime:
_dateTimeEmptyConverter.decode(row['updateTime'] as String)),
_dateTimeEmptyConverter.decode(row['updateTime'] as String?)),
arguments: [id]);
}
@@ -1800,9 +1800,9 @@ class _$FaceDao extends FaceDao {
path: row['path'] as String?,
faceModel: _listIntConverter.decode(row['faceModel'] as String),
createTime:
_dateTimeEmptyConverter.decode(row['createTime'] as String),
_dateTimeEmptyConverter.decode(row['createTime'] as String?),
updateTime:
_dateTimeEmptyConverter.decode(row['updateTime'] as String)),
_dateTimeEmptyConverter.decode(row['updateTime'] as String?)),
arguments: [sampleId]);
}
@@ -1820,9 +1820,9 @@ class _$FaceDao extends FaceDao {
path: row['path'] as String?,
faceModel: _listIntConverter.decode(row['faceModel'] as String),
createTime:
_dateTimeEmptyConverter.decode(row['createTime'] as String),
_dateTimeEmptyConverter.decode(row['createTime'] as String?),
updateTime:
_dateTimeEmptyConverter.decode(row['updateTime'] as String)),
_dateTimeEmptyConverter.decode(row['updateTime'] as String?)),
arguments: [userId]);
}
@@ -1834,7 +1834,7 @@ class _$FaceDao extends FaceDao {
) async {
return _queryAdapter.queryList(
'SELECT * FROM face WHERE (?1 = \'-1\' OR userName LIKE \'%\' || ?1 || \'%\') LIMIT ?2 OFFSET ?3',
mapper: (Map<String, Object?> row) => FaceEntity(id: row['id'] as int?, userId: row['userId'] as String, sampleId: row['sampleId'] as String, userName: row['userName'] as String, deptId: row['deptId'] as String?, deptName: row['deptName'] as String?, imagePath: row['imagePath'] as String, path: row['path'] as String?, faceModel: _listIntConverter.decode(row['faceModel'] as String), createTime: _dateTimeEmptyConverter.decode(row['createTime'] as String), updateTime: _dateTimeEmptyConverter.decode(row['updateTime'] as String)),
mapper: (Map<String, Object?> row) => FaceEntity(id: row['id'] as int?, userId: row['userId'] as String, sampleId: row['sampleId'] as String, userName: row['userName'] as String, deptId: row['deptId'] as String?, deptName: row['deptName'] as String?, imagePath: row['imagePath'] as String, path: row['path'] as String?, faceModel: _listIntConverter.decode(row['faceModel'] as String), createTime: _dateTimeEmptyConverter.decode(row['createTime'] as String?), updateTime: _dateTimeEmptyConverter.decode(row['updateTime'] as String?)),
arguments: [userName, pageSize, offset]);
}
@@ -1860,9 +1860,9 @@ class _$FaceDao extends FaceDao {
path: row['path'] as String?,
faceModel: _listIntConverter.decode(row['faceModel'] as String),
createTime:
_dateTimeEmptyConverter.decode(row['createTime'] as String),
_dateTimeEmptyConverter.decode(row['createTime'] as String?),
updateTime:
_dateTimeEmptyConverter.decode(row['updateTime'] as String)));
_dateTimeEmptyConverter.decode(row['updateTime'] as String?)));
}
@override
@@ -183,6 +183,39 @@ abstract class DatabaseMigration {
}
});
/// 从版本7到版本8的迁移:补齐user_record表遗漏字段
static Migration migration7To8 = Migration(7, 8, (database) async {
final columns = await database.rawQuery("PRAGMA table_info(user_record)");
bool hasCanteenId = false;
bool hasDiscountsList = false;
bool hasDiscountsUpdateTime = false;
for (final c in columns) {
final name = c['name'];
if (name == 'canteenId') hasCanteenId = true;
if (name == 'discountsList') hasDiscountsList = true;
if (name == 'discountsUpdateTime') hasDiscountsUpdateTime = true;
}
if (!hasCanteenId) {
await database
.execute("ALTER TABLE user_record ADD COLUMN canteenId TEXT");
}
if (!hasDiscountsList) {
await database
.execute("ALTER TABLE user_record ADD COLUMN discountsList TEXT");
}
await database.execute(
"UPDATE user_record SET discountsList = '[]' WHERE discountsList IS NULL",
);
if (!hasDiscountsUpdateTime) {
await database.execute(
"ALTER TABLE user_record ADD COLUMN discountsUpdateTime TEXT",
);
}
await database.execute(
"UPDATE user_record SET discountsUpdateTime = '' WHERE discountsUpdateTime IS NULL",
);
});
static List<Migration> getDatabaseMigrations() {
return [
migration1To2,
@@ -191,6 +224,7 @@ abstract class DatabaseMigration {
migration4To5,
migration5To6,
migration6To7,
migration7To8,
];
}
}
@@ -17,19 +17,19 @@ class DateTimeConverter extends TypeConverter<DateTime, String> {
}
}
class DateTimeEmptyConverter extends TypeConverter<DateTime?, String> {
class DateTimeEmptyConverter extends TypeConverter<DateTime?, String?> {
@override
DateTime? decode(String databaseValue) {
DateTime? decode(String? databaseValue) {
if (ObjectUtil.isEmpty(databaseValue)) {
return null;
}
return DateUtil.getDateTime(databaseValue);
return DateUtil.getDateTime(databaseValue!);
}
@override
String encode(DateTime? value) {
String? encode(DateTime? value) {
if (ObjectUtil.isEmpty(value)) {
return "";
return null;
}
return DateUtil.formatDate(value);
}
@@ -150,11 +150,11 @@ class ListIntConverter extends TypeConverter<List<dynamic>?, String> {
}
class ListDiscountsConverter
extends TypeConverter<List<DiscountsItem>?, String> {
extends TypeConverter<List<DiscountsItem>?, String?> {
@override
List<DiscountsItem> decode(String databaseValue) {
if (databaseValue.isEmpty) return [];
final raw = json.decode(databaseValue);
List<DiscountsItem> decode(String? databaseValue) {
if (ObjectUtil.isEmpty(databaseValue)) return [];
final raw = json.decode(databaseValue!);
if (raw is List) {
return raw
.map<DiscountsItem>(
@@ -168,8 +168,8 @@ class ListDiscountsConverter
}
@override
String encode(List<DiscountsItem>? value) {
if (ObjectUtil.isEmptyList(value)) return '[]';
String? encode(List<DiscountsItem>? value) {
if (ObjectUtil.isEmptyList(value)) return null;
return json.encode(value!.map((e) => e.toJson()).toList());
}
}
+13 -5
View File
@@ -8,6 +8,7 @@ import 'package:logger/logger.dart';
import 'package:pj_supermarket_cloud/common/index.dart';
final logger = Logger(
filter: AppLogFilter(),
printer: customPrinter,
output: ConsoleOutput(),
);
@@ -20,6 +21,13 @@ final customPrinter = PrettyPrinter(
printTime: true,
);
class AppLogFilter extends LogFilter {
@override
bool shouldLog(LogEvent event) {
return true;
}
}
class ConsoleOutput extends LogOutput {
String? _filePath;
IOSink? _sink;
@@ -70,12 +78,12 @@ class ConsoleOutput extends LogOutput {
for (final v in event.lines) {
print(v);
}
} else {
if (_filePath == null) return;
if (_sink == null) return;
if (Level.debug == event.level) return;
_sink?.writeAll(event.lines, '\n');
}
if (_filePath == null || _sink == null) return;
if (Level.debug == event.level) return;
_sink!.writeAll(event.lines, '\n');
_sink!.writeln();
unawaited(_sink!.flush());
} catch (e, stack) {
print("写入日志错误error:|$e|stack:|$stack|");
}
+1
View File
@@ -65,6 +65,7 @@ class PanelController extends GetxController {
}
},
);
logger.i("菜单页面 Controller 初始化完成");
}
@override