feat:核销打印兑换券
This commit is contained in:
1 parent
fb90b477b9
commit
d517f45f38
11 files changed
+1560
-75
No files matched your search
@@ -168,7 +168,18 @@ void main() {
|
||||
order: _order(),
|
||||
items: _items(),
|
||||
errorMessage: '',
|
||||
printStatus: OrderRecordDetailLoadStatus.success,
|
||||
printRecords: const [],
|
||||
printErrorMessage: '',
|
||||
evidenceStatus: OrderRecordDetailLoadStatus.success,
|
||||
evidenceImages: const [],
|
||||
evidenceErrorMessage: '',
|
||||
canReprintVoucher: false,
|
||||
isReprintingVoucher: false,
|
||||
onRetry: () {},
|
||||
onRefreshPrintRecords: () {},
|
||||
onRefreshEvidence: () {},
|
||||
onReprintVoucher: () {},
|
||||
onClose: () {},
|
||||
),
|
||||
],
|
||||
@@ -188,6 +199,90 @@ void main() {
|
||||
expect(find.text('鲜肉烧麦'), findsOneWidget);
|
||||
expect(find.text('实际扣款'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('完整详情展示打印和识别凭证并提供兑换券重打入口', (tester) async {
|
||||
tester.view.physicalSize = const Size(1920, 1080);
|
||||
tester.view.devicePixelRatio = 1;
|
||||
addTearDown(tester.view.resetPhysicalSize);
|
||||
addTearDown(tester.view.resetDevicePixelRatio);
|
||||
var requestedReprint = false;
|
||||
|
||||
await tester.pumpWidget(
|
||||
_terminalApp(
|
||||
Stack(
|
||||
fit: StackFit.expand,
|
||||
children: [
|
||||
const ColoredBox(color: XfjDesignTokens.canvas),
|
||||
VerificationOrderDetailDrawer(
|
||||
record: _record(),
|
||||
status: OrderRecordDetailLoadStatus.success,
|
||||
order: _order(),
|
||||
items: _items(),
|
||||
errorMessage: '',
|
||||
printStatus: OrderRecordDetailLoadStatus.success,
|
||||
printRecords: [
|
||||
ServicePrintRecord(
|
||||
id: '100',
|
||||
orderId: '2094302933091917826',
|
||||
hardId: '10',
|
||||
hardName: '一号食堂终端',
|
||||
printerHardId: '20',
|
||||
printerHardName: '一号打印机',
|
||||
printType: '2',
|
||||
printNo: 1,
|
||||
retryVersion: 0,
|
||||
attemptCount: 1,
|
||||
status: '2',
|
||||
printedAt: DateTime(2026, 8, 31, 16, 41, 12),
|
||||
createTime: DateTime(2026, 8, 31, 16, 41, 9),
|
||||
),
|
||||
],
|
||||
printErrorMessage: '',
|
||||
evidenceStatus: OrderRecordDetailLoadStatus.success,
|
||||
evidenceImages: [
|
||||
ServiceOrderEvidenceImage(
|
||||
id: '200',
|
||||
evidenceType: OrderEvidenceType.faceRecognition.code,
|
||||
evidenceRole: OrderEvidenceRole.faceLive.code,
|
||||
sequenceNo: 0,
|
||||
status: 'UNAVAILABLE',
|
||||
similarity: 0.9234,
|
||||
hardId: '10',
|
||||
capturedAt: DateTime(2026, 8, 31, 16, 40, 58),
|
||||
failureReason: '终端现场图片已过保留期',
|
||||
),
|
||||
],
|
||||
evidenceErrorMessage: '',
|
||||
canReprintVoucher: true,
|
||||
isReprintingVoucher: false,
|
||||
onRetry: () {},
|
||||
onRefreshPrintRecords: () {},
|
||||
onRefreshEvidence: () {},
|
||||
onReprintVoucher: () => requestedReprint = true,
|
||||
onClose: () {},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
await tester.tap(find.text('打印与核销凭证(1)'));
|
||||
await tester.pumpAndSettle();
|
||||
expect(find.text('打印与核销凭证'), findsOneWidget);
|
||||
expect(find.text('兑换券'), findsOneWidget);
|
||||
expect(find.text('重新打印兑换券'), findsOneWidget);
|
||||
await tester.tap(find.text('重新打印兑换券'));
|
||||
expect(requestedReprint, isTrue);
|
||||
|
||||
await tester.tap(find.text('识别凭证(1)'));
|
||||
await tester.pumpAndSettle();
|
||||
expect(find.text('识别凭证'), findsOneWidget);
|
||||
expect(find.text('现场识别图'), findsOneWidget);
|
||||
expect(find.textContaining('92.34%'), findsOneWidget);
|
||||
expect(find.textContaining('终端现场图片已过保留期'), findsOneWidget);
|
||||
expect(tester.takeException(), isNull);
|
||||
});
|
||||
}
|
||||
|
||||
/// 跳过远程加载,让完整页面测试只验证根布局和既有静态数据渲染。
|
||||
|
||||
@@ -83,4 +83,48 @@ void main() {
|
||||
expect(car.totalPrice, 1238);
|
||||
expect(car.toJson()['totalPrice'], '1238');
|
||||
});
|
||||
|
||||
test('服务端打印记录兼容历史空类型、序号和尝试次数字段', () {
|
||||
final record = ServicePrintRecord.fromJson({
|
||||
'id': 100,
|
||||
'orderId': '200',
|
||||
'status': null,
|
||||
'printType': null,
|
||||
'printNo': null,
|
||||
'retryVersion': null,
|
||||
'attemptCount': null,
|
||||
});
|
||||
|
||||
expect(record.id, '100');
|
||||
expect(record.orderId, '200');
|
||||
expect(record.printType, '1');
|
||||
expect(record.printNo, 1);
|
||||
expect(record.retryVersion, 0);
|
||||
expect(record.attemptCount, 0);
|
||||
expect(record.status, '');
|
||||
});
|
||||
|
||||
test('识别凭证解析服务端相似度、中文名称和采集设备字段', () {
|
||||
final evidence = ServiceOrderEvidenceImage.fromJson({
|
||||
'id': 300,
|
||||
'evidenceType': 'FACE_RECOGNITION',
|
||||
'evidenceTypeName': '人脸识别',
|
||||
'evidenceRole': 'FACE_LIVE',
|
||||
'evidenceRoleName': '现场图',
|
||||
'sequenceNo': 0,
|
||||
'status': 'AVAILABLE',
|
||||
'statusName': '已保存',
|
||||
'similarity': '0.9234',
|
||||
'similarityThreshold': 0.8,
|
||||
'hardId': 10,
|
||||
'capturedAt': '2026-08-31T16:40:58',
|
||||
});
|
||||
|
||||
expect(evidence.id, '300');
|
||||
expect(evidence.evidenceRoleName, '现场图');
|
||||
expect(evidence.similarity, 0.9234);
|
||||
expect(evidence.similarityThreshold, 0.8);
|
||||
expect(evidence.hardId, '10');
|
||||
expect(evidence.capturedAt, DateTime(2026, 8, 31, 16, 40, 58));
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user