OrderListController.php 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2020/12/1
  6. * Time: 9:56
  7. */
  8. namespace app\backend\modules\order\controllers;
  9. use app\backend\modules\goods\models\Category;
  10. use app\backend\modules\goods\models\GoodsOption;
  11. use app\backend\modules\member\models\MemberParent;
  12. use app\backend\modules\order\models\VueOrder;
  13. use app\backend\modules\order\models\OrderGoods;
  14. use app\backend\modules\order\services\OrderViewService;
  15. use app\common\components\BaseController;
  16. use app\common\exceptions\ShopException;
  17. use app\common\facades\Setting;
  18. use app\common\helpers\PaginationHelper;
  19. use app\common\models\Order;
  20. use app\common\models\refund\RefundApply;
  21. use app\common\services\ExportService;
  22. use app\common\services\member\level\LevelUpgradeService;
  23. use app\common\services\OrderExportService;
  24. use app\frontend\modules\order\services\OrderService;
  25. use Illuminate\Database\Eloquent\Collection;
  26. use Illuminate\Support\Facades\DB;
  27. use Yunshop\Diyform\models\DiyformDataModel;
  28. use Yunshop\Diyform\models\DiyformTypeModel;
  29. use Yunshop\Diyform\models\OrderGoodsDiyForm;
  30. use Yunshop\GoodsSource\common\models\GoodsSet;
  31. use Yunshop\GoodsSource\common\models\GoodsSource;
  32. use Yunshop\MorePrinter\common\services\OrderPrintService;
  33. use Yunshop\PackageDelivery\models\DeliveryOrder;
  34. use Yunshop\Printer\common\services\NewPrintingService;
  35. use Yunshop\StoreCashier\common\models\StoreDelivery;
  36. use Yunshop\TeamDividend\models\TeamDividendLevelModel;
  37. use Yunshop\Exhelper\common\models\ExhelperPanel;
  38. use Yunshop\Exhelper\common\models\ExhelperSys;
  39. use Yunshop\Exhelper\common\models\SendUser;
  40. class OrderListController extends BaseController
  41. {
  42. /**
  43. * 页码
  44. */
  45. const PAGE_SIZE = 10;
  46. protected $exportRoute = 'order.order-list.index';
  47. /**
  48. * @var VueOrder
  49. */
  50. protected $orderModel;
  51. public function preAction()
  52. {
  53. parent::preAction();
  54. }
  55. protected function getOrder()
  56. {
  57. $model = VueOrder::uniacid();
  58. return $model;
  59. }
  60. protected function setOrderModel()
  61. {
  62. $search = request()->input('search');
  63. $code = request()->input('code');
  64. return $this->getOrder()->statusCode($code)->orders($search);
  65. }
  66. protected function orderModel()
  67. {
  68. if (isset($this->orderModel)) {
  69. return $this->orderModel;
  70. }
  71. return $this->orderModel = $this->setOrderModel();
  72. }
  73. protected function getData($code = '')
  74. {
  75. $data = [
  76. 'code' => $code,
  77. 'listUrl' => '', //订单查询路由
  78. 'commonPartUrl' => '', //订单查询路由
  79. 'exportUrl' => '', //订单导出路由
  80. 'detailUrl' => '', //订单详情
  81. ];
  82. $source_status = false;
  83. $source_is_open = \Setting::get('plugin.goods_source.is_open');
  84. if (app('plugins')->isEnabled('goods-source')&&(is_null($source_is_open) || $source_is_open)) {
  85. $source_status = true;
  86. }
  87. if ($source_status) {
  88. $source_list = GoodsSource::uniacid()->select(['id','source_name'])->get()->toArray();
  89. } else {
  90. $source_list = New Collection();
  91. }
  92. if ($extraData = $this->mergeExtraData()) {
  93. $data = array_merge($data, $extraData);
  94. }
  95. //插件参数
  96. $extraParam = $this->mergeExtraParam();
  97. $data['extraParam'] = $extraParam ?: [];
  98. $data['is_source_open'] = $source_status ? 1 : 0;
  99. $data['source_list'] = $source_list ?: [];
  100. $data['expressCompanies'] = \app\common\repositories\ExpressCompany::create()->all();
  101. return ['data' => json_encode($data)];
  102. }
  103. protected function mergeExtraData()
  104. {
  105. }
  106. protected function mergeExtraParam()
  107. {
  108. $extraParam = [
  109. 'package_deliver' => app('plugins')->isEnabled('package-deliver'),
  110. 'team_dividend' => app('plugins')->isEnabled('team-dividend'),
  111. 'printer' => (app('plugins')->isEnabled('printer') || app('plugins')->isEnabled('more-printer'))
  112. ];
  113. return $extraParam;
  114. }
  115. public function orderPrinter()
  116. {
  117. try {
  118. $order_id = request()->order_id;
  119. $order = Order::find($order_id);
  120. if (!$order) {
  121. throw new \Exception('订单未找到');
  122. }
  123. //打印机
  124. if (app('plugins')->isEnabled('printer')) {
  125. \app\common\modules\shop\ShopConfig::current()->set('printer_owner', [
  126. 'owner' => 1,
  127. 'owner_id' => 0
  128. ]);
  129. $print_type = 2;
  130. $code = '商城支付打印';
  131. if ($order->status == 0) {
  132. $print_type = 1;
  133. $code = '商城下单打印';
  134. }
  135. $NewPrintingService = new NewPrintingService($order, $print_type, $code);
  136. if($NewPrintingService->verify()){
  137. $NewPrintingService->handle();
  138. }
  139. return $this->successJson('ok');
  140. }
  141. if (app('plugins')->isEnabled('more-printer')) {
  142. $print_type = 2;
  143. if ($order->status == 0) {
  144. $print_type = 1;
  145. }
  146. $order_service = new OrderPrintService($order, $print_type);
  147. $order_service->newPrinting();
  148. return $this->successJson('ok');
  149. }
  150. throw new \Exception('未开启打印机插件');
  151. } catch (\Exception $e) {
  152. return $this->errorJson($e->getMessage());
  153. }
  154. }
  155. //此方法多余了
  156. public function commonPart()
  157. {
  158. //插件参数
  159. $extraParam = $this->mergeExtraParam();
  160. $info['extraParam'] = $extraParam ?: [];
  161. $data['expressCompanies'] = \app\common\repositories\ExpressCompany::create()->all();
  162. return $this->successJson('commonPart', $info);
  163. }
  164. public function getList()
  165. {
  166. $sort = request()->search['sort'];
  167. $search = request()->input('search');
  168. if ($sort == 1) {
  169. $condition['order_by'][] = [$this->orderModel()->getModel()->getTable() . '.uid', 'desc'];
  170. $condition['order_by'][] = [$this->orderModel()->getModel()->getTable() . '.id', 'desc'];
  171. }
  172. $orderModel = $this->orderModel();
  173. if (app('plugins')->isEnabled('order-inventory') && \Yunshop\OrderInventory\services\SetService::pluginIsOpen()) {
  174. //不显示存货订单
  175. $orderModel = \Yunshop\OrderInventory\services\InventoryService::orderListWhere($orderModel);
  176. }
  177. if (app('plugins')->isEnabled('invoice')) {
  178. $orderModel = $orderModel->with('orderInvoice');
  179. if ($search['is_invoice']) {
  180. $orderModel->whereHas('orderInvoice', function ($query) use ($search) {
  181. return $query->where('apply', $search['is_invoice']);
  182. });
  183. }
  184. }
  185. if ($search['source_id']) {
  186. $set_goods_id = GoodsSet::where('source_id', $search['source_id'])->pluck('goods_id')->all();
  187. $order_ids = OrderGoods::uniacid()->whereIn('goods_id', $set_goods_id)->pluck('order_id')->unique()->all();
  188. $orderModel->whereIn('yz_order.id', $order_ids);
  189. }
  190. $count['total_price'] = $orderModel->sum('yz_order.price');
  191. $count['dispatch_price'] = $orderModel->sum('yz_order.dispatch_price');
  192. $build = $orderModel;
  193. if ($sort == 1) {
  194. foreach ($condition['order_by'] as $item) {
  195. $build->orderBy(...$item);
  196. }
  197. } else {
  198. $build->orderBy($this->orderModel()->getModel()->getTable() . '.id', 'desc');
  199. }
  200. $page = $build->paginate(self::PAGE_SIZE);
  201. $page->map(function ($order) {
  202. /**
  203. * todo 为了不在模型的 $appends 属性加动态显示
  204. */
  205. $order->fixed_button = $order->fixed_button;
  206. $order->top_row = $order->top_row;
  207. $order->part_refund = (!$order->refund_id && RefundApply::getAfterSales($order->id)->count()) ? 1 :0;
  208. // 查询乐刷订单, 然后显示是否有退款不足的情况
  209. if (in_array($order->pay_type_id, [85, 86, 87])) {
  210. $refundRecords = \Yunshop\LeshuaPay\models\RefundRecords::where('order_id', $order->id)->first();
  211. $order->leshua_refund_error_msg = $refundRecords->msg ?? '';
  212. }
  213. });
  214. $source_status = false;
  215. $source_is_open = \Setting::get('plugin.goods_source.is_open');
  216. if (app('plugins')->isEnabled('goods-source')&&(is_null($source_is_open) || $source_is_open)) {
  217. $source_status = true;
  218. }
  219. if ($source_status) {
  220. $source_list = GoodsSource::uniacid()->select(['id','source_name'])->get();
  221. } else {
  222. $source_list = New Collection();
  223. }
  224. $count['total'] = $page->total();
  225. $list = $page->toArray();
  226. $data = [
  227. 'list' => $list,
  228. 'count' => $count,
  229. 'is_source_open' => $source_status ? 1 : 0,
  230. 'source_list' => $source_list,
  231. ];
  232. return $this->successJson('list', $data);
  233. }
  234. public function getSynchro()
  235. {
  236. //判断是否开启了同步运单号
  237. $synchro = 0;
  238. if (app('plugins')->isEnabled('exhelper')) {
  239. $set = ExhelperSys::uniacid()->first();
  240. if ($set) {//判断是否填了快递助手信息
  241. $send = SendUser::uniacid()->where('isdefault', 1)->first();
  242. $panel = ExhelperPanel::uniacid()->where('isdefault', 1)->first();
  243. if ($send && $panel) {//判断是否有默认发货人和默认模板
  244. $synchro = 1;//开启同步运单号
  245. } else {
  246. $synchro = 0;
  247. }
  248. } else {
  249. $synchro = 0;
  250. }
  251. }
  252. return $this->successJson('ok', $synchro);
  253. }
  254. /**
  255. * @return string
  256. * @throws \Throwable
  257. */
  258. public function index()
  259. {
  260. //$a = (new \app\backend\modules\order\services\OrderViewService())->importVue();
  261. //(new \app\backend\modules\order\services\OrderViewService())->topRowShow();
  262. return view('order.vue-list', $this->getData())->render();
  263. }
  264. /**
  265. * @return string
  266. * @throws \Throwable
  267. */
  268. public function waitPay()
  269. {
  270. return view('order.vue-list', $this->getData('waitPay'))->render();
  271. }
  272. /**
  273. * @return string
  274. * @throws \Throwable
  275. */
  276. public function waitSend()
  277. {
  278. return view('order.vue-list', $this->getData('waitSend'))->render();
  279. }
  280. /**
  281. * 催发货
  282. * @return string
  283. */
  284. public function expeditingSend()
  285. {
  286. return view('order.vue-list', $this->getData('expeditingSend'));
  287. }
  288. /**
  289. * @return string
  290. * @throws \Throwable
  291. */
  292. public function waitReceive()
  293. {
  294. return view('order.vue-list', $this->getData('waitReceive'))->render();
  295. }
  296. /**
  297. * @return string
  298. * @throws \Throwable
  299. */
  300. public function completed()
  301. {
  302. return view('order.vue-list', $this->getData('completed'))->render();
  303. }
  304. /**
  305. * @return string
  306. * @throws \Throwable
  307. */
  308. public function cancelled()
  309. {
  310. return view('order.vue-list', $this->getData('cancelled'))->render();
  311. }
  312. public function export()
  313. {
  314. $export_type = request()->input('export_type');
  315. $template = request()->input('template');
  316. if (request()->search['order_status']) {
  317. $search = request()->search;
  318. $search['order_status'] = explode(',', $search['order_status']);
  319. request()->offsetSet('search', $search);
  320. }
  321. if ($export_type == 1) {
  322. $this->baseExport($template);
  323. } elseif ($export_type == 2) {
  324. $this->directExport($template);
  325. }
  326. }
  327. public function batchSend()
  328. {
  329. $order_ids = $this->orderModel()->pluck('id');
  330. $send_data = request()->batch_send;
  331. $i = 0;
  332. foreach ($order_ids as $order_id) {
  333. try {
  334. $param = [
  335. "dispatch_type_id" => $send_data['dispatch_type_id'],
  336. "express_code" => $send_data['express_code'],
  337. "express_sn" => $send_data['express_sn'],
  338. "order_id" => $order_id,
  339. ];
  340. \app\frontend\modules\order\services\OrderService::orderSend($param);
  341. } catch (\Exception $e) {
  342. $i ++;
  343. }
  344. }
  345. return $this->successJson('一键发货成功,失败条数'. $i . '(有退款订单不能发货)');
  346. }
  347. public function baseExport($template)
  348. {
  349. ini_set('memory_limit',-1); //订单里的商品和商品的分类过多会造成内存溢出
  350. set_time_limit(60);
  351. $export_page = request()->export_page ? request()->export_page : 1;
  352. //清除之前没有导出的文件
  353. if ($export_page == 1) {
  354. $fileNameArr = file_tree(storage_path('exports'));
  355. foreach ($fileNameArr as $val) {
  356. if (file_exists(storage_path('exports/' . basename($val)))) {
  357. unlink(storage_path('exports/') . basename($val)); // 路径+文件名称
  358. }
  359. }
  360. }
  361. $order_model = $this->orderModel();
  362. if (request()->search['source_id']) {
  363. $set_goods_id = GoodsSet::where('source_id', request()->search['source_id'])->pluck('goods_id')->all();
  364. $order_ids = OrderGoods::uniacid()->whereIn('goods_id', $set_goods_id)->pluck('order_id')->unique()->all();
  365. $order_model->whereIn('yz_order.id', $order_ids);
  366. }
  367. $orders = $order_model->with(['discounts', 'deductions', 'orderInvoice'])->orderBy($this->orderModel()->getModel()->getTable() . '.id', 'desc');
  368. $columns = $this->getColumns();
  369. if ($template == 2) {
  370. if (app('plugins')->isEnabled('package-delivery')) {
  371. $orders->with(['hasOnePackageDeliveryOrder'=>function($query){
  372. $query->select('order_id','buyer_name','buyer_mobile');
  373. }]);
  374. }
  375. if (app('plugins')->isEnabled('package-deliver')) {
  376. $orders->with(['hasOnePackageDeliverOrder' => function ($query) {
  377. $query->with(['hasOneDeliver' => function ($query) {
  378. $query->select('id', 'deliver_name', 'deliver_mobile', 'realname');
  379. }])->select('deliver_id', 'order_id', 'deliver_name');
  380. }]);
  381. }
  382. if (app('plugins')->isEnabled('goods-source')) {
  383. $orders->with(['hasManyOrderGoods' => function ($query) {
  384. $query->with(['goodsSource' => function ($query) {
  385. $query->with(['source']);
  386. }]);
  387. }]);
  388. }
  389. }
  390. $export_model = new OrderExportService($orders, $export_page);
  391. if (!$export_model->builder_model->isEmpty()) {
  392. $category=new Category();
  393. $file_name = date('Ymdhis', time()) . '订单导出' . $export_page;//返现记录导出
  394. $export_data[0] = $template == 2 ? $columns : $this->getColumnsV1();
  395. foreach ($export_model->builder_model->toArray() as $key => $item) {
  396. $address = explode(' ', $item['address']['address']);
  397. $fistOrder = $item['has_many_first_order'] ? '首单' : '';
  398. $refundedCollect = \app\common\models\refund\RefundApply::getAfterSales($item['id'])
  399. ->orderBy('id', 'desc')
  400. ->get();
  401. if ($refundedCollect->isEmpty()) {
  402. $refund_name = '';
  403. } else {
  404. $refund_name = $refundedCollect->first()->part_refund == \app\common\models\refund\RefundApply::PART_REFUND ? '部分退款':'';
  405. }
  406. //拼接多包裹快递信息
  407. $expressInfo=$this->getExpressString($item['expressmany']);
  408. $clerk_info = $this->getAuditor($item);
  409. $goods = [];
  410. if ($template == 2) {
  411. $form = $this->getFormDataByOderId($item['id']);
  412. foreach ($item['has_many_order_goods'] as $v) {
  413. $goodsRefundedTotal = $v['after_sales']['complete_quantity'];
  414. $cate=[];
  415. $temp = [
  416. $v['title'],
  417. $v['goods']['alias'],
  418. $v['goods_option_title'],
  419. $v['goods_sn'],
  420. $v['product_sn'],
  421. $v['total'],
  422. "{$goodsRefundedTotal}",
  423. "".max($v['total'] - $goodsRefundedTotal, 0),
  424. ];
  425. foreach($v['goods']['belongs_to_categorys']as $val){
  426. $cate[]=$category->getCateOrderByLevel($val['category_ids']);
  427. }
  428. $temp[]=$cate;
  429. $temp[]= $v['vip_price'];
  430. $temp[] = $form[$v['goods_id']]? $form[$v['goods_id']] : '';
  431. $temp[] = $v['goods_source']['source']['source_name']?:"";
  432. $goods[]=$temp;
  433. }
  434. $export_row_data = [
  435. $item['id'],
  436. $item['order_sn'],
  437. $item['has_one_order_pay']['pay_sn'],
  438. $item['belongs_to_member']['uid'],
  439. $this->getNickname($item['belongs_to_member']['nickname'])?:substr_replace($item['belongs_to_member']['mobile'],'*******',2,7),
  440. // $item['address']['realname'],
  441. // $item['address']['mobile'],
  442. $this->getExportRealName($item),
  443. $this->getExportMobile($item),
  444. !empty($address[0]) ? $address[0] : '',
  445. !empty($address[1]) ? $address[1] : '',
  446. !empty($address[2]) ? $address[2] : '',
  447. $item['address']['address'],
  448. $goods,
  449. $item['pay_type_name'],
  450. $this->getExportDiscount($item, 'deduction'),
  451. $this->getExportDiscount($item, 'coupon'),
  452. $this->getExportDiscount($item, 'enoughReduce'),
  453. $this->getExportDiscount($item, 'singleEnoughReduce'),
  454. $item['goods_price'],
  455. $item['dispatch_price'],
  456. $this->getGoods($item, 'cost_price', $category),
  457. $item['price'],
  458. ''.$refundedCollect->sum('price'),
  459. ''.max($item['price'] - $refundedCollect->sum('price'),0),
  460. $item['status_name'],
  461. $item['create_time'],
  462. !empty(strtotime($item['pay_time'])) ? $item['pay_time'] : '',
  463. !empty(strtotime($item['send_time'])) ? $item['send_time'] : '',
  464. !empty(strtotime($item['finish_time'])) ? $item['finish_time'] : '',
  465. $expressInfo['company'],
  466. $expressInfo['sn'],
  467. $item['has_one_order_remark']['remark'],
  468. $this->checkStr($item['note']),
  469. $fistOrder,
  470. $item['has_many_member_certified']['realname']?:$item['belongs_to_member']['realname'],
  471. ' ' . $item['belongs_to_member']['idcard'],
  472. $clerk_info['auditor'],
  473. $clerk_info['additional'],
  474. $this->getExportRefundName($item)?:$refund_name,
  475. $this->invoiceType($item['order_invoice']['invoice_type']), // 发票类型
  476. ($item['order_invoice']['rise_type'] == 1) ? '个人' : '单位', // 发票抬头
  477. empty($item['order_invoice']['collect_name']) ? '' : $item['order_invoice']['collect_name'], // 单位/抬头名称
  478. empty($item['order_invoice']['gmf_taxpayer']) ? $item['order_invoice']['company_number'] : $item['order_invoice']['gmf_taxpayer'], // 税号
  479. empty($item['order_invoice']['content']) ? '' : $item['order_invoice']['content'], // 发票内容
  480. empty($item['order_invoice']['gmf_bank']) ? '' : $item['order_invoice']['gmf_bank'], // 开户银行
  481. empty($item['order_invoice']['gmf_bank_admin']) ? '' : $item['order_invoice']['gmf_bank_admin'], // 银行账号
  482. empty($item['order_invoice']['gmf_address']) ? '' : $item['order_invoice']['gmf_address'], // 注册地址
  483. empty($item['order_invoice']['gmf_mobile']) ? '' : $item['order_invoice']['gmf_mobile'], // 注册电话
  484. empty($item['order_invoice']['col_name']) ? '' : $item['order_invoice']['col_name'], // 收票人姓名
  485. empty($item['order_invoice']['col_name']) ? '' : $item['order_invoice']['col_mobile'], // 收票人电话
  486. empty($item['order_invoice']['col_address']) ? '' : $item['order_invoice']['col_address'], // 收票人地址
  487. empty($item['order_invoice']['email']) ? '' : $item['order_invoice']['email'], // 邮箱
  488. $this->getExportDeliverName($item),
  489. $this->getExportDeliverOwnerName($item),
  490. $this->getExportDeliverOwnerMobile($item),
  491. ];
  492. } else {
  493. // $goods[] = [
  494. // $this->getGoods($item, 'goods_title'),
  495. // $this->getGoods($item, 'goods_sn'),
  496. // $this->getGoods($item, 'product_sn'),
  497. // $this->getGoods($item, 'total'),
  498. // ];
  499. $export_row_data = [
  500. $item['id'],
  501. $item['order_sn'],
  502. $item['has_one_order_pay']['pay_sn'],
  503. $item['belongs_to_member']['uid'],
  504. $this->getNickname($item['belongs_to_member']['nickname'])?:substr_replace($item['belongs_to_member']['mobile'],'*******',2,7),
  505. $item['address']['realname'],
  506. $item['address']['mobile'],
  507. !empty($address[0]) ? $address[0] : '',
  508. !empty($address[1]) ? $address[1] : '',
  509. !empty($address[2]) ? $address[2] : '',
  510. $item['address']['address'],
  511. $this->getGoods($item, 'goods_title'),
  512. $this->getGoods($item, 'alias'),
  513. $this->getGoods($item, 'goods_sn'),
  514. $this->getGoods($item, 'product_sn'),
  515. $this->getGoods($item, 'total'),
  516. $this->getGoods($item, 'first_cate'),
  517. $this->getGoods($item, 'second_cate'),
  518. $this->getGoods($item, 'third_cate'),
  519. $this->getGoods($item, 'vip_price'),
  520. $item['pay_type_name'],
  521. $this->getExportDiscount($item, 'deduction'),
  522. $this->getExportDiscount($item, 'coupon'),
  523. $this->getExportDiscount($item, 'enoughReduce'),
  524. $this->getExportDiscount($item, 'singleEnoughReduce'),
  525. $item['goods_price'],
  526. $item['dispatch_price'],
  527. $item['price'],
  528. $this->getGoods($item, 'cost_price'),
  529. $item['status_name'],
  530. $item['create_time'],
  531. !empty(strtotime($item['pay_time'])) ? $item['pay_time'] : '',
  532. !empty(strtotime($item['send_time'])) ? $item['send_time'] : '',
  533. !empty(strtotime($item['finish_time'])) ? $item['finish_time'] : '',
  534. $expressInfo['company'],
  535. $expressInfo['sn'],
  536. $item['has_one_order_remark']['remark'],
  537. $this->checkStr($item['note']),
  538. $fistOrder,
  539. !empty($item['has_many_member_certified']['realname']) ? $item['has_many_member_certified']['realname'] : $item['belongs_to_member']['realname'],
  540. !empty($item['has_many_member_certified']['idcard']) ? ' ' . $item['has_many_member_certified']['idcard'] : ' ' . $item['belongs_to_member']['idcard'],
  541. $clerk_info['auditor'],
  542. $clerk_info['additional'],
  543. $this->getExportRefundName($item)?:$refund_name,
  544. $this->invoiceType($item['order_invoice']['invoice_type']), // 发票类型
  545. ($item['order_invoice']['rise_type'] == 1) ? '个人' : '单位', // 发票抬头
  546. empty($item['order_invoice']['collect_name']) ? '' : $item['order_invoice']['collect_name'], // 单位/抬头名称
  547. empty($item['order_invoice']['gmf_taxpayer']) ? $item['order_invoice']['company_number'] : $item['order_invoice']['gmf_taxpayer'], // 税号
  548. empty($item['order_invoice']['content']) ? '' : $item['order_invoice']['content'], // 发票内容
  549. empty($item['order_invoice']['gmf_bank']) ? '' : $item['order_invoice']['gmf_bank'], // 开户银行
  550. empty($item['order_invoice']['gmf_bank_admin']) ? '' : $item['order_invoice']['gmf_bank_admin'], // 银行账号
  551. empty($item['order_invoice']['gmf_address']) ? '' : $item['order_invoice']['gmf_address'], // 注册地址
  552. empty($item['order_invoice']['gmf_mobile']) ? '' : $item['order_invoice']['gmf_mobile'], // 注册电话
  553. empty($item['order_invoice']['col_name']) ? '' : $item['order_invoice']['col_name'], // 收票人姓名
  554. empty($item['order_invoice']['col_mobile']) ? '' : $item['order_invoice']['col_mobile'], // 收票人电话
  555. empty($item['order_invoice']['col_address']) ? '' : $item['order_invoice']['col_address'], // 收票人地址
  556. empty($item['order_invoice']['email']) ? '' : $item['order_invoice']['email'], // 邮箱
  557. ];
  558. }
  559. $export_data[$key + 1] = $export_row_data;
  560. }
  561. // dd($export_data);
  562. $export_model->export($file_name, $export_data, $this->exportRoute);
  563. }else{
  564. throw new ShopException('没有可导出订单');
  565. }
  566. }
  567. protected function getRefundedGoodsTotal($order_goods_id)
  568. {
  569. $a = \app\common\models\refund\RefundGoodsLog::getRefundedGoods($order_goods_id)->sum('yz_order_refund_goods_log.refund_total');
  570. return $a?:0;
  571. }
  572. // 过滤运算符
  573. public function checkStr($str,$fill = ' ')
  574. {
  575. if(!$str){
  576. return $str;
  577. }
  578. $arr = ['='];
  579. foreach ($arr as $v){
  580. if(strpos($str,$v) === 0){
  581. return $fill . $str;
  582. }
  583. }
  584. return $str;
  585. }
  586. public function directExport($template)
  587. {
  588. $export_page = request()->export_page ? request()->export_page : 1;
  589. $orders = $this->orderModel()->with([
  590. 'discounts',
  591. 'deductions',
  592. 'hasManyParentTeam' => function ($q) {
  593. if (app('plugins')->isEnabled('team-dividend')) {
  594. $q->whereHas('hasOneTeamDividend')
  595. ->with(['hasOneTeamDividend' => function ($q) {
  596. $q->with(['hasOneLevel']);
  597. }])
  598. ->with('hasOneMember')
  599. // ->orderBy('id', 'desc')
  600. ->orderBy('level', 'asc');
  601. } else {
  602. $q->with('hasOneMember')
  603. ->orderBy('level', 'asc');
  604. }
  605. },
  606. 'orderInvoice'
  607. ]);
  608. $export_model = new OrderExportService($orders, $export_page);
  609. $levelId = [];
  610. $level_name = [];
  611. if (app('plugins')->isEnabled('team-dividend')) {
  612. $team_list = TeamDividendLevelModel::getList()->get();
  613. foreach ($team_list as $level) {
  614. $level_name[] = $level->level_name;
  615. $levelId[] = $level->id;
  616. }
  617. }
  618. if (!$export_model->builder_model->isEmpty()) {
  619. $file_name = date('Ymdhis', time()) . '订单导出' . $export_page;//返现记录导出
  620. // $export_data[0] = $template == 2 ? $this->getColumns() : $this->getColumnsV1();
  621. //处理表头
  622. $head = $template == 2 ? $this->getColumns() : $this->getColumnsV1();
  623. $export_data[0] = array_merge($level_name, $head);
  624. foreach ($export_model->builder_model->toArray() as $key => $item) {
  625. $clerk_info = $this->getAuditor($item);
  626. $level = $this->getLevel($item, $levelId);
  627. $export_data[$key + 1] = $level;
  628. $address = explode(' ', $item['address']['address']);
  629. //拼接多包裹快递信息
  630. $expressInfo=$this->getExpressString($item['expressmany']);
  631. $goods = [];
  632. if ($template == 2) {
  633. $form = $this->getFormDataByOderId($item['id']);
  634. foreach ($item['has_many_order_goods'] as $v) {
  635. $goods[] = [
  636. $v['title'],
  637. $v['goods']['alias'],
  638. $v['goods_option_title'],
  639. $v['goods_sn'],
  640. $v['product_sn'],
  641. $v['total'],
  642. $v['vip_price'],
  643. isset($form[$v['goods_id']]) ? $form[$v['goods_id']] : '',
  644. ];
  645. }
  646. } else {
  647. $goods[] = [
  648. $this->getGoods($item, 'goods_title'),
  649. $this->getGoods($item, 'alias'),
  650. $this->getGoods($item, 'goods_sn'),
  651. $this->getGoods($item, 'product_sn'),
  652. $this->getGoods($item, 'total'),
  653. $this->getGoods($item, 'vip_price'),
  654. ];
  655. }
  656. array_push($export_data[$key + 1],
  657. $item['id'],
  658. $item['order_sn'],
  659. $item['has_one_order_pay']['pay_sn'],
  660. $item['belongs_to_member']['uid'],
  661. $this->getNickname($item['belongs_to_member']['nickname']),
  662. $item['address']['realname'],
  663. $item['address']['mobile'],
  664. !empty($address[0]) ? $address[0] : '',
  665. !empty($address[1]) ? $address[1] : '',
  666. !empty($address[2]) ? $address[2] : '',
  667. $item['address']['address'],
  668. $this->getGoods($item, 'goods_title'),
  669. $this->getGoods($item, 'alias'),
  670. $this->getGoods($item, 'goods_sn'),
  671. $this->getGoods($item, 'product_sn'),
  672. $this->getGoods($item, 'total'),
  673. $this->getGoods($item, 'first_cate'),
  674. $this->getGoods($item, 'second_cate'),
  675. $this->getGoods($item, 'third_cate'),
  676. $this->getGoods($item, 'vip_price'),
  677. $item['pay_type_name'],
  678. $this->getExportDiscount($item, 'deduction'),
  679. $this->getExportDiscount($item, 'coupon'),
  680. $this->getExportDiscount($item, 'enoughReduce'),
  681. $this->getExportDiscount($item, 'singleEnoughReduce'),
  682. $item['goods_price'],
  683. $item['dispatch_price'],
  684. $item['price'],
  685. $this->getGoods($item, 'cost_price'),
  686. $item['status_name'],
  687. $item['create_time'],
  688. !empty(strtotime($item['pay_time'])) ? $item['pay_time'] : '',
  689. !empty(strtotime($item['send_time'])) ? $item['send_time'] : '',
  690. !empty(strtotime($item['finish_time'])) ? $item['finish_time'] : '',
  691. $expressInfo['company'],
  692. $expressInfo['sn'],
  693. $item['has_one_order_remark']['remark'],
  694. $item['note'],
  695. $fistOrder = $item['has_many_first_order'] ? '首单' : '',
  696. !empty($item['has_many_member_certified']['realname']) ? $item['has_many_member_certified']['realname'] : $item['belongs_to_member']['realname'],
  697. !empty($item['has_many_member_certified']['idcard']) ? ' ' . $item['has_many_member_certified']['idcard'] : ' ' . $item['belongs_to_member']['idcard'],
  698. $clerk_info['auditor'],
  699. $clerk_info['additional'],
  700. $this->getExportRefundName($item),
  701. $this->invoiceType($item['order_invoice']['invoice_type']), // 发票类型
  702. ($item['order_invoice']['rise_type'] == 1) ? '个人' : '单位', // 发票抬头
  703. empty($item['order_invoice']['collect_name']) ? '' : $item['order_invoice']['collect_name'], // 单位/抬头名称
  704. empty($item['order_invoice']['gmf_taxpayer']) ? $item['order_invoice']['company_number'] : $item['order_invoice']['gmf_taxpayer'], // 税号
  705. empty($item['order_invoice']['content']) ? '' : $item['order_invoice']['content'], // 发票内容
  706. empty($item['order_invoice']['gmf_bank']) ? '' : $item['order_invoice']['gmf_bank'], // 开户银行
  707. empty($item['order_invoice']['gmf_bank_admin']) ? '' : $item['order_invoice']['gmf_bank_admin'], // 银行账号
  708. empty($item['order_invoice']['gmf_address']) ? '' : $item['order_invoice']['gmf_address'], // 注册地址
  709. empty($item['order_invoice']['gmf_mobile']) ? '' : $item['order_invoice']['gmf_mobile'], // 注册电话
  710. empty($item['order_invoice']['col_name']) ? '' : $item['order_invoice']['col_name'], // 收票人姓名
  711. empty($item['order_invoice']['col_mobile']) ? '' : $item['order_invoice']['col_mobile'], // 收票人电话
  712. empty($item['order_invoice']['col_address']) ? '' : $item['order_invoice']['col_address'], // 收票人地址
  713. empty($item['order_invoice']['email']) ? '' : $item['order_invoice']['email'] // 邮箱
  714. );
  715. }
  716. // dd($export_data);
  717. $export_model->export($file_name, $export_data, $this->exportRoute, 'direct_export');
  718. }
  719. }
  720. protected function getExportRefundName($orderArray)
  721. {
  722. if ($orderArray['manual_refund_log']) {
  723. return '退款并关闭';
  724. }
  725. if ($orderArray['has_one_refund_apply'] && $orderArray['has_one_refund_apply']['status'] >= \app\common\models\refund\RefundApply::COMPLETE) {
  726. if ($orderArray['has_one_refund_apply']['part_refund'] == \app\common\models\refund\RefundApply::ORDER_CLOSE) {
  727. return '退款并关闭';
  728. }
  729. return $orderArray['has_one_refund_apply']['refund_type_name'];
  730. }
  731. return '';
  732. }
  733. public function getFormDataByOderId($order_id)
  734. {
  735. $result = [];
  736. $set = \app\common\modules\shop\ShopConfig::current()->get('shop-foundation.order.order_detail.diyform');
  737. if (!$set) {
  738. return $result;
  739. }
  740. $orderGoods = \app\common\models\OrderGoods::where('order_id', $order_id)->get()->toArray();
  741. $orderGoodsIds = array_column($orderGoods, 'id');
  742. $orderGoods = array_column($orderGoods, null, 'id');
  743. $diyForms = OrderGoodsDiyForm::whereIn('order_goods_id', $orderGoodsIds)->get()->toArray();
  744. $dataIds = array_column($diyForms, 'diyform_data_id');
  745. $diyForms = array_column($diyForms, null, 'diyform_data_id');
  746. $datas = DiyformDataModel::whereIn('id', $dataIds)->get()->toArray();
  747. $item = [];
  748. foreach ($datas as $detail) {
  749. if ($detail) {
  750. $form = DiyformTypeModel::find($detail['form_id']);
  751. }
  752. $fields = iunserializer($form['fields']);
  753. foreach ($detail['form_data'] as $k => $v) {
  754. if ($fields[$k]['data_type'] == 5) {
  755. continue;
  756. }
  757. if (is_array($v)) {
  758. $v = implode(',', $v);
  759. }
  760. $item[] = $fields[$k]['tp_name'] . ':' . $v;
  761. }
  762. $result[$orderGoods[$diyForms[$detail['id']]['order_goods_id']]['goods_id']] = implode("\r\n", $item);
  763. }
  764. return $result;
  765. }
  766. public function getLevel($member, $levelId)
  767. {
  768. $data = [];
  769. foreach ($levelId as $k => $value) {
  770. foreach ($member['has_many_parent_team'] as $key => $parent) {
  771. if ($parent['has_one_team_dividend']['has_one_level']['id'] == $value) {
  772. $data[$k] = $parent['has_one_member']['nickname'] . ' ' . $parent['has_one_member']['realname'] . ' ' . $parent['has_one_member']['mobile'];
  773. break;
  774. }
  775. }
  776. $data[$k] = $data[$k] ?: '';
  777. }
  778. return $data;
  779. }
  780. //新导出
  781. protected function getColumns()
  782. {
  783. return ["订单id", "订单编号", "支付单号", "会员ID", "粉丝昵称", "会员姓名", "联系电话", '省', '市', '区', "收货地址",
  784. "商品名称","商品简称","商品规格", "商品编码", "商品条码", "商品数量", '退款数量', "剩余数量","一级分类","二级分类","三级分类","会员价","自定义表单","商品来源","支付方式", '抵扣金额', '优惠券优惠', '全场满减优惠','单品满减优惠', "商品小计", "运费", "成本价","应收款", "已退款金额", "剩余金额", "状态", "下单时间", "付款时间", "发货时间", "完成时间",
  785. "快递公司", "快递单号", "订单备注", "用户备注", "首单", "真实姓名", "身份证", "核销员", "附加", "订单提示状态", "发票类型", "发票抬头", "单位/抬头名称", "税号", "发票内容", "开户银行", "银行账号", "注册地址", "注册电话", "收票人姓名", "收票人手机号", "收票人地址" , "邮箱","自提点名称","自提点负责人","自提点电话"
  786. ];
  787. }
  788. //旧导出
  789. protected function getColumnsV1()
  790. {
  791. return ["订单id", "订单编号", "支付单号", "会员ID", "粉丝昵称", "收货人姓名", "联系电话", '省', '市', '区', "收货地址",
  792. "商品名称","商品简称","商品编码", "商品条码", "商品数量","一级分类","二级分类","三级分类","会员价","支付方式", '抵扣金额', '优惠券优惠', '全场满减优惠', '单品满减优惠', "商品小计","运费", "应收款", "成本价", "状态", "下单时间", "付款时间", "发货时间", "完成时间", "快递公司", "快递单号", "订单备注",
  793. "用户备注", "首单", "真实姓名", "身份证", '核销员', '附加', '订单提示状态', "发票类型", "发票抬头", "单位/抬头名称", "税号", "发票内容", "开户银行", "银行账号", "注册地址", "注册电话", "收票人姓名", "收票人手机号", "收票人地址" , "邮箱"];
  794. }
  795. protected function getExportDiscount($order, $key)
  796. {
  797. $export_discount = [
  798. 'deduction' => 0, //抵扣金额
  799. 'coupon' => 0, //优惠券优惠
  800. 'enoughReduce' => 0, //全场满减优惠
  801. 'singleEnoughReduce' => 0, //单品满减优惠
  802. ];
  803. foreach ($order['discounts'] as $discount) {
  804. if ($discount['discount_code'] == $key) {
  805. $export_discount[$key] = $discount['amount'];
  806. }
  807. }
  808. if (!$export_discount['deduction']) {
  809. foreach ($order['deductions'] as $k => $v) {
  810. $export_discount['deduction'] += $v['amount'];
  811. }
  812. }
  813. return $export_discount[$key];
  814. }
  815. //订单导出核销员显示
  816. protected function getAuditor($order)
  817. {
  818. //自提点
  819. if ($order['dispatch_type_id'] == \app\common\models\DispatchType::PACKAGE_DELIVER && app('plugins')->isEnabled('package-deliver')) {
  820. $deliverOrder = \Yunshop\PackageDeliver\model\PackageDeliverOrder::where('order_id', $order['id'])
  821. ->with(['hasOneDeliver', 'hasOneDeliverClerk'])
  822. ->first();
  823. $deliver_name = $deliverOrder->deliver_id . '-' . $deliverOrder->hasOneDeliver->deliver_name;
  824. if ($deliverOrder->hasOneDeliverClerk) {
  825. $package_deliver_name = "[{$deliverOrder->hasOneDeliver->deliver_name}]".$deliverOrder->hasOneDeliverClerk->realname."[{$deliverOrder->hasOneDeliverClerk->uid}]";
  826. } elseif ($order['status'] == 3) {
  827. $package_deliver_name = '后台确认';
  828. } else {
  829. $package_deliver_name = '';
  830. }
  831. return ['auditor' => $package_deliver_name, 'additional' => $deliver_name];
  832. }
  833. //商城自提
  834. if ($order['dispatch_type_id'] == \app\common\models\DispatchType::PACKAGE_DELIVERY && app('plugins')->isEnabled('package-delivery')) {
  835. $deliveryOrder = DeliveryOrder::where('order_id', $order['id'])
  836. ->first();
  837. $shopName = \Setting::get('shop.shop.name') ?: '自营';
  838. if ($deliveryOrder->hasOneClerk) {
  839. $package_deliver_name = "[{$shopName}]".$deliveryOrder->hasOneClerk->nickname."[{$deliveryOrder->hasOneClerk->uid}]";
  840. } elseif ($order['status'] == 3) {
  841. $package_deliver_name = '后台确认';
  842. } else {
  843. $package_deliver_name = '';
  844. }
  845. return ['auditor' => $package_deliver_name, 'additional' => $shopName];
  846. }
  847. //门店自提
  848. if ($order['dispatch_type_id'] == \app\common\models\DispatchType::SELF_DELIVERY && app('plugins')->isEnabled('store-cashier')) {
  849. $storeOrder = \Yunshop\StoreCashier\common\models\StoreOrder::where('order_id', $order['id'])->first();
  850. if ($storeOrder->hasOneClerkMember) {
  851. $package_deliver_name = "[{$storeOrder->hasOneStore->store_name}]".$storeOrder->hasOneClerkMember->nickname."[{$storeOrder->hasOneClerkMember->uid}]";
  852. } elseif ($order['status'] == 3) {
  853. $package_deliver_name = '后台确认';
  854. } else {
  855. $package_deliver_name = '';
  856. }
  857. return ['auditor' => $package_deliver_name, 'additional' => $storeOrder->hasOneStore->id.'-'.$storeOrder->hasOneStore->store_name];
  858. }
  859. return ['auditor' => '', 'additional' => ''];
  860. }
  861. protected function getGoods($order, $key, $category = '')
  862. {
  863. if (empty($category)) {
  864. $category=new Category();
  865. }
  866. $goods_title = '';
  867. $alias = '';
  868. $goods_sn = '';
  869. $total = '';
  870. $vip_price = '';
  871. $product_sn = '';
  872. $cost_price = 0;
  873. $firstCate='';
  874. $secondCate='';
  875. $thirdCate='';
  876. foreach ($order['has_many_order_goods'] as $goods) {
  877. $res_title = $goods['title'];
  878. $res_title = str_replace('-', ',', $res_title);
  879. $res_title = str_replace('+', ',', $res_title);
  880. $res_title = str_replace('/', ',', $res_title);
  881. $res_title = str_replace('*', ',', $res_title);
  882. $res_title = str_replace('=', ',', $res_title);
  883. if ($goods['goods_option_title']) {
  884. $res_title .= '[' . $goods['goods_option_title'] . ']';
  885. }
  886. $order_goods = OrderGoods::find($goods['id']);
  887. if ($order_goods->goods_option_id) {
  888. $goods_option = GoodsOption::find($order_goods->goods_option_id);
  889. if ($goods_option) {
  890. $goods_sn .= '【' . $goods_option->goods_sn . '】';
  891. }
  892. } else {
  893. $goods_sn .= '【' . $goods['goods_sn'] . '】';
  894. }
  895. $product_sn .= '【' . $goods['product_sn'] . '】';
  896. $goods_title .= '【' . $res_title . '*' . $goods['total'] . '】';
  897. $alias .= '【' . $goods['goods']['alias'] . '】';
  898. $total .= '【' . $goods['total'] . '】';
  899. $vip_price .= '【' . $goods['vip_price'] . '】';
  900. $cost_price += $goods['goods_cost_price'];
  901. $cateList=[];
  902. foreach($goods['goods']['belongs_to_categorys'] as $k =>$v){
  903. $cateList[]=$category->getCateOrderByLevel($v['category_ids']);
  904. }
  905. $firstCateTemp=array_column($cateList,0);
  906. $secondCateTemp=array_column($cateList,1);
  907. $thirdCateTemp=array_column($cateList,2);
  908. foreach($firstCateTemp as $temp){
  909. $firstCate.= '【' . $temp . '】';
  910. }
  911. foreach($secondCateTemp as $temp){
  912. $secondCate.= '【' . $temp . '】';
  913. }
  914. foreach($thirdCateTemp as $temp){
  915. $thirdCate.= '【' . $temp . '】';
  916. }
  917. }
  918. $res = [
  919. 'goods_title' => $goods_title,
  920. 'alias' => $alias,
  921. 'goods_sn' => $goods_sn,
  922. 'product_sn' => $product_sn,
  923. 'total' => $total,
  924. 'vip_price' => $vip_price,
  925. 'cost_price' => $cost_price,
  926. 'first_cate'=>$firstCate,
  927. 'second_cate'=>$secondCate,
  928. 'third_cate'=>$thirdCate,
  929. ];
  930. return $res[$key];
  931. }
  932. protected function getNickname($nickname)
  933. {
  934. if (substr($nickname, 0, strlen('=')) === '=') {
  935. $nickname = ',' . $nickname;
  936. }
  937. return $nickname;
  938. }
  939. protected function getExportRealName($order)
  940. {
  941. $name = $order['has_one_package_delivery_order'] ? $order['has_one_package_delivery_order']['buyer_name'] : $order['address']['realname'];
  942. return $name ?: '';
  943. }
  944. protected function getExportMobile($order)
  945. {
  946. $mobile = $order['has_one_package_delivery_order'] ? $order['has_one_package_delivery_order']['buyer_mobile'] : $order['address']['mobile'];
  947. return $mobile ?: '';
  948. }
  949. protected function getExportDeliverName($order)
  950. {
  951. $return = '';
  952. if ($order['has_one_package_delivery_order']) {
  953. $return = Setting::get('shop.contact.store_name');
  954. } elseif ($order['has_one_package_deliver_order']) {
  955. $return = $order['has_one_package_deliver_order']['deliver_name'] ? : $order['has_one_package_deliver_order']['has_one_deliver']['deliver_name'];
  956. }
  957. return $return ?: '';
  958. }
  959. protected function getExportDeliverOwnerName($order)
  960. {
  961. $return = '';
  962. if ($order['has_one_package_delivery_order']) {
  963. $return = '商城自提';
  964. } elseif ($order['has_one_package_deliver_order']) {
  965. $return = $order['has_one_package_deliver_order']['has_one_deliver']['realname'];
  966. }
  967. return $return ?: '';
  968. }
  969. protected function getExportDeliverOwnerMobile($order)
  970. {
  971. $return = '';
  972. if ($order['has_one_package_delivery_order']) {
  973. $return = Setting::get('shop.contact.phone');
  974. } elseif ($order['has_one_package_deliver_order']) {
  975. $return = $order['has_one_package_deliver_order']['has_one_deliver']['deliver_mobile'];
  976. }
  977. return $return ?: '';
  978. }
  979. private function invoiceType($type)
  980. {
  981. $result = '';
  982. if ($type == '0' || empty($type)){
  983. $result = '电子发票';
  984. }
  985. if ($type == 1){
  986. $result = '纸质发票';
  987. }
  988. if ($type == 2){
  989. $result = '专用发票';
  990. }
  991. return $result;
  992. }
  993. /*
  994. * 获取快递包裹的公司字符串和单号字符串
  995. */
  996. private function getExpressString($express){
  997. $company=array_column($express,'express_company_name');
  998. $sn=array_column($express,'express_sn');
  999. $companyStr='';
  1000. $snStr='';
  1001. if(count($company)==1){
  1002. $companyStr=$company[0];
  1003. }else{
  1004. foreach($company as $val){
  1005. $companyStr.='【'.$val.'】 ';
  1006. }
  1007. }
  1008. if(count($sn)==1){
  1009. $snStr=$sn[0];
  1010. }else{
  1011. foreach($sn as $val){
  1012. $snStr.='【'.$val.'】 ';
  1013. }
  1014. }
  1015. return ['company'=>$companyStr,'sn'=>$snStr];
  1016. }
  1017. }