为多租户电商平台集成飞鹅打印(Feie)接口,实现订单支付成功后等待2分钟确认无退款再自动打印小票功能。这是打印功能的第一阶段,聚焦核心防退款延迟打印机制。
当前系统缺乏订单打印功能,商家需要手动处理订单打印,效率低下且容易出错。飞鹅打印是国内领先的云打印服务,支持多种打印机类型和打印格式。通过集成飞鹅打印接口,可以实现订单自动打印,提升商家运营效率。同时,为避免退款导致的无效打印,需要实现支付成功后等待2分钟确认无退款再打印的机制。
飞鹅打印模块 (feie-printer-module-mt)
打印管理UI模块 (feie-printer-management-ui-mt)
订单打印集成
作为 系统管理员 我希望 能够集成飞鹅打印API 以便 实现订单支付成功后自动打印小票
验收标准:
feie_printer_mt表,存储打印机配置信息feie_print_task_mt表,记录打印任务(包含防退款延迟相关字段)feie_config_mt表,存储基础打印配置作为 后台管理员 我希望 有一个界面来管理打印机和打印配置 以便 方便地配置和管理打印功能
验收标准:
作为 商家用户 我希望 订单支付成功后自动打印小票 以便 及时处理订单
验收标准:
-- 飞鹅打印机配置表
CREATE TABLE feie_printer_mt (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
tenant_id INT UNSIGNED NOT NULL COMMENT '租户ID',
printer_sn VARCHAR(50) NOT NULL COMMENT '打印机序列号',
printer_key VARCHAR(100) NOT NULL COMMENT '打印机密钥',
printer_name VARCHAR(100) COMMENT '打印机名称',
printer_type VARCHAR(20) DEFAULT '58mm' COMMENT '打印机类型: 58mm, 80mm',
printer_status VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '打印机状态: ACTIVE, INACTIVE, ERROR',
is_default TINYINT DEFAULT 0 COMMENT '是否默认打印机(0:否,1:是)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_tenant_printer_sn (tenant_id, printer_sn),
INDEX idx_tenant_id (tenant_id),
INDEX idx_status (printer_status)
) COMMENT='飞鹅打印机配置表';
-- 飞鹅打印任务表(支持防退款延迟打印)
CREATE TABLE feie_print_task_mt (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
tenant_id INT UNSIGNED NOT NULL COMMENT '租户ID',
task_id VARCHAR(100) NOT NULL COMMENT '飞鹅任务ID',
order_id INT UNSIGNED COMMENT '关联订单ID',
printer_sn VARCHAR(50) NOT NULL COMMENT '打印机序列号',
content TEXT NOT NULL COMMENT '打印内容',
print_type VARCHAR(20) NOT NULL COMMENT '打印类型: RECEIPT(小票), SHIPPING(发货单), ORDER(订单)',
print_status VARCHAR(20) DEFAULT 'PENDING' COMMENT '打印状态: PENDING, DELAYED(延迟等待), PRINTING, SUCCESS, FAILED, CANCELLED(已取消)',
error_message VARCHAR(500) COMMENT '错误信息',
retry_count INT DEFAULT 0 COMMENT '重试次数',
max_retries INT DEFAULT 3 COMMENT '最大重试次数',
scheduled_at TIMESTAMP NULL COMMENT '计划打印时间(用于延迟打印)',
printed_at TIMESTAMP NULL COMMENT '打印完成时间',
cancelled_at TIMESTAMP NULL COMMENT '取消时间',
cancel_reason VARCHAR(100) COMMENT '取消原因: REFUND(退款), MANUAL(手动取消), TIMEOUT(超时)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_task_id (task_id),
INDEX idx_tenant_order (tenant_id, order_id),
INDEX idx_status (print_status),
INDEX idx_scheduled (scheduled_at),
INDEX idx_created (created_at)
) COMMENT='飞鹅打印任务表';
-- 打印配置表
CREATE TABLE feie_config_mt (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
tenant_id INT UNSIGNED NOT NULL COMMENT '租户ID',
config_key VARCHAR(50) NOT NULL COMMENT '配置键',
config_value TEXT COMMENT '配置值',
config_type VARCHAR(20) DEFAULT 'STRING' COMMENT '配置类型: STRING, JSON, BOOLEAN, NUMBER',
description VARCHAR(200) COMMENT '配置描述',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_tenant_key (tenant_id, config_key),
INDEX idx_tenant_id (tenant_id)
) COMMENT='飞鹅打印配置表';
packages/
├── @d8d/feie-printer-module-mt/ # 飞鹅打印模块
│ ├── src/
│ │ ├── entities/ # 实体定义
│ │ │ ├── feie-printer.mt.entity.ts
│ │ │ ├── feie-print-task.mt.entity.ts
│ │ │ ├── feie-config.mt.entity.ts
│ │ │ └── index.ts
│ │ ├── services/ # 服务层
│ │ │ ├── feie-api.service.ts # 飞鹅API客户端(小票打印)
│ │ │ ├── printer.service.ts # 打印机管理服务
│ │ │ ├── print-task.service.ts # 打印任务服务
│ │ │ ├── delay-scheduler.service.ts # 延迟打印调度器
│ │ │ └── index.ts
│ │ ├── schemas/ # 数据验证
│ │ │ └── index.ts
│ │ ├── routes/ # API路由
│ │ │ └── index.ts
│ │ ├── types/ # 类型定义
│ │ │ └── index.ts
│ │ └── index.ts # 主入口文件
│ ├── tests/ # 测试文件
│ ├── tsconfig.json # TypeScript配置
│ ├── vitest.config.ts # 测试配置
│ └── package.json
└── @d8d/feie-printer-management-ui-mt/ # 打印管理UI模块
├── src/
│ ├── api/ # API客户端
│ │ ├── index.ts
│ │ └── feiePrinterClient.ts
│ ├── components/ # 组件
│ │ ├── PrinterManagement.tsx
│ │ ├── PrintConfigManagement.tsx
│ │ ├── PrintTaskQuery.tsx
│ │ └── index.ts
│ ├── hooks/ # React hooks
│ │ └── index.ts
│ ├── types/ # 类型定义
│ │ ├── index.ts
│ │ └── feiePrinter.ts
│ └── index.ts # 主入口文件
├── tests/ # 测试文件
├── eslint.config.js # ESLint配置
├── tsconfig.json # TypeScript配置
├── vitest.config.ts # 测试配置
└── package.json
GET /api/feie/printers - 查询打印机列表POST /api/feie/printers - 添加打印机DELETE /api/feie/printers/{printerSn} - 删除打印机POST /api/feie/print - 提交打印任务(支持延迟打印)GET /api/feie/tasks/{taskId} - 查询打印任务状态GET /api/feie/tasks - 查询打印任务列表POST /api/feie/tasks/{taskId}/cancel - 取消打印任务POST /api/feie/tasks/{taskId}/retry - 重试打印任务GET /api/feie/config - 查询打印配置PUT /api/feie/config - 更新打印配置打印机管理
Open_printerAddlist - 添加打印机Open_printerDelList - 删除打印机Open_queryPrinterStatus - 查询打印机状态打印任务管理
Open_printMsg - 打印小票Open_queryOrderState - 查询订单打印状态Open_queryOrderInfoByDate - 根据时间查询订单订单模块集成:
配置模块集成:
事件系统集成:
DELAYED,设置scheduled_at为当前时间+延迟时间CANCELLED,原因REFUND)PRINTING → 记录飞鹅任务IDSUCCESS → 更新订单备注退款取消(REFUND)
手动取消(MANUAL)
超时取消(TIMEOUT)
PENDING, DELAYED, PRINTING)feie.enabled - 是否启用飞鹅打印feie.default_printer_sn - 默认打印机序列号feie.auto_print_on_payment - 支付成功时自动打印feie.auto_print_on_shipping - 发货时自动打印feie.anti_refund_delay - 防退款延迟时间(秒,默认120秒/2分钟)feie.retry_max_count - 最大重试次数feie.retry_interval - 重试间隔(秒)feie.task_timeout - 任务超时时间(秒)feie.receipt_template - 小票模板feie.shipping_template - 发货单模板功能指标:
性能指标:
业务指标:
创建时间:2025-12-06 负责人:产品经理 状态:待开始 优先级:中
-mt后缀和租户ID隔离