// +---------------------------------------------------------------------- declare (strict_types=1); namespace app\api\service\order; use app\api\model\OrderGoodsPackage as OrderGoodsPackageModel; use app\common\enum\order\DeliveryStatus as DeliveryStatusEnum; use app\common\library\helper; use app\common\service\BaseService; use app\common\model\Express as ExpressModel; use Endroid\QrCode\ErrorCorrectionLevel; use Endroid\QrCode\QrCode; /** * 订单详情服务类 * Class Order * @package app\api\service\order */ class Order extends BaseService { /** * 获取物流单号集合 * @param $model * @return array * @author: zjwhust * @Time: 2021/9/30 17:27 */ public function getUserOrderExpress($model){ $express_list['arr'] = $express_list['pac'] = []; foreach ($model['goods'] as $good){ if($good['is_split_package']){ $express_no = OrderGoodsPackageModel::where('order_goods_id',$good['order_goods_id'])->column('express_no'); $express_list['pac'] = array_merge($express_list['pac'],$express_no); }else{ if($good['express_no']){ $express_list['arr'][] = $good['express_no']; } } } // 获取物流单号集合 return $express_list; // return array_values(array_filter(array_unique(helper::getArrayColumn($model['goods'], 'express_no')))); } /** * 判断订单列表是否有多个物流单号 * @param $model * @author: zjwhust * @Time: 2021/9/30 17:39 */ public function setUserOrder($model){ foreach ($model as $item){ if($item['delivery_status']==DeliveryStatusEnum::DELIVERED){//订单状态没有更改为已发货就不显示物流信息 $split_package = array_values(array_unique(helper::getArrayColumn($item['goods'], 'is_split_package'))); if(in_array(1,$split_package)){ $item['is_mult_express_no'] = 2; $item['express_no'] = ''; }else{ $getOrderExpress = array_values(array_filter(array_unique(helper::getArrayColumn($item['goods'], 'express_no')))); $count = count($getOrderExpress); $item['is_mult_express_no'] = $count; $item['express_no'] = implode(',',$getOrderExpress); } }else{ $item['is_mult_express_no'] = 0; $item['express_no'] = ''; } } } /** * 单个物流显示物流详情 * @param $order * @param $expressNo * @return array * @throws \app\common\exception\BaseException * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author: zjwhust * @Time: 2021/10/8 16:25 */ public function getExpressDetail($order,$expressNo){ $res = []; foreach ($order['goods'] as $goods){ if($goods['express_no']==$expressNo){ $res['order'] = [ "express_no"=>$goods['express_no'], "express_company"=>$goods['express_company'], "address"=>$order['address'], ]; $ExpressModel = new ExpressModel; $res['delivery'] = $ExpressModel->deliverylist($goods['express_no'], $goods['delivery_time'], 1); break; }else{ foreach ($goods['package'] as $pack){ if($pack['express_no']==$expressNo){ $res['order'] = [ "express_no"=>$pack['express_no'], "express_company"=>$pack['express_company'], "address"=>$order['address'], ]; $ExpressModel = new ExpressModel; $res['delivery'] = $ExpressModel->deliverylist($pack['express_no'], $pack['delivery_time'], 1); break; } } } continue; } return $res; } // public function getExpressInfo($express_no,$delivery_time){ $expressModel = new ExpressModel; $res = $expressModel->deliverylist($express_no,$delivery_time, 1); return $res; } /** * 多个物流订单显示物流列表 * @param $order * @return array * @throws \app\common\exception\BaseException * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author: zjwhust * @Time: 2021/10/8 15:20 */ public function getExpressList($order){ $res = []; foreach ($order['goods'] as $goods){ if($goods['is_split_package']){ foreach ($goods['package'] as $pack){ $res[$pack['express_no']]['express_company'] = $pack['express_company']; $res[$pack['express_no']]['express_no'] = $pack['express_no']; $res[$pack['express_no']]['order_no'] = $order['order_no']; $res[$pack['express_no']]['order_id'] = $order['order_id']; $res[$pack['express_no']]['pay_time'] = $order['pay_time']; $res[$pack['express_no']]['goods'][] = $goods; $res[$pack['express_no']]['total_nums'] = $pack['total_num']; $res[$pack['express_no']]['delivery_time'] = $pack['delivery_time']; $res[$pack['express_no']]['is_split_package'] = $goods['is_split_package']; } }else{ if($goods['express_no']){ $res[$goods['express_no']]['express_company'] = $goods['express_company']; $res[$goods['express_no']]['express_no'] = $goods['express_no']; $res[$goods['express_no']]['order_no'] = $order['order_no']; $res[$goods['express_no']]['order_id'] = $order['order_id']; $res[$goods['express_no']]['pay_time'] = $order['pay_time']; $res[$goods['express_no']]['goods'][] = $goods; $res[$goods['express_no']]['delivery_time'] = $goods['delivery_time']; $res[$goods['express_no']]['is_split_package'] = $goods['is_split_package']; } } unset($goods['package']); } $ExpressModel = new ExpressModel; foreach ($res as &$express){ $express['express'] = $ExpressModel->deliverylist($express['express_no'], $express['delivery_time'], 2); if(!$express['is_split_package']){ $express['total_nums'] = helper::getArrayColumnSum($express['goods'],'total_num'); } } return array_values($res); } /** * 生成核销码二维码地址 */ public static function getHxQrcode($hxCode) { $qrCode = new QrCode($hxCode); $qrCode->setSize(300); // Set advanced options $qrCode->setWriterByName('png'); $qrCode->setMargin(10); $qrCode->setEncoding('UTF-8'); $qrCode->setErrorCorrectionLevel(new ErrorCorrectionLevel(ErrorCorrectionLevel::HIGH)); $qrCode->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]); $qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]); $qrCode->setWriterOptions(['exclude_xml_declaration' => true]); // Directly output the QR code header('Content-Type: '.$qrCode->getContentType()); exit($qrCode->writeString()); } }