Files
biz_xfj_cloud/lib/common/models/manage/printer_device_models.dart
T
2026-09-04 16:23:30 +08:00

78 lines
2.7 KiB
Dart

import 'package:json_annotation/json_annotation.dart';
part 'printer_device_models.g.dart';
/// Android USB Host 实际枚举到的一台标准 Printer Class 设备。
class PrinterUsbDeviceInfo {
/// 创建一次只读的 USB 打印机发现快照。
const PrinterUsbDeviceInfo({
required this.manufacturerName,
required this.productName,
required this.deviceId,
required this.vendorId,
required this.productId,
});
/// USB 描述符中的厂商名称;读取不到时为空。
final String? manufacturerName;
/// USB 描述符中的产品名称;读取不到时为空。
final String? productName;
/// Android 在本次连接期间分配的 USB 设备编号;重新插拔后可能变化。
final int? deviceId;
/// USB Vendor ID 十进制值,范围为 0 到 65535。
final int vendorId;
/// USB Product ID 十进制值,范围为 0 到 65535。
final int productId;
/// 页面列表选择使用的进程内稳定键,不作为服务端或数据库主键。
String get selectionKey => '$vendorId:$productId:${deviceId ?? -1}';
/// 优先组合厂商和产品描述,缺少描述符时回退为通用打印机名称。
String get displayName {
final parts = <String>[
if (manufacturerName?.trim().isNotEmpty == true) manufacturerName!.trim(),
if (productName?.trim().isNotEmpty == true) productName!.trim(),
];
return parts.isEmpty ? 'USB Printer' : parts.toSet().join(' / ');
}
/// 将 USB 编号格式化为四位大写十六进制,便于与设备文档交叉核对。
String get hexadecimalIdentity =>
'0x${vendorId.toRadixString(16).padLeft(4, '0').toUpperCase()} / '
'0x${productId.toRadixString(16).padLeft(4, '0').toUpperCase()}';
/// 生成只包含服务端允许字段的打印机信息上报请求。
PrinterInfoReportRequest toReportRequest() => PrinterInfoReportRequest(
printerModel: displayName,
usbVendorId: vendorId,
usbProductId: productId,
);
}
/// 终端向服务端上报实际连接打印机型号与 USB 标识的请求。
@JsonSerializable(createFactory: false)
class PrinterInfoReportRequest {
/// 创建一份不包含设备路径、序列号等敏感信息的上报请求。
const PrinterInfoReportRequest({
required this.printerModel,
required this.usbVendorId,
required this.usbProductId,
});
/// 由 USB 厂商和产品描述组合的打印机型号,服务端最长保存 128 个字符。
final String printerModel;
/// USB Vendor ID 十进制值。
final int usbVendorId;
/// USB Product ID 十进制值。
final int usbProductId;
/// 转换为终端打印机信息上报接口使用的 JSON 对象。
Map<String, dynamic> toJson() => _$PrinterInfoReportRequestToJson(this);
}