select(['is_pay','mch_id','order_no','created_at','total_price', 'name',
'mobile', 'address', 'pay_price'])->where(['id' => $order_id])->asArray()->one();
$order_detail_list = OrderDetail::find()
->alias('o')
->where(['o.order_id' => $order_id])
->select('o.goods_id,o.total_price,o.attr as o_attr,o.num,o.goods_id,o.order_id')
->asArray()
->all();
break;
case 1:
$order_info = MsOrder::find()->select(['is_pay','mch_id','order_no','created_at','total_price', 'name',
'mobile', 'address', 'pay_price'])->where(['id' => $order_id])->asArray()->one();
$order_detail_list = MsOrder::find()
->alias('o')
->where(['o.order_id' => $order_id])
->select('o.goods_id,o.total_price,o.attr as o_attr,o.num,o.goods_id,o.order_id')
->asArray()
->all();
break;
case 2:
$order_info = PtActivityOrder::find()->select(['is_pay','store_id','order_no','created_at','total_price', 'name',
'mobile', 'address', 'pay_price'])->where(['id' => $order_id])->asArray()->one();
$order_detail_list = PtActivityOrderDetail::find()
->alias('o')
->where(['o.order_id' => $order_id])
->select('o.goods_id,o.total_price,o.attr as o_attr,o.num,o.goods_id,o.order_id')
->asArray()
->all();
break;
case 3:
$order_info = BargainOrder::find()->select(['is_pay','mch_id','order_no','created_at','total_price', 'name',
'mobile', 'address', 'pay_price'])->where(['id' => $order_id])->asArray()->one();
$order_detail_list = BargainOrderDetail::find()
->alias('o')
->where(['o.order_id' => $order_id])
->select('o.goods_id,o.total_price,o.attr as o_attr,o.num,o.goods_id,o.order_id')
->asArray()
->all();
break;
default:
return;
break;
}
if($order_info['is_pay'] == 1){
$order_info['is_pay'] = '已支付';
}else{
$order_info['is_pay'] = '货到付款';
}
$mch_id = $order_info['mch_id'];
// 查询订单下单时是否开启打印
$cloud_on = CloudSetting::find()->select(['type', 'cloud_id'])->where(['store_id' => $store_id,
'mch_id' => $mch_id,'is_delete' => 0])->asArray()->one();
if (empty($cloud_on)) {
return;
}
$is_res = json_decode($cloud_on['type']);
$is_on = $is_res->pay;
if ($is_on == 1 && $order_info['is_pay'] == 1) {
foreach($order_detail_list as & $arr1){
$g_id = $arr1['goods_id'];
if ($order_type == 1) {
$g_info = MsGoods::find()->alias('g')->where(['id' => $g_id])->select(['g.id','g.name',
'g.unit','g.price','g.attr'])->asArray()->one();
} else if ($order_type == 2) {
$g_info = PtGoods::find()->alias('g')->where(['id' => $g_id])->select(['g.id','g.name',
'g.unit','g.price','g.attr'])->asArray()->one();
} else if ($order_type == 3) {
$g_info = BargainGoods::find()->alias('g')->where(['id' => $g_id])->select(['g.id','g.name',
'g.unit','g.price','g.attr'])->asArray()->one();
} else {
$g_info = Goods::find()->alias('g')->where(['id' => $g_id])->select(['g.id','g.name','g.unit',
'g.price','g.attr'])->asArray()->one();
}
$arr1['id'] = $g_info['id'];
$arr1['name'] = $g_info['name'];
$arr1['unit'] = $g_info['unit'];
$arr1['price'] = $g_info['price'];
$arr1['attr'] = $g_info['attr'];
}
$cloud_id = $cloud_on['cloud_id'];
$setting = Cloud::find()->select(['cloud_setting'])->where(['id' => $cloud_id])->asArray()->one();
$setting_json = json_decode($setting['cloud_setting']);
$send_html = self::createHtml($setting_json, $order_info, $order_detail_list, $order_type);
// 抓取设置的云打印机参数
if ($order_info['total_price'] > $setting_json->minimoney) {
$name = $setting_json->name;
$app_id = $setting_json->app_id;
$app_key = $setting_json->app_key;
$time_stamp = time();
$sign = md5('app_id=' . $app_id . '&sign_type=MD5&time_stamp=' . $time_stamp . '&key=' . $app_key);
$sign = strtoupper($sign);
$token = self::getToken($sign,$app_id,$time_stamp);
$token_arr = json_decode($token,true);
$token = $token_arr['return_data']['access_token'];
$cus_order_id = time().rand(100,999);
//初始化
$curl = curl_init();
//设置抓取的ur
curl_setopt($curl, CURLOPT_URL, 'https://mcp.jolimark.com/mcp/v3/sys/PrintRichHtmlCode');
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 1);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
//设置post数据
$post_data = array(
"app_id" => $app_id,
"access_token" => $token,
"device_ids" => $name,
"copies" => 1,
"cus_orderid" => $cus_order_id,
"bill_content" => $send_html,
"paper_type" => 1,
);
// post提交的数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
// 执行命令
curl_exec($curl);
curl_close($curl);
}
}
} catch (\Throwable $e) {
\Yii::warning($e->getMessage());
}
}
/**
* @param $attrStr
* @param $searchAttrIds
* @return bool
*/
public static function getNo($attrStr, $searchAttrIds){
$attr = json_decode($attrStr,true);
foreach ($attr as $item){
$attrIds = array_column($item, 'attr_id');
if ($attrIds == $searchAttrIds){
return $item['no'];
}
}
return false;
}
/**
* @param $setting_json
* @param $order_info
* @param $order_detail_list
* @param $order_type
* @return string
*/
public static function createHtml($setting_json, $order_info, $order_detail_list, $order_type)
{
$order_title = $setting_json->order_title;
$order_address = $setting_json->order_address;
$order_mobile = $setting_json->order_mobile;
$order_desc = $setting_json->order_desc;
$no = 0;
$order_count_price = 0;
foreach ($order_detail_list as & $arr) {
$no = $no + 1;
$push_arr = [];
$search = $arr['o_attr'];
$search_arr = json_decode($search, true);
foreach ($search_arr as & $vv) {
array_push($push_arr, $vv['attr_id']);
}
$arr['no'] = self::getNo($arr['o_attr'], $push_arr);
$g_id = $arr['goods_id'];
$order_id = $arr['order_id'];
if ($order_type == 1) {
$g_info_attr = MsOrder::find()->where(['is_delete' => 0,'order_id' => $order_id,'goods_id' => $g_id])
->select(['attr'])->asArray()->one();
} else if ($order_type == 2) {
$g_info_attr = PtOrderDetail::find()->where(['is_delete' => 0,'order_id' => $order_id,'goods_id' => $g_id])
->select(['attr'])->asArray()->one();
} else if ($order_type == 3) {
$g_info_attr = BargainOrderDetail::find()->where(['is_delete' => 0,'order_id' => $order_id,'goods_id' => $g_id])
->select(['attr'])->asArray()->one();
} else {
$g_info_attr = OrderDetail::find()->where(['is_delete' => 0,'order_id' => $order_id,'goods_id' => $g_id])
->select(['attr'])->asArray()->one();
}
$attr_list = json_decode($g_info_attr['attr']);
if (is_array($attr_list)){
foreach ($attr_list as $attr){
$attr_str=$attr->attr_group_name.":".$attr->attr_name;
}
}
$tr2 = "
| " . $no . " | "
. "" . $arr['name'] . " | "
. "" . $attr_str . " | "
. "" . $arr['no'] . " | "
. "" . $arr['unit'] . " | "
. "" . $arr['num'] . " | "
. "" . $arr['total_price'] / $arr['num'] . " | "
. "" . $arr['total_price']
. " | |
";
$order_count_price = $order_count_price + $arr['total_price'];
}
$html = "
".$order_title."
| 订单号:" . $order_info['order_no'] . " |
客户电话:" . $order_info['mobile'] . " |
下单时间:" . date('Y-m-d', $order_info['created_at']) . " |
| 客户:" . $order_info['name'] . " |
客户地址:" . $order_info['address'] . " |
支付方式:" . $order_info['is_pay'] . " |
" . $tr2 . "
| 合计金额: |
" . $order_count_price . " |
" . " |
";
return $html;
}
/**
* @param $sign
* @param $app_id
* @param $time_stamp
* @return mixed
*/
public static function getToken($sign, $app_id, $time_stamp)
{
// 初始化
$curl = curl_init();
$url = 'https://mcp.jolimark.com/mcp/v3/sys/GetAccessToken?app_id=' . $app_id . '&time_stamp=' . $time_stamp
. '&sign=' . $sign . '&sign_type=MD5';
// 设置抓取的url
curl_setopt($curl, CURLOPT_URL, $url);
// 设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
// 执行命令
$data = curl_exec($curl);
// 关闭URL请求
curl_close($curl);
return $data;
}
}