|
|
<?php
namespace App\Service\v3\Implementations;
use App\Libs\FeiePrintClient;use App\Service\v3\Interfaces\FeiePrintServiceInterface;use Hyperf\DbConnection\Db;
class FeiePrintService implements FeiePrintServiceInterface{ // *必填*:飞鹅云后台注册账号
const USER = '13161443713@163.com'; // *必填*: 飞鹅云后台注册账号后生成的UKEY 【备注:这不是填打印机的KEY】
const UKEY = 'XsaHzgePdyWTfcMX'; // *必填*:打印机编号,必须要在管理后台里添加打印机或调用API接口添加之后,才能调用API
const SN = '550510805';
// 以下参数不需要修改
// 接口IP或域名
const IP = 'api.feieyun.cn'; // 接口IP端口
const PORT = 80; // 接口路径
const PATH = '/Api/Open/';
protected $feieUser = ''; protected $feieUkey = ''; protected $feieHost = ''; protected $feiePort = ''; protected $feieApiPath = '';
public function __construct() { $this->feieUser = config('feie.user'); $this->feieUkey = config('feie.ukey'); $this->feieHost = config('feie.host'); $this->feiePort = config('feie.port'); $this->feieApiPath = config('feie.api_path'); }
public function feiePrint($globalOrderId) { // TODO 对象数组=》二维数组
$data = Db::table('lanzu_order_main as m') ->join('lanzu_order as o','o.order_main_id', '=', 'm.id','inner') ->join('lanzu_order_goods as g','o.id','=', 'g.order_id','inner') ->join('lanzu_feprint as f','m.market_id','=', 'f.market_id','inner') ->join('lanzu_store as s','s.id','=', 'o.store_id','inner') ->where('m.global_order_id', $globalOrderId) ->selectRaw("o.note as o_note,g.name,g.number,g.price,g.goods_unit,m.delivery_time_note as ps_time,m.address,m.note,m.name as user_name,m.delivery_money,m.money as m_money,m.coupon_money,m.services_money,f.sn,m.tel,m.order_num,g.id,g.spec,s.name as shopname") ->orderBy('s.id') ->get() ->toArray();
if (empty($data)) { return ; } foreach ($data as $key => &$item) { $item = (array)$item; }
$content = $this->printFormat($data, 14, 6, 3, 6);
$res = $this->printMsg($data[0]['sn'], $content, 1); return ($res); }
/** * [打印订单接口 Open_printMsg] * @param [string] $sn [打印机编号sn] * @param [string] $content [打印内容] * @param [string] $times [打印联数] * @return [string] [接口返回值] */ protected function printMsg($sn, $content, $times = 1) { $time = time(); //请求时间
$msgInfo = array( 'user' => $this->feieUser, 'stime' => $time, 'sig' => sha1($this->feieUser . $this->feieUkey . $time), 'apiname' => 'Open_printMsg', 'sn' => $sn, 'content' => $content, 'times' => $times//打印次数
); $client = new FeiePrintClient($this->feieHost, $this->feiePort); if (!$client->post($this->feieApiPath, $msgInfo)) { echo 'error'; } else { // 服务器返回的JSON字符串,建议要当做日志记录起来
$result = $client->getContent(); return $result; } }
protected function printFormat($arr, $A, $B, $C, $D) { $orderInfo = '<CB>懒族生活</CB><BR>'; $orderInfo .= '名称 单价 数量 金额<BR>'; $orderInfo .= '--------------------------------<BR>'; $shopname = ""; $shopnum = 0; foreach ($arr as $k5 => $v5) { if ($shopname != $v5['shopname']) { if ($shopname != "") { $orderInfo .= ' <BR>'; } $shopnum++; $orderInfo .= "<C>(" . $shopnum . ")" .$v5['shopname'] . '</C><BR>'; $shopname = $v5['shopname']; } $name = $v5['name']; $name .= "(规格:". $v5['goods_unit'].")"; $price = $v5['m_money']; $num = $v5['number']; $prices = sprintf("%.2f",$v5['m_money']*$v5['number']); $kw3 = ''; $kw1 = ''; $kw2 = ''; $kw4 = ''; $str = $name; $blankNum = $A;//名称控制为14个字节
$lan = mb_strlen($str,'utf-8'); $m = 0; $j=1; $blankNum++; $result = array(); if(strlen($price) < $B){ $k1 = $B - strlen($price); for($q=0;$q<$k1;$q++){ $kw1 .= ' '; } $price = $kw1.$price; } if(strlen($num) < $C){ $k2 = $C - strlen($num); for($q=0;$q<$k2;$q++){ $kw2 .= ' '; } $num = $kw2.$num; } if(strlen($prices) < $D){ $k3 = $D - strlen($prices); for($q=0;$q<$k3;$q++){ $kw4 .= ' '; } $prices = $kw4.$prices; } for ($i=0;$i<$lan;$i++){ $new = mb_substr($str,$m,$j,'utf-8'); $j++; if(mb_strwidth($new,'utf-8')<$blankNum) { if($m+$j>$lan) { $m = $m+$j; $tail = $new; // $lenght = iconv("UTF-8", "GBK//IGNORE", $new);
$k = $A - mb_strwidth($new,'utf-8'); for($q=0;$q<$k;$q++){ $kw3 .= ' '; } if($m==$j){ $tail .= $kw3.' '.$price.' '.$num.' '.$prices; }else{ $tail .= $kw3.'<BR>'; } break; }else{ $next_new = mb_substr($str,$m,$j,'utf-8'); if(mb_strwidth($next_new,'utf-8')<$blankNum) continue; else{ $m = $i+1; $result[] = $new; $j=1; } } } } $head = ''; foreach ($result as $key=>$value) { if($key < 1){ // $v_lenght = iconv("UTF-8", "GBK//IGNORE", $value);
$v_lenght = mb_strwidth($value,'utf-8'); if($v_lenght == 13) $value = $value." "; $head .= $value.' '.$price.' '.$num.' '.$prices; }else{ $head .= $value.'<BR>'; } } $orderInfo .= $head.$tail; if(!empty($v5['o_note'])){ $orderInfo .= '备注:'.$v5['o_note'].'<BR>'; } } // $time = date('Y-m-d H:i:s', time());
$orderInfo .= '--------------------------------<BR>'; if ($arr[0]['services_money'] > 0) { $kw5 = ''; $len = 24 - strlen($arr[0]['services_money']); for ($q = 0; $q < $len; $q++) { $kw5 .= ' '; } $orderInfo .= '服务费:' . $kw5 . $arr[0]['services_money'] . '<BR>'; } if($arr[0]['delivery_money'] > 0){ $kw5 = ''; $len = 24 - strlen($arr[0]['delivery_money']); for ($q = 0; $q < $len; $q++) { $kw5 .= ' '; } $orderInfo .= '配送费:'.$kw5.$arr[0]['delivery_money'].'<BR>'; } if($arr[0]['coupon_money'] > 0){ $coupon_money = sprintf("%.2f",$arr[0]['coupon_money']); $kw6 = ''; $len = 25 - strlen($coupon_money); for ($q = 0; $q < $len; $q++) { $kw6 .= ' '; } $orderInfo .= '红包:'.$kw6.'-'.$coupon_money.'<BR>'; } $total = '合计:'.$arr[0]['m_money']; $user_name = $arr[0]['user_name']; if(strlen($user_name)>18){ $user_name=substr($user_name,0,18).'...'; } $str = $user_name . $total; $kw5 = ''; // $lenght = iconv("UTF-8", "GBK//IGNORE", $str);
$total_len = 32 - mb_strwidth($str,'utf-8'); for ($q = 0; $q < $total_len; $q++) { $kw5 .= ' '; } $total_str = $user_name.$kw5.$total; $orderInfo .= $total_str.'<BR>'; $orderInfo .= '送货地点:' . $arr[0]['address'] . '<BR>'; $tel = substr_replace( $arr[0]['tel'], '****', 3, 4); $orderInfo .= '联系电话:' . $tel . '<BR>'; $orderInfo .= '配送时间:' . $arr[0]['ps_time'] . '<BR>'; if(!empty($arr[0]['note'])){ $orderInfo .= '备注:'.$arr[0]['note'].'<BR><BR>'; } //$orderInfo .= '<QR>http://www.feieyun.com</QR>';//把解析后的二维码生成的字符串用标签套上即可自动生成二维码
return $orderInfo; }}
|