文件
mashangyoujiu/Application/Api/Controller/XpyunController.class.php

408 行
21 KiB
PHP
可执行文件

此文件含有不可见的 Unicode 字符

此文件含有人类无法区分的不可见的 Unicode 字符,但可以由计算机进行不同的处理。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
namespace Api\Controller;
use Think\Controller;
use Xpyun\model\PrintRequest;
use Xpyun\service\PrintService;
class XpyunController extends Controller
{
private $service;
public function _initialize()
{
$this->service = new PrintService();
}
public function buy($param)
{
$PrinterModel = D('RetailPrinter');
$BillModel = D('RetailBillOrder');
$BillOnlineModel = D('RetailBillOnline');
$BillDisModel = D('RetailBillDiscount');
$SellModel = D('RetailSell');
$printSet = $param['printSet'];
$bill_order = $param['bill_order'];
$bill_online = $param['bill_online'];
$bill_discount = $param['bill_discount'];
$goodsList = $param['goodsList'];
$pay_list = $param['pay_list'];
$address_info = $param['address_info'];
if ($bill_online['order_genre'] == 4) {
$advance_order = $param['advance_order'];
}
$content[] = "<CB>-- #" . $bill_order['print_number'] . " --</CB>";
if ($printSet[$PrinterModel::TITLE]) {
$content = array('title' => "<CB>{$printSet[$PrinterModel::TITLE]}</CB>");//title为自定义头部信息,如果没有显示门店名
}
$content[] = "<L><C>{$param['store_name']}</C></L>";//title为自定义头部信息,如果没有显示门店名
$content[] = '';
$content[] = '';
$content[] = "订单时间:" . date('Y-m-d H:i:s', $bill_order[$BillModel::ADD_TIME]);
if ($bill_online['order_genre'] == 4) {
if ($advance_order['advance_type'] == 2) {
$content[] = "定金支付时间:" . $advance_order['earnest_pay_time'];
if ($advance_order['state'] == 2) {
$content[] = "尾款支付时间:" . $advance_order['tail_time'];
}
} else {
$content[] = "支付时间:" . $advance_order['tail_time'];
}
}
$content[] = "订单号:<BOLD>{$bill_order[$BillModel::ORDER_NO]}</BOLD>";
if (!empty($param['cashier_name'])) {
$content[] = "收 银 员:<BOLD>{$param['cashier_name']}</BOLD>";
}
if (!empty($param['guide_name'])) {
$content[] = "导 购 员:<BOLD>{$param['guide_name']}</BOLD>";
}
$content[] = '名称  数量 单价  应收';
$content[] = '------------------------------';
foreach ($goodsList as $k => $val) {
$goods_name = $val[$SellModel::GOODS_NAME] ? $val[$SellModel::GOODS_NAME] : '无码商品';
if (!empty($val['skuinfo'])) {
$sku_name = json_decode($val['skuinfo'], true)[0]['sku'];
$goods_name = $goods_name . ":" . $sku_name;
} else if (!empty($val[$SellModel::SKU_JSON_INFO])) {
$sku_name = json_decode($val[$SellModel::SKU_JSON_INFO], true)['name'];
$goods_name = $goods_name . ":" . $sku_name;
}
$content[] = "{$goods_name}";//商品名
$str = '';
if ($val[$SellModel::PRICING_METHOD] == 1 || !empty($val[$SellModel::SKU_JSON_INFO])) {
$str .= '  x' . str_pad(round($val[$SellModel::NUM], 2), '8', ' ', STR_PAD_RIGHT);
} else if ($val[$SellModel::PRICING_METHOD] == 2) {
$str .= '  x' . str_pad(round($val[$SellModel::NUM], 2) . $val['company'], '8', ' ', STR_PAD_RIGHT);
}
$str .= '' . str_pad($val['unit_price'], '8', ' ', STR_PAD_RIGHT);
$str .= '' . str_pad($val['before_money'], '8', ' ', STR_PAD_RIGHT);
$content[] = $str;
}
$content[] = '------------------------------';
$content[] = "<BOLD>合 计:{$bill_order['before_money']}元</BOLD>";
$content[] = "<BOLD>应 收:{$bill_order['all_money']}元</BOLD>";
if ($bill_online['order_genre'] == 4 && $advance_order['advance_type'] == 2) {
$content[] = "<BOLD><B>实收定金:{$advance_order['all_earnest_price']}元</B></BOLD>";
if (!empty($advance_order['all_arrive_price'])) {
$content[] = "定金抵扣金额:<BOLD>{$advance_order['all_arrive_price']}元</BOLD>";
}
if ($advance_order['state'] == 2) {
$content[] = "<BOLD><B>实收尾款:{$advance_order['tail_price']}元</B></BOLD>";
} else if ($advance_order['state'] == 1) {
$content[] = "待付尾款:<BOLD>{$advance_order['tail_price']}</BOLD>元";
}
} else {
$content[] = "<BOLD><B>实收:{$bill_order['amount_received']}元</B></BOLD>";
}
if (count($pay_list) == 1) {
if ($bill_online['order_genre'] == 4) {
if ($advance_order['advance_type'] == 2) {
$content[] = "支付方式:";
$content[] = $pay_list[0]['pay_type_name'] . ":" . $pay_list[0]['name'] . "\n";
} else {
$content[] = "支付方式:" . "{$pay_list[0]['name']}";
}
} else {
$content[] = "支付方式:" . "<BOLD>{$pay_list[0]['name']}</BOLD>";
}
} else {
$content[] = "支付方式:" . "<BOLD>组合支付</BOLD>";
if ($bill_online['order_genre'] == 4) {
//预售
foreach ($pay_list as $v) {
$content[] = "{$v['pay_type_name']}-{$v['name']}";
}
} else {
foreach ($pay_list as $v) {
$content[] = "{$v['name']}:" . "<BOLD>{$v['money']}</BOLD>";
}
}
}
if ($bill_order[$BillModel::TYPE] == 2 && !empty($bill_order[$BillModel::GIVE_CHANGE]) && floatval($bill_order[$BillModel::GIVE_CHANGE]) > 0) {
$content[] = "找零:<BOLD>{$bill_order[$BillModel::GIVE_CHANGE]}元</BOLD>";
}
if ($bill_order[$BillModel::TYPE] == 2 && !empty($bill_order[$BillModel::ZERO_STORAGE]) && floatval($bill_order[$BillModel::ZERO_STORAGE]) > 0) {
$content[] = "存零:<BOLD>{$bill_order[$BillModel::ZERO_STORAGE]}元</BOLD>";
}
if (!empty($bill_order[$BillModel::VID]) && $bill_discount['vip_less_money'] > 0) {
$content[] = "会员价已优惠:<BOLD>{$bill_discount[$BillDisModel::VIP_LESS_MONEY]}元</BOLD>";
}
if (!empty($bill_order[$BillModel::VID]) && $bill_discount['vip_dis_money'] > 0) {
$content[] = "会员 折扣:<BOLD>{$bill_discount[$BillDisModel::VIP_DIS_MONEY]}元</BOLD>";
}
if ((!empty($bill_order[$BillModel::VID]) || $bill_discount['coupon_type'] == 3) && $bill_discount['coupon_money'] > 0) {
$content[] = "优 惠 券:<BOLD>{$bill_discount[$BillDisModel::COUPON_MONEY]}元</BOLD>";
}
if ($bill_discount['pay_coupon_fee'] > 0) {
$content[] = "代 金 券:<BOLD>{$bill_discount['pay_coupon_fee']}元</BOLD>";
}
if (!empty($bill_order[$BillModel::VID])) {
if ($bill_discount['integral_dis_money'] > 0) {
if ($bill_discount['integral_marketing'] == 2) {
$content[] = "购买 积分:<BOLD>{$bill_discount[$BillDisModel::INTEGRAL_DIS_MONEY]}</BOLD>元";
} else {
$content[] = "积分 抵扣:<BOLD>{$bill_discount[$BillDisModel::INTEGRAL_DIS_MONEY]}</BOLD>元";
}
}
if (!empty($bill_discount['use_integral'])) {
$content[] = "扣除 积分:<BOLD>{$bill_discount[$BillDisModel::USE_INTEGRAL]}</BOLD>";
}
}
if (!empty($bill_discount[$BillDisModel::CASHIER_DIS_MONEY])) {
$content[] = "整单折扣优惠:<BOLD>{$bill_discount[$BillDisModel::CASHIER_DIS_MONEY]}</BOLD>元";
}
if (!empty($bill_discount[$BillDisModel::CASHIER_MANUAL_MONEY])) {
$content[] = "单品打折优惠:<BOLD>{$bill_discount[$BillDisModel::CASHIER_MANUAL_MONEY]}</BOLD>元";
}
if (!empty($bill_discount[$BillDisModel::SMALL_CHANGES_MONEY])) {
$content[] = "收银员抹零:<BOLD>{$bill_discount[$BillDisModel::SMALL_CHANGES_MONEY]}</BOLD>元";
}
if ($bill_order[$BillModel::TYPE] == 1 && ($bill_online[$BillOnlineModel::PICKUP_TYPE] == 2 || $bill_online[$BillOnlineModel::PICKUP_TYPE] == 3 || $bill_online[$BillOnlineModel::PICKUP_TYPE] == 5)) {
$content[] = "配 送 费:<BOLD>{$bill_online[$BillOnlineModel::DELIVERY_FEE]}</BOLD>元";
}
if (!empty($param['vip_info'])) {
//会员买单
$VipModel = D('RetailVip');
$vip_info = $param['vip_info'];
$vipName = mb_substr($vip_info['name'], 0, 1, 'utf-8');
$name = '';
for ($i = 1; $i < mb_strlen($vip_info['name'], 'utf-8'); $i++) {
$name .= '*';
}
$vipName = $vipName . $name;
$vipName = $vipName ? $vipName : $vip_info[$VipModel::NICK_NAME];
// $vipPhone = str_replace(substr($vip_info[$VipModel::MOBILE_PHONE], 3, 4), '****', $vip_info[$VipModel::MOBILE_PHONE]);
$vipPhone = $param['vip_info']['mobile_phone'];
$content[] = '------------------------------';
$content[] = "会员姓名:{$vipName}";
$content[] = "会员手机:{$vipPhone}";
$content[] = "会员余额:{$vip_info[$VipModel::BALANCE]}";
}
if ($param['bill_order']['third_vip_code']) {
$content[] = "会员名称:{$param['bill_order']['third_vip_name']}";
$content[] = "会员标识:{$param['bill_order']['third_vip_code']}";
}
$content[] = '------------------------------';
if ($bill_order['type'] == 1) {
$content[] = "配送方式:" . "<BOLD>{$bill_online['pickup_name']}</BOLD>";
}
if ($bill_order[$BillModel::TYPE] == 1 && !empty($bill_online['user_select_time'])) {
$user_select_time = date('Y-m-d H:i:s', $bill_online['user_select_time']);
switch ($bill_online[$BillOnlineModel::PICKUP_TYPE]) {
case 1:
$content[] = "自提时间:" . "<BOLD>{$user_select_time}</BOLD>";
break;
case 2:
$content[] = "配送时间:" . "<BOLD>{$user_select_time}</BOLD>";
break;
}
}
if (!empty($address_info)) {
if (!($bill_online['order_genre'] == 4 && $bill_online['pickup_type'] == 1)) {
$content[] = "地 址:" . "<BOLD>{$address_info['address']}</BOLD>";
}
$consignee = $bill_online['pickup_type'] == 1 ? "取 货 人:" : "收 货 人";
$content[] = $consignee . "<BOLD>{$address_info['name']}先生/女士</BOLD>";
$content[] = "手 机 号:" . "<BOLD>{$address_info['phone']}</BOLD>";
}
if (!empty($bill_online[$BillOnlineModel::REMARK])) {
$content[] = '------------------------------';
$content[] = "买家留言:" . "<BOLD><B>{$bill_online[$BillOnlineModel::REMARK]}</B></BOLD>";
}
$content[] = '';
$content[] = "<C>{$printSet[$PrinterModel::FOOTER]}</C>";//title为自定义头部信息,如果没有显示门店名
return $this->printComplexReceiptVoiceSupport($param['printSet'], $content, $bill_order['amount_received']);
}
public function refund($param)
{
$PrinterModel = D('RetailPrinter');
$BillModel = D('RetailBillOrder');
$BillDisModel = D('RetailBillDiscount');
$SellModel = D('RetailSell');
$printSet = $param['printSet'];
$order = $param['bill_order'];
$billOnline = $param['bill_online'];
$billDiscount = $param['bill_discount'];
$goodsList = $param['goodsList'];
$payList = $param['pay_list'];
if ($printSet[$PrinterModel::TITLE]) {
$content = array('title' => "<CB>{$printSet[$PrinterModel::TITLE]}</CB>");//title为自定义头部信息,如果没有显示门店名
}
$content[] = "<L><C>{$param['store_name']}</C></L>";//title为自定义头部信息,如果没有显示门店名
$content[] = '';
$content[] = "订单编号:<BOLD>{$order[$BillModel::ORDER_NO]}</BOLD>";
$content[] = "订单类型:退款订单";
$content[] = "申请时间:" . date('Y-m-d H:i:s', $order[$BillModel::ADD_TIME]);
if (!empty($order["finish_time"])) {
$content[] = "退款时间:" . date('Y-m-d H:i:s', $order["finish_time"]);
}
$content[] = '名称  数量  单价';
$content[] = '------------------------------';
foreach ($goodsList as $k => $val) {
$goods_name = $val[$SellModel::GOODS_NAME] ? $val[$SellModel::GOODS_NAME] : '无码商品';
if (!empty($val['skuinfo'])) {
$sku_name = json_decode($val['skuinfo'], true)[0]['sku'];
$goods_name = $goods_name . ":" . $sku_name;
} else if (!empty($val[$SellModel::SKU_JSON_INFO])) {
$sku_name = json_decode($val[$SellModel::SKU_JSON_INFO], true)['name'];
$goods_name = $goods_name . ":" . $sku_name;
}
$content[] = "{$goods_name}";//商品名
$str = '';
if ($val[$SellModel::PRICING_METHOD] == 1 || !empty($val[$SellModel::SKU_JSON_INFO])) {
$str .= '  X' . str_pad(round($val[$SellModel::NUM], 2), '6', ' ', STR_PAD_RIGHT);
} else if ($val[$SellModel::PRICING_METHOD] == 2) {
$str .= '  X' . str_pad(round($val[$SellModel::NUM], 2) . $val['company'], '6', ' ', STR_PAD_RIGHT);
}
$str .= '' . str_pad($val[$SellModel::PRICE], '9', ' ', STR_PAD_RIGHT);
$content[] = $str;
}
$content[] = '------------------------------';
if (count($payList) == 1) {
$content[] = "退款方式:" . "<BOLD>{$payList[0]['name']}</BOLD>";
} else {
$content[] = "退款方式:" . "<BOLD>组合退款</BOLD>";
foreach ($payList as $v) {
$content[] = "{$v['name']}:" . "<BOLD>{$v['money']}</BOLD>";
}
}
if ($billDiscount['integral_dis_money'] > 0) {
if ($billDiscount['integral_marketing'] == 2) {
$content[] = "购买积分金额:{$billDiscount[$BillDisModel::INTEGRAL_DIS_MONEY]}元";
} else {
$content[] = "积分抵扣:{$billDiscount[$BillDisModel::INTEGRAL_DIS_MONEY]}元";
}
}
if ($billDiscount['use_integral'] > 0) {
$content[] = "退还积分:" . $billDiscount[$BillDisModel::USE_INTEGRAL];
}
$print_time = date('Y/m/d H:i:s', time());
if ($billOnline['pickup_type'] == 2) {
$content[] = "退还配送费:" . "<BOLD>{$billOnline["delivery_fee"]}元</BOLD>";
}
if ($billDiscount['pay_coupon_fee'] > 0) {
$content[] = "代金券:" . "<BOLD>{$billDiscount['pay_coupon_fee']}元</BOLD>";
}
$content[] = "实退金额:" . "<BOLD>{$order[$BillModel::ALL_MONEY]}元</BOLD>";
$content[] = "打印时间:" . "<BOLD>{$print_time}</BOLD>";
$content[] = '';
$content[] = "<C>{$printSet[$PrinterModel::FOOTER]}</C>";//title为自定义头部信息,如果没有显示门店名
return $this->printComplexReceiptVoiceSupport($param['printSet'], $content, -$order[$BillModel::ALL_MONEY]);
}
public function exchange($param)
{
$PrinterModel = D('RetailPrinter');
$BillModel = D('RetailBillOrder');
$SellModel = D('RetailSell');
$printSet = $param['printSet'];
$order = $param['bill_order'];
$goodsList = $param['goodsList'];
if ($printSet[$PrinterModel::TITLE]) {
$content = array('title' => "<CB>{$printSet[$PrinterModel::TITLE]}</CB>");//title为自定义头部信息,如果没有显示门店名
}
$content[] = "<L><C>{$param['store_name']}</C></L>";//title为自定义头部信息,如果没有显示门店名
$content[] = '';
$content[] = "订单编号:<BOLD>{$order[$BillModel::ORDER_NO]}</BOLD>";
$content[] = "订单类型:换货订单";
$content[] = "申请时间:" . date('Y-m-d H:i:s', $order[$BillModel::ADD_TIME]);
if (!empty($order["finish_time"])) {
$content[] = "换货时间:" . date('Y-m-d H:i:s', $order["finish_time"]);
}
$content[] = '名称  数量  单价';
$content[] = '------------------------------';
foreach ($goodsList as $k => $val) {
$goods_name = $val[$SellModel::GOODS_NAME] ? $val[$SellModel::GOODS_NAME] : '无码商品';
if (!empty($val['skuinfo'])) {
$sku_name = json_decode($val['skuinfo'], true)[0]['sku'];
$goods_name = $goods_name . ":" . $sku_name;
} else if (!empty($val[$SellModel::SKU_JSON_INFO])) {
$sku_name = json_decode($val[$SellModel::SKU_JSON_INFO], true)['name'];
$goods_name = $goods_name . ":" . $sku_name;
}
$content[] = "{$goods_name}";//商品名
$str = '';
if ($val[$SellModel::PRICING_METHOD] == 1 || !empty($val[$SellModel::SKU_JSON_INFO])) {
$str .= '  X' . str_pad(round($val[$SellModel::NUM], 2), '6', ' ', STR_PAD_RIGHT);
} else if ($val[$SellModel::PRICING_METHOD] == 2) {
$str .= '  X' . str_pad(round($val[$SellModel::NUM], 2) . $val['company'], '6', ' ', STR_PAD_RIGHT);
}
$str .= '' . str_pad($val[$SellModel::PRICE], '9', ' ', STR_PAD_RIGHT);
$content[] = $str;
}
$content[] = '------------------------------';
$content[] = '姓名:' . $param['addressInfo']['name'];
$content[] = '手机号:' . $param['addressInfo']['phone'];
if ($order['pickup_type'] != 1) {
$content[] = '收货地址:' . $param['addressInfo']['address'];
}
$print_time = date('Y/m/d H:i:s', time());
$content[] = "打印时间:" . "<BOLD>{$print_time}</BOLD>";
$content[] = '';
$content[] = "<C>{$printSet[$PrinterModel::FOOTER]}</C>";//title为自定义头部信息,如果没有显示门店名
return $this->printComplexReceiptVoiceSupport($param['printSet'], $content);
}
/**
* 打印订单
* @param array $settings 配置信息
* @param array $content 打印内容
* @return array
*/
private function printComplexReceiptVoiceSupport($settings, $content, $money = 0)
{
$request = new PrintRequest();
$request->user = $settings['api_name'];
$request->userKey = $settings['api_key'];
$request->generateSign();
//*必填*:打印机编号
$request->sn = $settings['printer_sn'];
//*必填*:打印内容,不能超过12K
$request->content = implode('<BR>', $content);
//打印份数,默认为1
$request->copies = 1;
//声音播放模式,0 为取消订单模式,1 为静音模式,2 为来单播放模式,3为有用户申请退单了。默认为 2 来单播放模式
$request->voice = $money > 0 ? 2 : 3;
//打印模式:
//值为 0 或不指定则会检查打印机是否在线,如果不在线 则不生成打印订单,直接返回设备不在线状态码;如果在线则生成打印订单,并返回打印订单号。
//值为 1不检查打印机是否在线,直接生成打印订单,并返回打印订单号。如果打印机不在线,订单将缓存在打印队列中,打印机正常在线时会自动打印。
$request->mode = 1;
//支付方式:
//取值范围41~55:
//支付宝 41、微信 42、云支付 43、银联刷卡 44、银联支付 45、会员卡消费 46、会员卡充值 47、翼支付 48、成功收款 49、嘉联支付 50、壹钱包 51、京东支付 52、快钱支付 53、威支付 54、享钱支付 55
//仅用于支持金额播报的芯烨云打印机。
$request->payType = 42;
//支付与否:
//取值范围59~61:
//退款 59 到账 60 消费 61。
//仅用于支持金额播报的芯烨云打印机。
$request->payMode = $money > 0 ? 60 : 59;
//支付金额:
//最多允许保留2位小数。
//仅用于支持金额播报的芯烨云打印机。
$request->money = abs($money);
$result = $this->service->xpYunPrint($request);
return [
'code' => $result->content->code,
'msg' => $result->content->msg,
'data' => $result->content->data,
];
}
}