input('search'); $code = request()->input('code'); return $this->getOrder()->statusCode($code)->orders($search); } protected function orderModel() { if (isset($this->orderModel)) { return $this->orderModel; } return $this->orderModel = $this->setOrderModel(); } protected function getData($code = '') { $data = [ 'code' => $code, 'listUrl' => '', //订单查询路由 'commonPartUrl' => '', //订单查询路由 'exportUrl' => '', //订单导出路由 'detailUrl' => '', //订单详情 ]; $source_status = false; $source_is_open = \Setting::get('plugin.goods_source.is_open'); if (app('plugins')->isEnabled('goods-source')&&(is_null($source_is_open) || $source_is_open)) { $source_status = true; } if ($source_status) { $source_list = GoodsSource::uniacid()->select(['id','source_name'])->get()->toArray(); } else { $source_list = New Collection(); } if ($extraData = $this->mergeExtraData()) { $data = array_merge($data, $extraData); } //插件参数 $extraParam = $this->mergeExtraParam(); $data['extraParam'] = $extraParam ?: []; $data['is_source_open'] = $source_status ? 1 : 0; $data['source_list'] = $source_list ?: []; $data['expressCompanies'] = \app\common\repositories\ExpressCompany::create()->all(); return ['data' => json_encode($data)]; } protected function mergeExtraData() { } protected function mergeExtraParam() { $extraParam = [ 'package_deliver' => app('plugins')->isEnabled('package-deliver'), 'team_dividend' => app('plugins')->isEnabled('team-dividend'), 'printer' => (app('plugins')->isEnabled('printer') || app('plugins')->isEnabled('more-printer')) ]; return $extraParam; } public function orderPrinter() { try { $order_id = request()->order_id; $order = Order::find($order_id); if (!$order) { throw new \Exception('订单未找到'); } //打印机 if (app('plugins')->isEnabled('printer')) { \app\common\modules\shop\ShopConfig::current()->set('printer_owner', [ 'owner' => 1, 'owner_id' => 0 ]); $print_type = 2; $code = '商城支付打印'; if ($order->status == 0) { $print_type = 1; $code = '商城下单打印'; } $NewPrintingService = new NewPrintingService($order, $print_type, $code); if($NewPrintingService->verify()){ $NewPrintingService->handle(); } return $this->successJson('ok'); } if (app('plugins')->isEnabled('more-printer')) { $print_type = 2; if ($order->status == 0) { $print_type = 1; } $order_service = new OrderPrintService($order, $print_type); $order_service->newPrinting(); return $this->successJson('ok'); } throw new \Exception('未开启打印机插件'); } catch (\Exception $e) { return $this->errorJson($e->getMessage()); } } //此方法多余了 public function commonPart() { //插件参数 $extraParam = $this->mergeExtraParam(); $info['extraParam'] = $extraParam ?: []; $data['expressCompanies'] = \app\common\repositories\ExpressCompany::create()->all(); return $this->successJson('commonPart', $info); } public function getList() { $sort = request()->search['sort']; $search = request()->input('search'); if ($sort == 1) { $condition['order_by'][] = [$this->orderModel()->getModel()->getTable() . '.uid', 'desc']; $condition['order_by'][] = [$this->orderModel()->getModel()->getTable() . '.id', 'desc']; } $orderModel = $this->orderModel(); if (app('plugins')->isEnabled('order-inventory') && \Yunshop\OrderInventory\services\SetService::pluginIsOpen()) { //不显示存货订单 $orderModel = \Yunshop\OrderInventory\services\InventoryService::orderListWhere($orderModel); } if (app('plugins')->isEnabled('invoice')) { $orderModel = $orderModel->with('orderInvoice'); if ($search['is_invoice']) { $orderModel->whereHas('orderInvoice', function ($query) use ($search) { return $query->where('apply', $search['is_invoice']); }); } } if ($search['source_id']) { $set_goods_id = GoodsSet::where('source_id', $search['source_id'])->pluck('goods_id')->all(); $order_ids = OrderGoods::uniacid()->whereIn('goods_id', $set_goods_id)->pluck('order_id')->unique()->all(); $orderModel->whereIn('yz_order.id', $order_ids); } $count['total_price'] = $orderModel->sum('yz_order.price'); $count['dispatch_price'] = $orderModel->sum('yz_order.dispatch_price'); $build = $orderModel; if ($sort == 1) { foreach ($condition['order_by'] as $item) { $build->orderBy(...$item); } } else { $build->orderBy($this->orderModel()->getModel()->getTable() . '.id', 'desc'); } $page = $build->paginate(self::PAGE_SIZE); $page->map(function ($order) { /** * todo 为了不在模型的 $appends 属性加动态显示 */ $order->fixed_button = $order->fixed_button; $order->top_row = $order->top_row; $order->part_refund = (!$order->refund_id && RefundApply::getAfterSales($order->id)->count()) ? 1 :0; // 查询乐刷订单, 然后显示是否有退款不足的情况 if (in_array($order->pay_type_id, [85, 86, 87])) { $refundRecords = \Yunshop\LeshuaPay\models\RefundRecords::where('order_id', $order->id)->first(); $order->leshua_refund_error_msg = $refundRecords->msg ?? ''; } }); $source_status = false; $source_is_open = \Setting::get('plugin.goods_source.is_open'); if (app('plugins')->isEnabled('goods-source')&&(is_null($source_is_open) || $source_is_open)) { $source_status = true; } if ($source_status) { $source_list = GoodsSource::uniacid()->select(['id','source_name'])->get(); } else { $source_list = New Collection(); } $count['total'] = $page->total(); $list = $page->toArray(); $data = [ 'list' => $list, 'count' => $count, 'is_source_open' => $source_status ? 1 : 0, 'source_list' => $source_list, ]; return $this->successJson('list', $data); } public function getSynchro() { //判断是否开启了同步运单号 $synchro = 0; if (app('plugins')->isEnabled('exhelper')) { $set = ExhelperSys::uniacid()->first(); if ($set) {//判断是否填了快递助手信息 $send = SendUser::uniacid()->where('isdefault', 1)->first(); $panel = ExhelperPanel::uniacid()->where('isdefault', 1)->first(); if ($send && $panel) {//判断是否有默认发货人和默认模板 $synchro = 1;//开启同步运单号 } else { $synchro = 0; } } else { $synchro = 0; } } return $this->successJson('ok', $synchro); } /** * @return string * @throws \Throwable */ public function index() { //$a = (new \app\backend\modules\order\services\OrderViewService())->importVue(); //(new \app\backend\modules\order\services\OrderViewService())->topRowShow(); return view('order.vue-list', $this->getData())->render(); } /** * @return string * @throws \Throwable */ public function waitPay() { return view('order.vue-list', $this->getData('waitPay'))->render(); } /** * @return string * @throws \Throwable */ public function waitSend() { return view('order.vue-list', $this->getData('waitSend'))->render(); } /** * 催发货 * @return string */ public function expeditingSend() { return view('order.vue-list', $this->getData('expeditingSend')); } /** * @return string * @throws \Throwable */ public function waitReceive() { return view('order.vue-list', $this->getData('waitReceive'))->render(); } /** * @return string * @throws \Throwable */ public function completed() { return view('order.vue-list', $this->getData('completed'))->render(); } /** * @return string * @throws \Throwable */ public function cancelled() { return view('order.vue-list', $this->getData('cancelled'))->render(); } public function export() { $export_type = request()->input('export_type'); $template = request()->input('template'); if (request()->search['order_status']) { $search = request()->search; $search['order_status'] = explode(',', $search['order_status']); request()->offsetSet('search', $search); } if ($export_type == 1) { $this->baseExport($template); } elseif ($export_type == 2) { $this->directExport($template); } } public function batchSend() { $order_ids = $this->orderModel()->pluck('id'); $send_data = request()->batch_send; $i = 0; foreach ($order_ids as $order_id) { try { $param = [ "dispatch_type_id" => $send_data['dispatch_type_id'], "express_code" => $send_data['express_code'], "express_sn" => $send_data['express_sn'], "order_id" => $order_id, ]; \app\frontend\modules\order\services\OrderService::orderSend($param); } catch (\Exception $e) { $i ++; } } return $this->successJson('一键发货成功,失败条数'. $i . '(有退款订单不能发货)'); } public function baseExport($template) { ini_set('memory_limit',-1); //订单里的商品和商品的分类过多会造成内存溢出 set_time_limit(60); $export_page = request()->export_page ? request()->export_page : 1; //清除之前没有导出的文件 if ($export_page == 1) { $fileNameArr = file_tree(storage_path('exports')); foreach ($fileNameArr as $val) { if (file_exists(storage_path('exports/' . basename($val)))) { unlink(storage_path('exports/') . basename($val)); // 路径+文件名称 } } } $order_model = $this->orderModel(); if (request()->search['source_id']) { $set_goods_id = GoodsSet::where('source_id', request()->search['source_id'])->pluck('goods_id')->all(); $order_ids = OrderGoods::uniacid()->whereIn('goods_id', $set_goods_id)->pluck('order_id')->unique()->all(); $order_model->whereIn('yz_order.id', $order_ids); } $orders = $order_model->with(['discounts', 'deductions', 'orderInvoice'])->orderBy($this->orderModel()->getModel()->getTable() . '.id', 'desc'); $columns = $this->getColumns(); if ($template == 2) { if (app('plugins')->isEnabled('package-delivery')) { $orders->with(['hasOnePackageDeliveryOrder'=>function($query){ $query->select('order_id','buyer_name','buyer_mobile'); }]); } if (app('plugins')->isEnabled('package-deliver')) { $orders->with(['hasOnePackageDeliverOrder' => function ($query) { $query->with(['hasOneDeliver' => function ($query) { $query->select('id', 'deliver_name', 'deliver_mobile', 'realname'); }])->select('deliver_id', 'order_id', 'deliver_name'); }]); } if (app('plugins')->isEnabled('goods-source')) { $orders->with(['hasManyOrderGoods' => function ($query) { $query->with(['goodsSource' => function ($query) { $query->with(['source']); }]); }]); } } $export_model = new OrderExportService($orders, $export_page); if (!$export_model->builder_model->isEmpty()) { $category=new Category(); $file_name = date('Ymdhis', time()) . '订单导出' . $export_page;//返现记录导出 $export_data[0] = $template == 2 ? $columns : $this->getColumnsV1(); foreach ($export_model->builder_model->toArray() as $key => $item) { $address = explode(' ', $item['address']['address']); $fistOrder = $item['has_many_first_order'] ? '首单' : ''; $refundedCollect = \app\common\models\refund\RefundApply::getAfterSales($item['id']) ->orderBy('id', 'desc') ->get(); if ($refundedCollect->isEmpty()) { $refund_name = ''; } else { $refund_name = $refundedCollect->first()->part_refund == \app\common\models\refund\RefundApply::PART_REFUND ? '部分退款':''; } //拼接多包裹快递信息 $expressInfo=$this->getExpressString($item['expressmany']); $clerk_info = $this->getAuditor($item); $goods = []; if ($template == 2) { $form = $this->getFormDataByOderId($item['id']); foreach ($item['has_many_order_goods'] as $v) { $goodsRefundedTotal = $v['after_sales']['complete_quantity']; $cate=[]; $temp = [ $v['title'], $v['goods']['alias'], $v['goods_option_title'], $v['goods_sn'], $v['product_sn'], $v['total'], "{$goodsRefundedTotal}", "".max($v['total'] - $goodsRefundedTotal, 0), ]; foreach($v['goods']['belongs_to_categorys']as $val){ $cate[]=$category->getCateOrderByLevel($val['category_ids']); } $temp[]=$cate; $temp[]= $v['vip_price']; $temp[] = $form[$v['goods_id']]? $form[$v['goods_id']] : ''; $temp[] = $v['goods_source']['source']['source_name']?:""; $goods[]=$temp; } $export_row_data = [ $item['id'], $item['order_sn'], $item['has_one_order_pay']['pay_sn'], $item['belongs_to_member']['uid'], $this->getNickname($item['belongs_to_member']['nickname'])?:substr_replace($item['belongs_to_member']['mobile'],'*******',2,7), // $item['address']['realname'], // $item['address']['mobile'], $this->getExportRealName($item), $this->getExportMobile($item), !empty($address[0]) ? $address[0] : '', !empty($address[1]) ? $address[1] : '', !empty($address[2]) ? $address[2] : '', $item['address']['address'], $goods, $item['pay_type_name'], $this->getExportDiscount($item, 'deduction'), $this->getExportDiscount($item, 'coupon'), $this->getExportDiscount($item, 'enoughReduce'), $this->getExportDiscount($item, 'singleEnoughReduce'), $item['goods_price'], $item['dispatch_price'], $this->getGoods($item, 'cost_price', $category), $item['price'], ''.$refundedCollect->sum('price'), ''.max($item['price'] - $refundedCollect->sum('price'),0), $item['status_name'], $item['create_time'], !empty(strtotime($item['pay_time'])) ? $item['pay_time'] : '', !empty(strtotime($item['send_time'])) ? $item['send_time'] : '', !empty(strtotime($item['finish_time'])) ? $item['finish_time'] : '', $expressInfo['company'], $expressInfo['sn'], $item['has_one_order_remark']['remark'], $this->checkStr($item['note']), $fistOrder, $item['has_many_member_certified']['realname']?:$item['belongs_to_member']['realname'], ' ' . $item['belongs_to_member']['idcard'], $clerk_info['auditor'], $clerk_info['additional'], $this->getExportRefundName($item)?:$refund_name, $this->invoiceType($item['order_invoice']['invoice_type']), // 发票类型 ($item['order_invoice']['rise_type'] == 1) ? '个人' : '单位', // 发票抬头 empty($item['order_invoice']['collect_name']) ? '' : $item['order_invoice']['collect_name'], // 单位/抬头名称 empty($item['order_invoice']['gmf_taxpayer']) ? $item['order_invoice']['company_number'] : $item['order_invoice']['gmf_taxpayer'], // 税号 empty($item['order_invoice']['content']) ? '' : $item['order_invoice']['content'], // 发票内容 empty($item['order_invoice']['gmf_bank']) ? '' : $item['order_invoice']['gmf_bank'], // 开户银行 empty($item['order_invoice']['gmf_bank_admin']) ? '' : $item['order_invoice']['gmf_bank_admin'], // 银行账号 empty($item['order_invoice']['gmf_address']) ? '' : $item['order_invoice']['gmf_address'], // 注册地址 empty($item['order_invoice']['gmf_mobile']) ? '' : $item['order_invoice']['gmf_mobile'], // 注册电话 empty($item['order_invoice']['col_name']) ? '' : $item['order_invoice']['col_name'], // 收票人姓名 empty($item['order_invoice']['col_name']) ? '' : $item['order_invoice']['col_mobile'], // 收票人电话 empty($item['order_invoice']['col_address']) ? '' : $item['order_invoice']['col_address'], // 收票人地址 empty($item['order_invoice']['email']) ? '' : $item['order_invoice']['email'], // 邮箱 $this->getExportDeliverName($item), $this->getExportDeliverOwnerName($item), $this->getExportDeliverOwnerMobile($item), ]; } else { // $goods[] = [ // $this->getGoods($item, 'goods_title'), // $this->getGoods($item, 'goods_sn'), // $this->getGoods($item, 'product_sn'), // $this->getGoods($item, 'total'), // ]; $export_row_data = [ $item['id'], $item['order_sn'], $item['has_one_order_pay']['pay_sn'], $item['belongs_to_member']['uid'], $this->getNickname($item['belongs_to_member']['nickname'])?:substr_replace($item['belongs_to_member']['mobile'],'*******',2,7), $item['address']['realname'], $item['address']['mobile'], !empty($address[0]) ? $address[0] : '', !empty($address[1]) ? $address[1] : '', !empty($address[2]) ? $address[2] : '', $item['address']['address'], $this->getGoods($item, 'goods_title'), $this->getGoods($item, 'alias'), $this->getGoods($item, 'goods_sn'), $this->getGoods($item, 'product_sn'), $this->getGoods($item, 'total'), $this->getGoods($item, 'first_cate'), $this->getGoods($item, 'second_cate'), $this->getGoods($item, 'third_cate'), $this->getGoods($item, 'vip_price'), $item['pay_type_name'], $this->getExportDiscount($item, 'deduction'), $this->getExportDiscount($item, 'coupon'), $this->getExportDiscount($item, 'enoughReduce'), $this->getExportDiscount($item, 'singleEnoughReduce'), $item['goods_price'], $item['dispatch_price'], $item['price'], $this->getGoods($item, 'cost_price'), $item['status_name'], $item['create_time'], !empty(strtotime($item['pay_time'])) ? $item['pay_time'] : '', !empty(strtotime($item['send_time'])) ? $item['send_time'] : '', !empty(strtotime($item['finish_time'])) ? $item['finish_time'] : '', $expressInfo['company'], $expressInfo['sn'], $item['has_one_order_remark']['remark'], $this->checkStr($item['note']), $fistOrder, !empty($item['has_many_member_certified']['realname']) ? $item['has_many_member_certified']['realname'] : $item['belongs_to_member']['realname'], !empty($item['has_many_member_certified']['idcard']) ? ' ' . $item['has_many_member_certified']['idcard'] : ' ' . $item['belongs_to_member']['idcard'], $clerk_info['auditor'], $clerk_info['additional'], $this->getExportRefundName($item)?:$refund_name, $this->invoiceType($item['order_invoice']['invoice_type']), // 发票类型 ($item['order_invoice']['rise_type'] == 1) ? '个人' : '单位', // 发票抬头 empty($item['order_invoice']['collect_name']) ? '' : $item['order_invoice']['collect_name'], // 单位/抬头名称 empty($item['order_invoice']['gmf_taxpayer']) ? $item['order_invoice']['company_number'] : $item['order_invoice']['gmf_taxpayer'], // 税号 empty($item['order_invoice']['content']) ? '' : $item['order_invoice']['content'], // 发票内容 empty($item['order_invoice']['gmf_bank']) ? '' : $item['order_invoice']['gmf_bank'], // 开户银行 empty($item['order_invoice']['gmf_bank_admin']) ? '' : $item['order_invoice']['gmf_bank_admin'], // 银行账号 empty($item['order_invoice']['gmf_address']) ? '' : $item['order_invoice']['gmf_address'], // 注册地址 empty($item['order_invoice']['gmf_mobile']) ? '' : $item['order_invoice']['gmf_mobile'], // 注册电话 empty($item['order_invoice']['col_name']) ? '' : $item['order_invoice']['col_name'], // 收票人姓名 empty($item['order_invoice']['col_mobile']) ? '' : $item['order_invoice']['col_mobile'], // 收票人电话 empty($item['order_invoice']['col_address']) ? '' : $item['order_invoice']['col_address'], // 收票人地址 empty($item['order_invoice']['email']) ? '' : $item['order_invoice']['email'], // 邮箱 ]; } $export_data[$key + 1] = $export_row_data; } // dd($export_data); $export_model->export($file_name, $export_data, $this->exportRoute); }else{ throw new ShopException('没有可导出订单'); } } protected function getRefundedGoodsTotal($order_goods_id) { $a = \app\common\models\refund\RefundGoodsLog::getRefundedGoods($order_goods_id)->sum('yz_order_refund_goods_log.refund_total'); return $a?:0; } // 过滤运算符 public function checkStr($str,$fill = ' ') { if(!$str){ return $str; } $arr = ['=']; foreach ($arr as $v){ if(strpos($str,$v) === 0){ return $fill . $str; } } return $str; } public function directExport($template) { $export_page = request()->export_page ? request()->export_page : 1; $orders = $this->orderModel()->with([ 'discounts', 'deductions', 'hasManyParentTeam' => function ($q) { if (app('plugins')->isEnabled('team-dividend')) { $q->whereHas('hasOneTeamDividend') ->with(['hasOneTeamDividend' => function ($q) { $q->with(['hasOneLevel']); }]) ->with('hasOneMember') // ->orderBy('id', 'desc') ->orderBy('level', 'asc'); } else { $q->with('hasOneMember') ->orderBy('level', 'asc'); } }, 'orderInvoice' ]); $export_model = new OrderExportService($orders, $export_page); $levelId = []; $level_name = []; if (app('plugins')->isEnabled('team-dividend')) { $team_list = TeamDividendLevelModel::getList()->get(); foreach ($team_list as $level) { $level_name[] = $level->level_name; $levelId[] = $level->id; } } if (!$export_model->builder_model->isEmpty()) { $file_name = date('Ymdhis', time()) . '订单导出' . $export_page;//返现记录导出 // $export_data[0] = $template == 2 ? $this->getColumns() : $this->getColumnsV1(); //处理表头 $head = $template == 2 ? $this->getColumns() : $this->getColumnsV1(); $export_data[0] = array_merge($level_name, $head); foreach ($export_model->builder_model->toArray() as $key => $item) { $clerk_info = $this->getAuditor($item); $level = $this->getLevel($item, $levelId); $export_data[$key + 1] = $level; $address = explode(' ', $item['address']['address']); //拼接多包裹快递信息 $expressInfo=$this->getExpressString($item['expressmany']); $goods = []; if ($template == 2) { $form = $this->getFormDataByOderId($item['id']); foreach ($item['has_many_order_goods'] as $v) { $goods[] = [ $v['title'], $v['goods']['alias'], $v['goods_option_title'], $v['goods_sn'], $v['product_sn'], $v['total'], $v['vip_price'], isset($form[$v['goods_id']]) ? $form[$v['goods_id']] : '', ]; } } else { $goods[] = [ $this->getGoods($item, 'goods_title'), $this->getGoods($item, 'alias'), $this->getGoods($item, 'goods_sn'), $this->getGoods($item, 'product_sn'), $this->getGoods($item, 'total'), $this->getGoods($item, 'vip_price'), ]; } array_push($export_data[$key + 1], $item['id'], $item['order_sn'], $item['has_one_order_pay']['pay_sn'], $item['belongs_to_member']['uid'], $this->getNickname($item['belongs_to_member']['nickname']), $item['address']['realname'], $item['address']['mobile'], !empty($address[0]) ? $address[0] : '', !empty($address[1]) ? $address[1] : '', !empty($address[2]) ? $address[2] : '', $item['address']['address'], $this->getGoods($item, 'goods_title'), $this->getGoods($item, 'alias'), $this->getGoods($item, 'goods_sn'), $this->getGoods($item, 'product_sn'), $this->getGoods($item, 'total'), $this->getGoods($item, 'first_cate'), $this->getGoods($item, 'second_cate'), $this->getGoods($item, 'third_cate'), $this->getGoods($item, 'vip_price'), $item['pay_type_name'], $this->getExportDiscount($item, 'deduction'), $this->getExportDiscount($item, 'coupon'), $this->getExportDiscount($item, 'enoughReduce'), $this->getExportDiscount($item, 'singleEnoughReduce'), $item['goods_price'], $item['dispatch_price'], $item['price'], $this->getGoods($item, 'cost_price'), $item['status_name'], $item['create_time'], !empty(strtotime($item['pay_time'])) ? $item['pay_time'] : '', !empty(strtotime($item['send_time'])) ? $item['send_time'] : '', !empty(strtotime($item['finish_time'])) ? $item['finish_time'] : '', $expressInfo['company'], $expressInfo['sn'], $item['has_one_order_remark']['remark'], $item['note'], $fistOrder = $item['has_many_first_order'] ? '首单' : '', !empty($item['has_many_member_certified']['realname']) ? $item['has_many_member_certified']['realname'] : $item['belongs_to_member']['realname'], !empty($item['has_many_member_certified']['idcard']) ? ' ' . $item['has_many_member_certified']['idcard'] : ' ' . $item['belongs_to_member']['idcard'], $clerk_info['auditor'], $clerk_info['additional'], $this->getExportRefundName($item), $this->invoiceType($item['order_invoice']['invoice_type']), // 发票类型 ($item['order_invoice']['rise_type'] == 1) ? '个人' : '单位', // 发票抬头 empty($item['order_invoice']['collect_name']) ? '' : $item['order_invoice']['collect_name'], // 单位/抬头名称 empty($item['order_invoice']['gmf_taxpayer']) ? $item['order_invoice']['company_number'] : $item['order_invoice']['gmf_taxpayer'], // 税号 empty($item['order_invoice']['content']) ? '' : $item['order_invoice']['content'], // 发票内容 empty($item['order_invoice']['gmf_bank']) ? '' : $item['order_invoice']['gmf_bank'], // 开户银行 empty($item['order_invoice']['gmf_bank_admin']) ? '' : $item['order_invoice']['gmf_bank_admin'], // 银行账号 empty($item['order_invoice']['gmf_address']) ? '' : $item['order_invoice']['gmf_address'], // 注册地址 empty($item['order_invoice']['gmf_mobile']) ? '' : $item['order_invoice']['gmf_mobile'], // 注册电话 empty($item['order_invoice']['col_name']) ? '' : $item['order_invoice']['col_name'], // 收票人姓名 empty($item['order_invoice']['col_mobile']) ? '' : $item['order_invoice']['col_mobile'], // 收票人电话 empty($item['order_invoice']['col_address']) ? '' : $item['order_invoice']['col_address'], // 收票人地址 empty($item['order_invoice']['email']) ? '' : $item['order_invoice']['email'] // 邮箱 ); } // dd($export_data); $export_model->export($file_name, $export_data, $this->exportRoute, 'direct_export'); } } protected function getExportRefundName($orderArray) { if ($orderArray['manual_refund_log']) { return '退款并关闭'; } if ($orderArray['has_one_refund_apply'] && $orderArray['has_one_refund_apply']['status'] >= \app\common\models\refund\RefundApply::COMPLETE) { if ($orderArray['has_one_refund_apply']['part_refund'] == \app\common\models\refund\RefundApply::ORDER_CLOSE) { return '退款并关闭'; } return $orderArray['has_one_refund_apply']['refund_type_name']; } return ''; } public function getFormDataByOderId($order_id) { $result = []; $set = \app\common\modules\shop\ShopConfig::current()->get('shop-foundation.order.order_detail.diyform'); if (!$set) { return $result; } $orderGoods = \app\common\models\OrderGoods::where('order_id', $order_id)->get()->toArray(); $orderGoodsIds = array_column($orderGoods, 'id'); $orderGoods = array_column($orderGoods, null, 'id'); $diyForms = OrderGoodsDiyForm::whereIn('order_goods_id', $orderGoodsIds)->get()->toArray(); $dataIds = array_column($diyForms, 'diyform_data_id'); $diyForms = array_column($diyForms, null, 'diyform_data_id'); $datas = DiyformDataModel::whereIn('id', $dataIds)->get()->toArray(); $item = []; foreach ($datas as $detail) { if ($detail) { $form = DiyformTypeModel::find($detail['form_id']); } $fields = iunserializer($form['fields']); foreach ($detail['form_data'] as $k => $v) { if ($fields[$k]['data_type'] == 5) { continue; } if (is_array($v)) { $v = implode(',', $v); } $item[] = $fields[$k]['tp_name'] . ':' . $v; } $result[$orderGoods[$diyForms[$detail['id']]['order_goods_id']]['goods_id']] = implode("\r\n", $item); } return $result; } public function getLevel($member, $levelId) { $data = []; foreach ($levelId as $k => $value) { foreach ($member['has_many_parent_team'] as $key => $parent) { if ($parent['has_one_team_dividend']['has_one_level']['id'] == $value) { $data[$k] = $parent['has_one_member']['nickname'] . ' ' . $parent['has_one_member']['realname'] . ' ' . $parent['has_one_member']['mobile']; break; } } $data[$k] = $data[$k] ?: ''; } return $data; } //新导出 protected function getColumns() { return ["订单id", "订单编号", "支付单号", "会员ID", "粉丝昵称", "会员姓名", "联系电话", '省', '市', '区', "收货地址", "商品名称","商品简称","商品规格", "商品编码", "商品条码", "商品数量", '退款数量', "剩余数量","一级分类","二级分类","三级分类","会员价","自定义表单","商品来源","支付方式", '抵扣金额', '优惠券优惠', '全场满减优惠','单品满减优惠', "商品小计", "运费", "成本价","应收款", "已退款金额", "剩余金额", "状态", "下单时间", "付款时间", "发货时间", "完成时间", "快递公司", "快递单号", "订单备注", "用户备注", "首单", "真实姓名", "身份证", "核销员", "附加", "订单提示状态", "发票类型", "发票抬头", "单位/抬头名称", "税号", "发票内容", "开户银行", "银行账号", "注册地址", "注册电话", "收票人姓名", "收票人手机号", "收票人地址" , "邮箱","自提点名称","自提点负责人","自提点电话" ]; } //旧导出 protected function getColumnsV1() { return ["订单id", "订单编号", "支付单号", "会员ID", "粉丝昵称", "收货人姓名", "联系电话", '省', '市', '区', "收货地址", "商品名称","商品简称","商品编码", "商品条码", "商品数量","一级分类","二级分类","三级分类","会员价","支付方式", '抵扣金额', '优惠券优惠', '全场满减优惠', '单品满减优惠', "商品小计","运费", "应收款", "成本价", "状态", "下单时间", "付款时间", "发货时间", "完成时间", "快递公司", "快递单号", "订单备注", "用户备注", "首单", "真实姓名", "身份证", '核销员', '附加', '订单提示状态', "发票类型", "发票抬头", "单位/抬头名称", "税号", "发票内容", "开户银行", "银行账号", "注册地址", "注册电话", "收票人姓名", "收票人手机号", "收票人地址" , "邮箱"]; } protected function getExportDiscount($order, $key) { $export_discount = [ 'deduction' => 0, //抵扣金额 'coupon' => 0, //优惠券优惠 'enoughReduce' => 0, //全场满减优惠 'singleEnoughReduce' => 0, //单品满减优惠 ]; foreach ($order['discounts'] as $discount) { if ($discount['discount_code'] == $key) { $export_discount[$key] = $discount['amount']; } } if (!$export_discount['deduction']) { foreach ($order['deductions'] as $k => $v) { $export_discount['deduction'] += $v['amount']; } } return $export_discount[$key]; } //订单导出核销员显示 protected function getAuditor($order) { //自提点 if ($order['dispatch_type_id'] == \app\common\models\DispatchType::PACKAGE_DELIVER && app('plugins')->isEnabled('package-deliver')) { $deliverOrder = \Yunshop\PackageDeliver\model\PackageDeliverOrder::where('order_id', $order['id']) ->with(['hasOneDeliver', 'hasOneDeliverClerk']) ->first(); $deliver_name = $deliverOrder->deliver_id . '-' . $deliverOrder->hasOneDeliver->deliver_name; if ($deliverOrder->hasOneDeliverClerk) { $package_deliver_name = "[{$deliverOrder->hasOneDeliver->deliver_name}]".$deliverOrder->hasOneDeliverClerk->realname."[{$deliverOrder->hasOneDeliverClerk->uid}]"; } elseif ($order['status'] == 3) { $package_deliver_name = '后台确认'; } else { $package_deliver_name = ''; } return ['auditor' => $package_deliver_name, 'additional' => $deliver_name]; } //商城自提 if ($order['dispatch_type_id'] == \app\common\models\DispatchType::PACKAGE_DELIVERY && app('plugins')->isEnabled('package-delivery')) { $deliveryOrder = DeliveryOrder::where('order_id', $order['id']) ->first(); $shopName = \Setting::get('shop.shop.name') ?: '自营'; if ($deliveryOrder->hasOneClerk) { $package_deliver_name = "[{$shopName}]".$deliveryOrder->hasOneClerk->nickname."[{$deliveryOrder->hasOneClerk->uid}]"; } elseif ($order['status'] == 3) { $package_deliver_name = '后台确认'; } else { $package_deliver_name = ''; } return ['auditor' => $package_deliver_name, 'additional' => $shopName]; } //门店自提 if ($order['dispatch_type_id'] == \app\common\models\DispatchType::SELF_DELIVERY && app('plugins')->isEnabled('store-cashier')) { $storeOrder = \Yunshop\StoreCashier\common\models\StoreOrder::where('order_id', $order['id'])->first(); if ($storeOrder->hasOneClerkMember) { $package_deliver_name = "[{$storeOrder->hasOneStore->store_name}]".$storeOrder->hasOneClerkMember->nickname."[{$storeOrder->hasOneClerkMember->uid}]"; } elseif ($order['status'] == 3) { $package_deliver_name = '后台确认'; } else { $package_deliver_name = ''; } return ['auditor' => $package_deliver_name, 'additional' => $storeOrder->hasOneStore->id.'-'.$storeOrder->hasOneStore->store_name]; } return ['auditor' => '', 'additional' => '']; } protected function getGoods($order, $key, $category = '') { if (empty($category)) { $category=new Category(); } $goods_title = ''; $alias = ''; $goods_sn = ''; $total = ''; $vip_price = ''; $product_sn = ''; $cost_price = 0; $firstCate=''; $secondCate=''; $thirdCate=''; foreach ($order['has_many_order_goods'] as $goods) { $res_title = $goods['title']; $res_title = str_replace('-', ',', $res_title); $res_title = str_replace('+', ',', $res_title); $res_title = str_replace('/', ',', $res_title); $res_title = str_replace('*', ',', $res_title); $res_title = str_replace('=', ',', $res_title); if ($goods['goods_option_title']) { $res_title .= '[' . $goods['goods_option_title'] . ']'; } $order_goods = OrderGoods::find($goods['id']); if ($order_goods->goods_option_id) { $goods_option = GoodsOption::find($order_goods->goods_option_id); if ($goods_option) { $goods_sn .= '【' . $goods_option->goods_sn . '】'; } } else { $goods_sn .= '【' . $goods['goods_sn'] . '】'; } $product_sn .= '【' . $goods['product_sn'] . '】'; $goods_title .= '【' . $res_title . '*' . $goods['total'] . '】'; $alias .= '【' . $goods['goods']['alias'] . '】'; $total .= '【' . $goods['total'] . '】'; $vip_price .= '【' . $goods['vip_price'] . '】'; $cost_price += $goods['goods_cost_price']; $cateList=[]; foreach($goods['goods']['belongs_to_categorys'] as $k =>$v){ $cateList[]=$category->getCateOrderByLevel($v['category_ids']); } $firstCateTemp=array_column($cateList,0); $secondCateTemp=array_column($cateList,1); $thirdCateTemp=array_column($cateList,2); foreach($firstCateTemp as $temp){ $firstCate.= '【' . $temp . '】'; } foreach($secondCateTemp as $temp){ $secondCate.= '【' . $temp . '】'; } foreach($thirdCateTemp as $temp){ $thirdCate.= '【' . $temp . '】'; } } $res = [ 'goods_title' => $goods_title, 'alias' => $alias, 'goods_sn' => $goods_sn, 'product_sn' => $product_sn, 'total' => $total, 'vip_price' => $vip_price, 'cost_price' => $cost_price, 'first_cate'=>$firstCate, 'second_cate'=>$secondCate, 'third_cate'=>$thirdCate, ]; return $res[$key]; } protected function getNickname($nickname) { if (substr($nickname, 0, strlen('=')) === '=') { $nickname = ',' . $nickname; } return $nickname; } protected function getExportRealName($order) { $name = $order['has_one_package_delivery_order'] ? $order['has_one_package_delivery_order']['buyer_name'] : $order['address']['realname']; return $name ?: ''; } protected function getExportMobile($order) { $mobile = $order['has_one_package_delivery_order'] ? $order['has_one_package_delivery_order']['buyer_mobile'] : $order['address']['mobile']; return $mobile ?: ''; } protected function getExportDeliverName($order) { $return = ''; if ($order['has_one_package_delivery_order']) { $return = Setting::get('shop.contact.store_name'); } elseif ($order['has_one_package_deliver_order']) { $return = $order['has_one_package_deliver_order']['deliver_name'] ? : $order['has_one_package_deliver_order']['has_one_deliver']['deliver_name']; } return $return ?: ''; } protected function getExportDeliverOwnerName($order) { $return = ''; if ($order['has_one_package_delivery_order']) { $return = '商城自提'; } elseif ($order['has_one_package_deliver_order']) { $return = $order['has_one_package_deliver_order']['has_one_deliver']['realname']; } return $return ?: ''; } protected function getExportDeliverOwnerMobile($order) { $return = ''; if ($order['has_one_package_delivery_order']) { $return = Setting::get('shop.contact.phone'); } elseif ($order['has_one_package_deliver_order']) { $return = $order['has_one_package_deliver_order']['has_one_deliver']['deliver_mobile']; } return $return ?: ''; } private function invoiceType($type) { $result = ''; if ($type == '0' || empty($type)){ $result = '电子发票'; } if ($type == 1){ $result = '纸质发票'; } if ($type == 2){ $result = '专用发票'; } return $result; } /* * 获取快递包裹的公司字符串和单号字符串 */ private function getExpressString($express){ $company=array_column($express,'express_company_name'); $sn=array_column($express,'express_sn'); $companyStr=''; $snStr=''; if(count($company)==1){ $companyStr=$company[0]; }else{ foreach($company as $val){ $companyStr.='【'.$val.'】 '; } } if(count($sn)==1){ $snStr=$sn[0]; }else{ foreach($sn as $val){ $snStr.='【'.$val.'】 '; } } return ['company'=>$companyStr,'sn'=>$snStr]; } }