- 在 PayNotifyLogic 中增加订单打印逻辑 - 实现 XpsdkPrintApi 类的订单打印方法 - 添加 OrderXprinterPushSend 队列消费者处理订单打印 - 优化打印内容格式,包括订单信息、商品列表等
95 lines
2.9 KiB
PHP
95 lines
2.9 KiB
PHP
<?php
|
||
namespace app\common\service\xpyun;
|
||
|
||
use Xpyun\model\PrintRequest;
|
||
use Xpyun\service\PrintService;
|
||
|
||
/**
|
||
* Class XpsdkPrintApi
|
||
* 打印示例
|
||
*/
|
||
class XpsdkPrintApi
|
||
{
|
||
/**
|
||
* 打印服务对象实例化
|
||
*/
|
||
private $service;
|
||
|
||
public function __construct()
|
||
{
|
||
$this->service = new PrintService();
|
||
}
|
||
|
||
/**
|
||
* 小票打印字体对齐样例,不支持金额播报
|
||
* 注意:对齐标签L C R CB 请勿嵌套使用,嵌套使用内层标签有效,外层失效;
|
||
* 同一行请勿使用多个对齐标签,否则只有最后一个对齐标签有效
|
||
*/
|
||
public function printFontAlign($sn,$order)
|
||
{
|
||
$system_store=$order['system_store'];
|
||
$system_phone=$order['system_phone'];
|
||
$verify_code=$order['verify_code'];
|
||
$order_id=$order['order_id'];
|
||
$create_time=$order['create_time'];
|
||
$pay_price=$order['pay_price'];
|
||
$total_price=$order['total_price'];
|
||
$deduction_price=$order['deduction_price'];
|
||
$pay_type_name=$order['pay_type_name'];
|
||
|
||
$printContent = <<<EOF
|
||
<C><BOLD><B>{$system_store}</B></BOLD><BR></C>
|
||
<L><N>==============================
|
||
<L><N>核销码:<BOLD>{$verify_code}</BOLD>
|
||
<L><N>单号:{$order_id}
|
||
<L><N>下单时间:{$create_time}
|
||
<L><N>==============================
|
||
<L>单价 数量 小计
|
||
<L>
|
||
EOF;
|
||
// 使用 for 循环生成商品列表
|
||
foreach ($order['product_arr'] as $k=>$v) {
|
||
$printContent .= <<<EOF
|
||
<L>{$v['name']}
|
||
<L>{$v['price']} *{$v['quantity']} {$v['subtotal']}
|
||
EOF;
|
||
}
|
||
|
||
// 继续生成剩余的 printContent
|
||
$printContent .= <<<EOF
|
||
<L>
|
||
<L><N>==============================
|
||
<N>合计:{$total_price}元
|
||
<L><N>优惠:{$deduction_price}元
|
||
<L><N>实付款:{$pay_price}元
|
||
<L><N>支付方式:{$pay_type_name}
|
||
<L><N>店铺电话:{$system_phone}
|
||
<L><N>==============================
|
||
|
||
<C><BOLD>欢迎下次光临!</BOLD><BR></C>
|
||
EOF;
|
||
$request = new PrintRequest();
|
||
$request->generateSign();
|
||
|
||
//*必填*:打印机编号
|
||
$request->sn = $sn;
|
||
|
||
//*必填*:打印内容,不能超过12K
|
||
$request->content = $printContent;
|
||
|
||
//打印份数,默认为1
|
||
$request->copies = 1;
|
||
|
||
//声音播放模式,0 为取消订单模式,1 为静音模式,2 为来单播放模式,3为有用户申请退单了。默认为 2 来单播放模式
|
||
$request->voice = 2;
|
||
|
||
//打印模式:
|
||
//值为 0 或不指定则会检查打印机是否在线,如果不在线 则不生成打印订单,直接返回设备不在线状态码;如果在线则生成打印订单,并返回打印订单号。
|
||
//值为 1不检查打印机是否在线,直接生成打印订单,并返回打印订单号。如果打印机不在线,订单将缓存在打印队列中,打印机正常在线时会自动打印。
|
||
$request->mode = 0;
|
||
|
||
$result = $this->service->xpYunPrint($request);
|
||
return $result->content;
|
||
}
|
||
}
|