feat:日志打印
This commit is contained in:
1 parent
561e55b59f
commit
c6aabbd1b7
8 files changed
+90
-44
No files matched your search
@@ -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
|
||||
```
|
||||
+1
-1
@@ -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,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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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|");
|
||||
}
|
||||
|
||||
@@ -65,6 +65,7 @@ class PanelController extends GetxController {
|
||||
}
|
||||
},
|
||||
);
|
||||
logger.i("菜单页面 Controller 初始化完成");
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
Reference in new issue
Block a user