| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2020/12/1
- * Time: 9:56
- */
- namespace app\backend\modules\order\controllers;
- use app\backend\modules\goods\models\Category;
- use app\backend\modules\goods\models\GoodsOption;
- use app\backend\modules\member\models\MemberParent;
- use app\backend\modules\order\models\VueOrder;
- use app\backend\modules\order\models\OrderGoods;
- use app\backend\modules\order\services\OrderViewService;
- use app\common\components\BaseController;
- use app\common\exceptions\ShopException;
- use app\common\facades\Setting;
- use app\common\helpers\PaginationHelper;
- use app\common\models\Order;
- use app\common\models\refund\RefundApply;
- use app\common\services\ExportService;
- use app\common\services\member\level\LevelUpgradeService;
- use app\common\services\OrderExportService;
- use app\frontend\modules\order\services\OrderService;
- use Illuminate\Database\Eloquent\Collection;
- use Illuminate\Support\Facades\DB;
- use Yunshop\Diyform\models\DiyformDataModel;
- use Yunshop\Diyform\models\DiyformTypeModel;
- use Yunshop\Diyform\models\OrderGoodsDiyForm;
- use Yunshop\GoodsSource\common\models\GoodsSet;
- use Yunshop\GoodsSource\common\models\GoodsSource;
- use Yunshop\MorePrinter\common\services\OrderPrintService;
- use Yunshop\PackageDelivery\models\DeliveryOrder;
- use Yunshop\Printer\common\services\NewPrintingService;
- use Yunshop\StoreCashier\common\models\StoreDelivery;
- use Yunshop\TeamDividend\models\TeamDividendLevelModel;
- use Yunshop\Exhelper\common\models\ExhelperPanel;
- use Yunshop\Exhelper\common\models\ExhelperSys;
- use Yunshop\Exhelper\common\models\SendUser;
- class OrderListController extends BaseController
- {
- /**
- * 页码
- */
- const PAGE_SIZE = 10;
- protected $exportRoute = 'order.order-list.index';
- /**
- * @var VueOrder
- */
- protected $orderModel;
- public function preAction()
- {
- parent::preAction();
- }
- protected function getOrder()
- {
- $model = VueOrder::uniacid();
- return $model;
- }
- protected function setOrderModel()
- {
- $search = request()->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];
- }
- }
|