moonsflyer hai 4 meses
pai
achega
e25f0e3d8e
Modificáronse 35 ficheiros con 16127 adicións e 71 borrados
  1. 248 0
      addon/cashier/shop/controller/Order0626.php
  2. 237 0
      addon/cashier/shop/controller/Order_bak.php
  3. 4 3
      addon/cashier/shop/view/order/lists.html
  4. 6 4
      addon/cashier/storeapi/controller/Goods.php
  5. 110 0
      addon/giftcard/shop/controller/Order_bak.php
  6. 242 0
      addon/memberrecharge/model/MemberrechargeOrder0625.php
  7. 440 0
      addon/memberrecharge/shop/controller/Memberrecharge0625.php
  8. 305 0
      addon/memberrecharge/shop/view/memberrecharge/order_lists0625.html
  9. 256 0
      addon/memberrecharge/shop/view/public/js/order_list0625.js
  10. 1 2
      addon/stock/storeapi/controller/Manage.php
  11. 49 27
      addon/store/shop/controller/Stat.php
  12. 161 0
      addon/store/shop/controller/Stat0626.php
  13. 830 0
      addon/store/shop/controller/Store_bak.php
  14. 8 6
      app/common.php
  15. 53 0
      app/index/view/base_bak.html
  16. 90 0
      app/index/view/index/center_bak.html
  17. 2 1
      app/model/Model.php
  18. 5 2
      app/model/goods/Goods.php
  19. 748 0
      app/model/order/OrderExport0424.php
  20. 767 0
      app/model/order/OrderExport0430.php
  21. 778 0
      app/model/order/OrderExport0626.php
  22. 107 2
      app/model/order/OrderRefund.php
  23. 25 8
      app/model/store/Stat.php
  24. 308 0
      app/model/store/Stat0626.php
  25. 0 2
      app/model/system/Menu.php
  26. 18 13
      app/model/system/Stat.php
  27. 1176 0
      app/shop/controller/Member_bak.php
  28. 239 0
      app/shop/controller/Memberlevel_bak.php
  29. 2020 0
      app/shop/controller/Order0625.php
  30. 2137 0
      app/shop/controller/Order062501.php
  31. 2127 0
      app/shop/controller/Order0626.php
  32. 1700 0
      app/shop/controller/Order_bak.php
  33. 416 0
      app/shop/controller/Orderrefund_bak.php
  34. 514 0
      app/shop/controller/Verify_bak.php
  35. 0 1
      app/shopapi/controller/Order.php

+ 248 - 0
addon/cashier/shop/controller/Order0626.php

@@ -0,0 +1,248 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace addon\cashier\shop\controller;
+
+use app\model\order\Config as ConfigModel;
+use addon\cashier\model\order\CashierOrder as OrderModel;
+use app\model\order\OrderCommon as OrderCommonModel;
+use app\model\store\Store;
+use app\model\system\UserGroup;
+use app\model\web\Config as WebConfig;
+use app\shop\controller\BaseShop;
+
+/**
+ * 订单
+ * Class Order
+ * @package app\shop\controller
+ */
+class Order extends BaseShop
+{
+    protected $replace = [
+        'CASHIER_CSS' => __ROOT__ . '/addon/cashier/shop/view/public/css',
+        'CASHIER_JS' => __ROOT__ . '/addon/cashier/shop/view/public/js',
+        'CASHIER_IMG' => __ROOT__ . '/addon/cashier/shop/view/public/img',
+    ];
+
+    /**
+     * 快递订单列表
+     */
+    public function lists()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '交易流水号',
+            'remark' => '订单备注',
+            'name' => '收货人姓名',
+            'order_name' => '商品名称',
+            'mobile' => '收货人电话',
+            'nick_name' => '会员昵称',
+            'sku_no' => '商品编码',
+        );
+
+        $order_model = new OrderModel();
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $delivery_start_time = input('delivery_start_time', '');
+        $delivery_end_time = input('delivery_end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');//订单类型
+        $order_type = input('order_type', 'all');//营销类型
+        $is_verify = input('is_verify', 'all');
+        $cashier_order_type = input('cashier_order_type', 'all');
+        $store_id = input('store_id', '');
+        $field = 'a.*,s.store_name';
+
+        $cashier_order_type_list = $order_model->cashier_order_type;
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $alias = 'a';
+            $join = null;
+            $condition = [
+                [ 'a.site_id', '=', $this->site_id ],
+                [ 'a.is_delete', '=', 0 ],
+                [ 'a.order_scene', '=', 'cashier' ],
+//                [ 'a.pay_status', '=', 1 ]
+            ];
+            //订单状态
+            if ($order_status != '') {
+                if ($order_status == 'refunding') {
+                    $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'refund_status', 'not in', [ 0, 3 ] ] ], 'order_id')[ 'data' ];
+                    $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                    $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                } else {
+                    $condition[] = [ 'a.order_status', '=', $order_status ];
+                }
+            }
+
+            $order = 'a.create_time desc';
+
+            $join[] = [
+                'store s',
+                's.store_id = a.store_id',
+                'left'
+            ];
+            if ($is_verify != 'all') {
+                $join[] = [
+                    'verify v',
+                    'v.verify_code = a.virtual_code',
+                    'left'
+                ];
+                $condition[] = [ 'v.is_verify', '=', $is_verify ];
+            }
+
+            if ($store_id != '') {
+                $condition[] = [ 'a.store_id', '=', $store_id ];
+            }
+            //订单内容 模糊查询
+            if ($order_name != '') {
+                $condition[] = [ 'a.order_name', 'like', '%' . $order_name . '%' ];
+            }
+            //订单来源
+            if ($order_from != '') {
+                $condition[] = [ 'a.order_from', '=', $order_from ];
+            }
+            //订单支付
+            if ($pay_type != '') {
+                $condition[] = [ 'a.pay_type', '=', $pay_type ];
+            }
+            //订单类型
+            if ($order_type != 'all') {
+                $condition[] = [ 'a.order_type', '=', $order_type ];
+            }
+
+            if ($cashier_order_type != 'all') {
+                $condition[] = [ 'a.cashier_order_type', '=', $cashier_order_type ];
+            }
+            //营销类型
+            if ($promotion_type != '') {
+                if ($promotion_type == 'empty') {
+                    $condition[] = [ 'a.promotion_type', '=', '' ];
+                } else {
+                    $condition[] = [ 'a.promotion_type', '=', $promotion_type ];
+                }
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'a.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            if (!empty($delivery_start_time) && empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '>=', date_to_time($delivery_start_time) ];
+            } elseif (empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '<=', date_to_time($delivery_end_time) ];
+            } elseif (!empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', 'between', [ date_to_time($delivery_start_time), date_to_time($delivery_end_time) ] ];
+            }
+
+            if ($search_text != '') {
+                switch ( $order_label ) {
+                    case 'nick_name':
+                        $join[] = [
+                            'member m',
+                            'm.member_id = a.member_id',
+                            'left'
+                        ];
+                        $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+                        break;
+                    case 'sku_no':
+                        $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'sku_no', 'like', '%' . $search_text . '%' ] ], 'order_id')[ 'data' ];
+                        $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                        $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                        break;
+                    default:
+                        $condition[] = [ 'a.' . $order_label, 'like', '%' . $search_text . '%' ];
+                }
+            }
+
+            $store_id_arr = [];
+            $userGroupModel = new UserGroup();
+            $userInfo = $this->user_info;
+            $userGroupWhere['uid'] = $userInfo['uid'];
+            $userGroupList = $userGroupModel->getUserList($userGroupWhere,'uid,store_id');
+            $store_id_arr = array_column($userGroupList['data'],'store_id');
+            if(!empty($store_id_arr) &&  !$userInfo['is_admin']){
+                $condition[] = [ "a.store_id", "in", $store_id_arr];
+            }
+
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, $order, $field, $alias, $join);
+            if (!empty($list[ 'data' ][ 'list' ])) {
+                foreach ($list[ 'data' ][ 'list' ] as $k => $v) {
+                    $list[ 'data' ][ 'list' ][ $k ][ 'cashier_order_type_name' ] = $cashier_order_type_list[ $v[ 'cashier_order_type' ] ];
+                }
+            }
+            $list[ 'data' ][ 'order_status' ] = $order_status;
+            return $list;
+        } else {
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $this->assign('order_type_list', $order_type_list);
+            $this->assign('order_label_list', $order_label_list);
+
+            $this->assign('order_status_list', $order_type_list[ 1 ][ 'status' ]);//订单状态
+            //订单来源 (支持端口)
+            $this->assign('order_from_list', $order_common_model->getOrderFromList());
+
+            $pay_type = $order_common_model->getPayType([ 'order_type' => 5 ]);
+            $this->assign('pay_type_list', $pay_type);
+
+            $this->assign('order_status', $order_status);
+            $this->assign('cashier_order_type_list', $cashier_order_type_list);
+            $this->assign('http_type', get_http_type());
+
+            $config_model = new ConfigModel();
+            $order_config = $config_model->getOrderEventTimeConfig($this->site_id, $this->app_module)[ 'data' ][ 'value' ] ?? [];
+            $this->assign('order_config', $order_config);
+
+            $config_model = new WebConfig();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+            $store_list = ( new Store() )->getStoreList([ [ 'site_id', '=', $this->site_id ] ], 'store_name,store_id')[ 'data' ];
+            $this->assign('store_list', $store_list);
+
+            return $this->fetch('order/lists', [], $this->replace);
+        }
+
+    }
+
+    /**
+     * 快递订单详情
+     */
+    public function detail()
+    {
+        $order_id = input('order_id', 0);
+        $order_common_model = new OrderCommonModel();
+        $order_detail_result = $order_common_model->getOrderDetail($order_id);
+        $order_detail = $order_detail_result[ 'data' ];
+
+        if (empty($order_detail)) $this->error('未获取到订单数据', addon_url('shop/order/lists'));
+
+        $this->assign('order_detail', $order_detail);
+
+        $this->assign('http_type', get_http_type());
+
+        $config_model = new WebConfig();
+        $mp_config = $config_model->getMapConfig($this->site_id);
+        $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+        return $this->fetch('order/detail');
+    }
+}

+ 237 - 0
addon/cashier/shop/controller/Order_bak.php

@@ -0,0 +1,237 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace addon\cashier\shop\controller;
+
+use app\model\order\Config as ConfigModel;
+use addon\cashier\model\order\CashierOrder as OrderModel;
+use app\model\order\OrderCommon as OrderCommonModel;
+use app\model\store\Store;
+use app\model\web\Config as WebConfig;
+use app\shop\controller\BaseShop;
+
+/**
+ * 订单
+ * Class Order
+ * @package app\shop\controller
+ */
+class Order extends BaseShop
+{
+    protected $replace = [
+        'CASHIER_CSS' => __ROOT__ . '/addon/cashier/shop/view/public/css',
+        'CASHIER_JS' => __ROOT__ . '/addon/cashier/shop/view/public/js',
+        'CASHIER_IMG' => __ROOT__ . '/addon/cashier/shop/view/public/img',
+    ];
+
+    /**
+     * 快递订单列表
+     */
+    public function lists()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '交易流水号',
+            'remark' => '订单备注',
+            'name' => '收货人姓名',
+            'order_name' => '商品名称',
+            'mobile' => '收货人电话',
+            'nick_name' => '会员昵称',
+            'sku_no' => '商品编码',
+        );
+
+        $order_model = new OrderModel();
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $delivery_start_time = input('delivery_start_time', '');
+        $delivery_end_time = input('delivery_end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');//订单类型
+        $order_type = input('order_type', 'all');//营销类型
+        $is_verify = input('is_verify', 'all');
+        $cashier_order_type = input('cashier_order_type', 'all');
+        $store_id = input('store_id', '');
+        $field = 'a.*,s.store_name';
+
+        $cashier_order_type_list = $order_model->cashier_order_type;
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $alias = 'a';
+            $join = null;
+            $condition = [
+                [ 'a.site_id', '=', $this->site_id ],
+                [ 'a.is_delete', '=', 0 ],
+                [ 'a.order_scene', '=', 'cashier' ],
+//                [ 'a.pay_status', '=', 1 ]
+            ];
+            //订单状态
+            if ($order_status != '') {
+                if ($order_status == 'refunding') {
+                    $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'refund_status', 'not in', [ 0, 3 ] ] ], 'order_id')[ 'data' ];
+                    $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                    $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                } else {
+                    $condition[] = [ 'a.order_status', '=', $order_status ];
+                }
+            }
+
+            $order = 'a.create_time desc';
+
+            $join[] = [
+                'store s',
+                's.store_id = a.store_id',
+                'left'
+            ];
+            if ($is_verify != 'all') {
+                $join[] = [
+                    'verify v',
+                    'v.verify_code = a.virtual_code',
+                    'left'
+                ];
+                $condition[] = [ 'v.is_verify', '=', $is_verify ];
+            }
+
+            if ($store_id != '') {
+                $condition[] = [ 'a.store_id', '=', $store_id ];
+            }
+            //订单内容 模糊查询
+            if ($order_name != '') {
+                $condition[] = [ 'a.order_name', 'like', '%' . $order_name . '%' ];
+            }
+            //订单来源
+            if ($order_from != '') {
+                $condition[] = [ 'a.order_from', '=', $order_from ];
+            }
+            //订单支付
+            if ($pay_type != '') {
+                $condition[] = [ 'a.pay_type', '=', $pay_type ];
+            }
+            //订单类型
+            if ($order_type != 'all') {
+                $condition[] = [ 'a.order_type', '=', $order_type ];
+            }
+
+            if ($cashier_order_type != 'all') {
+                $condition[] = [ 'a.cashier_order_type', '=', $cashier_order_type ];
+            }
+            //营销类型
+            if ($promotion_type != '') {
+                if ($promotion_type == 'empty') {
+                    $condition[] = [ 'a.promotion_type', '=', '' ];
+                } else {
+                    $condition[] = [ 'a.promotion_type', '=', $promotion_type ];
+                }
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'a.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            if (!empty($delivery_start_time) && empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '>=', date_to_time($delivery_start_time) ];
+            } elseif (empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '<=', date_to_time($delivery_end_time) ];
+            } elseif (!empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', 'between', [ date_to_time($delivery_start_time), date_to_time($delivery_end_time) ] ];
+            }
+
+            if ($search_text != '') {
+                switch ( $order_label ) {
+                    case 'nick_name':
+                        $join[] = [
+                            'member m',
+                            'm.member_id = a.member_id',
+                            'left'
+                        ];
+                        $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+                        break;
+                    case 'sku_no':
+                        $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'sku_no', 'like', '%' . $search_text . '%' ] ], 'order_id')[ 'data' ];
+                        $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                        $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                        break;
+                    default:
+                        $condition[] = [ 'a.' . $order_label, 'like', '%' . $search_text . '%' ];
+                }
+            }
+
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, $order, $field, $alias, $join);
+            if (!empty($list[ 'data' ][ 'list' ])) {
+                foreach ($list[ 'data' ][ 'list' ] as $k => $v) {
+                    $list[ 'data' ][ 'list' ][ $k ][ 'cashier_order_type_name' ] = $cashier_order_type_list[ $v[ 'cashier_order_type' ] ];
+                }
+            }
+            $list[ 'data' ][ 'order_status' ] = $order_status;
+            return $list;
+        } else {
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $this->assign('order_type_list', $order_type_list);
+            $this->assign('order_label_list', $order_label_list);
+
+            $this->assign('order_status_list', $order_type_list[ 1 ][ 'status' ]);//订单状态
+            //订单来源 (支持端口)
+            $this->assign('order_from_list', $order_common_model->getOrderFromList());
+
+            $pay_type = $order_common_model->getPayType([ 'order_type' => 5 ]);
+            $this->assign('pay_type_list', $pay_type);
+
+            $this->assign('order_status', $order_status);
+            $this->assign('cashier_order_type_list', $cashier_order_type_list);
+            $this->assign('http_type', get_http_type());
+
+            $config_model = new ConfigModel();
+            $order_config = $config_model->getOrderEventTimeConfig($this->site_id, $this->app_module)[ 'data' ][ 'value' ] ?? [];
+            $this->assign('order_config', $order_config);
+
+            $config_model = new WebConfig();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+            $store_list = ( new Store() )->getStoreList([ [ 'site_id', '=', $this->site_id ] ], 'store_name,store_id')[ 'data' ];
+            $this->assign('store_list', $store_list);
+
+            return $this->fetch('order/lists', [], $this->replace);
+        }
+
+    }
+
+    /**
+     * 快递订单详情
+     */
+    public function detail()
+    {
+        $order_id = input('order_id', 0);
+        $order_common_model = new OrderCommonModel();
+        $order_detail_result = $order_common_model->getOrderDetail($order_id);
+        $order_detail = $order_detail_result[ 'data' ];
+
+        if (empty($order_detail)) $this->error('未获取到订单数据', addon_url('shop/order/lists'));
+
+        $this->assign('order_detail', $order_detail);
+
+        $this->assign('http_type', get_http_type());
+
+        $config_model = new WebConfig();
+        $mp_config = $config_model->getMapConfig($this->site_id);
+        $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+        return $this->fetch('order/detail');
+    }
+}

+ 4 - 3
addon/cashier/shop/view/order/lists.html

@@ -111,7 +111,7 @@
                 <button class="layui-btn" lay-submit id="btn_search"lay-filter="btn_search">筛选</button>
                 <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                 <button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order_goods" >导出订单商品</button>
-                <button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order" >导出订单1</button>
+                <button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order" >导出订单</button>
                 <a class="layui-btn layui-btn-primary" href="{:addon_url('shop/order/export')}" target="_blank">查看导出记录</a>
             </div>
             <input type="hidden" name="status"/>
@@ -321,6 +321,7 @@
             $.ajax({
                 type: 'post',
                 dataType: 'json',
+                // url: ns.url("shop/order/exportordergoods"),
                 url: ns.url("shop/order/exportMoneyOrderGoods"),
                 data: data.field,
                 success: function (res) {
@@ -334,14 +335,14 @@
         //批量导出(订单)
         form.on('submit(batch_export_order)', function(data){
             data.field.order_ids = orderIdAll.toString(); // 选择要导出的订单
-
             $.ajax({
                 type: 'post',
                 dataType: 'json',
+                // url: ns.url("shop/order/exportorder"),
                 url: ns.url("shop/order/exportMoneyOrder"),
                 data: data.field,
                 success: function (res) {
-                    console.log(2026)
+
                 }
             });
             window.open(ns.url("shop/order/export",{}));

+ 6 - 4
addon/cashier/storeapi/controller/Goods.php

@@ -47,7 +47,7 @@ class Goods extends BaseStoreApi
     public function page()
     {
         $page_index = $this->params[ 'page' ] ?? 1;
-        // $page_size = 30;
+        $page_size = 10;
         $page_size = $this->params[ 'page_size' ] ?? PAGE_LIST_ROWS;
         $goods_category = $this->params[ 'category' ] ?? 'all';
         $search_text = $this->params[ 'search_text' ] ?? '';
@@ -57,7 +57,6 @@ class Goods extends BaseStoreApi
         $start_price = $this->params[ 'start_price' ] ?? 0;
         $end_price = $this->params[ 'end_price' ] ?? 0;
 
-
         $model = new GoodsModel();
         $condition = [
             [ 'g.site_id', '=', $this->site_id ],
@@ -109,9 +108,12 @@ class Goods extends BaseStoreApi
             $join[] = [ 'store_goods sg2', 'g.goods_id = sg2.goods_id and sg2.store_id=' . $stock_store_id, 'left' ];
             $field .= ', IFNULL(sg2.stock, 0) as stock';
         }
-
-//        $total_count = $model->getGoodsTotalCount($condition , $field, 'g', $join);
+        
+        // $total_count = $model->getGoodsTotalCount($condition , $field, 'g', $join);
+         
         $data = $model->getGoodsPageList($condition, $page_index, $page_size, 'g.sort asc,g.create_time desc', $field, 'g', $join);
+        // $total_num = $data['count'];
+        // $data['total_num'] = $total_num;
 
         if($data['data']){
             $total_count = $data['data']['count'];

+ 110 - 0
addon/giftcard/shop/controller/Order_bak.php

@@ -0,0 +1,110 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace addon\giftcard\shop\controller;
+
+use addon\giftcard\model\card\Card as CardModel;
+use addon\giftcard\model\order\GiftCardOrder;
+
+/**
+ * 礼品卡订单控制器
+ */
+class Order extends Giftcard
+{
+    public function __construct()
+    {
+        parent::__construct();
+        if (!request()->isAjax()) {
+            $this->forthMenu();
+        }
+        $this->replace = [
+            'GIFTCARD_CSS' => __ROOT__ . '/addon/giftcard/shop/view/public/css',
+            'GIFTCARD_JS' => __ROOT__ . '/addon/giftcard/shop/view/public/js',
+            'GIFTCARD_IMG' => __ROOT__ . '/addon/giftcard/shop/view/public/img',
+            'GIFTCARD_CSV' => __ROOT__ . '/addon/giftcard/shop/view/public/csv',
+        ];
+    }
+
+    /**
+     * 订单列表
+     * @return mixed
+     */
+    public function order()
+    {
+        $giftcard_id = input('giftcard_id', 0);
+        $order_model = new GiftCardOrder();
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $status = input('status', 'all');
+            $start_time = input('start_time', '');
+            $end_time = input('end_time', '');
+            $nickname = input('nickname', '');
+            $order_no = input('order_no', '');
+            $card_right_type = input('card_right_type', '');
+
+            $condition = array (
+                [ 'o.site_id', '=', $this->site_id ],
+                [ 'o.is_delete', '=', 0 ],
+                [ 'o.order_status', '=', 'complete' ],
+            );
+            if ($giftcard_id > 0) {
+                $condition[] = [ 'o.giftcard_id', '=', $giftcard_id ];
+            }
+            if (!empty($nickname)) {
+                $condition[] = [ 'm.nickname', 'like', '%' . $nickname . '%' ];
+            }
+            if (!empty($card_right_type)) {
+                $condition[] = [ 'o.card_right_type', '=', $card_right_type ];
+            }
+            if (!empty($order_no)) {
+                $condition[] = [ 'o.order_no', '=', $order_no ];
+            }
+            //支付时间
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ "o.pay_time", ">=", date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ "o.pay_time", "<=", date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'o.pay_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            $order = 'o.create_time desc';
+            $field = 'o.*, m.nickname,m.headimg,m.mobile';
+            $join = [
+                [ 'member m', 'o.member_id = m.member_id', 'left' ]
+            ];
+            $list = $order_model->getOrderDetailPageList($condition, $page, $page_size, $order, $field, 'o', $join);
+            return $list;
+        }
+        $this->assign('forth_menu', []);
+        $this->assign('giftcard_id', $giftcard_id);
+        return $this->fetch("order/order", [], $this->replace);
+    }
+
+    /**
+     * 详情
+     * @return mixed|void
+     */
+    public function detail()
+    {
+        $order_id = input('order_id', '');
+        $order_model = new GiftCardOrder();
+        $order_detail = $order_model->getOrderDetail([ 'site_id' => $this->site_id, 'order_id' => $order_id ])[ 'data' ] ?? [];
+        $card_model = new CardModel();
+        $card_list = $card_model->getCardList([ [ 'site_id', '=', $this->site_id ], [ 'order_id', '=', $order_detail[ 'order_id' ] ] ])[ 'data' ];
+        foreach ($card_list as $k => $v) {
+            $card_list[ $k ] = $card_model->tran($v);
+        }
+        $this->assign('order_detail', $order_detail);
+        $this->assign('card_list', $card_list);
+        return $this->fetch("order/detail", [], $this->replace);
+    }
+}

+ 242 - 0
addon/memberrecharge/model/MemberrechargeOrder0625.php

@@ -0,0 +1,242 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace addon\memberrecharge\model;
+
+use app\model\BaseModel;
+use addon\coupon\model\CouponType;
+use app\model\system\Stat;
+use think\facade\Cache;
+use think\facade\Log;
+
+/**
+ * 订单
+ */
+class MemberrechargeOrder extends BaseModel
+{
+
+    /**
+     * 基础支付方式(不考虑实际在线支付方式或者货到付款方式)
+     * @var unknown
+     */
+    public $pay_type = [
+
+    ];
+
+    /**
+     * 获取支付方式
+     * @return unknown
+     */
+    public function getPayType()
+    {
+        //获取订单基础的其他支付方式
+
+        $pay_type = $this->pay_type;
+        //获取当前所有在线支付方式
+        $onlinepay = event('PayType');
+        if (!empty($onlinepay)) {
+            foreach ($onlinepay as $k => $v) {
+                $pay_type[ $v[ 'pay_type' ] ] = $v[ 'pay_type_name' ];
+            }
+        }
+        $trade_pay_type_list = event('TradePayType', []);
+        if (!empty($trade_pay_type_list)) {
+            foreach ($trade_pay_type_list as $k => $v) {
+                if (!empty($v)) {
+                    $pay_type = array_merge($pay_type, $v);
+                }
+            }
+        }
+        return $pay_type;
+    }
+
+    /**
+     * 订单详情
+     * @param array $condition
+     * @param string $field
+     * @return array
+     */
+    public function getMemberRechargeOrderInfo($condition = [], $field = '*')
+    {
+        $order = model('member_recharge_order')->getInfo($condition, $field);
+        if ($order) {
+            //获取优惠券信息
+            $coupon_id = $order[ 'coupon_id' ] ?? 0;
+            if ($coupon_id > 0) {
+                //优惠券字段
+                $coupon_field = 'coupon_type_id,coupon_name,money,count,lead_count,max_fetch,at_least,end_time,image,validity_type,fixed_term,type';
+
+                $model = new CouponType();
+                $coupon = $model->getCouponTypeList([ [ 'coupon_type_id', 'in', $order[ 'coupon_id' ] ] ], $coupon_field);
+                $order[ 'coupon_list' ] = $coupon;
+            }
+
+        }
+
+        return $this->success($order);
+    }
+
+    /**
+     * 订单列表
+     * @param array $condition
+     * @param int $page
+     * @param int $page_size
+     * @param string $order
+     * @param string $field
+     * @return array
+     */
+    public function getMemberRechargeOrderPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
+    {
+        $list = model('member_recharge_order')->pageList($condition, $field, $order, $page, $page_size);
+        if (!empty($list[ 'list' ])) {
+            foreach ($list[ 'list' ] as $k => $v) {
+                $list[ 'list' ][ $k ][ 'coupon_name' ] = '';
+                $coupon_name = '';
+                if (!empty($v[ 'coupon_id' ])) {
+                    $coupon_array = explode(',', $v[ 'coupon_id' ]);
+                    foreach ($coupon_array as $value) {
+                        $coupon_name_value = model('promotion_coupon_type')->getValue([ [ 'coupon_type_id', '=', $value ] ], 'coupon_name');
+                        $coupon_name .= ',' . $coupon_name_value;
+                    }
+                    $coupon_name = ltrim($coupon_name, ',');
+                }
+                $list[ 'list' ][ $k ][ 'coupon_name' ] = $coupon_name;
+            }
+        }
+        return $this->success($list);
+    }
+
+    /**
+     * 支付回调
+     * @param $data
+     * @return array|\multitype
+     */
+    public function orderPay($data)
+    {
+        $order_field = 'order_id,recharge_id,recharge_name,order_no,cover_img,face_value,buy_price,point,growth,coupon_id,price,pay_type,status,create_time,pay_time,member_id,member_img,nickname,site_id';
+        $order = $this->getMemberRechargeOrderInfo([ [ 'out_trade_no', '=', $data[ 'out_trade_no' ] ] ], $order_field);
+        $order_info = $order[ 'data' ];
+        if ($order_info[ 'status' ] == 1) {
+            model('member_recharge_order')->startTrans();
+            try {
+
+                $pay_list = $this->getPayType();
+                $pay_type_name = '';
+                if (!empty($data[ 'pay_type' ])) {
+                    $pay_type_name = $pay_list[ $data[ 'pay_type' ] ];
+                }
+
+                //修改订单状态
+                $order_data = [
+                    'pay_type' => $data[ 'pay_type' ],
+                    'pay_type_name' => $pay_type_name,
+                    'pay_time' => time(),
+                    'price' => $order_info[ 'buy_price' ],
+                    'status' => 2
+                ];
+                $res = model('member_recharge_order')->update($order_data, [ [ 'out_trade_no', '=', $data[ 'out_trade_no' ] ] ]);
+
+                //添加开卡记录
+                $card_model = new MemberRechargeCard();
+                $order_info[ 'use_status' ] = 2;
+                $order_info[ 'use_time' ] = time();
+                $card_model->addMemberRechargeCard($order_info);
+
+                //发放礼包
+                $card_model->addMemberAccount($order_info);
+
+                //获取套餐信息
+                $recharge_model = new Memberrecharge();
+                $recharge_info = $recharge_model->getMemberRechargeInfo([ [ 'recharge_id', '=', $order_info[ 'recharge_id' ] ] ], 'sale_num,coupon_id');
+                //增加发放数
+                if (!empty($recharge_info[ 'data' ])) {
+                    $sale_num = $recharge_info[ 'data' ][ 'sale_num' ] + 1;
+                    $recharge_model->editMemberRecharge([ [ 'recharge_id', '=', $order_info[ 'recharge_id' ] ] ], [ 'sale_num' => $sale_num ]);
+                }
+                $is_stat = $data[ 'is_stat' ] ?? true;
+                if ($is_stat) {
+                    event('MemberRechargeOrderPay', [ 'order_id' => $order_info[ 'order_id' ] ]);
+                    $stat_model = new Stat();
+                    $stat_res = $stat_model->switchStat([
+                        'type' => 'recharge',
+                        'data' => [
+                            'order_id' => $order_info[ 'order_id' ],
+                            'site_id' => $order_info[ 'site_id' ]
+                        ]
+                    ]);
+                }
+
+                model('member_recharge_order')->commit();
+                return $this->success($res);
+            } catch (\Exception $e) {
+
+                model('member_recharge_order')->rollback();
+                Log::write('memberrechargeerr' . json_encode($e->getMessage() . $e->getFile() . $e->getLine()));
+                return $this->error('', $e->getMessage());
+            }
+        } else {
+            return $this->success(true);
+        }
+
+    }
+
+    /**
+     * 定时关闭订单
+     * @param $order_id
+     * @return array
+     */
+    public function cronMemberRechargeOrderClose($order_id)
+    {
+        //获取订单信息
+        $order = $this->getMemberRechargeOrderInfo([ [ 'order_id', '=', $order_id ] ], 'status');
+        $order_info = $order[ 'data' ];
+        if (empty($order_info)) {
+            $res = true;
+        } else {
+            if ($order_info[ 'status' ] == 1) {
+                //删除订单
+                $res = model('member_recharge_order')->delete([ [ 'order_id', '=', $order_id ] ]);
+                Cache::tag("member_recharge_order")->clear();
+            } else {
+                $res = true;
+            }
+        }
+        return $this->success($res);
+    }
+
+    /**
+     * 获取总数
+     * @param array $where
+     * @param string $field
+     * @param string $alias
+     * @param null $join
+     * @param null $group
+     * @return array
+     */
+    public function getOrderCount($where = [], $field = '*', $alias = 'a', $join = null, $group = null)
+    {
+        $res = model('member_recharge_order')->getCount($where, $field, $alias, $join, $group);
+        return $this->success($res);
+    }
+
+    /**
+     * 获取总和
+     * @param array $where
+     * @param string $field
+     * @param string $alias
+     * @param null $join
+     * @return array
+     */
+    public function getOrderSum($where = [], $field = '*', $alias = 'a', $join = null)
+    {
+        $res = model('member_recharge_order')->getSum($where, $field, $alias, $join);
+        return $this->success($res);
+    }
+}

+ 440 - 0
addon/memberrecharge/shop/controller/Memberrecharge0625.php

@@ -0,0 +1,440 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace addon\memberrecharge\shop\controller;
+
+use addon\memberrecharge\model\MemberRechargeCard as MemberRechargeCardModel;
+use addon\memberrecharge\model\Memberrecharge as MemberRechargeModel;
+use addon\memberrecharge\model\MemberrechargeOrder as MemberRechargeOrderModel;
+use app\shop\controller\BaseShop;
+
+/**
+ * 会员充值
+ */
+class Memberrecharge extends BaseShop
+{
+    public function __construct()
+    {
+        parent::__construct();
+        $this->replace = [
+            'MEMBERRECHARGE_CSS' => __ROOT__ . '/addon/memberrecharge/shop/view/public/css',
+            'MEMBERRECHARGE_JS' => __ROOT__ . '/addon/memberrecharge/shop/view/public/js',
+            'MEMBERRECHARGE_IMG' => __ROOT__ . '/addon/memberrecharge/shop/view/public/img',
+        ];
+    }
+
+    //套餐字段
+    protected $field = 'recharge_id,recharge_name,cover_img,face_value,buy_price,point,growth,coupon_id,sale_num,create_time,status';
+
+    //开卡字段
+    protected $card_field = 'card_id,recharge_id,card_account,cover_img,face_value,point,growth,coupon_id,buy_price,member_img,nickname,order_id,order_no,from_type,use_status,create_time,use_time';
+
+    //订单字段
+    protected $order_field = 'order_id,recharge_name,recharge_id,order_no,out_trade_no,member_id,cover_img,face_value,buy_price,point,growth,coupon_id,price,pay_type,pay_type_name,status,create_time,pay_time,member_img,nickname,order_from_name,order_from';
+
+    //优惠券字段
+    protected $coupon_field = 'coupon_type_id,coupon_name,money,count,lead_count,max_fetch,at_least,end_time,image,validity_type,fixed_term';
+
+    /**
+     * 充值会员套餐列表
+     * @return array|mixed
+     */
+    public function lists()
+    {
+        $model = new MemberRechargeModel();
+        //获取续签信息
+        if (request()->isAjax()) {
+            $status = input('status', '');//套餐状态
+            $condition = [];
+            if ($status) {
+                $condition[] = [ 'status', '=', $status ];
+            }
+            $condition[] = [ 'site_id', '=', $this->site_id ];
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $list = $model->getMemberRechargePageList($condition, $page, $page_size, 'recharge_id desc', $this->field);
+            return $list;
+        } else {
+            $config = $model->getConfig($this->site_id);
+            $config = $config[ 'data' ];
+            $this->assign("config", $config);
+            return $this->fetch('memberrecharge/lists');
+        }
+
+    }
+
+    /**
+     * 添加充值套餐
+     * @return array|mixed
+     */
+    public function add()
+    {
+        if (request()->isAjax()) {
+
+            $data = [
+                'site_id' => $this->site_id,
+                'recharge_name' => input('recharge_name', ''),//套餐名称
+                'cover_img' => input('cover_img', ''),//封面
+                'face_value' => input('face_value', ''),//面值
+                'buy_price' => input('buy_price', ''),//价格
+                'point' => input('point', ''),//赠送积分
+                'growth' => input('growth', ''),//赠送成长值
+                'coupon_id' => input('coupon_id', '')//优惠券id
+            ];
+
+            $model = new MemberRechargeModel();
+            return $model->addMemberRecharge($data);
+
+        } else {
+            return $this->fetch('memberrecharge/add');
+        }
+    }
+
+    /**
+     * 编辑充值套餐
+     * @return array|mixed
+     */
+    public function edit()
+    {
+        $rechargeModel = new MemberRechargeModel();
+
+        $recharge_id = input('recharge_id', '');
+        if (request()->isAjax()) {
+
+            $data = [
+                'recharge_name' => input('recharge_name', ''),//套餐名称
+                'cover_img' => input('cover_img', ''),//封面
+                'face_value' => input('face_value', ''),//面值
+                'buy_price' => input('buy_price', ''),//价格
+                'point' => input('point', ''),//赠送积分
+                'growth' => input('growth', ''),//赠送成长值
+                'coupon_id' => input('coupon_id', '')//优惠券id
+            ];
+
+            return $rechargeModel->editMemberRecharge(
+                [
+                    [ 'recharge_id', '=', $recharge_id ],
+                    [ 'site_id', '=', $this->site_id ]
+                ], $data);
+
+        } else {
+            //获取套餐详情
+            $recharge = $rechargeModel->getMemberRechargeInfo(
+                [
+                    [ 'recharge_id', '=', $recharge_id ],
+                    [ 'site_id', '=', $this->site_id ]
+                ],
+                $this->field
+            );
+            if (empty($recharge[ 'data' ])) $this->error('未获取到套餐数据', addon_url('memberrecharge://shop/memberrecharge/lists'));
+            $this->assign('recharge', $recharge);
+            return $this->fetch('memberrecharge/edit');
+        }
+
+    }
+
+    /**
+     * 充值套餐详情
+     * @return mixed
+     */
+    public function detail()
+    {
+        $recharge_model = new MemberRechargeModel();
+
+        $recharge_id = input('recharge_id', '');
+
+        //获取套餐详情
+        $info = $recharge_model->getMemberRechargeInfo(
+                [
+                    [ 'recharge_id', '=', $recharge_id ],
+                    [ 'site_id', '=', $this->site_id ]
+                ],
+                $this->field
+            )[ 'data' ] ?? [];
+        if (empty($info)) $this->error('未获取到套餐数据', addon_url('memberrecharge://shop/memberrecharge/lists'));
+        $this->assign('info', $info);
+
+        return $this->fetch('memberrecharge/detail');
+    }
+
+    /**
+     * 停用充值套餐
+     * @return array
+     */
+    public function invalid()
+    {
+        $model = new MemberRechargeModel();
+
+        $recharge_id = input('recharge_id', '');
+
+        $data = [ 'status' => 2 ];
+        $condition = [ [ 'recharge_id', '=', $recharge_id ] ];
+
+        $res = $model->editMemberRecharge($condition, $data);
+        return $res;
+    }
+
+    /**
+     * 开启充值套餐
+     * @return array
+     */
+    public function open()
+    {
+        $model = new MemberRechargeModel();
+
+        $recharge_id = input('recharge_id', '');
+
+        $data = [ 'status' => 1 ];
+        $condition = [ [ 'recharge_id', '=', $recharge_id ] ];
+
+        $res = $model->editMemberRecharge($condition, $data);
+        return $res;
+    }
+
+    /**
+     * 删除充值套餐
+     * @return mixed
+     */
+    public function delete()
+    {
+        $model = new MemberRechargeModel();
+
+        $recharge_id = input('recharge_id', '');
+
+        return $model->deleteMemberRecharge([ [ 'recharge_id', '=', $recharge_id ] ]);
+    }
+
+    /**
+     * 开卡列表
+     * @return array|mixed
+     */
+    public function cardLists()
+    {
+        $recharge_id = input('recharge_id', '');
+        $page_size = input('page_size', PAGE_LIST_ROWS);
+
+        $model = new MemberRechargeCardModel();
+        $condition[] = [ 'site_id', '=', $this->site_id ];
+        $condition[] = [ 'recharge_id', '=', $recharge_id ];
+        //获取续签信息
+        if (request()->isAjax()) {
+            $status = input('use_status', '');//使用状态
+            if ($status) {
+                $condition[] = [ 'use_status', '=', $status ];
+            }
+
+            $page = input('page', 1);
+            $list = $model->getMemberRechargeCardPageList($condition, $page, $page_size, 'card_id desc', $this->card_field);
+            return $list;
+        } else {
+
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+
+            $list = $model->getMemberRechargeCardPageList($condition, 1, $page_size, 'card_id desc', $this->card_field);
+            $this->assign('list', $list);
+
+            $this->assign('recharge_id', $recharge_id);
+            return $this->fetch('memberrecharge/card_lists');
+        }
+
+    }
+
+    /**
+     * 开卡详情
+     * @return mixed
+     */
+    public function cardDetail()
+    {
+        $model = new MemberRechargeCardModel();
+
+        $card_id = input('card_id', '');
+
+        //获取详情
+        $info = $model->getMemberRechargeCardInfo(
+                [ [ 'card_id', '=', $card_id ] ],
+                $this->card_field
+            )[ 'data' ] ?? [];
+        $this->assign('info', $info);
+
+        return $this->fetch('memberrecharge/card_detail');
+    }
+
+    /**
+     * 订单列表
+     * @return array|mixed
+     */
+    public function orderLists()
+    {
+        $condition[] = [ 'site_id', '=', $this->site_id ];
+        $recharge_id = input('recharge_id', 0);
+        if ($recharge_id > 0) {
+            $condition[] = [ 'recharge_id', '=', $recharge_id ];
+        }
+        $model = new MemberRechargeOrderModel();
+        //获取续签信息
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $nickname = input('nickname', '');
+            $start_time = input('start_time', '');
+            $end_time = input('end_time', '');
+            $order_no = input('order_no', '');
+
+            $condition[] = [ 'status', '=', 2 ];
+            if ($nickname) {
+                $condition[] = [ 'nickname', 'like', '%' . $nickname . '%' ];
+            }
+            if ($order_no) {
+                $condition[] = [ 'order_no', '=', $order_no ];
+            }
+            //支付时间
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ "pay_time", ">=", date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ "pay_time", "<=", date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'pay_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+            $list = $model->getMemberRechargeOrderPageList($condition, $page, $page_size, 'order_id desc', $this->order_field);
+            return $list;
+        } else {
+            $this->assign('recharge_id', $recharge_id);
+            $order_num = $model->getOrderCount([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 2 ] ], 'order_id')[ 'data' ];
+            $this->assign('order_num', $order_num);
+            $order_money = $model->getOrderSum([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 2 ] ], 'price')[ 'data' ];
+            $this->assign('order_money', $order_money);
+            return $this->fetch('memberrecharge/order_lists', [], $this->replace);
+        }
+    }
+
+    /**
+     * 订单详情
+     * @return mixed
+     */
+    public function orderDetail()
+    {
+        $model = new MemberRechargeOrderModel();
+
+        $order_id = input('order_id', '');
+
+        //获取详情
+        $info = $model->getMemberRechargeOrderInfo(
+                [
+                    [ 'order_id', '=', $order_id ],
+                    [ 'site_id', '=', $this->site_id ]
+                ],
+                $this->order_field
+            )[ 'data' ] ?? [];
+        if (empty($info)) $this->error('未获取到订单数据', addon_url('memberrecharge://shop/memberrecharge/order_lists'));
+        $this->assign('info', $info);
+
+        return $this->fetch('memberrecharge/order_detail');
+    }
+
+    /**
+     * 是否开启充值
+     * @return mixed
+     */
+    public function setConfig()
+    {
+        $model = new MemberRechargeModel();
+        $is_use = input('is_use', 0);
+        $data = [];
+        return $model->setConfig($data, $is_use, $this->site_id);
+    }
+
+    public function exportRecharge()
+    {
+        $recharge_id = input("recharge_id", "");//订单状态
+
+        $condition[] = [ "recharge_id", "=", $recharge_id ];
+        $model = new MemberRechargeCardModel();
+
+        $list = $model->getMemberRechargeCardPageList($condition, 1, 0, 'card_id desc', "*");
+        if (empty($list[ 'data' ][ 'list' ])) {
+            return $this->error("未查询到数据");
+        }
+
+        // 实例化excel
+        $phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
+
+        $phpExcel->getProperties()->setTitle("充值记录");
+        $phpExcel->getProperties()->setSubject("充值记录");
+        // 对单元格设置居中效果
+        $phpExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('J')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('K')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('L')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
+        //单独添加列名称
+        $phpExcel->setActiveSheetIndex(0);
+        $phpExcel->getActiveSheet()->setCellValue('A1', '店铺名称');//可以指定位置
+        $phpExcel->getActiveSheet()->setCellValue('B1', '充值卡号');
+        $phpExcel->getActiveSheet()->setCellValue('C1', '套餐名称');
+        $phpExcel->getActiveSheet()->setCellValue('D1', '面值');
+        $phpExcel->getActiveSheet()->setCellValue('E1', '积分');
+        $phpExcel->getActiveSheet()->setCellValue('F1', '成长值');
+        $phpExcel->getActiveSheet()->setCellValue('G1', '购买金额');
+        $phpExcel->getActiveSheet()->setCellValue('H1', '会员昵称');
+        $phpExcel->getActiveSheet()->setCellValue('I1', '订单编号');
+        $phpExcel->getActiveSheet()->setCellValue('J1', '使用状态');
+        $phpExcel->getActiveSheet()->setCellValue('K1', '创建时间');
+        $phpExcel->getActiveSheet()->setCellValue('L1', '使用时间');
+        //循环添加数据(根据自己的逻辑)
+        foreach ($list[ 'data' ][ 'list' ] as $k => $v) {
+            $i = $k + 2;
+            if ($v[ 'use_status' ] == 1) {
+                $status_name = "未使用";
+            } else {
+                $status_name = "已使用";
+            }
+
+            $phpExcel->getActiveSheet()->setCellValue('A' . $i, $v[ 'site_name' ]);
+            $phpExcel->getActiveSheet()->setCellValue('B' . $i, $v[ 'card_account' ]);
+            $phpExcel->getActiveSheet()->setCellValue('C' . $i, $v[ 'recharge_name' ]);
+            $phpExcel->getActiveSheet()->setCellValue('D' . $i, $v[ 'face_value' ]);
+            $phpExcel->getActiveSheet()->setCellValue('E' . $i, $v[ 'point' ]);
+            $phpExcel->getActiveSheet()->setCellValue('F' . $i, $v[ 'growth' ]);
+            $phpExcel->getActiveSheet()->setCellValue('G' . $i, $v[ 'buy_price' ]);
+            $phpExcel->getActiveSheet()->setCellValue('H' . $i, $v[ 'nickname' ]);
+            $phpExcel->getActiveSheet()->setCellValue('I' . $i, ' ' . (string) $v[ 'order_no' ]);
+            $phpExcel->getActiveSheet()->setCellValue('J' . $i, $status_name);
+            $phpExcel->getActiveSheet()->setCellValue('K' . $i, date('Y-m-d', $v[ 'create_time' ]));
+            $phpExcel->getActiveSheet()->setCellValue('L' . $i, date('Y-m-d', $v[ 'use_time' ]));
+        }
+
+        // 重命名工作sheet
+        $phpExcel->getActiveSheet()->setTitle('充值记录');
+        // 设置第一个sheet为工作的sheet
+        $phpExcel->setActiveSheetIndex(0);
+        // 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
+        $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
+        $file = date('Y年m月d日-充值记录表', time()) . '.xlsx';
+        $objWriter->save($file);
+
+        header("Content-type:application/octet-stream");
+
+        $filename = basename($file);
+        header("Content-Disposition:attachment;filename = " . $filename);
+        header("Accept-ranges:bytes");
+        header("Accept-length:" . filesize($file));
+        readfile($file);
+        unlink($file);
+        exit;
+    }
+
+}

+ 305 - 0
addon/memberrecharge/shop/view/memberrecharge/order_lists0625.html

@@ -0,0 +1,305 @@
+{extend name="app/shop/view/base.html"/}
+{block name="resources"}
+<link rel="stylesheet" href="MEMBERRECHARGE_CSS/order_list.css"/>
+{/block}
+{block name="main"}
+<div class="layui-card card-common card-brief">
+	<div class="layui-card-header">
+		<div>
+			<span class="card-title">充值概况</span>
+		</div>
+	</div>
+	<div class="layui-card-body">
+		<div class="content">
+			<p class="title">累计充值金额</p>
+			<p class="money">{$order_money}</p>
+		</div>
+		<div class="content">
+			<p class="title">累计充值次数</p>
+			<p class="money">{$order_num}</p>
+		</div>
+	</div>
+</div>
+
+<div class="screen layui-collapse" lay-filter="selection_panel">
+	<div class="layui-colla-item">
+		<form class="layui-form layui-colla-content layui-form layui-show"  lay-filter="order_list" action="javascript:;">
+			<div class="layui-form-item">
+				<div class="layui-inline">
+					<label class="layui-form-label">订单号</label>
+					<div class="layui-input-inline">
+						<input type="text" class="layui-input" name="order_no">
+					</div>
+				</div>
+
+				<div class="layui-inline">
+					<label class="layui-form-label">客户昵称</label>
+					<div class="layui-input-inline">
+						<input type="text" class="layui-input" name="nickname">
+					</div>
+				</div>
+			</div>
+
+			<div class="layui-form-item">
+				<div class="layui-inline">
+					<label class="layui-form-label">支付时间</label>
+					<div class="layui-input-inline">
+						<input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time" readonly>
+						<i class=" iconrili iconfont calendar"></i>
+					</div>
+					<div class="layui-form-mid">-</div>
+					<div class="layui-input-inline">
+						<input type="text" class="layui-input" name="end_time" placeholder="结束时间" id="end_time" readonly>
+						<i class=" iconrili iconfont calendar"></i>
+					</div>
+					<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(7, this);return false;">近7天</button>
+					<button class="layui-btn layui-btn-primary date-picker-btn" onclick="datePick(30, this);return false;">近30天</button>
+				</div>
+			</div>
+
+			<div class="form-row">
+				<button class="layui-btn" lay-submit lay-filter="search">筛选</button>
+				<button type="reset" class="layui-btn layui-btn-primary">重置</button>
+			</div>
+		</form>
+	</div>
+</div>
+
+<div class="layui-tab table-tab " lay-filter="order_tab">
+	<div class="layui-tab-content">
+		<div id="order_list"></div>
+	</div>
+	<div id="order_page"></div>
+</div>
+{/block}
+
+{block name="script"}
+<script src="MEMBERRECHARGE_JS/order_list.js"></script>
+<script>
+
+	var form,laypage,element,laydate;
+	var is_refresh = false;
+
+	layui.use(['laypage','laydate','form', 'element'], function(){
+		form = layui.form;
+		laypage = layui.laypage;
+		element = layui.element;
+		laydate = layui.laydate;
+		form.render();
+
+		// 支付时间
+		laydate.render({
+			elem: '#start_time'
+			,type: 'datetime'
+			,change: function(value, date, endDate){
+				$(".date-picker-btn").removeClass("selected");
+			}
+		});
+		laydate.render({
+			elem: '#end_time'
+			,type: 'datetime'
+			,change: function(value, date, endDate){
+				$(".date-picker-btn").removeClass("selected");
+			}
+		});
+
+		//监听Tab切换,以改变地址hash值
+		element.on('tab(order_tab)', function(){
+			$(".all-selected-checkbox input").prop("checked",false);
+			var hash_data = getHashList();
+			hash_data.page = 1;
+			setHashOrderList(hash_data);
+		});
+		//监听筛选事件
+		form.on('submit(search)', function(data){
+			is_refresh = true;
+			data.field.page = 1;
+			setHashOrderList(data.field);
+			return false;
+		});
+		getHashData();
+		getOrderList();//筛选
+	});
+
+	function setHashOrderList(data){
+		var hash = "";
+		$.each(data,function(index, itemobj){
+			if(itemobj != "" && itemobj != "all"){
+				if(hash == ""){
+					hash += "#!"+index +"="+itemobj;
+				}else{
+					hash += "&"+index +"="+itemobj;
+				}
+			}
+		});
+		hash_url = hash;
+		location.hash = hash;
+		getOrderList();
+	}
+
+	var order = new Order();
+	function getOrderList(){
+		var url = ns.url("memberrecharge://shop/memberrecharge/orderlists", ns.urlReplace(location.hash.replace('#!', '')));
+		$.ajax({
+			type : 'get',
+			dataType: 'json',
+			url :url,
+			success : function(res){
+				if(res.code == 0){
+					// setOrderInfo(res.data.list);
+					order.setData(res.data);
+					$("#order_list").html(order.fetch());
+					form.render();
+
+					laypage_util = new Page({
+						elem: 'order_page',
+						count: res.data.count,
+						curr: getHashPage(),
+						limit:getHashData()['page_size'] || 10,
+						callback: function(obj){
+							var hash_data = getHashData();
+							hash_data.page = obj.curr;
+							hash_data.page_size = obj.limit;
+							setHashOrderList(hash_data);
+						}
+					});
+
+				}else{
+					layer.msg(res.message);
+				}
+			}
+		});
+	}
+
+	/**
+	 *通过hash获取页数
+	 */
+	function getHashPage(){
+		var page = 1;
+		var hash = location.hash;
+		var startTime = '';
+		var endTime = '';
+
+		var hash_arr = hash.substr(2).split("&");
+		$.each(hash_arr,function(index, itemobj){
+			var item_arr = itemobj.split("=");
+			if(item_arr.length == 2){
+				switch(item_arr[0]){
+					case "page":
+						page = item_arr[1];
+						break;
+					case "start_time":
+						startTime = ns.date_to_time(item_arr[1].split("%")[0]);
+						break;
+					case "end_time":
+						endTime = ns.date_to_time(item_arr[1].split("%")[0]);
+						break;
+				}
+			}
+		});
+
+		var _time = (endTime - startTime) / (24 * 60 * 60);
+		if (_time == 6) {
+			$(".date-picker-btn-seven").addClass("selected");
+			$(".date-picker-btn-thirty").removeClass("selected");
+		} else if (_time == 29) {
+			$(".date-picker-btn-thirty").addClass("selected");
+			$(".date-picker-btn-seven").removeClass("selected");
+		} else {
+			$(".date-picker-btn-seven").removeClass("selected");
+			$(".date-picker-btn-thirty").removeClass("selected");
+		}
+		return page;
+	}
+
+	//从hash中获取数据
+	function getHashData(){
+		var hash = ns.urlReplace(location.hash);
+
+		var hash_arr = hash.substr(2).split("&");
+		var form_json = {
+			"start_time" : "",
+			"end_time" : "",
+			"nickname" : "",
+			"order_no" : "",
+			'page_size':'',
+			"page" : ""
+		};
+		if(hash_arr.length > 0){
+			$.each(hash_arr,function(index, itemobj){
+				var item_arr = itemobj.split("=");
+				if(item_arr.length == 2){
+					$.each(form_json,function(key, form_val){
+						if(item_arr[0] == key){
+							form_json[key] = item_arr[1];
+						}
+					})
+				}
+			})
+		}
+
+		return form_json;
+	}
+	function getHashList(){
+		var hash = ns.urlReplace(location.hash);
+		var data= [];
+		var hash_arr = hash.split("&");
+
+		var form_json = {
+			"start_time" : "",
+			"end_time" : "",
+			"nickname" : "",
+			"order_no" : "",
+			'page_size':'',
+			"page" : ""
+		};
+		if(hash_arr.length > 0){
+			$.each(hash_arr,function(index, itemobj){
+				var item_arr = itemobj.split("=");
+				if(item_arr.length == 2){
+					$.each(form_json,function(key, form_val){
+						if(item_arr[0].indexOf(key) != "-1"){
+							form_json[key] = item_arr[1];
+						}
+					})
+				}
+			})
+		}
+
+		return form_json;
+	}
+
+	/**
+	 * 七天时间
+	 */
+	function datePick(date_num,event_obj){
+		$(".date-picker-btn").removeClass("selected");
+		$(event_obj).addClass('selected');
+		var now_date = new Date();
+
+		Date.prototype.Format = function (fmt,date_num) { //author: meizz
+			this.setDate(this.getDate()-date_num);
+			var o = {
+				"M+": this.getMonth() + 1, //月份
+				"d+": this.getDate(), //日
+				"H+": this.getHours(), //小时
+				"m+": this.getMinutes(), //分
+				"s+": this.getSeconds(), //秒
+				"q+": Math.floor((this.getMonth() + 3) / 3), //季度
+				"S": this.getMilliseconds() //毫秒
+			};
+			if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
+			for (var k in o)
+				if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
+			return fmt;
+		};
+		// var now_time =  new Date().Format("yyyy-MM-dd HH:mm:ss",0);//当前日期
+		var now_time =  new Date().Format("yyyy-MM-dd 23:59:59",0);//当前日期
+		var before_time =  new Date().Format("yyyy-MM-dd 00:00:00",date_num-1);//前几天日期
+		$("input[name=start_time]").val(before_time,0);
+		$("input[name=end_time]").val(now_time,date_num-1);
+
+	}
+
+</script>
+{/block}

+ 256 - 0
addon/memberrecharge/shop/view/public/js/order_list0625.js

@@ -0,0 +1,256 @@
+/**
+ * 渲染订单列表
+ */
+Order = function () {};
+
+/**
+ * 设置数据集
+ */
+Order.prototype.setData = function (data) {
+	Order.prototype.data = data;
+};
+
+/**
+ * 列名数据
+ */
+Order.prototype.cols = [
+	{
+		type: 'checkbox',
+		fixed: 'left',
+		width: '3%',
+		merge: true,
+		template: function (orderitem, order) {
+			var json = {}
+			json.order_id = order.order_id;
+			json.order_no = order.order_no;
+			var h = '<div class="sub-selected-checkbox" data-json='+ JSON.stringify(json) +' data-id='+ order.order_id +' >';
+			h += '<input type="checkbox" lay-skin="primary" lay-filter="subCheckbox" name="" >';
+			h += '</div>';
+			return h;
+		}
+	},
+	{
+		title: '<span>套餐信息</span>',
+		width: "25%",
+		className: "card-info",
+		template: function (orderitem, order) {
+			var h = '';
+			h += '<div class="order-goods">';
+				// h += '<div class="img-block">';
+				// 	h += '<img layer-src="' + ns.img(orderitem.cover_img.split(",")[0]) + '" src="' + ns.img(orderitem.cover_img.split(",")[0]) + '">';
+				// h += '</div>';
+				h += '<div class="info">';
+					h += '<div>'+orderitem.recharge_name+'</div>';
+				h += '</div>';
+			h += '</div>';
+			
+			return h;
+		}
+	},
+	{
+		title: "面值(元) / 数量",
+		width: "8%",
+		align: "right",
+		className: "order-price",
+		template: function (orderitem, order) {
+			var h = '<div style="padding-right: 15px;">';
+			h += '<div>';
+			h += '<span>面值' + orderitem.face_value + '</span>';
+			h += '</div>';
+			h += '<div>';
+			h += '<span>1件</span>';
+			h += '</div>';
+			h += '</div>';
+			return h;
+		}
+	},
+	{
+		title: "赠送礼包",
+		width: "15%",
+		align: "left",
+		className: "give_gift",
+		template: function (orderitem, order) {
+			var h = '';
+			h += '<div class="order-goods">';
+			h += '<div class="info">';
+			h += '<div>积分:'+orderitem.point+'</div>';
+			h += '<div>成长值:'+orderitem.growth+'</div>';
+			h += '</div>';
+			h += '</div>';
+
+			return h;
+		}
+	},
+	{
+		title: "实付金额(元)",
+		width: "8%",
+		align: "right",
+		className: "order-money",
+		merge: true,
+		template: function (orderitem, order) {
+			var h = '<div style="padding-right: 15px;">';
+			h += '<span>' + orderitem.price + '</span>';
+			h += '</div>';
+			return h;
+		}
+	},
+	{
+		title: "买家",
+		width: "10%",
+		align: "center",
+		className: "member",
+		template: function (orderitem, order) {
+			var h = '<div style="text-align: center;">';
+				h += '<a href="' + ns.url("shop/member/editmember", {member_id: orderitem.member_id}) + '" target="_blank" class="multi-line-hiding text-color-sub text-color">' +orderitem.nickname + '</a>';
+				h += '';
+			h += '</div>';
+			return h;
+		}
+	},
+
+	{
+		title: "支付状态",
+		width: "10%",
+		align: "center",
+		className: "transaction-status",
+		merge: true,
+		template: function (orderitem, order) {
+			var html = '<div>' + (order.status == 2 ? '已支付' : '未支付') + '</div>';
+			return html;
+		}
+	},
+	{
+	    title : "支付时间",
+	    width : "15%",
+	    align : "center",
+	    className : "create-time",
+	    merge : true,
+	    template : function(orderitem,order){
+	        return '<div>' + ns.time_to_date(order.pay_time) + '</div>';
+	    }
+	},
+	{
+		title: "操作",
+		align: "right",
+		className: "operation",
+		width:"11%",
+		merge: true,
+		template: function (orderitem, order) {
+			var html='';
+			html += '<div>';
+				html += '<a class="layui-btn  text-color" href="'+ns.url("memberrecharge://shop/memberrecharge/orderdetail", {order_id: orderitem.order_id}) +'">详情</a>';
+			html += '</div>';
+			return html;
+		}
+	}
+];
+/**
+ * 渲染表头
+ */
+Order.prototype.header = function (hasThead) {
+	var colgroup = '<colgroup>';
+	var thead = '';
+	if (hasThead) thead = '<thead><tr>';
+	
+	for (var i = 0; i < this.cols.length; i++) {
+		var align = this.cols[i].align ? "text-align:" + this.cols[i].align : "";
+		
+		colgroup += '<col width="' + this.cols[i].width + '">';
+		if (hasThead) {
+			thead += '<th style="' + align + '" class="' + (this.cols[i].className || "") + '">';
+			thead += '<div class="layui-table-cell">';
+			if(this.cols[i].type){
+				thead += '<div class="all-selected-checkbox">';
+				thead += '<input type="checkbox" lay-skin="primary" lay-filter="allCheckbox" name="">';
+				thead += '</div>';
+			}else{
+				thead +=  this.cols[i].title;
+			}
+			thead += '</div>';
+			thead += '</th>';
+		}
+	}
+	colgroup += '</colgroup>';
+	if (hasThead) thead += '</tr></thead>';
+	return colgroup + thead;
+};
+
+/**
+ * 渲染内容
+ */
+Order.prototype.tbody = function () {
+
+	var tbody = '<tbody>';
+	for (var i = 0; i < this.data.list.length; i++) {
+
+		var order = this.data.list[i];
+		if (i > 0) {
+			//分割行
+			tbody += '<tr class="separation-row">';
+			tbody += '<td colspan="' + this.cols.length + '"></td>';
+			tbody += '</tr>';
+		}
+
+		//订单项头部
+		tbody += '<tr class="header-row">';
+		tbody += '<td colspan="9">';
+		tbody += '<span class="order-item-header" style="margin-right:10px;">订单号:' + order.order_no + '</span>';
+		tbody += '<span class="order-item-header text-color more" style="margin-right:50px;" onclick="showMore(' + order.order_id + ')">更多';
+		tbody += '<div class="more-operation" data-order-id="' + order.order_id + '">';
+			tbody += '<span>支付流水号:' + order.out_trade_no + '</span>';
+		tbody += '</div></span>';
+
+		tbody += '<span class="order-item-header" style="margin-right:50px;">下单时间:' + ns.time_to_date(order.create_time) + '</span>';
+		tbody += '<span class="order-item-header" style="margin-right:50px;">订单来源:'+ order.order_from_name +'</span>';
+		tbody += '<span class="order-item-header" style="margin-right:50px;">支付方式:'+ order.pay_type_name +'</span>';
+
+		tbody += '</td>';
+		tbody += '</tr>';
+
+		var orderitemHtml = '';
+		loadImgMagnify();
+		orderitemHtml += '<tr class="content-row">';
+		for (var k = 0; k < this.cols.length; k++) {
+			orderitemHtml += '<td class="' + (this.cols[k].className || "") + '" align="' + (this.cols[k].align || "") + '" style="' + (this.cols[k].style || "") + '" rowspan="' + order.length + '">';
+			orderitemHtml += this.cols[k].template(order, order);
+			orderitemHtml += '</td>';
+		}
+		orderitemHtml += '</tr>';
+
+		tbody += orderitemHtml;
+
+	}
+
+	tbody += '</tbody>';
+	return tbody;
+};
+
+/**
+ * 渲染表格
+ */
+Order.prototype.fetch = function () {
+	if (this.data.list.length > 0) {
+		return '<table class="layui-table layui-form">' + this.header(true) + '</table><table class="layui-table order-list-table layui-form">' + this.header(false) + this.tbody() + '</table>';
+	} else {
+		return '<table class="layui-table order-list-table layui-form">' + this.header(true) + '</table>' + '<div class="order-no-data-block"><ul><li><i class="layui-icon layui-icon-tabs"></i> </li><li>暂无订单</li></ul></div>';
+	}
+};
+
+function showMore(order_id) {
+	$(".more-operation[data-order-id]").hide();
+	$(".more-operation[data-order-id='" + order_id + "']").show();
+	$("body").click(function (e) {
+		if (!$(e.target).closest(".order-item-header.more").length) {
+			$(".more-operation[data-order-id='" + order_id + "']").hide();
+		}
+	});
+}
+$(".layui-colla-title").on("click", function(){
+    if($(".layui-colla-title>i").hasClass("layui-icon-down") === false && $(".layui-colla-title>i").hasClass("layui-icon-up") === false){
+        $(".layui-colla-title .put-open").html("展开");
+    }else if($(".layui-colla-title>i").hasClass("layui-icon-down") === true){
+        $(".layui-colla-title .put-open").html("展开");
+    }else if($(".layui-colla-title>i").hasClass("layui-icon-up") === true){
+        $(".layui-colla-title .put-open").html("收起");
+    }
+})

+ 1 - 2
addon/stock/storeapi/controller/Manage.php

@@ -60,8 +60,7 @@ class Manage extends BaseStoreApi
         $join = array (
             [ 'goods g', 'g.goods_id = gs.goods_id', 'left' ],
         );
-//        $condition[] = [ 'g.sale_store', '%like%', [',11,']];
-//        $condition[] = [ 'g.sale_store', 'like', '%,'.$store_id.',%' ];
+        // dump($store_id);
         if ($store_id > 0) {
             $join[] = [
                 'store_goods_sku sgs',

+ 49 - 27
addon/store/shop/controller/Stat.php

@@ -31,12 +31,18 @@ class Stat extends BaseShop
         $user_id = $user_info['uid'];
         $uwhere['uid'] = $user_id;
         $UgObj = new UserGroup();
+        
+        $where = [] ;
+        $where[]=[ 'site_id', '=', $this->site_id ];
+        if(!$user_info['is_admin']){
+             $user_store_list =$UgObj->getUserList($uwhere,'uid,store_id');
+             $store_id_arr = array_column($user_store_list['data'],'store_id');
+             $where[]=['store_id','in',$store_id_arr] ;
+        }
+            
+      
 
-        $user_store_list =$UgObj->getUserList($uwhere,'uid,store_id');
-
-        $store_id_arr = array_column($user_store_list['data'],'store_id');
-
-        $store_list = ( new StoreModel() )->getStoreList([ [ 'site_id', '=', $this->site_id ],['store_id','in',$store_id_arr] ], 'store_id,store_name');
+        $store_list = ( new StoreModel() )->getStoreList($where, 'store_id,store_name');
         $this->assign('store_list', $store_list[ 'data' ]);
         $this->assign('today', Carbon::today()->toDateString());
         $this->assign('yesterday', Carbon::yesterday()->toDateString());
@@ -57,7 +63,6 @@ class Stat extends BaseShop
                 $start_time = input('end_time');
                 $end_time = input('start_time');
             }
-
             $store_id_arr = [];
             $userGroupModel = new UserGroup();
             $userInfo = $this->user_info;
@@ -68,15 +73,7 @@ class Stat extends BaseShop
                 $userGroupList = $userGroupModel->getUserList($userGroupWhere,'uid,store_id');
                 $store_id_arr = array_column($userGroupList['data'],'store_id');
             }
-
-//            $user_info = $this->user_info;
-//            $user_id = $user_info['uid'];
-//            $uwhere['uid'] = $user_id;
-//            $UgObj = new UserGroup();
-//
-//            $user_store_list =$UgObj->getUserList($uwhere,'uid,store_id');
-//
-//            $store_id_arr = array_column($user_store_list['data'],'store_id');
+            
             $stat_model = new StatModel();
 
             $data = $stat_model->getShopStatSum($this->site_id, $start_time, $end_time, $store_id,$store_id_arr);
@@ -98,6 +95,7 @@ class Stat extends BaseShop
                 $start_time = input('end_time');
                 $end_time = input('start_time');
             }
+            
             if($store_id==0){
                 $store_id_arr = [];
                 $userGroupModel = new UserGroup();
@@ -109,29 +107,53 @@ class Stat extends BaseShop
                     $store_id = $store_id_arr;
                 }
             }
+            
             $stat_model = new StatModel();
             $fields = $stat_model->getStatField();
             $fields[] = 'expected_earnings_total_money';
 
             $stat_list = $stat_model->getShopStatList($this->site_id, $start_time, $end_time, $store_id)[ 'data' ];
-            $stat_list = array_map(function($item) {
-                $item[ 'day_time' ] = date('Y-m-d', $item[ 'day_time' ]);
-                return $item;
-            }, $stat_list);
-            $stat_list = array_column($stat_list, null, 'day_time');
+            $stat_lists = [];
+            foreach($stat_list as $slv){
+                $slsk = $slv['day'];
+                unset($slv['day']);
+                $stat_lists[$slsk] = $slv;
+            }
+//            dump($stat_lists);die;
+            // $array_key = array_keys($stat_list[0]);
+            //  return success(0, '', $stat_list);
+             
+            // $stat_list = array_map(function($item) {
+            //     $item[ 'day_time' ] = date('Y-m-d', $item[ 'day_time' ]);
+            //     return $item;
+            // }, $stat_list);
+            // $stat_list = array_column($stat_list, null, 'day_time');
 
             $day = ceil(( $end_time - $start_time ) / 86400);
 
+            $time = [];
+            for ($i = 0; $i < $day; $i++) {
+                $date = date('Y-m-d', $start_time + $i * 86400);
+                $time[] = $date;
+                $day = date('d', $start_time + $i * 86400);
+                dump($day);
+            }die;
+            $data[ 'time' ] = $time;
+            // return success(0, '', $data);
             foreach ($fields as $field) {
                 $value = [];
-                $time = [];
-                for ($i = 0; $i < $day; $i++) {
-                    $date = date('Y-m-d', $start_time + $i * 86400);
-                    $time[] = $date;
-                    $value[] = isset($stat_list[ $date ]) ? $stat_list[ $date ][ $field ] : 0;
-                }
+                // $time = [];
+                // for ($i = 0; $i < $day; $i++) {
+                //     $date = date('Y-m-d', $start_time + $i * 86400);
+                //     $time[] = $date;
+                //     $value[] = isset($stat_list[ $date ]) ? $stat_list[ $date ][ $field ] : 0;
+                // }
+                $value = array_column($stat_list,$field);
+                // foreach ($stat_list as &$slv){
+                //   if()
+                // }
                 $data[ $field ] = $value;
-                $data[ 'time' ] = $time;
+                // $data[ 'time' ] = $time;
             }
             return success(0, '', $data);
         }

+ 161 - 0
addon/store/shop/controller/Stat0626.php

@@ -0,0 +1,161 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
+ * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
+ * =========================================================
+ */
+
+namespace addon\store\shop\controller;
+
+use app\model\store\Stat as StatModel;
+use app\model\store\Store as StoreModel;
+use app\shop\controller\BaseShop;
+use app\model\system\UserGroup;
+use Carbon\Carbon;
+use think\validate\ValidateRule;
+
+
+
+class Stat extends BaseShop
+{
+    /**
+     * 门店统计数据
+     */
+    public function store()
+    {
+
+        $user_info = $this->user_info;
+        $user_id = $user_info['uid'];
+        $uwhere['uid'] = $user_id;
+        $UgObj = new UserGroup();
+
+        $user_store_list =$UgObj->getUserList($uwhere,'uid,store_id');
+
+        $store_id_arr = array_column($user_store_list['data'],'store_id');
+
+        $store_list = ( new StoreModel() )->getStoreList([ [ 'site_id', '=', $this->site_id ],['store_id','in',$store_id_arr] ], 'store_id,store_name');
+        
+        // $store_list = ( new StoreModel() )->getStoreList([ [ 'site_id', '=', $this->site_id ] ], 'store_id,store_name');
+        $this->assign('store_list', $store_list[ 'data' ]);
+        $this->assign('today', Carbon::today()->toDateString());
+        $this->assign('yesterday', Carbon::yesterday()->toDateString());
+        return $this->fetch('stat/store');
+    }
+
+    /**
+     * 统计数据总和
+     */
+    public function statTotal()
+    {
+        if (request()->isAjax()) {
+            $store_id = input('store_id', 0);
+            $start_time = $end_time = input('start_time', strtotime(date('Y-m-d', time())));
+            $end_time = input('end_time', time());
+
+            if ($start_time > $end_time) {
+                $start_time = input('end_time');
+                $end_time = input('start_time');
+            }
+            
+            $user_info = $this->user_info;
+            $user_id = $user_info['uid'];
+            $uwhere['uid'] = $user_id;
+            $UgObj = new UserGroup();
+
+            $user_store_list =$UgObj->getUserList($uwhere,'uid,store_id');
+
+            $store_id_arr = array_column($user_store_list['data'],'store_id');
+            $stat_model = new StatModel();
+
+
+            $data = $stat_model->getShopStatSum($this->site_id, $start_time, $end_time, $store_id,$store_id_arr);
+            
+            return $data;
+        }
+    }
+
+    /**
+     * 获取天统计趋势数据
+     */
+    public function dayStatData()
+    {
+        if (request()->isAjax()) {
+            $store_id = input('store_id', 0);
+            $start_time = input('start_time', strtotime(date('Y-m-d', strtotime('-6 day'))));
+            $end_time = input('end_time', time());
+
+            if ($start_time > $end_time) {
+                $start_time = input('end_time');
+                $end_time = input('start_time');
+            }
+
+            $stat_model = new StatModel();
+            $fields = $stat_model->getStatField();
+            $fields[] = 'expected_earnings_total_money';
+
+            $stat_list = $stat_model->getShopStatList($this->site_id, $start_time, $end_time, $store_id)[ 'data' ];
+            $stat_list = array_map(function($item) {
+                $item[ 'day_time' ] = date('Y-m-d', $item[ 'day_time' ]);
+                return $item;
+            }, $stat_list);
+            $stat_list = array_column($stat_list, null, 'day_time');
+
+            $day = ceil(( $end_time - $start_time ) / 86400);
+
+            foreach ($fields as $field) {
+                $value = [];
+                $time = [];
+                for ($i = 0; $i < $day; $i++) {
+                    $date = date('Y-m-d', $start_time + $i * 86400);
+                    $time[] = $date;
+                    $value[] = isset($stat_list[ $date ]) ? $stat_list[ $date ][ $field ] : 0;
+                }
+                $data[ $field ] = $value;
+                $data[ 'time' ] = $time;
+            }
+            return success(0, '', $data);
+        }
+    }
+
+    /**
+     * 获取小时统计趋势数据
+     */
+    public function hourStatData()
+    {
+        if (request()->isAjax()) {
+            $time = input('start_time', time());
+            $store_id = input('store_id', 0);
+            $carbon = Carbon::createFromTimestamp($time);
+
+            $stat_model = new StatModel();
+            $fields = $stat_model->getStatHourField();
+            $fields[] = 'expected_earnings_total_money';
+
+            $stat_list = $stat_model->getShopStatHourList($this->site_id, $carbon->year, $carbon->month, $carbon->day, $store_id)[ 'data' ];
+
+            $data = [];
+            $empty = array_map(function() { return 0; }, range(0, 23, 1));
+            if (!empty($stat_list)) {
+                $stat_list = array_column($stat_list, null, 'hour');
+                foreach ($fields as $field) {
+                    $value = [];
+                    for ($i = 0; $i < 24; $i++) {
+                        $value[ $i ] = isset($stat_list[ $i ]) ? $stat_list[ $i ][ $field ] : 0;
+                    }
+                    $data[ $field ] = $value;
+                }
+            } else {
+                foreach ($fields as $field) {
+                    $data[ $field ] = $empty;
+                }
+            }
+            $data[ 'time' ] = array_map(function($value) { return $value . '时'; }, range(0, 23, 1));
+            return success(0, '', $data);
+        }
+    }
+}

+ 830 - 0
addon/store/shop/controller/Store_bak.php

@@ -0,0 +1,830 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace addon\store\shop\controller;
+
+use addon\store\model\Category;
+use addon\store\model\Label;
+use addon\store\model\StoreWithdraw;
+use app\model\express\Config as ExpressConfig;
+use app\model\express\ExpressDeliver;
+use app\model\express\Local as LocalModel;
+use app\model\order\Order;
+use app\model\store\Store as StoreModel;
+use app\model\system\Address as AddressModel;
+use app\model\system\User;
+use app\model\web\Config as ConfigModel;
+use app\model\web\Config as WebConfig;
+use app\shop\controller\BaseShop;
+use addon\store\model\Config as StoreConfig;
+
+/**
+ * 门店
+ * Class Store
+ * @package app\shop\controller
+ */
+class Store extends BaseShop
+{
+    /**
+     * 门店首页
+     */
+    public function index()
+    {
+        if (request()->isAjax()) {
+            $store_model = new StoreModel();
+            $order_model = new Order();
+            $withdrawal_model = new StoreWithdraw();
+            $data = [
+                'store_num' => $store_model->getStoreCount([ [ 'site_id', '=', $this->site_id ] ])[ 'data' ],
+                'in_business_num' => $store_model->getStoreCount([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ])[ 'data' ],
+                'total_order_num' => $order_model->getOrderCount([ [ 'site_id', '=', $this->site_id ], [ 'store_id', '>', 0 ], [ 'is_delete', '=', 0 ], [ 'pay_status', '=', 1 ] ])[ 'data' ],
+                'total_order_money' => $order_model->getOrderMoneySum([ [ 'site_id', '=', $this->site_id ], [ 'store_id', '>', 0 ], [ 'is_delete', '=', 0 ], [ 'pay_status', '=', 1 ] ])[ 'data' ],
+                'account_apply' => $store_model->getStoreSum([ [ 'site_id', '=', $this->site_id ] ], 'account_apply')[ 'data' ],
+                'wait_audit_num' => $withdrawal_model->getStoreWithdrawCount([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 0 ] ])[ 'data' ],
+                'wait_audit_money' => $withdrawal_model->getStoreWithdrawSum([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 0 ] ], 'money')[ 'data' ],
+                'wait_transfer_num' => $withdrawal_model->getStoreWithdrawCount([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ])[ 'data' ],
+                'wait_transfer_money' => $withdrawal_model->getStoreWithdrawSum([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], 'money')[ 'data' ],
+            ];
+            return $store_model->success($data);
+        }
+        return $this->fetch("store/index");
+    }
+
+    /**
+     * 门店排行
+     */
+    public function storeRanking()
+    {
+        if (request()->isAjax()) {
+            $order = input('order', 'num');
+            $stat_model = new \addon\store\model\Stat();
+            $data = $stat_model->getStoreOrderRank([
+                'site_id' => $this->site_id,
+                'order' => $order,
+            ]);
+            return $data;
+        }
+    }
+
+    /**
+     * 商品排行
+     */
+    public function goodsRanking()
+    {
+        if (request()->isAjax()) {
+            $order_model = new Order();
+            $order = input('order', 'num');
+            $condition = [
+                [ 'og.site_id', '=', $this->site_id ],
+                [ 'og.store_id', '>', 0 ],
+                [ 'o.pay_status', '=', 1 ],
+                [ 'o.is_delete', '=', 0 ]
+            ];
+            $join = [
+                [ 'order o', 'o.order_id = og.order_id', 'inner' ],
+                [ 'store s', 's.store_id = o.store_id', 'inner' ]
+            ];
+            $order = $order == 'num' ? 'goods_num desc' : 'goods_money desc';
+            $res = $order_model->getOrderGoodsList($condition, 'sum(og.num) as goods_num, sum(o.goods_money) as goods_money,og.goods_name', $order, 5, 'og.goods_id', 'og', $join);
+            return $res;
+        }
+    }
+
+    /**
+     * 门店列表
+     * @return mixed
+     */
+    public function lists()
+    {
+        if (request()->isAjax()) {
+            $store_model = new StoreModel();
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+//            $order       = input("order", "create_time desc");
+            $keyword = input("search_text", '');
+            $status = input("status", '');
+            $type = input("type", '');
+
+            $condition = [];
+            if ($type == 1) {
+                if ($status != null) {
+                    $condition[] = [ 'status', '=', $status ];
+                    $condition[] = [ 'is_frozen', '=', 0 ];
+                }
+            } else if ($type == 2) {
+                $condition[] = [ 'is_frozen', '=', $status ];
+            }
+            $condition[] = [ 'site_id', "=", $this->site_id ];
+            //关键字查询
+            if (!empty($keyword)) {
+                $condition[] = [ "store_name", "like", "%" . $keyword . "%" ];
+            }
+            $order = 'is_default desc,store_id desc';
+            $list = $store_model->getStorePageList($condition, $page, $page_size, $order);
+            return $list;
+        } else {
+
+            //判断门店插件是否存在
+            $store_is_exit = addon_is_exit('store', $this->site_id);
+            $this->assign('store_is_exit', $store_is_exit);
+            $this->assign('title', $store_is_exit ? '门店' : '自提点');
+            $this->assign('store_type', ( new StoreModel() )->getStoreType());
+
+            $config_model = new ConfigModel();
+            $default_img = $config_model->getDefaultImg($this->site_id, $this->app_module)[ 'data' ][ 'value' ];
+            $this->assign("default_img", $default_img);
+
+            return $this->fetch("store/lists");
+        }
+    }
+
+    /**
+     * 添加门店
+     * @return mixed
+     */
+    public function addStore()
+    {
+        $is_store = addon_is_exit('store');
+
+        if (request()->isAjax()) {
+            $store_name = input("store_name", '');
+            $telphone = input("telphone", '');
+            $store_image = input("store_image", '');
+            $province_id = input("province_id", 0);
+            $city_id = input("city_id", 0);
+            $district_id = input("district_id", 0);
+            $community_id = input("community_id", 0);
+            $address = input("address", '');
+            $full_address = input("full_address", '');
+            $longitude = input("longitude", 0);
+            $latitude = input("latitude", 0);
+            $is_pickup = input("is_pickup", 0);
+            $is_o2o = input("is_o2o", 0);
+            $open_date = input("open_date", '');
+            $start_time = input('start_time', 0);
+            $end_time = input('end_time', 0);
+            $time_type = input('time_type', 0);
+            $time_week = input('time_week', '');
+            $stock_type = input('stock_type', '');
+            if (!empty($time_week)) {
+                $time_week = implode(',', $time_week);
+            }
+            $data = array (
+                "store_name" => $store_name,
+                "telphone" => $telphone,
+                "store_image" => $store_image,
+                "province_id" => $province_id,
+                "city_id" => $city_id,
+                "district_id" => $district_id,
+                "community_id" => $community_id,
+                "address" => $address,
+                "full_address" => $full_address,
+                "longitude" => $longitude,
+                "latitude" => $latitude,
+                "open_date" => $open_date,
+                "site_id" => $this->site_id,
+                'start_time' => $start_time,
+                'end_time' => $end_time,
+                'time_type' => $time_type,
+                'time_week' => $time_week,
+                'stock_type' => $stock_type,
+                'is_pickup' => $is_pickup,
+                'is_o2o' => $is_o2o,
+                'store_type' => input('store_type', ''),
+                'category_id' => input('category_id', 0),
+                'category_name' => input('category_name', ''),
+                'label_id' => input('label_id', ''),
+                'label_name' => input('label_name', ''),
+                'store_images' => input('store_images', ''),
+                'store_introduce' => input('store_introduce', '')
+            );
+
+            //判断是否开启多门店
+            if ($is_store == 1) {
+                $user_data = [
+                    'uid' => input('uid', ''),
+                ];
+            } else {
+                $user_data = [];
+            }
+            $store_model = new StoreModel();
+            $result = $store_model->addStore($data, $user_data, $is_store);
+            return $result;
+        } else {
+            //查询省级数据列表
+            $address_model = new AddressModel();
+            $list = $address_model->getAreaList([ [ "pid", "=", 0 ], [ "level", "=", 1 ] ]);
+            $this->assign("province_list", $list[ "data" ]);
+
+            $this->assign("is_exit", $is_store);
+
+            $this->assign('title', $is_store ? '门店' : '自提点');
+
+            $this->assign("http_type", get_http_type());
+
+            $config_model = new ConfigModel();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+            //效验腾讯地图KEY
+            $check_map_key = $config_model->checkQqMapKey($mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+            $this->assign('check_map_key', $check_map_key);
+
+            $express_type = ( new ExpressConfig() )->getEnabledExpressType($this->site_id);
+            if (isset($express_type[ 'express' ])) unset($express_type[ 'express' ]);
+            $this->assign('express_type', $express_type);
+            $this->assign('store_type', ( new StoreModel() )->getStoreType());
+
+            $user_list = ( new User() )->getUserList([ [ 'site_id', '=', $this->site_id ] ], 'uid,username')[ 'data' ];
+            $this->assign('user_list', $user_list);
+
+            $category = new Category();
+            $category_config = $category->getCategoryConfig($this->site_id)[ 'data' ][ 'value' ];
+            if ($category_config[ 'status' ]) {
+                $category_list = $category->getStoreCategoryList([ [ 'site_id', '=', $this->site_id ] ], 'category_id,category_name')[ 'data' ];
+                $this->assign('category_list', $category_list);
+            }
+            $this->assign('category_status', $category_config[ 'status' ]);
+
+            $label_list = ( new Label() )->getStoreLabelList([ [ 'site_id', '=', $this->site_id ] ], 'label_id,label_name')[ 'data' ];
+            $this->assign('label_list', $label_list);
+
+            return $this->fetch("store/add_store");
+        }
+    }
+
+    /**
+     * 编辑门店
+     * @return mixed
+     */
+    public function editStore()
+    {
+        $is_exit = addon_is_exit("store");
+        $store_id = input("store_id", 0);
+        $condition = array (
+            [ "site_id", "=", $this->site_id ],
+            [ "store_id", "=", $store_id ]
+        );
+        $store_model = new StoreModel();
+        if (request()->isAjax()) {
+            $store_name = input("store_name", '');
+            $telphone = input("telphone", '');
+            $store_image = input("store_image", '');
+            $province_id = input("province_id", 0);
+            $city_id = input("city_id", 0);
+            $district_id = input("district_id", 0);
+            $community_id = input("community_id", 0);
+            $address = input("address", '');
+            $full_address = input("full_address", '');
+            $longitude = input("longitude", 0);
+            $latitude = input("latitude", 0);
+            $is_pickup = input("is_pickup", 0);
+            $is_o2o = input("is_o2o", 0);
+            $open_date = input("open_date", '');
+            $start_time = input('start_time', 0);
+            $end_time = input('end_time', 0);
+            $time_type = input('time_type', 0);
+            $time_week = input('time_week', '');
+            $stock_type = input('stock_type', '');
+            if (!empty($time_week)) {
+                $time_week = implode(',', $time_week);
+            }
+            $data = array (
+                "store_name" => $store_name,
+                "telphone" => $telphone,
+                "store_image" => $store_image,
+                "province_id" => $province_id,
+                "city_id" => $city_id,
+                "district_id" => $district_id,
+                "community_id" => $community_id,
+                "address" => $address,
+                "full_address" => $full_address,
+                "longitude" => $longitude,
+                "latitude" => $latitude,
+                "open_date" => $open_date,
+                'start_time' => $start_time,
+                'end_time' => $end_time,
+                'time_type' => $time_type,
+                'time_week' => $time_week,
+                'stock_type' => $stock_type,
+                'is_pickup' => $is_pickup,
+                'is_o2o' => $is_o2o,
+                'store_type' => input('store_type', ''),
+                'category_id' => input('category_id', 0),
+                'category_name' => input('category_name', ''),
+                'label_id' => input('label_id', ''),
+                'label_name' => input('label_name', ''),
+                'store_images' => input('store_images', ''),
+                'store_introduce' => input('store_introduce', '')
+            );
+            $result = $store_model->editStore($data, $condition, [], $is_exit, 1);
+            return $result;
+        } else {
+            //查询省级数据列表
+            $address_model = new AddressModel();
+            $list = $address_model->getAreaList([ [ "pid", "=", 0 ], [ "level", "=", 1 ] ]);
+            $this->assign("province_list", $list[ "data" ]);
+            $info_result = $store_model->getStoreDetail($condition);//门店信息
+            $info = $info_result[ "data" ];
+
+            if (empty($info)) $this->error('未获取到门店数据', addon_url('store://shop/store/lists'));
+
+            $this->assign("info", $info);
+            $this->assign("store_id", $store_id);
+
+            $this->assign("is_exit", $is_exit);
+            $this->assign('title', $is_exit ? '门店' : '自提点');
+            $this->assign("http_type", get_http_type());
+
+            $config_model = new ConfigModel();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+            //效验腾讯地图KEY
+            $check_map_key = $config_model->checkQqMapKey($mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+            $this->assign('check_map_key', $check_map_key);
+
+            $express_type = ( new ExpressConfig() )->getEnabledExpressType($this->site_id);
+            if (isset($express_type[ 'express' ])) unset($express_type[ 'express' ]);
+            $this->assign('express_type', $express_type);
+            $this->assign('store_type', ( new StoreModel() )->getStoreType());
+            $this->forthMenu([ 'store_id' => $store_id ]);
+
+            $category = new Category();
+            $category_config = $category->getCategoryConfig($this->site_id)[ 'data' ][ 'value' ];
+            if ($category_config[ 'status' ]) {
+                $category_list = $category->getStoreCategoryList([ [ 'site_id', '=', $this->site_id ] ], 'category_id,category_name')[ 'data' ];
+                $this->assign('category_list', $category_list);
+            }
+            $this->assign('category_status', $category_config[ 'status' ]);
+
+            $label_list = ( new Label() )->getStoreLabelList([ [ 'site_id', '=', $this->site_id ] ], 'label_id,label_name')[ 'data' ];
+            $this->assign('label_list', $label_list);
+
+            return $this->fetch("store/edit_store");
+        }
+    }
+
+    /**
+     * @return mixed
+     */
+    public function operate()
+    {
+        $store_id = input("store_id", 0);
+        $condition = array (
+            [ "site_id", "=", $this->site_id ],
+            [ "store_id", "=", $store_id ]
+        );
+        $store_model = new StoreModel();
+        if (request()->isAjax()) {
+            $status = input("status", 0);
+            $is_pickup = input("is_pickup", 0);
+            $is_o2o = input("is_o2o", 0);
+            $start_time = input('start_time', 0);
+            $end_time = input('end_time', 0);
+            $time_type = input('time_type', 0);
+            $time_week = input('time_week', '');
+            $stock_type = input('stock_type', '');
+            if (!empty($time_week)) {
+                $time_week = implode(',', $time_week);
+            }
+            $data = array (
+                "status" => $status,
+                'start_time' => $start_time,
+                'end_time' => $end_time,
+                'time_type' => $time_type,
+                'time_week' => $time_week,
+                'stock_type' => $stock_type,
+                'is_pickup' => $is_pickup,
+                'is_o2o' => $is_o2o,
+                'time_interval' => input('time_interval', 30),
+                'delivery_time' => input('delivery_time', ''),
+                'advance_day' => input('advance_day', 0),
+                'most_day' => input('most_day', 7),
+                'is_express' => input('is_express', 0)
+            );
+            $result = $store_model->editStore($data, $condition, [], 1, 1);
+            return $result;
+        }
+
+        $store_info = $store_model->getStoreDetail($condition)[ 'data' ];//门店信息
+        if (empty($store_info)) $this->error('未获取到门店信息');
+
+        $this->assign('info', $store_info);
+        $this->assign('store_id', $store_id);
+        $business_config = ( new StoreConfig() )->getStoreBusinessConfig($this->site_id);
+        $this->assign('business_config', $business_config[ 'data' ][ 'value' ]);
+        $this->forthMenu([ 'store_id' => $store_id ]);
+        return $this->fetch("store/operate");
+    }
+
+    public function frozenStore()
+    {
+        if (request()->isAjax()) {
+            $store_id = input('store_id', 0);
+            $is_frozen = input('is_frozen', 0);
+            $condition = [
+                [ "site_id", "=", $this->site_id ],
+                [ "store_id", "=", $store_id ]
+            ];
+            $store_model = new StoreModel();
+            $res = $store_model->frozenStore($condition, $is_frozen);
+            return $res;
+        }
+    }
+
+    /**
+     * 重置密码
+     */
+    public function modifyPassword()
+    {
+        if (request()->isAjax()) {
+            $store_id = input('store_id', '');
+            $password = input('password', '123456');
+            $store_model = new StoreModel();
+            return $store_model->resetStorePassword($password, [ [ 'store_id', '=', $store_id ] ]);
+        }
+    }
+
+    /**
+     * 同城配送
+     */
+    public function local()
+    {
+        $store_id = input('store_id', 0);
+        $store_model = new StoreModel();
+        $info_result = $store_model->getStoreInfo([ [ 'site_id', '=', $this->site_id ], [ 'store_id', '=', $store_id ] ]);//门店信息
+        $info = $info_result[ "data" ];
+        if (empty($info)) {
+            $this->error([], '门店未找到');
+        }
+        $local_model = new LocalModel();
+        if (request()->isAjax()) {
+
+            $data = [
+                'type' => input('type', 'default'),//配送方式  default 商家自配送  other 第三方配送
+                'area_type' => input('area_type', 1),//配送区域
+                'local_area_json' => input('local_area_json', ''),//区域及业务集合json
+                'time_is_open' => input('time_is_open', 0),
+                'time_type' => input('time_type', 0),//时间选取类型 0 全天  1 自定义
+                'time_week' => input('time_week', ''),
+                'start_time' => input('start_time', 0),
+                'end_time' => input('end_time', 0),
+                'update_time' => time(),
+                'is_open_step' => input('is_open_step', 0),
+                'start_distance' => input('start_distance', 0),
+                'start_delivery_money' => input('start_delivery_money', 0),
+                'continued_distance' => input('continued_distance', 0),
+                'continued_delivery_money' => input('continued_delivery_money', 0),
+                'start_money' => input('start_money', 0),
+                'delivery_money' => input('delivery_money', 0),
+                'area_array' => input('area_array', ''),//地域集合
+                'man_money' => input('man_money', ''),
+                'man_type' => input('man_type', ''),
+                'man_discount' => input('man_discount', ''),
+                'time_interval' => input('time_interval', 30),
+                'delivery_time' => input('delivery_time', ''),
+                'advance_day' => input('advance_day', 0),
+                'most_day' => input('most_day', 7)
+            ];
+
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ],
+                [ 'store_id', '=', $store_id ],
+            );
+            return $local_model->editLocal($data, $condition);
+        } else {
+
+            $this->assign('store_detail', $info);
+            $local_result = $local_model->getLocalInfo([ [ 'site_id', '=', $this->site_id ], [ 'store_id', '=', $store_id ] ]);
+
+            $district_list = [];
+            if ($info[ 'province_id' ] > 0 && $info[ 'city_id' ] > 0) {
+                //查询省级数据列表
+                $address_model = new AddressModel();
+                $list = $address_model->getAreaList([ [ "pid", "=", $info[ 'city_id' ] ], [ "level", "=", 3 ] ]);
+                $district_list = $list[ "data" ];
+            }
+            $this->assign('district_list', $district_list);
+            $this->assign('local_info', $local_result[ 'data' ]);
+
+            $config_model = new WebConfig();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+            $this->assign('store_id', $store_id);
+            $this->forthMenu([ 'store_id' => $store_id ]);
+            return $this->fetch('store/local');
+        }
+
+    }
+
+    /**
+     *  结算设置
+     */
+    public function settlement()
+    {
+        $store_id = input('store_id', 0);
+        if (empty($store_id)) {
+            $this->error('未获取到门店信息');
+        }
+        $store_model = new StoreModel();
+        if (request()->isAjax()) {
+            $is_settlement = input("is_settlement", 0);
+            if (empty($is_settlement)) {
+                $data = [
+                    'is_settlement' => 0,
+                    'settlement_rate' => 0
+                ];
+            } else {
+                $data = [
+                    'is_settlement' => 1,
+                    'settlement_rate' => input("settlement_rate", 0),//跟随系统传入0,独立设置大于0
+                    'bank_type' => input("bank_type", 0),//1微信 2.支付宝 3,银行卡
+                    'bank_type_name' => input("bank_type_name", ''),  //账户类型名称 微信默认为微信  支付宝默认是支付宝 银行卡需要传银行名称
+                    'bank_user_name' => input("bank_user_name", ''), //账户所属人姓名 针对银行卡需要传入
+                    'bank_type_account' => input("bank_type_account", ''), //具体账户信息,微信需要传入微信名称
+                ];
+            }
+
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ],
+                [ 'store_id', '=', $store_id ],
+            );
+            $result = $store_model->editStore($data, $condition, [], 1, 1);
+            return $result;
+        }
+        $this->forthMenu([ 'store_id' => $store_id ]);
+
+        $store_info = $store_model->getStoreInfo([ [ 'site_id', '=', $this->site_id ], [ 'store_id', '=', $store_id ] ]);//门店信息
+        if (empty($store_info)) $this->error('未获取到门店信息');
+
+        $this->assign('info', $store_info[ 'data' ]);
+        $this->assign('store_id', $store_id);
+        $withdraw_config = ( new StoreConfig() )->getStoreWithdrawConfig($this->site_id);
+        $this->assign('withdraw_config', $withdraw_config[ 'data' ][ 'value' ]);
+        return $this->fetch('store/settlement');
+    }
+
+    /**
+     *  配送员列表
+     */
+    public function deliverLists()
+    {
+        $store_id = input('store_id', 0);
+
+        $deliver_model = new ExpressDeliver();
+        if (request()->isAjax()) {
+            $page = input('page', '1');
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $condition = [
+                [
+                    'site_id', '=', $this->site_id,
+                ],
+                [
+                    'store_id', '=', $store_id,
+                ]
+            ];
+            $search_text = input('search_text', '');
+            if (!empty($search_text)) {
+                $condition[] = [ 'deliver_name', 'like', '%' . $search_text . '%' ];
+            }
+            $deliver_lists = $deliver_model->getDeliverPageLists($condition, '*', 'create_time desc', $page, $page_size);
+            return $deliver_lists;
+        } else {
+            $this->assign('store_id', $store_id);
+            $this->forthMenu([ 'store_id' => $store_id ]);
+            return $this->fetch('store/deliverlists');
+        }
+    }
+
+    /**
+     *  添加配送员
+     */
+    public function addDeliver()
+    {
+        $store_id = input('store_id', 0);
+        $this->assign('store_id', $store_id);
+        return $this->fetch('store/adddeliver');
+    }
+
+    /**
+     *  编辑配送员
+     */
+    public function editDeliver()
+    {
+        $store_id = input('store_id', 0);
+        $this->assign('store_id', $store_id);
+        $deliver_model = new ExpressDeliver();
+        $deliver_id = input('deliver_id', 0);
+        $this->assign('deliver_id', $deliver_id);
+        $deliver_info = $deliver_model->getDeliverInfo($deliver_id, $this->site_id);
+        $this->assign('deliver_info', $deliver_info[ 'data' ]);
+        return $this->fetch('store/editdeliver');
+    }
+
+    /**
+     * 选择门店
+     * @return mixed
+     */
+    public function selectStore()
+    {
+        $store_list = ( new StoreModel() )->getStoreList([ [ 'site_id', '=', $this->site_id ] ], 'store_id,store_name,status,address,full_address,is_frozen');
+        $this->assign('store_list', $store_list[ 'data' ]);
+        $store_id = explode(',', input('store_id', ''));
+        $this->assign('store_id', $store_id);
+        return $this->fetch('store/select');
+    }
+
+    /**
+     * 门店主页装修
+     */
+    public function diy()
+    {
+        $data = [
+            'site_id' => $this->site_id,
+            'name' => 'DIY_STORE'
+        ];
+        $edit_view = event('DiyViewEdit', $data, true);
+        return $edit_view;
+    }
+
+    /**
+     * 门店分类
+     * @return mixed
+     */
+    public function category()
+    {
+        $category = new Category();
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $condition = [
+                [ 'site_id', '=', $this->site_id ]
+            ];
+            if (!empty($search_text)) $condition[] = [ 'category_name', 'like', "%{$search_text}%" ];
+            return $category->getStoreCategoryPageList($condition, $page, $page_size);
+        }
+        $config = $category->getCategoryConfig($this->site_id)[ 'data' ][ 'value' ];
+        $this->assign('status', $config[ 'status' ]);
+        return $this->fetch('store/category');
+    }
+
+    /**
+     * 添加分类
+     * @return array
+     */
+    public function addCategory()
+    {
+        if (request()->isAjax()) {
+            $data = [
+                'category_name' => input('category_name', ''),
+                'site_id' => $this->site_id
+            ];
+            return ( new Category() )->addStoreCategory($data);
+        }
+    }
+
+    /**
+     * 编辑分类
+     * @return array
+     */
+    public function editCategory()
+    {
+        if (request()->isAjax()) {
+            $category_id = input('category_id', 0);
+            $data = [
+                'category_name' => input('category_name', ''),
+                'sort' => input('sort', 0)
+            ];
+            return ( new Category() )->editStoreCategory($data, [ [ 'category_id', '=', $category_id ], [ 'site_id', '=', $this->site_id ] ]);
+        }
+    }
+
+    /**
+     * 删除分类
+     * @return array
+     */
+    public function deleteCategory()
+    {
+        if (request()->isAjax()) {
+            $category_id = input('category_id', 0);
+            return ( new Category() )->deleteStoreCategory([ [ 'category_id', 'in', $category_id ], [ 'site_id', '=', $this->site_id ] ]);
+        }
+    }
+
+    /**
+     * 门店分类是否启用
+     */
+    public function categoryConfig()
+    {
+        if (request()->isAjax()) {
+            $status = input('status', 0);
+            return ( new Category() )->setCategoryConfig([ 'status' => $status ], $this->site_id);
+        }
+    }
+
+    /**
+     * 门店标签
+     * @return mixed
+     */
+    public function tag()
+    {
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $search_text = input('search_text', '');
+            $condition = [
+                [ 'site_id', '=', $this->site_id ]
+            ];
+            if (!empty($search_text)) $condition[] = [ 'label_name', 'like', "%{$search_text}%" ];
+            return ( new Label() )->getStoreLabelPageList($condition, $page, $page_size);
+        }
+        return $this->fetch('store/tag');
+    }
+
+    /**
+     * 添加标签
+     * @return array
+     */
+    public function addLabel()
+    {
+        if (request()->isAjax()) {
+            $data = [
+                'label_name' => input('label_name', ''),
+                'site_id' => $this->site_id,
+                'create_time' => time()
+            ];
+            return ( new Label() )->addStoreLabel($data);
+        }
+    }
+
+    /**
+     * 编辑标签
+     * @return array
+     */
+    public function editLabel()
+    {
+        if (request()->isAjax()) {
+            $label_id = input('label_id', 0);
+            $data = [
+                'label_name' => input('label_name', ''),
+                'sort' => input('sort', 0)
+            ];
+            return ( new Label() )->editStoreLabel($data, [ [ 'label_id', '=', $label_id ], [ 'site_id', '=', $this->site_id ] ]);
+        }
+    }
+
+    /**
+     * 删除标签
+     * @return array
+     */
+    public function deleteLabel()
+    {
+        if (request()->isAjax()) {
+            $label_id = input('label_id', 0);
+            return ( new Label() )->deleteStoreLabel([ [ 'label_id', '=', $label_id ], [ 'site_id', '=', $this->site_id ] ]);
+        }
+    }
+
+    /**
+     * 门店标签选择框
+     * @return mixed
+     */
+    public function labelSelect()
+    {
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $search_text = input('search_text', '');
+            $condition = [
+                [ 'site_id', '=', $this->site_id ]
+            ];
+            if (!empty($search_text)) $condition[] = [ 'label_name', 'like', "%{$search_text}%" ];
+            return ( new Label() )->getStoreLabelPageList($condition, $page, $page_size);
+        } else {
+            $select_id = input('select_id', '');
+            $this->assign('select_id', $select_id);
+            return $this->fetch('store/label_select');
+        }
+    }
+
+    /**
+     * 修改排序
+     */
+    public function modifySort()
+    {
+        if (request()->isAjax()) {
+            $sort = input('sort', 0);
+            $label_id = input('label_id', 0);
+            $label_model = new Label();
+            $res = $label_model->modifySort($sort, $label_id, $this->site_id);
+            return $res;
+        }
+    }
+
+}

+ 8 - 6
app/common.php

@@ -1183,12 +1183,7 @@ function periodGroup($srart_time, $end_time, $format = 'Ymd')
     }
     return $data;
 }
-/*
- * 导出数据到日志文件
- * */
-function outFileLog($data,$filename='log',$title='data'){
-    file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/lic/'.$filename.'.txt', PHP_EOL .date('Y-m-d h:i:s', time()).'~'.$title.':' . json_encode($data,JSON_UNESCAPED_UNICODE), FILE_APPEND);
-}
+
 
 //解决个别中文乱码
 function mbStrreplace($content, $to_encoding = "UTF-8", $from_encoding = "GBK")
@@ -1795,4 +1790,11 @@ function numberFormat($num)
 {
     $num = round($num, 3);
     return $num;
+}
+
+/*
+ * 导出数据到日志文件
+ * */
+function outFileLog($data,$filename='log',$title='data'){
+    file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/'.$filename.'.txt', PHP_EOL .date('Y-m-d h:i:s', time()).'~'.$title.':' . json_encode($data,JSON_UNESCAPED_UNICODE), FILE_APPEND);
 }

+ 53 - 0
app/index/view/base_bak.html

@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<meta name="renderer" content="webkit" />
+	<meta http-equiv="X-UA-COMPATIBLE" content="IE=edge,chrome=1" />
+	<title>首页</title>
+	<link rel="icon" type="image/x-icon" href="__STATIC__/img/shop_bitbug_favicon.ico" />
+	<link rel="stylesheet" type="text/css" href="INDEX_CSS/style.css" />
+	<link rel="stylesheet" type="text/css" href="__STATIC__/ext/layui/css/layui.css" />
+	<!--<link rel="stylesheet" type="text/css" href="SHOP_CSS/style1/common.css" />-->
+	<link rel="stylesheet" type="text/css" href="SHOP_CSS/style2/common.css" />
+	<script src="__STATIC__/js/jquery-3.1.1.js"></script>
+	<script src="__STATIC__/ext/layui/layui.js"></script>
+	<script>
+		layui.use(['layer', 'upload', 'element'], function() {});
+		window.ns_url = {
+			baseUrl: "ROOT_URL/",
+			route: ['install', '{:request()->controller()}', '{:request()->action()}'],
+		};
+	</script>
+	<script src="__STATIC__/js/common.js"></script>
+	{block name="resources"}
+	{/block}
+</head>
+
+<body>
+<div class="body-content">
+	<div class="head-block">
+		<div class="head-block-title">
+			<div class="head-block-left">
+				<div>
+					<img src="INDEX_IMG/logo_new.png"/>
+				</div>
+				<span>单商户V5版</span>
+			</div>
+			<div class="head-block-right">
+				<a href="http://www.niushop.com" class="other-links-text" target="_blank">官方网站</a>
+				<span>|</span>
+				<a href="http://bbs.niushop.com" class="other-links-text" target="_blank">技术论坛</a>
+			</div>
+		</div>
+	</div>
+
+	<div>
+		{block name='main'}{/block}
+	</div>
+</div>
+
+<script>
+</script>
+{block name="script"}{/block}
+</body>
+</html>

+ 90 - 0
app/index/view/index/center_bak.html

@@ -0,0 +1,90 @@
+{extend name="base"/}
+{block name="resources"}
+<link rel="stylesheet" type="text/css" href="INDEX_CSS/center.css" />
+{/block}
+{block name="main"}
+<div class="guide-top">
+    <div><img src="INDEX_IMG/back1.png"/></div>
+    <span></span>
+    <p>欢迎使用</p>
+    <p>NIUSHOP商城系统</p>
+</div>
+<div class="guide-links">
+    <a href="http://www.niushop.com" target="_blank">
+        <li>
+            <div>
+                <img class="no-select" src="INDEX_IMG/no_niuku.png">
+                <img class="selected" src="INDEX_IMG/niuku.png">
+                <p>官网</p>
+            </div>
+        </li>
+    </a>
+    <a href="{$pc_url}" target="_blank">
+        <li>
+            <div>
+                <img class="no-select" src="INDEX_IMG/no_pc.png">
+                <img class="selected" src="INDEX_IMG/pc.png">
+                <p>PC端</p>
+            </div>
+        </li>
+    </a>
+    <a href="">
+        <li class="li-selected">
+            <div>
+                <img class="no-select" src="INDEX_IMG/no_guide.png">
+                <img class="selected" src="INDEX_IMG/guide.png">
+                <p>引导页</p>
+            </div>
+        </li>
+    </a>
+    <a onclick="getShopUrl()" target="_blank">
+        <li>
+            <div>
+                <img class="no-select" src="INDEX_IMG/no_h5.png">
+                <img class="selected" src="INDEX_IMG/h5.png">
+                <p>手机端</p>
+            </div>
+        </li>
+    </a>
+    <a href="{$shop_url}" target="_blank">
+        <li>
+            <div>
+                <img class="no-select" src="INDEX_IMG/no_shop.png">
+                <img class="selected" src="INDEX_IMG/shop.png">
+                <p>网站后台</p>
+            </div>
+        </li>
+    </a>
+
+</div>
+<div class="guide-forter">
+    <p><a href="https://beian.miit.gov.cn/" target="_blank">{$copy.icp}</a></p>
+    <p><a href="{$copy.copyright_link}" target="_blank">{$copy.company_name}</a></p>
+    <div>
+        {if $copy.logo}
+        <a href="{$copy.copyright_link}" target="_blank"><img src="{:img($copy.logo)}"></a>
+        {else/}
+        <a href="{$copy.copyright_link}" target="_blank"><img src="INDEX_IMG/footer_logo.png"></a>
+        {/if}
+    </div>
+</div>
+{/block}
+
+{block name="script"}
+<script>
+    $(function () {
+        $(".guide-links>a li").hover(function(){
+            $(".guide-links>a li").removeClass("li-selected");
+            $(this).addClass("li-selected");
+
+        },function(){
+            $(".guide-links>a li").removeClass("li-selected");
+            $(".guide-links>a:nth-child(3) li").addClass("li-selected");
+        })
+    });
+
+    function getShopUrl(e) {
+        window.open("{:url('index/index/h5preview')}")
+    }
+</script>
+{/block}

+ 2 - 1
app/model/Model.php

@@ -755,6 +755,8 @@ class Model
      */
     final public function Lists($condition = [], $field = true, $order = '', $page = 1, $list_rows = PAGE_LIST_ROWS, $alias = 'a', $join = [], $group = null, $limit = null,$gwhere='')
     {
+        // self::$query_obj = Db::name($this->table)->alias($alias)->where($condition);
+        // $count_obj = Db::name($this->table)->alias($alias)->where($condition);
         if(empty($gwhere)){
             self::$query_obj = Db::name($this->table)->alias($alias)->where($condition) ;
             $count_obj = Db::name($this->table)->alias($alias)->where($condition) ;
@@ -762,7 +764,6 @@ class Model
             self::$query_obj = Db::name($this->table)->alias($alias)->where($condition)->where($gwhere) ;
             $count_obj = Db::name($this->table)->alias($alias)->where($condition)->where($gwhere) ;
         }
-
         if (!empty($join)) {
             $db_obj = self::$query_obj;
             self::$query_obj = $this->parseJoin($db_obj, $join);

+ 5 - 2
app/model/goods/Goods.php

@@ -979,7 +979,7 @@ class Goods extends BaseModel
     public function getGoodsPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'a.create_time desc', $field = 'a.goods_id,a.goods_name,a.site_id,a.site_name,a.goods_image,a.goods_state,a.price,a.goods_stock,a.goods_stock_alarm,a.create_time,a.sale_num,a.is_virtual,a.goods_class,a.goods_class_name,a.is_fenxiao,a.fenxiao_type,a.promotion_addon,a.sku_id,a.is_consume_discount,a.discount_config,a.discount_method,a.sort,a.label_id,a.is_delete', $alias = 'a', $join = [])
     {
         $res = model('goods')->pageList($condition, $field, $order, $page, $page_size, $alias, $join);
-
+      
         foreach ($res[ 'list' ] as $k => $v) {
             if (isset($v[ 'goods_stock' ])) {
                 $res[ 'list' ][ $k ][ 'goods_stock' ] = numberFormat($res[ 'list' ][ $k ][ 'goods_stock' ]);
@@ -999,11 +999,13 @@ class Goods extends BaseModel
         }
         return $this->success($res);
     }
-
+    
+    
     public function getGoodsTotalNum($condition , $field, $alias, $join ){
         $count= model('goods')->getCount($condition , $field, $alias, $join );
         return $count;
     }
+    
     /**
      * 编辑商品库存价格等信息
      * @param $goods_sku_array
@@ -1113,6 +1115,7 @@ class Goods extends BaseModel
      */
     public function getGoodsSkuPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*', $alias = '', $join = '', $group = null ,$gwhere='')
     {
+        // $res = model('goods_sku')->Lists($condition, $field, $order, $page, $page_size, $alias, $join, $group);
         $res = model('goods_sku')->Lists($condition, $field, $order, $page, $page_size, $alias, $join, $group,null,$gwhere);
         foreach ($res[ 'list' ] as $k => $v) {
             if (isset($v[ 'stock' ])) {

+ 748 - 0
app/model/order/OrderExport0424.php

@@ -0,0 +1,748 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\model\order;
+
+use app\model\BaseModel;
+use think\facade\Db;
+
+/**
+ * 订单导出
+ * @author Administrator
+ */
+class OrderExport extends BaseModel
+{
+    public $order_field = [
+        'order_no' => '订单编号',
+        'site_name' => '店铺名称',
+        'order_name' => '订单内容',
+        'order_from_name' => '订单来源',
+        'order_type_name' => '订单类型',
+        'order_promotion_name' => '营销活动类型',
+        'out_trade_no' => '支付流水号',
+        'out_trade_no_2' => '支付流水号(多次支付)',
+        'delivery_code' => '整体提货编码',
+        'order_status_name' => '订单状态',
+        'pay_status' => '支付状态',
+        'delivery_status' => '配送状态',
+        'pay_type_name' => '支付方式',
+        'delivery_type_name' => '配送方式',
+        'nickname' => '购买人',
+        'name' => '客户姓名',
+        'mobile' => '客户手机',
+        'telephone' => '客户固定电话',
+        'province_name' => '省',
+        'city_name' => '市',
+        'district_name' => '县',
+        'full_address' => '详细地址',
+        'buyer_ip' => '客户ip',
+        'buyer_ask_delivery_time' => '客户要求配送时间',
+        'buyer_message' => '客户留言信息',
+        'goods_money' => '商品总金额',
+        'delivery_money' => '配送费用',
+        'promotion_money' => '订单优惠金额',
+        'coupon_money' => '优惠券金额',
+        'order_money' => '订单合计金额',
+        'adjust_money' => '订单调整金额',
+        'balance_money' => '余额支付金额',
+        'pay_money' => '抵扣之后应付金额',
+        'refund_money' => '订单退款金额',
+        'pay_time' => '支付时间',
+        'delivery_time' => '配送时间',
+        'sign_time' => '签收时间',
+        'finish_time' => '完成时间',
+        'remark' => '卖家留言',
+        'goods_num' => '商品件数',
+        'delivery_status_name' => '发货状态',
+        'is_settlement' => '是否进行结算',
+        'delivery_store_name' => '门店名称',
+        'promotion_type_name' => '营销类型',
+        'form_data' => '表单数据'
+    ];
+
+    //订单商品信息
+    public $order_goods_field = [
+        'sku_name' => '商品名称',
+        'sku_no' => '商品编码',
+        'goods_class_name' => '商品类型',
+        'price' => '商品卖价',
+        'cost_price' => '成本价',
+        'num' => '购买数量',
+        'goods_money' => '商品总价',
+        'cost_money' => '成本总价',
+        'delivery_status_name' => '配送状态',
+        'delivery_no' => '配送单号',
+        'refund_status_name' => '退款状态',
+        'refund_no' => '退款编号',
+        'refund_type' => '退货方式',
+        'refund_apply_money' => '退款申请金额',
+        'refund_reason' => '退款原因',
+        'refund_real_money' => '实际退款金额',
+        'refund_delivery_name' => '退款公司名称',
+        'refund_delivery_no' => '退款单号',
+        'refund_time' => '实际退款时间',
+        'refund_refuse_reason' => '退款拒绝原因',
+        'refund_action_time' => '申请退款时间',
+        'real_goods_money' => '实际商品购买价',
+        'refund_remark' => '退款说明',
+        'refund_delivery_remark' => '买家退货说明',
+        'refund_address' => '退货地址',
+        'is_refund_stock' => '是否返还库存',
+        'form_data' => '表单数据'
+    ];
+
+
+    public $define_data = [
+        'pay_status' => [ 'type' => 2, 'data' => [ '未支付', '已支付' ] ],//支付状态
+        'delivery_status' => [ 'type' => 2, 'data' => [ '待发货', '已发货', '已收货' ] ],//配送状态
+        'refund_status' => [ 'type' => 2, 'data' => [ '未退款', '已退款' ] ],//退款状态
+//        'buyer_ask_delivery_time' => [ 'type' => 1 ],//购买人要求配送时间
+        'pay_time' => [ 'type' => 1 ],//支付时间
+        'delivery_time' => [ 'type' => 1 ],//订单配送时间
+        'sign_time' => [ 'type' => 1 ],//订单签收时间
+        'finish_time' => [ 'type' => 1 ],//订单完成时间
+        'refund_time' => [ 'type' => 1 ],//退款到账时间
+        'refund_action_time' => [ 'type' => 1 ],//实际退款时间
+        'is_settlement' => [ 'type' => 2, 'data' => [ '否', '是' ] ],//是否进行结算
+        'refund_type' => [ 'type' => 2, 'data' => [ 1 => '仅退款', 2 => '退款退货' ] ],//退货方式
+        'is_refund_stock' => [ 'type' => 2, 'data' => [ '否', '是' ] ],//是否返还库存
+        'form_data' => [ 'type' => 3 ],//表单数据
+    ];
+
+
+    /**
+     *  数据处理
+     * @param $data
+     * @param $field
+     * @return array
+     */
+    public function handleData($data, $field)
+    {
+        $define_data = $this->define_data;
+        foreach ($data as $k => $v) {
+            //获取键
+            $keys = array_keys($v);
+
+            foreach ($keys as $key) {
+
+                if (in_array($key, $field)) {
+
+                    if (array_key_exists($key, $define_data)) {
+
+                        $type = $define_data[ $key ][ 'type' ];
+
+                        switch ( $type ) {
+
+                            case 1:
+                                $data[ $k ][ $key ] = time_to_date((int) $v[ $key ]);
+                                break;
+                            case 2:
+                                $define_data_data = $define_data[ $key ][ 'data' ];
+                                $data[ $k ][ $key ] = !empty($v[ $key ]) ? $define_data_data[ $v[ $key ] ] : '';
+                                break;
+                            case 3:
+                                if (!empty($v[ $key ])) {
+                                    $form_data = json_decode($v[ $key ], true);
+                                    $form_content = '';
+                                    if (is_array($form_data)) {
+                                        foreach ($form_data as $item) {
+                                            $form_content .= $item[ 'value' ][ 'title' ] . ':' . $item[ 'val' ] . '   ';
+                                        }
+                                    }
+                                    $data[ $k ][ $key ] = $form_content;
+                                }
+                                break;
+                        }
+
+                    }
+                }
+            }
+
+        }
+        return $data;
+    }
+
+
+    /**
+     * 查询订单项数据并导出
+     * @param $condition
+     * @param $condition_desc
+     * @param $site_id
+     * @param $join
+     * @param $is_verify
+     * @param $order_label
+     * @return array
+     */
+    public function orderExport($condition, $condition_desc, $site_id, $join, $is_verify, $order_label)
+    {
+        try {
+            //预先创建导出的记录
+            $data = array (
+                'condition' => json_encode($condition_desc),
+                'create_time' => time(),
+                'type' => 1,//订单
+                'status' => 0,
+                'site_id' => $site_id
+            );
+            $records_result = $this->addExport($data);
+
+            $export_id = $records_result[ 'data' ] ?? 0;
+            if ($export_id <= 0) {
+                return $this->error();
+            }
+
+            $alias = 'o';
+
+            $field = $this->order_field;
+            //通过分批次执行数据导出(防止内存超出配置设置的)
+
+            set_time_limit(0);
+            $file_name = date('YmdHis');//csv文件名
+            $file_path = 'upload/order_csv/';
+            if (dir_mkdir($file_path)) {
+                $file_path = $file_path . $file_name . '.csv';
+                //创建一个临时csv文件
+                $fp = fopen($file_path, 'w'); //生成临时文件
+                fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
+                $field_value = [];
+                $field_key = [];
+                $field_key_array = [];
+                //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
+                foreach ($field as $k => $v) {
+                    $field_value[] = $v;
+                    $field_key[] = "{\$$k}";
+                    $field_key_array[] = $k;
+                }
+
+                $table_field = implode(',', $field_key_array);
+                $order_table = Db::name('order')->where($condition)->alias($alias);
+
+                if (!empty($join) || $is_verify != "all") {
+
+                    if (!empty($join) && $is_verify == "all") {
+                        $join = [
+                            [
+                                'order_goods og',
+                                'o.order_id = og.order_id',
+                                'left'
+                            ],
+                        ];
+                    } else if ($is_verify != "all" && empty($join)) {
+                        $join = [
+                            [
+                                'verify v',
+                                'v.verify_code = o.virtual_code',
+                                'left'
+                            ],
+                        ];
+                    } else {
+                        $join = [
+                            [
+                                'order_goods og',
+                                'o.order_id = og.order_id',
+                                'left'
+                            ],
+                            [
+                                'verify v',
+                                'v.verify_code = o.virtual_code',
+                                'left'
+                            ]
+                        ];
+                    }
+
+                }
+
+                $join[] = [
+                    'member m',
+                    'm.member_id = o.member_id',
+                    'left'
+                ];
+                $join[] = [
+                    'form_data fm',
+                    "fm.relation_id = o.order_id and scene = 'order'",
+                    'left'
+                ];
+                $order_table = $this->parseJoin($order_table, $join);
+
+                $first_line = implode(',', $field_value);
+                //写入第一行表头
+                fwrite($fp, $first_line . "\n");
+
+                $temp_line = implode(',', $field_key) . "\n";
+
+                $table_field = 'o.*,m.nickname,fm.form_data';
+                $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
+                    //写入导出信息
+                    $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
+                    unset($item_list);
+
+                }, 'o.order_id');
+
+                $order_table->removeOption();
+                fclose($fp);  //每生成一个文件关闭
+                unset($order_table);
+                //将同步导出记录状态
+                $records_data = array (
+                    'path' => $file_path,
+                    'status' => 1
+                );
+                $records_condition = array (
+                    [ 'export_id', '=', $export_id ]
+                );
+                $this->editExport($records_data, $records_condition);
+                return $this->success();
+            } else {
+                return $this->error();
+            }
+        } catch (\Exception $e) {
+            return $this->error([], $e->getMessage() . $e->getFile() . $e->getLine());
+        }
+
+    }
+
+    /**
+     * 查询订单项数据并导出
+     * @param $condition
+     * @param $condition_desc
+     * @param $site_id
+     * @param $is_verify
+     * @param $order_label
+     * @return array
+     */
+    public function orderGoodsExport($condition, $condition_desc, $site_id, $is_verify, $order_label)
+    {
+
+        try {
+            //预先创建导出的记录
+            $data = array (
+                'condition' => json_encode($condition_desc),
+                'create_time' => time(),
+                'type' => 2,//订单项
+                'status' => 0,
+                'site_id' => $site_id
+            );
+            $records_result = $this->addExport($data);
+
+            $export_id = $records_result[ 'data' ] ?? 0;
+            if ($export_id <= 0) {
+                return $this->error();
+            }
+            $alias = 'og';
+            $join = [
+                [
+                    'order o',
+                    'o.order_id = og.order_id',
+                    'left'
+                ]
+            ];
+
+            if ($is_verify != "all") {
+                $join = [
+                    [
+                        'order o',
+                        'o.order_id = og.order_id',
+                        'left'
+                    ],
+                    [
+                        'verify v',
+                        'v.verify_code = o.virtual_code',
+                        'left'
+                    ]
+                ];
+            }
+
+            $join[] = [
+                'member m',
+                'm.member_id = og.member_id',
+                'left'
+            ];
+            $join[] = [
+                'form_data fm',
+                "fm.relation_id = og.order_goods_id and scene = 'goods'",
+                'left'
+            ];
+
+            $order_field = 'o.order_no,o.site_name,o.order_name,o.order_from_name,o.order_type_name,o.order_promotion_name,o.out_trade_no,o.out_trade_no_2,o.delivery_code,o.order_status_name,o.pay_status,o.delivery_status,o.refund_status,o.pay_type_name,o.delivery_type_name,o.name,o.mobile,o.telephone,o.full_address,o.buyer_ip,o.buyer_ask_delivery_time,o.buyer_message,o.goods_money,o.delivery_money,o.promotion_money,o.coupon_money,o.order_money,o.adjust_money,o.balance_money,o.pay_money,o.refund_money,o.pay_time,o.delivery_time,o.sign_time,o.finish_time,o.remark,o.goods_num,o.delivery_status_name,o.is_settlement,o.delivery_store_name,o.promotion_type_name,o.address,m.nickname';
+            
+            $order_goods_field = 'og.order_goods_id,og.sku_name,og.sku_no,og.is_virtual,og.goods_class_name,og.price,og.cost_price,og.num,og.goods_money,og.cost_money,og.delivery_no,og.refund_no,og.refund_type,og.refund_apply_money,og.refund_reason,og.refund_real_money,og.refund_delivery_name,og.refund_delivery_no,og.refund_time,og.refund_refuse_reason,og.refund_action_time,og.real_goods_money,og.refund_remark,og.refund_delivery_remark,og.refund_address,og.is_refund_stock,og.refund_status_name,fm.form_data';
+
+            $table_field = $order_field . ',' . $order_goods_field;
+
+            $order_table = Db::name('order_goods')->where($condition)->alias($alias);
+
+            $order_table = $this->parseJoin($order_table, $join);
+
+            $field = array_merge($this->order_goods_field, $this->order_field);
+            //通过分批次执行数据导出(防止内存超出配置设置的)
+
+            set_time_limit(0);
+
+            $file_name = date('YmdHis');//csv文件名
+            $file_path = 'upload/order_csv/';
+            if (dir_mkdir($file_path)) {
+                //创建一个临时csv文件
+                $file_path = $file_path . $file_name . '.csv';
+                $fp = fopen($file_path, 'w'); //生成临时文件
+                fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
+                $field_value = [];
+                $field_key = [];
+                $field_key_array = [];
+                //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
+                foreach ($field as $k => $v) {
+                    $field_value[] = $v;
+                    $field_key[] = "{\$$k}";
+                    $field_key_array[] = $k;
+                }
+                $first_line = implode(',', $field_value);
+                //写入第一行表头
+                fwrite($fp, $first_line . "\n");
+
+                $temp_line = implode(',', $field_key) . "\n";
+
+                $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
+                    //写入导出信息
+                    $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
+                    unset($item_list);
+                });
+
+                $order_table->removeOption();
+                fclose($fp);  //每生成一个文件关闭
+                unset($order_table);
+                //将同步导出记录状态
+                $records_data = array (
+                    'path' => $file_path,
+                    'status' => 1
+                );
+                $records_condition = array (
+                    [ 'export_id', '=', $export_id ]
+                );
+                $this->editExport($records_data, $records_condition);
+                return $this->success();
+            } else {
+                return $this->error();
+            }
+        } catch (\Exception $e) {
+            return $this->error([], $e->getMessage() . $e->getLine());
+        }
+
+    }
+
+    /**
+     * 查询订单项数据并导出
+     * @param $condition
+     * @param $condition_desc
+     * @param int $site_id
+     * @return array
+     */
+    public function orderRefundExport($condition, $condition_desc, $site_id = 0)
+    {
+
+        try {
+            //预先创建导出的记录
+            $data = array (
+                'condition' => json_encode($condition_desc),
+                'create_time' => time(),
+                'status' => 0,
+                'site_id' => $site_id
+            );
+            $records_result = $this->addRefundExport($data);
+
+            $export_id = $records_result[ 'data' ] ?? 0;
+            if ($export_id <= 0) {
+                return $this->error();
+            }
+            $alias = 'og';
+            $join = [
+                [
+                    'order o',
+                    'o.order_id = og.order_id',
+                    'left'
+                ]
+            ];
+            $order_field = 'o.order_no,o.site_name,o.order_name,o.order_from_name,o.order_type_name,o.order_promotion_name,o.out_trade_no,o.out_trade_no_2,o.delivery_code,o.order_status_name,o.pay_status,o.delivery_status,o.refund_status,o.pay_type_name,o.delivery_type_name,o.name,o.mobile,o.telephone,o.full_address,o.buyer_ip,o.buyer_ask_delivery_time,o.buyer_message,o.goods_money,o.delivery_money,o.promotion_money,o.coupon_money,o.order_money,o.adjust_money,o.balance_money,o.pay_money,o.refund_money,o.pay_time,o.delivery_time,o.sign_time,o.finish_time,o.remark,o.goods_num,o.delivery_status_name,o.is_settlement,o.delivery_store_name,o.promotion_type_name,o.address';
+
+            $order_goods_field = 'og.order_goods_id,og.sku_name,og.sku_no,og.is_virtual,og.goods_class_name,og.price,og.cost_price,og.num,og.goods_money,og.cost_money,og.delivery_no,og.refund_no,og.refund_type,og.refund_apply_money,og.refund_reason,og.refund_real_money,og.refund_delivery_name,og.refund_delivery_no,og.refund_time,og.refund_refuse_reason,og.refund_action_time,og.real_goods_money,og.refund_remark,og.refund_delivery_remark,og.refund_address,og.is_refund_stock,og.refund_status_name';
+
+            $table_field = $order_field . ',' . $order_goods_field;
+
+            $order_table = Db::name('order_goods')->where($condition)->alias($alias);
+
+            $order_table = $this->parseJoin($order_table, $join);
+
+            $field = array_merge($this->order_goods_field, $this->order_field);
+            //通过分批次执行数据导出(防止内存超出配置设置的)
+
+            set_time_limit(0);
+            $file_name = date('YmdHis');//csv文件名
+            $file_path = 'upload/order_csv/';
+            if (dir_mkdir($file_path)) {
+                $file_path = $file_path . $file_name . '.csv';
+                //创建一个临时csv文件
+                $fp = fopen($file_path, 'w'); //生成临时文件
+                fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
+                $field_value = [];
+                $field_key = [];
+                $field_key_array = [];
+                //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
+                foreach ($field as $k => $v) {
+                    $field_value[] = $v;
+                    $field_key[] = "{\$$k}";
+                    $field_key_array[] = $k;
+                }
+                $first_line = implode(',', $field_value);
+                //写入第一行表头
+                fwrite($fp, $first_line . "\n");
+
+                $temp_line = implode(',', $field_key) . "\n";
+
+                $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
+                    //写入导出信息
+                    $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
+                    unset($item_list);
+                });
+
+                $order_table->removeOption();
+                fclose($fp);  //每生成一个文件关闭
+                unset($order_table);
+                //将同步导出记录状态
+                $records_data = array (
+                    'path' => $file_path,
+                    'status' => 1
+                );
+                $records_condition = array (
+                    [ 'export_id', '=', $export_id ]
+                );
+                $this->editRefundExport($records_data, $records_condition);
+                return $this->success();
+            } else {
+                return $this->error();
+            }
+        } catch (\Exception $e) {
+            return $this->error([], $e->getMessage() . $e->getLine());
+        }
+
+    }
+
+    /**
+     *
+     * @param $db_obj
+     * @param $join
+     * @return mixed
+     */
+    public function parseJoin($db_obj, $join)
+    {
+        foreach ($join as $item) {
+            list($table, $on, $type) = $item;
+            $type = strtolower($type);
+            switch ( $type ) {
+                case "left":
+                    $db_obj = $db_obj->leftJoin($table, $on);
+                    break;
+                case "inner":
+                    $db_obj = $db_obj->join($table, $on);
+                    break;
+                case "right":
+                    $db_obj = $db_obj->rightjoin($table, $on);
+                    break;
+                case "full":
+                    $db_obj = $db_obj->fulljoin($table, $on);
+                    break;
+                default:
+                    break;
+            }
+        }
+        return $db_obj;
+    }
+
+
+    /**
+     * 给csv写入新的数据
+     * @param $item_list
+     * @param $field_key
+     * @param $temp_line
+     * @param $fp
+     */
+    public function itemExport($item_list, $field_key, $temp_line, $fp)
+    {
+        $item_list = $item_list->toArray();
+        $item_list = $this->handleData($item_list, $field_key);
+        foreach ($item_list as $k => $item_v) {
+            $new_line_value = $temp_line;
+
+            if (isset($item_v[ 'goods_num' ])) {
+                $item_v[ 'goods_num' ] = numberFormat($item_v[ 'goods_num' ]);
+            }
+            if (isset($item_v[ 'num' ])) {
+                $item_v[ 'num' ] = numberFormat($item_v[ 'num' ]);
+            }
+
+            //省市县
+            $address_arr = explode("-", $item_v[ 'full_address' ]);
+            $item_v[ 'province_name' ] = !empty($address_arr[ 0 ]) ? $address_arr[ 0 ] : "";
+            $item_v[ 'city_name' ] = !empty($address_arr[ 1 ]) ? $address_arr[ 1 ] : "";
+            $item_v[ 'district_name' ] = !empty($address_arr[ 2 ]) ? $address_arr[ 2 ] : "";
+
+            foreach ($item_v as $key => $value) {
+                $value = trim($value);
+
+                if ($key == 'full_address') {
+                    $address = $item_v[ 'address' ] ?? '';
+                    $value = $value . $address;
+                }
+                //CSV比较简单,记得转义 逗号就好
+                $values = str_replace(',', '\\', $value . "\t");
+                $values = str_replace("\n", '', $values);
+                $values = str_replace("\r", '', $values);
+                $new_line_value = str_replace("{\$$key}", $values, $new_line_value);
+            }
+            //写入第一行表头
+            fwrite($fp, $new_line_value);
+            //销毁变量, 防止内存溢出
+            unset($new_line_value);
+        }
+    }
+
+    /**
+     * 添加导出记录
+     * @param $data
+     * @return array
+     */
+    public function addExport($data)
+    {
+        $res = model("order_export")->add($data);
+        return $this->success($res);
+    }
+
+    /**
+     * 更新导出记录
+     * @param $data
+     * @param $condition
+     * @return array
+     */
+    public function editExport($data, $condition)
+    {
+        $res = model("order_export")->update($data, $condition);
+        return $this->success($res);
+    }
+
+    /**
+     * 删除导出记录
+     * @param $condition
+     * @return array
+     */
+    public function deleteExport($condition)
+    {
+        //先查询数据
+        $list = model("order_export")->getList($condition, '*');
+        if (!empty($list)) {
+            foreach ($list as $k => $v) {
+                if (file_exists($v[ 'path' ])) {
+                    //删除物理文件路径
+                    if (!unlink($v[ 'path' ])) {
+                        //失败
+                    } else {
+                        //成功
+                    }
+                }
+            }
+            $res = model("order_export")->delete($condition);
+        }
+
+        return $this->success($res);
+    }
+
+    /**
+     * 获取导出记录
+     * @param $condition
+     * @param string $field
+     * @param string $order
+     * @return array
+     */
+    public function getExport($condition, $field = "*", $order = '')
+    {
+        $list = model("order_export")->getList($condition, $field, $order);
+        return $this->success($list);
+    }
+
+    /**
+     * 导出记录
+     * @param array $condition
+     * @param int $page
+     * @param int $page_size
+     * @param string $order
+     * @param string $field
+     * @return array
+     */
+    public function getExportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
+    {
+        $list = model('order_export')->pageList($condition, $field, $order, $page, $page_size);
+        return $this->success($list);
+    }
+
+    /**
+     * 添加导出记录
+     * @param $data
+     * @return array
+     */
+    public function addRefundExport($data)
+    {
+        $res = model("order_refund_export")->add($data);
+        return $this->success($res);
+    }
+
+    /**
+     * 更新导出记录
+     * @param $data
+     * @return array
+     */
+    public function editRefundExport($data, $condition)
+    {
+        $res = model("order_refund_export")->update($data, $condition);
+        return $this->success($res);
+    }
+
+    /**
+     * 删除导出记录
+     * @param $data
+     * @return array
+     */
+    public function deleteRefundExport($condition)
+    {
+        $res = model("order_refund_export")->delete($condition);
+        return $this->success($res);
+    }
+
+    /**
+     * 获取导出记录
+     * @param $member_id
+     * @return array
+     */
+    public function getRefundExport($condition, $field = "*", $order = '')
+    {
+
+        $list = model("order_refund_export")->getList($condition, $field, $order);
+        return $this->success($list);
+    }
+
+    /**
+     * 导出记录
+     * @param array $condition
+     * @param int $page
+     * @param int $page_size
+     * @param string $order
+     * @param string $field
+     * @return array
+     */
+    public function getRefundExportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
+    {
+        $list = model('order_refund_export')->pageList($condition, $field, $order, $page, $page_size);
+        return $this->success($list);
+    }
+}

+ 767 - 0
app/model/order/OrderExport0430.php

@@ -0,0 +1,767 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\model\order;
+
+use app\model\BaseModel;
+use app\model\store\Store as StoreModel;
+use think\facade\Db;
+
+/**
+ * 订单导出
+ * @author Administrator
+ */
+class OrderExport extends BaseModel
+{
+    public $order_field = [
+        'order_no' => '订单编号',
+        'site_name' => '店铺名称',
+        'order_name' => '订单内容',
+        'order_from_name' => '订单来源',
+        'order_type_name' => '订单类型',
+        'order_promotion_name' => '营销活动类型',
+        'out_trade_no' => '支付流水号',
+        'out_trade_no_2' => '支付流水号(多次支付)',
+        'delivery_code' => '整体提货编码',
+        'order_status_name' => '订单状态',
+        'pay_status' => '支付状态',
+        'delivery_status' => '配送状态',
+        'pay_type_name' => '支付方式',
+        'delivery_type_name' => '配送方式',
+        'nickname' => '购买人',
+        'name' => '客户姓名',
+        'mobile' => '客户手机',
+        'telephone' => '客户固定电话',
+        'province_name' => '省',
+        'city_name' => '市',
+        'district_name' => '县',
+        'full_address' => '详细地址',
+        'buyer_ip' => '客户ip',
+        'buyer_ask_delivery_time' => '客户要求配送时间',
+        'buyer_message' => '客户留言信息',
+        'goods_money' => '商品总金额',
+        'delivery_money' => '配送费用',
+        'promotion_money' => '订单优惠金额',
+        'coupon_money' => '优惠券金额',
+        'order_money' => '订单合计金额',
+        'adjust_money' => '订单调整金额',
+        'balance_money' => '余额支付金额',
+        'pay_money' => '抵扣之后应付金额',
+        'refund_money' => '订单退款金额',
+        'pay_time' => '支付时间',
+        'delivery_time' => '配送时间',
+        'sign_time' => '签收时间',
+        'finish_time' => '完成时间',
+        'remark' => '卖家留言',
+        'goods_num' => '商品件数',
+        'delivery_status_name' => '发货状态',
+        'is_settlement' => '是否进行结算',
+        'delivery_store_name' => '门店名称',
+        'promotion_type_name' => '营销类型',
+        'form_data' => '表单数据'
+    ];
+
+    //订单商品信息
+    public $order_goods_field = [
+        'sku_name' => '商品名称',
+        'sku_no' => '商品编码',
+        'goods_class_name' => '商品类型',
+        'price' => '商品卖价',
+        'cost_price' => '成本价',
+        'num' => '购买数量',
+        'goods_money' => '商品总价',
+        'cost_money' => '成本总价',
+        'delivery_status_name' => '配送状态',
+        'delivery_no' => '配送单号',
+        'refund_status_name' => '退款状态',
+        'refund_no' => '退款编号',
+        'refund_type' => '退货方式',
+        'refund_apply_money' => '退款申请金额',
+        'refund_reason' => '退款原因',
+        'refund_real_money' => '实际退款金额',
+        'refund_delivery_name' => '退款公司名称',
+        'refund_delivery_no' => '退款单号',
+        'refund_time' => '实际退款时间',
+        'refund_refuse_reason' => '退款拒绝原因',
+        'refund_action_time' => '申请退款时间',
+        'real_goods_money' => '实际商品购买价',
+        'refund_remark' => '退款说明',
+        'refund_delivery_remark' => '买家退货说明',
+        'refund_address' => '退货地址',
+        'is_refund_stock' => '是否返还库存',
+        'form_data' => '表单数据'
+    ];
+
+
+    public $define_data = [
+        'pay_status' => [ 'type' => 2, 'data' => [ '未支付', '已支付' ] ],//支付状态
+        'delivery_status' => [ 'type' => 2, 'data' => [ '待发货', '已发货', '已收货' ] ],//配送状态
+        'refund_status' => [ 'type' => 2, 'data' => [ '未退款', '已退款' ] ],//退款状态
+//        'buyer_ask_delivery_time' => [ 'type' => 1 ],//购买人要求配送时间
+        'pay_time' => [ 'type' => 1 ],//支付时间
+        'delivery_time' => [ 'type' => 1 ],//订单配送时间
+        'sign_time' => [ 'type' => 1 ],//订单签收时间
+        'finish_time' => [ 'type' => 1 ],//订单完成时间
+        'refund_time' => [ 'type' => 1 ],//退款到账时间
+        'refund_action_time' => [ 'type' => 1 ],//实际退款时间
+        'is_settlement' => [ 'type' => 2, 'data' => [ '否', '是' ] ],//是否进行结算
+        'refund_type' => [ 'type' => 2, 'data' => [ 1 => '仅退款', 2 => '退款退货' ] ],//退货方式
+        'is_refund_stock' => [ 'type' => 2, 'data' => [ '否', '是' ] ],//是否返还库存
+        'form_data' => [ 'type' => 3 ],//表单数据
+    ];
+
+
+    /**
+     *  数据处理
+     * @param $data
+     * @param $field
+     * @return array
+     */
+    public function handleData($data, $field)
+    {
+        $define_data = $this->define_data;
+        foreach ($data as $k => $v) {
+            //获取键
+            $keys = array_keys($v);
+
+            foreach ($keys as $key) {
+
+                if (in_array($key, $field)) {
+
+                    if (array_key_exists($key, $define_data)) {
+
+                        $type = $define_data[ $key ][ 'type' ];
+
+                        switch ( $type ) {
+
+                            case 1:
+                                $data[ $k ][ $key ] = time_to_date((int) $v[ $key ]);
+                                break;
+                            case 2:
+                                $define_data_data = $define_data[ $key ][ 'data' ];
+                                $data[ $k ][ $key ] = !empty($v[ $key ]) ? $define_data_data[ $v[ $key ] ] : '';
+                                break;
+                            case 3:
+                                if (!empty($v[ $key ])) {
+                                    $form_data = json_decode($v[ $key ], true);
+                                    $form_content = '';
+                                    if (is_array($form_data)) {
+                                        foreach ($form_data as $item) {
+                                            $form_content .= $item[ 'value' ][ 'title' ] . ':' . $item[ 'val' ] . '   ';
+                                        }
+                                    }
+                                    $data[ $k ][ $key ] = $form_content;
+                                }
+                                break;
+                        }
+
+                    }
+                }
+            }
+
+        }
+        return $data;
+    }
+
+
+    /**
+     * 查询订单项数据并导出
+     * @param $condition
+     * @param $condition_desc
+     * @param $site_id
+     * @param $join
+     * @param $is_verify
+     * @param $order_label
+     * @return array
+     */
+    public function orderExport($condition, $condition_desc, $site_id, $join, $is_verify, $order_label)
+    {
+        try {
+            //预先创建导出的记录
+            $data = array (
+                'condition' => json_encode($condition_desc),
+                'create_time' => time(),
+                'type' => 1,//订单
+                'status' => 0,
+                'site_id' => $site_id
+            );
+            $records_result = $this->addExport($data);
+
+            $export_id = $records_result[ 'data' ] ?? 0;
+            if ($export_id <= 0) {
+                return $this->error();
+            }
+
+            $alias = 'o';
+
+            $field = $this->order_field;
+            //通过分批次执行数据导出(防止内存超出配置设置的)
+
+            set_time_limit(0);
+            $file_name = date('YmdHis');//csv文件名
+            $file_path = 'upload/order_csv/';
+            if (dir_mkdir($file_path)) {
+                $file_path = $file_path . $file_name . '.csv';
+                //创建一个临时csv文件
+                $fp = fopen($file_path, 'w'); //生成临时文件
+                fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
+                $field_value = [];
+                $field_key = [];
+                $field_key_array = [];
+                //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
+                foreach ($field as $k => $v) {
+                    $field_value[] = $v;
+                    $field_key[] = "{\$$k}";
+                    $field_key_array[] = $k;
+                }
+
+                $table_field = implode(',', $field_key_array);
+                $order_table = Db::name('order')->where($condition)->alias($alias);
+
+                if (!empty($join) || $is_verify != "all") {
+
+                    if (!empty($join) && $is_verify == "all") {
+                        $join = [
+                            [
+                                'order_goods og',
+                                'o.order_id = og.order_id',
+                                'left'
+                            ],
+                        ];
+                    } else if ($is_verify != "all" && empty($join)) {
+                        $join = [
+                            [
+                                'verify v',
+                                'v.verify_code = o.virtual_code',
+                                'left'
+                            ],
+                        ];
+                    } else {
+                        $join = [
+                            [
+                                'order_goods og',
+                                'o.order_id = og.order_id',
+                                'left'
+                            ],
+                            [
+                                'verify v',
+                                'v.verify_code = o.virtual_code',
+                                'left'
+                            ]
+                        ];
+                    }
+
+                }
+
+                $join[] = [
+                    'member m',
+                    'm.member_id = o.member_id',
+                    'left'
+                ];
+                $join[] = [
+                    'form_data fm',
+                    "fm.relation_id = o.order_id and scene = 'order'",
+                    'left'
+                ];
+                $order_table = $this->parseJoin($order_table, $join);
+
+                $first_line = implode(',', $field_value);
+                //写入第一行表头
+                fwrite($fp, $first_line . "\n");
+
+                $temp_line = implode(',', $field_key) . "\n";
+
+                $table_field = 'o.*,m.nickname,fm.form_data';
+                $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
+                    //写入导出信息
+                    $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
+                    unset($item_list);
+
+                }, 'o.order_id');
+
+                $order_table->removeOption();
+                fclose($fp);  //每生成一个文件关闭
+                unset($order_table);
+                //将同步导出记录状态
+                $records_data = array (
+                    'path' => $file_path,
+                    'status' => 1
+                );
+                $records_condition = array (
+                    [ 'export_id', '=', $export_id ]
+                );
+                $this->editExport($records_data, $records_condition);
+                return $this->success();
+            } else {
+                return $this->error();
+            }
+        } catch (\Exception $e) {
+            return $this->error([], $e->getMessage() . $e->getFile() . $e->getLine());
+        }
+
+    }
+
+    /**
+     * 查询订单项数据并导出
+     * @param $condition
+     * @param $condition_desc
+     * @param $site_id
+     * @param $is_verify
+     * @param $order_label
+     * @return array
+     */
+    public function orderGoodsExport($condition, $condition_desc, $site_id, $is_verify, $order_label)
+    {
+
+        try {
+            //预先创建导出的记录
+            $data = array (
+                'condition' => json_encode($condition_desc),
+                'create_time' => time(),
+                'type' => 2,//订单项
+                'status' => 0,
+                'site_id' => $site_id
+            );
+            $records_result = $this->addExport($data);
+
+            $export_id = $records_result[ 'data' ] ?? 0;
+            if ($export_id <= 0) {
+                return $this->error();
+            }
+            $alias = 'og';
+            $join = [
+                [
+                    'order o',
+                    'o.order_id = og.order_id',
+                    'left'
+                ]
+            ];
+
+            if ($is_verify != "all") {
+                $join = [
+                    [
+                        'order o',
+                        'o.order_id = og.order_id',
+                        'left'
+                    ],
+                    [
+                        'verify v',
+                        'v.verify_code = o.virtual_code',
+                        'left'
+                    ]
+                ];
+            }
+
+            $join[] = [
+                'member m',
+                'm.member_id = og.member_id',
+                'left'
+            ];
+            $join[] = [
+                'form_data fm',
+                "fm.relation_id = og.order_goods_id and scene = 'goods'",
+                'left'
+            ];
+
+            $order_field = 'o.order_no,o.site_name,o.order_name,o.order_from_name,o.order_type_name,o.order_promotion_name,o.out_trade_no,o.out_trade_no_2,o.delivery_code,o.order_status_name,o.pay_status,o.delivery_status,o.refund_status,o.pay_type_name,o.delivery_type_name,o.name,o.mobile,o.telephone,o.full_address,o.buyer_ip,o.buyer_ask_delivery_time,o.buyer_message,o.goods_money,o.delivery_money,o.promotion_money,o.coupon_money,o.order_money,o.adjust_money,o.balance_money,o.pay_money,o.refund_money,o.pay_time,o.delivery_time,o.sign_time,o.finish_time,o.remark,o.goods_num,o.delivery_status_name,o.is_settlement,o.delivery_store_name,o.store_id,o.promotion_type_name,o.address,m.nickname';
+
+            $order_goods_field = 'og.order_goods_id,og.sku_name,og.sku_no,og.is_virtual,og.goods_class_name,og.price,og.cost_price,og.num,og.goods_money,og.cost_money,og.delivery_no,og.refund_no,og.refund_type,og.refund_apply_money,og.refund_reason,og.refund_real_money,og.refund_delivery_name,og.refund_delivery_no,og.refund_time,og.refund_refuse_reason,og.refund_action_time,og.real_goods_money,og.refund_remark,og.refund_delivery_remark,og.refund_address,og.is_refund_stock,og.refund_status_name,fm.form_data';
+
+            $table_field = $order_field . ',' . $order_goods_field;
+
+            $order_table = Db::name('order_goods')->where($condition)->alias($alias);
+
+            $order_table = $this->parseJoin($order_table, $join);
+
+            $field = array_merge($this->order_goods_field, $this->order_field);
+            //通过分批次执行数据导出(防止内存超出配置设置的)
+
+            set_time_limit(0);
+
+            $file_name = date('YmdHis');//csv文件名
+            $file_path = 'upload/order_csv/';
+            if (dir_mkdir($file_path)) {
+                //创建一个临时csv文件
+                $file_path = $file_path . $file_name . '.csv';
+                $fp = fopen($file_path, 'w'); //生成临时文件
+                fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
+                $field_value = [];
+                $field_key = [];
+                $field_key_array = [];
+
+                //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
+                foreach ($field as $k => $v) {
+                    $field_value[] = $v;
+                    $field_key[] = "{\$$k}";
+                    $field_key_array[] = $k;
+                }
+                $first_line = implode(',', $field_value);
+
+                //写入第一行表头
+                fwrite($fp, $first_line . "\n");
+
+                $temp_line = implode(',', $field_key) . "\n";
+
+                $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
+                    //写入导出信息
+//                    dump($item_list);
+                    $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
+                    unset($item_list);
+                });
+
+                $order_table->removeOption();
+                fclose($fp);  //每生成一个文件关闭
+                unset($order_table);
+                //将同步导出记录状态
+                $records_data = array (
+                    'path' => $file_path,
+                    'status' => 1
+                );
+                $records_condition = array (
+                    [ 'export_id', '=', $export_id ]
+                );
+                $this->editExport($records_data, $records_condition);
+                return $this->success();
+            } else {
+                return $this->error();
+            }
+        } catch (\Exception $e) {
+            return $this->error([], $e->getMessage() . $e->getLine());
+        }
+
+    }
+
+    /**
+     * 查询订单项数据并导出
+     * @param $condition
+     * @param $condition_desc
+     * @param int $site_id
+     * @return array
+     */
+    public function orderRefundExport($condition, $condition_desc, $site_id = 0)
+    {
+
+        try {
+            //预先创建导出的记录
+            $data = array (
+                'condition' => json_encode($condition_desc),
+                'create_time' => time(),
+                'status' => 0,
+                'site_id' => $site_id
+            );
+            $records_result = $this->addRefundExport($data);
+
+            $export_id = $records_result[ 'data' ] ?? 0;
+            if ($export_id <= 0) {
+                return $this->error();
+            }
+            $alias = 'og';
+            $join = [
+                [
+                    'order o',
+                    'o.order_id = og.order_id',
+                    'left'
+                ],
+                [
+                'store s',
+                    'o.store_id = s.id',
+                    'left'
+                ]
+            ];
+            $order_field = 'o.order_no,o.site_name,o.order_name,o.order_from_name,o.order_type_name,o.order_promotion_name,o.out_trade_no,o.out_trade_no_2,o.delivery_code,o.order_status_name,o.pay_status,o.delivery_status,o.refund_status,o.pay_type_name,o.delivery_type_name,o.name,o.mobile,o.telephone,o.full_address,o.buyer_ip,o.buyer_ask_delivery_time,o.buyer_message,o.goods_money,o.delivery_money,o.promotion_money,o.coupon_money,o.order_money,o.adjust_money,o.balance_money,o.pay_money,o.refund_money,o.pay_time,o.delivery_time,o.sign_time,o.finish_time,o.remark,o.goods_num,o.delivery_status_name,o.is_settlement,o.delivery_store_name,o.promotion_type_name,o.address';
+
+            $order_goods_field = 'og.order_goods_id,og.sku_name,og.sku_no,og.is_virtual,og.goods_class_name,og.price,og.cost_price,og.num,og.goods_money,og.cost_money,og.delivery_no,og.refund_no,og.refund_type,og.refund_apply_money,og.refund_reason,og.refund_real_money,og.refund_delivery_name,og.refund_delivery_no,og.refund_time,og.refund_refuse_reason,og.refund_action_time,og.real_goods_money,og.refund_remark,og.refund_delivery_remark,og.refund_address,og.is_refund_stock,og.refund_status_name';
+
+            $table_field = $order_field . ',' . $order_goods_field;
+
+            $order_table = Db::name('order_goods')->where($condition)->alias($alias);
+
+            $order_table = $this->parseJoin($order_table, $join);
+
+            $field = array_merge($this->order_goods_field, $this->order_field);
+            //通过分批次执行数据导出(防止内存超出配置设置的)
+
+            set_time_limit(0);
+            $file_name = date('YmdHis');//csv文件名
+            $file_path = 'upload/order_csv/';
+            if (dir_mkdir($file_path)) {
+                $file_path = $file_path . $file_name . '.csv';
+                //创建一个临时csv文件
+                $fp = fopen($file_path, 'w'); //生成临时文件
+                fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
+                $field_value = [];
+                $field_key = [];
+                $field_key_array = [];
+                //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
+                foreach ($field as $k => $v) {
+                    $field_value[] = $v;
+                    $field_key[] = "{\$$k}";
+                    $field_key_array[] = $k;
+                }
+                $first_line = implode(',', $field_value);
+                //写入第一行表头
+                fwrite($fp, $first_line . "\n");
+
+                $temp_line = implode(',', $field_key) . "\n";
+
+                $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
+                    //写入导出信息
+                    $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
+                    unset($item_list);
+                });
+
+                $order_table->removeOption();
+                fclose($fp);  //每生成一个文件关闭
+                unset($order_table);
+                //将同步导出记录状态
+                $records_data = array (
+                    'path' => $file_path,
+                    'status' => 1
+                );
+                $records_condition = array (
+                    [ 'export_id', '=', $export_id ]
+                );
+                $this->editRefundExport($records_data, $records_condition);
+                return $this->success();
+            } else {
+                return $this->error();
+            }
+        } catch (\Exception $e) {
+            return $this->error([], $e->getMessage() . $e->getLine());
+        }
+
+    }
+
+    /**
+     *
+     * @param $db_obj
+     * @param $join
+     * @return mixed
+     */
+    public function parseJoin($db_obj, $join)
+    {
+        foreach ($join as $item) {
+            list($table, $on, $type) = $item;
+            $type = strtolower($type);
+            switch ( $type ) {
+                case "left":
+                    $db_obj = $db_obj->leftJoin($table, $on);
+                    break;
+                case "inner":
+                    $db_obj = $db_obj->join($table, $on);
+                    break;
+                case "right":
+                    $db_obj = $db_obj->rightjoin($table, $on);
+                    break;
+                case "full":
+                    $db_obj = $db_obj->fulljoin($table, $on);
+                    break;
+                default:
+                    break;
+            }
+        }
+        return $db_obj;
+    }
+
+
+    /**
+     * 给csv写入新的数据
+     * @param $item_list
+     * @param $field_key
+     * @param $temp_line
+     * @param $fp
+     */
+    public function itemExport($item_list, $field_key, $temp_line, $fp)
+    {
+        $item_list = $item_list->toArray();
+        $item_list = $this->handleData($item_list, $field_key);
+        foreach ($item_list as $k => $item_v) {
+            $new_line_value = $temp_line;
+
+            if (isset($item_v[ 'goods_num' ])) {
+                $item_v[ 'goods_num' ] = numberFormat($item_v[ 'goods_num' ]);
+            }
+            if (isset($item_v[ 'num' ])) {
+                $item_v[ 'num' ] = numberFormat($item_v[ 'num' ]);
+            }
+
+            //省市县
+            $address_arr = explode("-", $item_v[ 'full_address' ]);
+            $item_v[ 'province_name' ] = !empty($address_arr[ 0 ]) ? $address_arr[ 0 ] : "";
+            $item_v[ 'city_name' ] = !empty($address_arr[ 1 ]) ? $address_arr[ 1 ] : "";
+            $item_v[ 'district_name' ] = !empty($address_arr[ 2 ]) ? $address_arr[ 2 ] : "";
+            
+             if(isset($item_v['store_id'])){
+                 $store_info = Db::name('store')->where('store_id = '.$item_v['store_id'])->find() ;
+                 $store_name = '';
+                 if($store_info){
+                     $store_name = $store_info['store_name'];
+                 }
+                 $item_v['delivery_store_name'] = $store_name;
+                 $item_v['site_name'] = $store_name;
+             }
+            foreach ($item_v as $key => $value) {
+                $value = trim($value);
+
+                if ($key == 'full_address') {
+                    $address = $item_v[ 'address' ] ?? '';
+                    $value = $value . $address;
+                }
+                //CSV比较简单,记得转义 逗号就好
+                $values = str_replace(',', '\\', $value . "\t");
+                $values = str_replace("\n", '', $values);
+                $values = str_replace("\r", '', $values);
+                $new_line_value = str_replace("{\$$key}", $values, $new_line_value);
+            }
+
+            //写入第一行表头
+            fwrite($fp, $new_line_value);
+            //销毁变量, 防止内存溢出
+            unset($new_line_value);
+        }
+    }
+
+    /**
+     * 添加导出记录
+     * @param $data
+     * @return array
+     */
+    public function addExport($data)
+    {
+        $res = model("order_export")->add($data);
+        return $this->success($res);
+    }
+
+    /**
+     * 更新导出记录
+     * @param $data
+     * @param $condition
+     * @return array
+     */
+    public function editExport($data, $condition)
+    {
+        $res = model("order_export")->update($data, $condition);
+        return $this->success($res);
+    }
+
+    /**
+     * 删除导出记录
+     * @param $condition
+     * @return array
+     */
+    public function deleteExport($condition)
+    {
+        //先查询数据
+        $list = model("order_export")->getList($condition, '*');
+        if (!empty($list)) {
+            foreach ($list as $k => $v) {
+                if (file_exists($v[ 'path' ])) {
+                    //删除物理文件路径
+                    if (!unlink($v[ 'path' ])) {
+                        //失败
+                    } else {
+                        //成功
+                    }
+                }
+            }
+            $res = model("order_export")->delete($condition);
+        }
+
+        return $this->success($res);
+    }
+
+    /**
+     * 获取导出记录
+     * @param $condition
+     * @param string $field
+     * @param string $order
+     * @return array
+     */
+    public function getExport($condition, $field = "*", $order = '')
+    {
+        $list = model("order_export")->getList($condition, $field, $order);
+        return $this->success($list);
+    }
+
+    /**
+     * 导出记录
+     * @param array $condition
+     * @param int $page
+     * @param int $page_size
+     * @param string $order
+     * @param string $field
+     * @return array
+     */
+    public function getExportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
+    {
+        $list = model('order_export')->pageList($condition, $field, $order, $page, $page_size);
+        return $this->success($list);
+    }
+
+    /**
+     * 添加导出记录
+     * @param $data
+     * @return array
+     */
+    public function addRefundExport($data)
+    {
+        $res = model("order_refund_export")->add($data);
+        return $this->success($res);
+    }
+
+    /**
+     * 更新导出记录
+     * @param $data
+     * @return array
+     */
+    public function editRefundExport($data, $condition)
+    {
+        $res = model("order_refund_export")->update($data, $condition);
+        return $this->success($res);
+    }
+
+    /**
+     * 删除导出记录
+     * @param $data
+     * @return array
+     */
+    public function deleteRefundExport($condition)
+    {
+        $res = model("order_refund_export")->delete($condition);
+        return $this->success($res);
+    }
+
+    /**
+     * 获取导出记录
+     * @param $member_id
+     * @return array
+     */
+    public function getRefundExport($condition, $field = "*", $order = '')
+    {
+
+        $list = model("order_refund_export")->getList($condition, $field, $order);
+        return $this->success($list);
+    }
+
+    /**
+     * 导出记录
+     * @param array $condition
+     * @param int $page
+     * @param int $page_size
+     * @param string $order
+     * @param string $field
+     * @return array
+     */
+    public function getRefundExportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
+    {
+        $list = model('order_refund_export')->pageList($condition, $field, $order, $page, $page_size);
+        return $this->success($list);
+    }
+}

+ 778 - 0
app/model/order/OrderExport0626.php

@@ -0,0 +1,778 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\model\order;
+
+use app\model\BaseModel;
+use app\model\store\Store as StoreModel;
+use think\facade\Db;
+
+/**
+ * 订单导出
+ * @author Administrator
+ */
+class OrderExport extends BaseModel
+{
+    public $order_field = [
+        'order_no' => '订单编号',
+        'site_name' => '店铺名称',
+        'order_name' => '订单内容',
+        'order_from_name' => '订单来源',
+        'order_type_name' => '订单类型',
+        'order_promotion_name' => '营销活动类型',
+        'out_trade_no' => '支付流水号',
+        'out_trade_no_2' => '支付流水号(多次支付)',
+        'delivery_code' => '整体提货编码',
+        'order_status_name' => '订单状态',
+        'pay_status' => '支付状态',
+        'delivery_status' => '配送状态',
+        'pay_type_name' => '支付方式',
+        'order_goods_number'=>'订单商品数量',
+        'delivery_type_name' => '配送方式',
+        'nickname' => '购买人',
+        'name' => '客户姓名',
+        'mobile' => '客户手机',
+        'telephone' => '客户固定电话',
+        'province_name' => '省',
+        'city_name' => '市',
+        'district_name' => '县',
+        'full_address' => '详细地址',
+        'buyer_ip' => '客户ip',
+        'buyer_ask_delivery_time' => '客户要求配送时间',
+        'buyer_message' => '客户留言信息',
+        'goods_money' => '商品总金额',
+        'delivery_money' => '配送费用',
+        'promotion_money' => '订单优惠金额',
+        'coupon_money' => '优惠券金额',
+        'order_money' => '订单合计金额',
+        'adjust_money' => '订单调整金额',
+        'balance_money' => '余额支付金额',
+        'pay_money' => '抵扣之后应付金额',
+        'refund_money' => '订单退款金额',
+        'true_get_money'=>'实际收款',
+        'pay_time' => '支付时间',
+        'delivery_time' => '配送时间',
+        'sign_time' => '签收时间',
+        'finish_time' => '完成时间',
+        'remark' => '卖家留言',
+        'goods_num' => '商品件数',
+        'delivery_status_name' => '发货状态',
+        'is_settlement' => '是否进行结算',
+        'delivery_store_name' => '门店名称',
+        'promotion_type_name' => '营销类型',
+        'form_data' => '表单数据'
+    ];
+
+    //订单商品信息
+    public $order_goods_field = [
+        'sku_name' => '商品名称',
+        'sku_no' => '商品编码',
+        'goods_class_name' => '商品类型',
+        'price' => '商品卖价',
+        'cost_price' => '成本价',
+        'num' => '购买数量',
+        'goods_money' => '商品总价',
+        'cost_money' => '成本总价',
+        'delivery_status_name' => '配送状态',
+        'delivery_no' => '配送单号',
+        'refund_status_name' => '退款状态',
+        'refund_no' => '退款编号',
+        'refund_type' => '退货方式',
+        'refund_apply_money' => '退款申请金额',
+        'refund_reason' => '退款原因',
+        'refund_real_money' => '实际退款金额',
+        'refund_delivery_name' => '退款公司名称',
+        'refund_delivery_no' => '退款单号',
+        'refund_time' => '实际退款时间',
+        'refund_refuse_reason' => '退款拒绝原因',
+        'refund_action_time' => '申请退款时间',
+        'real_goods_money' => '实际商品购买价',
+        'refund_remark' => '退款说明',
+        'refund_delivery_remark' => '买家退货说明',
+        'refund_address' => '退货地址',
+        'is_refund_stock' => '是否返还库存',
+        'form_data' => '表单数据'
+    ];
+
+
+    public $define_data = [
+        'pay_status' => [ 'type' => 2, 'data' => [ '未支付', '已支付' ] ],//支付状态
+        'delivery_status' => [ 'type' => 2, 'data' => [ '待发货', '已发货', '已收货' ] ],//配送状态
+        'refund_status' => [ 'type' => 2, 'data' => [ '未退款', '已退款' ] ],//退款状态
+//        'buyer_ask_delivery_time' => [ 'type' => 1 ],//购买人要求配送时间
+        'pay_time' => [ 'type' => 1 ],//支付时间
+        'delivery_time' => [ 'type' => 1 ],//订单配送时间
+        'sign_time' => [ 'type' => 1 ],//订单签收时间
+        'finish_time' => [ 'type' => 1 ],//订单完成时间
+        'refund_time' => [ 'type' => 1 ],//退款到账时间
+        'refund_action_time' => [ 'type' => 1 ],//实际退款时间
+        'is_settlement' => [ 'type' => 2, 'data' => [ '否', '是' ] ],//是否进行结算
+        'refund_type' => [ 'type' => 2, 'data' => [ 1 => '仅退款', 2 => '退款退货' ] ],//退货方式
+        'is_refund_stock' => [ 'type' => 2, 'data' => [ '否', '是' ] ],//是否返还库存
+        'form_data' => [ 'type' => 3 ],//表单数据
+    ];
+
+
+    /**
+     *  数据处理
+     * @param $data
+     * @param $field
+     * @return array
+     */
+    public function handleData($data, $field)
+    {
+        $define_data = $this->define_data;
+        foreach ($data as $k => $v) {
+            //获取键
+            $keys = array_keys($v);
+
+            foreach ($keys as $key) {
+
+                if (in_array($key, $field)) {
+
+                    if (array_key_exists($key, $define_data)) {
+
+                        $type = $define_data[ $key ][ 'type' ];
+
+                        switch ( $type ) {
+
+                            case 1:
+                                $data[ $k ][ $key ] = time_to_date((int) $v[ $key ]);
+                                break;
+                            case 2:
+                                $define_data_data = $define_data[ $key ][ 'data' ];
+                                $data[ $k ][ $key ] = !empty($v[ $key ]) ? $define_data_data[ $v[ $key ] ] : '';
+                                break;
+                            case 3:
+                                if (!empty($v[ $key ])) {
+                                    $form_data = json_decode($v[ $key ], true);
+                                    $form_content = '';
+                                    if (is_array($form_data)) {
+                                        foreach ($form_data as $item) {
+                                            $form_content .= $item[ 'value' ][ 'title' ] . ':' . $item[ 'val' ] . '   ';
+                                        }
+                                    }
+                                    $data[ $k ][ $key ] = $form_content;
+                                }
+                                break;
+                        }
+
+                    }
+                }
+            }
+
+        }
+        return $data;
+    }
+
+
+    /**
+     * 查询订单项数据并导出
+     * @param $condition
+     * @param $condition_desc
+     * @param $site_id
+     * @param $join
+     * @param $is_verify
+     * @param $order_label
+     * @return array
+     */
+    public function orderExport($condition, $condition_desc, $site_id, $join, $is_verify, $order_label)
+    {
+        try {
+            //预先创建导出的记录
+            $data = array (
+                'condition' => json_encode($condition_desc),
+                'create_time' => time(),
+                'type' => 1,//订单
+                'status' => 0,
+                'site_id' => $site_id
+            );
+            $records_result = $this->addExport($data);
+
+            $export_id = $records_result[ 'data' ] ?? 0;
+            if ($export_id <= 0) {
+                return $this->error();
+            }
+
+            $alias = 'o';
+
+            $field = $this->order_field;
+            //通过分批次执行数据导出(防止内存超出配置设置的)
+
+            set_time_limit(0);
+            $file_name = date('YmdHis');//csv文件名
+            $file_path = 'upload/order_csv/';
+            if (dir_mkdir($file_path)) {
+                $file_path = $file_path . $file_name . '.csv';
+                //创建一个临时csv文件
+                $fp = fopen($file_path, 'w'); //生成临时文件
+                fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
+                $field_value = [];
+                $field_key = [];
+                $field_key_array = [];
+                //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
+                foreach ($field as $k => $v) {
+                    $field_value[] = $v;
+                    $field_key[] = "{\$$k}";
+                    $field_key_array[] = $k;
+                }
+
+                $table_field = implode(',', $field_key_array);
+                $order_table = Db::name('order')->where($condition)->alias($alias);
+
+                if (!empty($join) || $is_verify != "all") {
+
+                    if (!empty($join) && $is_verify == "all") {
+                        $join = [
+                            [
+                                'order_goods og',
+                                'o.order_id = og.order_id',
+                                'left'
+                            ],
+                        ];
+                    } else if ($is_verify != "all" && empty($join)) {
+                        $join = [
+                            [
+                                'verify v',
+                                'v.verify_code = o.virtual_code',
+                                'left'
+                            ],
+                        ];
+                    } else {
+                        $join = [
+                            [
+                                'order_goods og',
+                                'o.order_id = og.order_id',
+                                'left'
+                            ],
+                            [
+                                'verify v',
+                                'v.verify_code = o.virtual_code',
+                                'left'
+                            ]
+                        ];
+                    }
+
+                }
+
+                $join[] = [
+                    'member m',
+                    'm.member_id = o.member_id',
+                    'left'
+                ];
+                $join[] = [
+                    'form_data fm',
+                    "fm.relation_id = o.order_id and scene = 'order'",
+                    'left'
+                ];
+                $order_table = $this->parseJoin($order_table, $join);
+
+                $first_line = implode(',', $field_value);
+                //写入第一行表头
+                fwrite($fp, $first_line . "\n");
+
+                $temp_line = implode(',', $field_key) . "\n";
+
+                $table_field = 'o.*,m.nickname,fm.form_data';
+                $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
+                    //写入导出信息
+//                    dump($item_list);die;
+                    $m = $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
+//                    dump($m);die;
+                    unset($item_list);
+
+                }, 'o.order_id');
+
+                $order_table->removeOption();
+                fclose($fp);  //每生成一个文件关闭
+                unset($order_table);
+                //将同步导出记录状态
+                $records_data = array (
+                    'path' => $file_path,
+                    'status' => 1
+                );
+                $records_condition = array (
+                    [ 'export_id', '=', $export_id ]
+                );
+                $this->editExport($records_data, $records_condition);
+                return $this->success();
+            } else {
+                return $this->error();
+            }
+        } catch (\Exception $e) {
+            return $this->error([], $e->getMessage() . $e->getFile() . $e->getLine());
+        }
+
+    }
+
+    /**
+     * 查询订单项数据并导出
+     * @param $condition
+     * @param $condition_desc
+     * @param $site_id
+     * @param $is_verify
+     * @param $order_label
+     * @return array
+     */
+    public function orderGoodsExport($condition, $condition_desc, $site_id, $is_verify, $order_label)
+    {
+
+        try {
+            //预先创建导出的记录
+            $data = array (
+                'condition' => json_encode($condition_desc),
+                'create_time' => time(),
+                'type' => 2,//订单项
+                'status' => 0,
+                'site_id' => $site_id
+            );
+            $records_result = $this->addExport($data);
+
+            $export_id = $records_result[ 'data' ] ?? 0;
+            if ($export_id <= 0) {
+                return $this->error();
+            }
+            $alias = 'og';
+            $join = [
+                [
+                    'order o',
+                    'o.order_id = og.order_id',
+                    'left'
+                ]
+            ];
+
+            if ($is_verify != "all") {
+                $join = [
+                    [
+                        'order o',
+                        'o.order_id = og.order_id',
+                        'left'
+                    ],
+                    [
+                        'verify v',
+                        'v.verify_code = o.virtual_code',
+                        'left'
+                    ]
+                ];
+            }
+
+            $join[] = [
+                'member m',
+                'm.member_id = og.member_id',
+                'left'
+            ];
+            $join[] = [
+                'form_data fm',
+                "fm.relation_id = og.order_goods_id and scene = 'goods'",
+                'left'
+            ];
+
+            $order_field = 'o.order_no,o.site_name,o.order_name,o.order_from_name,o.order_type_name,o.order_promotion_name,o.out_trade_no,o.out_trade_no_2,o.delivery_code,o.order_status_name,o.pay_status,o.delivery_status,o.refund_status,o.pay_type_name,o.delivery_type_name,o.name,o.mobile,o.telephone,o.full_address,o.buyer_ip,o.buyer_ask_delivery_time,o.buyer_message,o.goods_money,o.delivery_money,o.promotion_money,o.coupon_money,o.order_money,o.adjust_money,o.balance_money,o.pay_money,o.refund_money,o.pay_time,o.delivery_time,o.sign_time,o.finish_time,o.remark,o.goods_num,o.delivery_status_name,o.is_settlement,o.delivery_store_name,o.store_id,o.promotion_type_name,o.address,m.nickname';
+
+            $order_goods_field = 'og.order_goods_id,og.sku_name,og.sku_no,og.is_virtual,og.goods_class_name,og.price,og.cost_price,og.num,og.goods_money,og.cost_money,og.delivery_no,og.refund_no,og.refund_type,og.refund_apply_money,og.refund_reason,og.refund_real_money,og.refund_delivery_name,og.refund_delivery_no,og.refund_time,og.refund_refuse_reason,og.refund_action_time,og.real_goods_money,og.refund_remark,og.refund_delivery_remark,og.refund_address,og.is_refund_stock,og.refund_status_name,fm.form_data';
+
+            $table_field = $order_field . ',' . $order_goods_field;
+
+            $order_table = Db::name('order_goods')->where($condition)->alias($alias);
+
+            $order_table = $this->parseJoin($order_table, $join);
+
+            $field = array_merge($this->order_goods_field, $this->order_field);
+            //通过分批次执行数据导出(防止内存超出配置设置的)
+
+            set_time_limit(0);
+
+            $file_name = date('YmdHis');//csv文件名
+            $file_path = 'upload/order_csv/';
+            if (dir_mkdir($file_path)) {
+                //创建一个临时csv文件
+                $file_path = $file_path . $file_name . '.csv';
+                $fp = fopen($file_path, 'w'); //生成临时文件
+                fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
+                $field_value = [];
+                $field_key = [];
+                $field_key_array = [];
+
+                //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
+                foreach ($field as $k => $v) {
+                    $field_value[] = $v;
+                    $field_key[] = "{\$$k}";
+                    $field_key_array[] = $k;
+                }
+                $first_line = implode(',', $field_value);
+
+                //写入第一行表头
+                fwrite($fp, $first_line . "\n");
+
+                $temp_line = implode(',', $field_key) . "\n";
+
+                $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
+                    //写入导出信息
+//                    dump($item_list);
+                    $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
+                    unset($item_list);
+                });
+
+                $order_table->removeOption();
+                fclose($fp);  //每生成一个文件关闭
+                unset($order_table);
+                //将同步导出记录状态
+                $records_data = array (
+                    'path' => $file_path,
+                    'status' => 1
+                );
+                $records_condition = array (
+                    [ 'export_id', '=', $export_id ]
+                );
+                $this->editExport($records_data, $records_condition);
+                return $this->success();
+            } else {
+                return $this->error();
+            }
+        } catch (\Exception $e) {
+            return $this->error([], $e->getMessage() . $e->getLine());
+        }
+
+    }
+
+    /**
+     * 查询订单项数据并导出
+     * @param $condition
+     * @param $condition_desc
+     * @param int $site_id
+     * @return array
+     */
+    public function orderRefundExport($condition, $condition_desc, $site_id = 0)
+    {
+
+        try {
+            //预先创建导出的记录
+            $data = array (
+                'condition' => json_encode($condition_desc),
+                'create_time' => time(),
+                'status' => 0,
+                'site_id' => $site_id
+            );
+            $records_result = $this->addRefundExport($data);
+
+            $export_id = $records_result[ 'data' ] ?? 0;
+            if ($export_id <= 0) {
+                return $this->error();
+            }
+            $alias = 'og';
+            $join = [
+                [
+                    'order o',
+                    'o.order_id = og.order_id',
+                    'left'
+                ],
+                [
+                'store s',
+                    'o.store_id = s.id',
+                    'left'
+                ]
+            ];
+            $order_field = 'o.order_no,o.site_name,o.order_name,o.order_from_name,o.order_type_name,o.order_promotion_name,o.out_trade_no,o.out_trade_no_2,o.delivery_code,o.order_status_name,o.pay_status,o.delivery_status,o.refund_status,o.pay_type_name,o.delivery_type_name,o.name,o.mobile,o.telephone,o.full_address,o.buyer_ip,o.buyer_ask_delivery_time,o.buyer_message,o.goods_money,o.delivery_money,o.promotion_money,o.coupon_money,o.order_money,o.adjust_money,o.balance_money,o.pay_money,o.refund_money,o.pay_time,o.delivery_time,o.sign_time,o.finish_time,o.remark,o.goods_num,o.delivery_status_name,o.is_settlement,o.delivery_store_name,o.promotion_type_name,o.address';
+
+            $order_goods_field = 'og.order_goods_id,og.sku_name,og.sku_no,og.is_virtual,og.goods_class_name,og.price,og.cost_price,og.num,og.goods_money,og.cost_money,og.delivery_no,og.refund_no,og.refund_type,og.refund_apply_money,og.refund_reason,og.refund_real_money,og.refund_delivery_name,og.refund_delivery_no,og.refund_time,og.refund_refuse_reason,og.refund_action_time,og.real_goods_money,og.refund_remark,og.refund_delivery_remark,og.refund_address,og.is_refund_stock,og.refund_status_name';
+
+            $table_field = $order_field . ',' . $order_goods_field;
+
+            $order_table = Db::name('order_goods')->where($condition)->alias($alias);
+
+            $order_table = $this->parseJoin($order_table, $join);
+
+            $field = array_merge($this->order_goods_field, $this->order_field);
+            //通过分批次执行数据导出(防止内存超出配置设置的)
+
+            set_time_limit(0);
+            $file_name = date('YmdHis');//csv文件名
+            $file_path = 'upload/order_csv/';
+            if (dir_mkdir($file_path)) {
+                $file_path = $file_path . $file_name . '.csv';
+                //创建一个临时csv文件
+                $fp = fopen($file_path, 'w'); //生成临时文件
+                fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
+                $field_value = [];
+                $field_key = [];
+                $field_key_array = [];
+                //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
+                foreach ($field as $k => $v) {
+                    $field_value[] = $v;
+                    $field_key[] = "{\$$k}";
+                    $field_key_array[] = $k;
+                }
+                $first_line = implode(',', $field_value);
+                //写入第一行表头
+                fwrite($fp, $first_line . "\n");
+
+                $temp_line = implode(',', $field_key) . "\n";
+
+                $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
+                    //写入导出信息
+                    $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
+                    unset($item_list);
+                });
+
+                $order_table->removeOption();
+                fclose($fp);  //每生成一个文件关闭
+                unset($order_table);
+                //将同步导出记录状态
+                $records_data = array (
+                    'path' => $file_path,
+                    'status' => 1
+                );
+                $records_condition = array (
+                    [ 'export_id', '=', $export_id ]
+                );
+                $this->editRefundExport($records_data, $records_condition);
+                return $this->success();
+            } else {
+                return $this->error();
+            }
+        } catch (\Exception $e) {
+            return $this->error([], $e->getMessage() . $e->getLine());
+        }
+
+    }
+
+    /**
+     *
+     * @param $db_obj
+     * @param $join
+     * @return mixed
+     */
+    public function parseJoin($db_obj, $join)
+    {
+        foreach ($join as $item) {
+            list($table, $on, $type) = $item;
+            $type = strtolower($type);
+            switch ( $type ) {
+                case "left":
+                    $db_obj = $db_obj->leftJoin($table, $on);
+                    break;
+                case "inner":
+                    $db_obj = $db_obj->join($table, $on);
+                    break;
+                case "right":
+                    $db_obj = $db_obj->rightjoin($table, $on);
+                    break;
+                case "full":
+                    $db_obj = $db_obj->fulljoin($table, $on);
+                    break;
+                default:
+                    break;
+            }
+        }
+        return $db_obj;
+    }
+
+
+    /**
+     * 给csv写入新的数据
+     * @param $item_list
+     * @param $field_key
+     * @param $temp_line
+     * @param $fp
+     */
+    public function itemExport($item_list, $field_key, $temp_line, $fp)
+    {
+        $item_list = $item_list->toArray();
+        $item_list = $this->handleData($item_list, $field_key);
+        foreach ($item_list as $k => $item_v) {
+            $new_line_value = $temp_line;
+
+            if (isset($item_v[ 'goods_num' ])) {
+                $item_v[ 'goods_num' ] = numberFormat($item_v[ 'goods_num' ]);
+            }
+            if (isset($item_v[ 'num' ])) {
+                $item_v[ 'num' ] = numberFormat($item_v[ 'num' ]);
+            }
+
+            //省市县
+            $address_arr = explode("-", $item_v[ 'full_address' ]);
+            $item_v[ 'province_name' ] = !empty($address_arr[ 0 ]) ? $address_arr[ 0 ] : "";
+            $item_v[ 'city_name' ] = !empty($address_arr[ 1 ]) ? $address_arr[ 1 ] : "";
+            $item_v[ 'district_name' ] = !empty($address_arr[ 2 ]) ? $address_arr[ 2 ] : "";
+            
+             if(isset($item_v['store_id'])){
+                 $store_info = Db::name('store')->where('store_id = '.$item_v['store_id'])->find() ;
+                 $store_name = '';
+                 if($store_info){
+                     $store_name = $store_info['store_name'];
+                 }
+                 $item_v['delivery_store_name'] = $store_name;
+                 $item_v['site_name'] = $store_name;
+             }
+
+            $ogwhere['order_id'] = $item_v['order_id'];
+            $order_goods_number = Db::name('order_goods')->where($ogwhere)->count('num');
+
+            $item_v['order_goods_number'] = $order_goods_number;
+            //true_get_money = goods_money - promotion_money -refund_money
+            $item_v['true_get_money'] =  $item_v['goods_money'] -  $item_v['promotion_money'] - $item_v['refund_money'];
+            foreach ($item_v as $key => $value) {
+                $value = trim($value);
+
+                if ($key == 'full_address') {
+                    $address = $item_v[ 'address' ] ?? '';
+                    $value = $value . $address;
+                }
+                //CSV比较简单,记得转义 逗号就好
+                $values = str_replace(',', '\\', $value . "\t");
+                $values = str_replace("\n", '', $values);
+                $values = str_replace("\r", '', $values);
+                $new_line_value = str_replace("{\$$key}", $values, $new_line_value);
+            }
+
+            //写入第一行表头
+            fwrite($fp, $new_line_value);
+            //销毁变量, 防止内存溢出
+            unset($new_line_value);
+        }
+    }
+
+    /**
+     * 添加导出记录
+     * @param $data
+     * @return array
+     */
+    public function addExport($data)
+    {
+        $res = model("order_export")->add($data);
+        return $this->success($res);
+    }
+
+    /**
+     * 更新导出记录
+     * @param $data
+     * @param $condition
+     * @return array
+     */
+    public function editExport($data, $condition)
+    {
+        $res = model("order_export")->update($data, $condition);
+        return $this->success($res);
+    }
+
+    /**
+     * 删除导出记录
+     * @param $condition
+     * @return array
+     */
+    public function deleteExport($condition)
+    {
+        //先查询数据
+        $list = model("order_export")->getList($condition, '*');
+        if (!empty($list)) {
+            foreach ($list as $k => $v) {
+                if (file_exists($v[ 'path' ])) {
+                    //删除物理文件路径
+                    if (!unlink($v[ 'path' ])) {
+                        //失败
+                    } else {
+                        //成功
+                    }
+                }
+            }
+            $res = model("order_export")->delete($condition);
+        }
+
+        return $this->success($res);
+    }
+
+    /**
+     * 获取导出记录
+     * @param $condition
+     * @param string $field
+     * @param string $order
+     * @return array
+     */
+    public function getExport($condition, $field = "*", $order = '')
+    {
+        $list = model("order_export")->getList($condition, $field, $order);
+        return $this->success($list);
+    }
+
+    /**
+     * 导出记录
+     * @param array $condition
+     * @param int $page
+     * @param int $page_size
+     * @param string $order
+     * @param string $field
+     * @return array
+     */
+    public function getExportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
+    {
+        $list = model('order_export')->pageList($condition, $field, $order, $page, $page_size);
+        return $this->success($list);
+    }
+
+    /**
+     * 添加导出记录
+     * @param $data
+     * @return array
+     */
+    public function addRefundExport($data)
+    {
+        $res = model("order_refund_export")->add($data);
+        return $this->success($res);
+    }
+
+    /**
+     * 更新导出记录
+     * @param $data
+     * @return array
+     */
+    public function editRefundExport($data, $condition)
+    {
+        $res = model("order_refund_export")->update($data, $condition);
+        return $this->success($res);
+    }
+
+    /**
+     * 删除导出记录
+     * @param $data
+     * @return array
+     */
+    public function deleteRefundExport($condition)
+    {
+        $res = model("order_refund_export")->delete($condition);
+        return $this->success($res);
+    }
+
+    /**
+     * 获取导出记录
+     * @param $member_id
+     * @return array
+     */
+    public function getRefundExport($condition, $field = "*", $order = '')
+    {
+
+        $list = model("order_refund_export")->getList($condition, $field, $order);
+        return $this->success($list);
+    }
+
+    /**
+     * 导出记录
+     * @param array $condition
+     * @param int $page
+     * @param int $page_size
+     * @param string $order
+     * @param string $field
+     * @return array
+     */
+    public function getRefundExportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
+    {
+        $list = model('order_refund_export')->pageList($condition, $field, $order, $page, $page_size);
+        return $this->success($list);
+    }
+}

+ 107 - 2
app/model/order/OrderRefund.php

@@ -839,6 +839,10 @@ class OrderRefund extends BaseModel
 
             $order_goods_info = model('order_goods')->getInfo([ [ 'order_goods_id', '=', $data[ 'order_goods_id' ] ] ]);
             $this->orderGoodsRefund($order_goods_info);
+            
+             //库存返还 lic
+            $this->refundGoodsStock($order_goods_info,$user_info);
+            
             //同时修改用户的order_money
             model('member')->setDec([ [ 'member_id', '=', $order_goods_info[ 'member_id' ] ] ], 'order_money', $order_goods_info[ 'refund_real_money' ]);
 
@@ -850,7 +854,99 @@ class OrderRefund extends BaseModel
             return $this->error('', $e->getMessage() . $e->getFile() . $e->getLine());
         }
     }
-
+    
+    
+    /**
+     * 库存返还
+     * */
+    public function refundGoodsStock($order_goods_info,$user_info){
+        $gswhere=[];
+        $gswhere[]=['goods_id','=',$order_goods_info['goods_id']];
+        $gswhere[]=['sku_id','=',$order_goods_info['sku_id']];
+        $goods_sku_info = model('goods_sku')->getInfo($gswhere);
+        $update_sku_data['stock'] = $goods_sku_info['stock'] + $order_goods_info['num'];
+        $update_sku_data['real_stock'] = $goods_sku_info['real_stock'] + $order_goods_info['num'];
+        $res = model('goods_sku')->update($update_sku_data,$gswhere);
+
+        $sgswhere = [];
+        $sgswhere[]=['goods_id','=',$order_goods_info['goods_id']];
+        $sgswhere[]=['sku_id','=',$order_goods_info['sku_id']];
+        $sgswhere[]=['store_id','=',$order_goods_info['store_id']];
+        $store_goods_sku_info = model('store_goods_sku')->getInfo($sgswhere);
+        
+        $update_store_sku_data['stock'] = $store_goods_sku_info['stock'] + $order_goods_info['num'];
+        $update_store_sku_data['real_stock'] = $store_goods_sku_info['real_stock'] + $order_goods_info['num'];
+        $res = model('store_goods_sku')->update($update_store_sku_data,$sgswhere);
+        
+        
+        $sgwhere = [];
+        $sgwhere[]=['goods_id','=',$order_goods_info['goods_id']];
+        $sgwhere[]=['store_id','=',$order_goods_info['store_id']];
+        $store_goods_info = model('store_goods')->getInfo($sgwhere);
+        
+        $update_store_goods_data['stock'] = $store_goods_info['stock'] + $order_goods_info['num'];
+        $update_store_goods_data['real_stock'] = $store_goods_info['real_stock'] + $order_goods_info['num'];
+        $res = model('store_goods')->update($update_store_goods_data,$sgwhere);
+        
+        $store_info = model('store')->getInfo(['store_id'=>$order_goods_info['store_id']]);
+        // $goods_sku_info = model('goods_sku')->getInfo(['goods_id'=>$order_goods_info['goods_id'],'sku_id'=>$order_goods_info['sku_id']]);
+        
+        $document_type_info = [
+            'name' => '退货入库单',
+            'type' => 'input',
+            'prefix' => 'THRK',
+            'key' => 'REFUND',
+        ];
+        outFileLog($document_type_info,'refund','$document_type_info');
+        $prefix = $document_type_info[ 'prefix' ];//单据前缀
+        $type = $document_type_info[ 'type' ];//出入库类型
+        $document_no = $this->createDocumentNo($prefix);
+        outFileLog($document_no,'refund','$document_no');
+        // $user_info = $this->user_info;
+        outFileLog($user_info,'refund','$user_info');
+        $params['site_id']=$order_goods_info['site_id'];
+        $params['document_no']=$document_no;
+        $params['key']=$document_type_info['key'];
+        $params['type']=$type;
+        $params['goods_money']=$order_goods_info['goods_money'];
+        $params['document_money']=$order_goods_info['goods_money'];
+        $params['status']=2;
+        $params['create_time']=time();
+        $params['store_id']=$order_goods_info['store_id'];
+        $params['store_name']=$store_info['store_name'];
+        $params['operater']=$user_info['uid'];
+        $params['operater_name']=$user_info['username'];
+        $params['time']=time();
+
+        $document_id = model('stock_document')->add($params);
+
+        $dgData['document_id']=$document_id;
+        $dgData['goods_id']=$order_goods_info['goods_id'];
+        $dgData['goods_sku_id']=$order_goods_info['sku_id'];
+        $dgData['goods_sku_no']=$order_goods_info['sku_no'];
+        $dgData['goods_sku_img']=$order_goods_info['sku_image'];
+        $dgData['goods_sku_name']=$order_goods_info['sku_name'];
+        $dgData['goods_num']=$order_goods_info['num'];
+        $dgData['goods_price']=$order_goods_info['price'];
+        $dgData['create_time']=time();
+        $dgData['site_id']=$order_goods_info['site_id'];
+        $dgData['before_stock']=$goods_sku_info['stock'];
+        $dgData['after_stock']=$goods_sku_info['stock'] +  $order_goods_info['num'];
+        $dgData['before_goods_price']=$goods_sku_info['cost_price'];
+        $dgData['after_goods_price']=$goods_sku_info['cost_price'];
+        $dgData['store_id']=$order_goods_info['store_id'];
+        $dgData['operater']=$user_info['uid'];
+        $dgData['operater_name']=$user_info['username'];
+        $dgData['before_store_stock']=$goods_sku_info['stock'];
+        $dgData['before_store_goods_price']=$goods_sku_info['cost_price'];
+        $dgData['after_store_stock']=$goods_sku_info['stock']+  $order_goods_info['num'];
+        $dgData['after_store_goods_price']=$goods_sku_info['cost_price'];
+        $dgData['total_goods_money']=$order_goods_info['goods_money'];
+        $document_id = model('stock_document_goods')->add($dgData);
+        
+        return  true;
+    }
+    
     /**
      * 退款完成操作
      * @param $order_goods_id
@@ -1077,7 +1173,16 @@ class OrderRefund extends BaseModel
         }
     }
 
-
+/**
+     * 创建出入库单号
+     * @param $prefix
+     * @return string
+     */
+    public function createDocumentNo($prefix)
+    {
+        $document_no = $prefix . date('ymdhis', time()) . rand(1111, 9999);
+        return $document_no;
+    }
     /**
      * 获取订单售后操作列表
      * @param array $condition

+ 25 - 8
app/model/store/Stat.php

@@ -209,9 +209,14 @@ class Stat extends BaseModel
             [ 'day_time', '>=', $start_time ],
             [ 'day_time', '<=', $end_time ],
         ];
+        // if (!empty($store_id)) {
+        //     $condition[] = [ 'store_id', '=', $store_id ];
+        // }else{
+        //     $condition[] = [ 'store_id', 'in', $store_id_arr ];
+        // }
         if (!empty($store_id)) {
             $condition[] = [ 'store_id', '=', $store_id ];
-        }else{
+        }else if(!empty($store_id_arr)){
             $condition[] = [ 'store_id', 'in', $store_id_arr ];
         }
         $field = array_map(function($field) {
@@ -235,7 +240,7 @@ class Stat extends BaseModel
      */
     private function getEstimatedRevenue()
     {
-        return 'billing_money + buycard_money + recharge_money - refund_money as expected_earnings_total_money';
+        return 'ifnull(sum(billing_money) + sum(buycard_money) + sum(recharge_money) - sum(refund_money),0) as expected_earnings_total_money';
     }
 
     /**
@@ -254,10 +259,16 @@ class Stat extends BaseModel
             [ 'day_time', '<=', $end_time ],
         ];
         if (!empty($store_id)) {
-            $condition[] = [ 'store_id', '=', $store_id ];
+            $condition[] = [ 'store_id', 'in', $store_id ];
         }
-        $field = '*,' . $this->getEstimatedRevenue();
-        $list = model('stat_store')->getList($condition, $field);
+        // $field = '*,' . $this->getEstimatedRevenue();
+        // $list = model('stat_store')->getList($condition, $field);
+        
+        $field = 'day,sum(billing_count) billing_count,sum(billing_money) billing_money ,sum(buycard_count) buycard_count, 
+                sum(buycard_money) buycard_money ,sum(recharge_count) recharge_count,
+                sum(recharge_money) recharge_money,sum(refund_count) refund_count,sum(refund_money) refund_money,sum(order_member_count) order_member_count,sum(balance_money) balance_money ,' . $this->getEstimatedRevenue();
+        $list = model('stat_store')->getList($condition, $field,'day asc','','','day');
+        
         return $this->success($list);
     }
 
@@ -277,9 +288,15 @@ class Stat extends BaseModel
             [ 'month', '=', $month ],
             [ 'day', '=', $day ],
         ];
-        if (!empty($store_id)) $condition[] = [ 'store_id', '=', $store_id ];
-        $field = '*,' . $this->getEstimatedRevenue();
-        $list = model('stat_store_hour')->getList($condition, $field, 'id desc');
+        if (!empty($store_id)) $condition[] = [ 'store_id', 'in', $store_id ];
+        // $field = '*,' . $this->getEstimatedRevenue();
+        // $list = model('stat_store_hour')->getList($condition, $field, 'id desc');
+        
+        $field = 'year,month,day,hour,sum(billing_count) billing_count,sum(billing_money) billing_money ,sum(buycard_count) buycard_count, 
+                sum(buycard_money) buycard_money ,sum(recharge_count) recharge_count,
+                sum(recharge_money) recharge_money,sum(refund_count) refund_count,sum(refund_money) refund_money,sum(order_member_count) order_member_count,sum(balance_money) balance_money ,' . $this->getEstimatedRevenue();
+        $list = model('stat_store_hour')->getList($condition, $field, '','','','hour');
+        
         return $this->success($list);
     }
 

+ 308 - 0
app/model/store/Stat0626.php

@@ -0,0 +1,308 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\model\store;
+
+use app\model\BaseModel;
+use Carbon\Carbon;
+use think\facade\Cache;
+use think\facade\Db;
+use think\facade\Log;
+use app\model\system\Stat as SystemStat;
+
+/**
+ * 统计
+ * @author Administrator
+ *
+ */
+class Stat extends BaseModel
+{
+    /**
+     * 添加店铺统计(按照天统计)
+     * @param array $data
+     */
+    public function addStoreStat($data)
+    {
+        Log::write('addStoreStat' . '-' . date('y-m-d H:i:s', time()) . '-' . json_encode($data));
+        $site_id = $data[ 'site_id' ];
+        $store_id = $data[ 'store_id' ] ?? 0;
+        $carbon = Carbon::now();
+        $condition = [
+            'site_id' => $site_id,
+            'year' => $carbon->year,
+            'month' => $carbon->month,
+            'day' => $carbon->day,
+            'store_id' => $store_id,
+        ];
+
+        $info = model('stat_store')->getInfo($condition, 'id');
+
+        //在这里会整体处理总支出   总收入
+
+        $stat_data = $this->getStatData($data);
+        if (empty($info)) {
+            $insert_data = [
+                'site_id' => $site_id,
+                'store_id' => $store_id,
+                'year' => $carbon->year,
+                'month' => $carbon->month,
+                'day' => $carbon->day,
+                'day_time' => time(),
+                'create_time' => time()
+            ];
+            $insert_data = array_merge($insert_data, $stat_data);
+            $res = model('stat_store')->add(
+                $insert_data
+            );
+
+        } else {
+            $update_data = array ();
+            if (!empty($stat_data)) {
+                foreach ($stat_data as $k => $v) {
+                    if ($v > 0) {
+                        $update_data[ $k ] = Db::raw($k . '+' . $v);
+                    } else if ($v < 0) {
+                        $update_data[ $k ] = Db::raw($k . '-' . abs($v));
+                    }
+                }
+            }
+            if (!empty($update_data)) {
+                $res = Db::name('stat_store')->where($condition)
+                    ->update($update_data);
+                Log::write('addStoreStat' . Db::name('stat_store')->getLastSql());
+                Cache::tag("cache_table" . "stat_store")->clear();
+
+            }
+        }
+        //增加当天时统计
+        $this->addShopHourStat($data, $carbon);
+        // 添加店铺统计
+        $shop_stat = [
+            'site_id' => $site_id
+        ];
+        foreach ($stat_data as $k => $value) {
+            $shop_stat[ 'cashier_' . $k ] = $value;
+        }
+        ( new SystemStat() )->addShopStat($shop_stat);
+        return $this->success($res ?? 0);
+
+    }
+
+    /**
+     * 增加当日的时统计记录
+     * @param $data
+     */
+    public function addShopHourStat($data, $carbon)
+    {
+        $site_id = $data[ 'site_id' ];
+        $store_id = $data[ 'store_id' ] ?? 0;
+        $condition = [
+            'site_id' => $site_id,
+            'store_id' => $store_id,
+            'year' => $carbon->year,
+            'month' => $carbon->month,
+            'day' => $carbon->day,
+            'hour' => $carbon->hour
+        ];
+        $info = model('stat_store_hour')->getInfo($condition, 'id');
+
+        //在这里会整体处理总支出   总收入  总预计收入
+
+        $stat_data = $this->getStatData($data);
+
+        if (empty($info)) {
+            $insert_data = [
+                'site_id' => $site_id,
+                'store_id' => $store_id,
+                'year' => $carbon->year,
+                'month' => $carbon->month,
+                'day' => $carbon->day,
+                'day_time' => time(),
+                'create_time' => time(),
+                'hour' => $carbon->hour
+            ];
+            $insert_data = array_merge($insert_data, $stat_data);
+            $res = model('stat_store_hour')->add(
+                $insert_data
+            );
+
+        } else {
+            $update_data = array ();
+            if (!empty($stat_data)) {
+                foreach ($stat_data as $k => $v) {
+                    if ($v > 0) {
+                        $update_data[ $k ] = Db::raw($k . '+' . $v);
+                    } else if ($v < 0) {
+                        $update_data[ $k ] = Db::raw($k . '-' . abs($v));
+                    }
+                }
+            }
+            if (!empty($update_data)) {
+                $res = Db::name('stat_store_hour')->where($condition)
+                    ->update($update_data);
+                Cache::tag("cache_table" . "stat_store_hour")->clear();
+            }
+
+        }
+        return $this->success($res ?? 0);
+    }
+
+    /**
+     * 整理数据
+     * @param $data
+     * @return mixed
+     */
+    public function getStatData($data)
+    {
+        unset($data[ 'site_id' ]);
+        unset($data[ 'store_id' ]);
+        $data = array_filter($data);
+        return $data;
+    }
+
+    /**
+     * 获取店铺统计(按照天查询)
+     * @param unknown $site_id 0表示平台
+     * @param unknown $year
+     * @param unknown $month
+     * @param unknown $day
+     */
+    public function getStatShop($site_id, $year, $month, $day, $store_id = 0)
+    {
+        $condition = [
+            'site_id' => $site_id,
+            'year' => $year,
+            'month' => $month,
+            'day' => $day
+        ];
+        if (!empty($store_id)) $condition[ 'store_id' ] = $store_id;
+
+        $info = model('stat_store')->setIsCache(0)->getInfo($condition);
+
+        if (empty($info)) {
+            $condition[ 'day_time' ] = strtotime(date("{$year}-{$month}-{$day}"));
+            model('stat_store')->add($condition);
+            $info = model('stat_store')->getInfo($condition);
+        }
+        return $this->success($info);
+    }
+
+    /**
+     * 获取数据之和
+     * @param $site_id
+     * @param $start_time
+     * @param $end_time
+     * @param int $store_id
+     * @return array
+     */
+    // public function getShopStatSum($site_id, $start_time, $end_time, $store_id = 0)
+    public function getShopStatSum($site_id, $start_time, $end_time, $store_id = 0,$store_id_arr=[])
+    {
+        $condition = [
+            [ 'site_id', '=', $site_id ],
+            [ 'day_time', '>=', $start_time ],
+            [ 'day_time', '<=', $end_time ],
+        ];
+        if (!empty($store_id)) {
+            $condition[] = [ 'store_id', '=', $store_id ];
+        }else{
+            $condition[] = [ 'store_id', 'in', $store_id_arr ];
+        }
+        $field = array_map(function($field) {
+            return "ifnull(sum($field), 0) as $field";
+        }, $this->getStatField());
+        $field[] = $this->getEstimatedRevenueSum();
+        $list = model('stat_store')->getInfo($condition, implode(',', $field));
+        return $this->success($list);
+    }
+
+    /**
+     * 获取预计收入总和
+     */
+    private function getEstimatedRevenueSum()
+    {
+        return 'ifnull(sum(billing_money) + sum(buycard_money) + sum(recharge_money) - sum(refund_money), 0) as expected_earnings_total_money';
+    }
+
+    /**
+     * 获取预计收入
+     */
+    private function getEstimatedRevenue()
+    {
+        return 'billing_money + buycard_money + recharge_money - refund_money as expected_earnings_total_money';
+    }
+
+    /**
+     * 获取店铺统计列表
+     * @param $site_id
+     * @param $start_time
+     * @param $end_time
+     * @param int $store_id
+     * @return array
+     */
+    public function getShopStatList($site_id, $start_time, $end_time, $store_id = 0)
+    {
+        $condition = [
+            [ 'site_id', '=', $site_id ],
+            [ 'day_time', '>=', $start_time ],
+            [ 'day_time', '<=', $end_time ],
+        ];
+        if (!empty($store_id)) {
+            $condition[] = [ 'store_id', '=', $store_id ];
+        }
+        $field = '*,' . $this->getEstimatedRevenue();
+        $list = model('stat_store')->getList($condition, $field);
+        return $this->success($list);
+    }
+
+    /**
+     * 获取小时统计数据
+     * @param $site_id
+     * @param $year
+     * @param $month
+     * @param $day
+     * @return array
+     */
+    public function getShopStatHourList($site_id, $year, $month, $day, $store_id = 0)
+    {
+        $condition = [
+            [ 'site_id', '=', $site_id ],
+            [ 'year', '=', $year ],
+            [ 'month', '=', $month ],
+            [ 'day', '=', $day ],
+        ];
+        if (!empty($store_id)) $condition[] = [ 'store_id', '=', $store_id ];
+        $field = '*,' . $this->getEstimatedRevenue();
+        $list = model('stat_store_hour')->getList($condition, $field, 'id desc');
+        return $this->success($list);
+    }
+
+    /**
+     * 获取天统计表统计字段
+     * @return array
+     */
+    public function getStatField()
+    {
+        $fields = Db::name('stat_store')->getTableFields('');
+        $fields = array_values(array_diff($fields, [ 'id', 'site_id', 'year', 'month', 'day', 'day_time', 'store_id' ]));
+        return $fields;
+    }
+
+    /**
+     * 获取时统计表统计字段
+     * @return array
+     */
+    public function getStatHourField()
+    {
+        $fields = Db::name('stat_store_hour')->getTableFields('');
+        $fields = array_values(array_diff($fields, [ 'id', 'site_id', 'year', 'month', 'day', 'hour', 'day_time', 'store_id' ]));
+        return $fields;
+    }
+}

+ 0 - 2
app/model/system/Menu.php

@@ -34,9 +34,7 @@ class Menu extends BaseModel
     {
 
         $data = json_encode([ $condition, $field, $order, $limit ]);
-
         $cache = Cache::get("getMenuList_" . $data);
-
         if (!empty($cache)) {
             return $this->success($cache);
         }

+ 18 - 13
app/model/system/Stat.php

@@ -20,7 +20,6 @@ use app\model\stat\MemberWithdrawStat;
 use app\model\stat\OrderStat;
 use app\model\stat\RechargeStat;
 use app\model\stat\VisitStat;
-use app\model\store\Store;
 use Carbon\Carbon;
 use think\facade\Cache;
 use think\facade\Db;
@@ -204,7 +203,7 @@ class Stat extends BaseModel
      * @param unknown $site_id
      * @param unknown $start_time
      */
-    public function getShopStatSum($site_id, $start_time = 0, $end_time = 0 )
+    public function getShopStatSum($site_id, $start_time = 0, $end_time = 0)
     {
         $condition = [
             [ 'site_id', '=', $site_id ]
@@ -215,14 +214,14 @@ class Stat extends BaseModel
         if (!empty($end_time)) {
             $condition[] = [ 'day_time', '<=', $end_time ];
         }
-
         $field = array_map(function($field) {
             switch ( $field ) {
                 case 'earnings_total_money':
                     return "sum(earnings_total_money) + sum(cashier_billing_money) + sum(cashier_buycard_money) as earnings_total_money";
                     break;
                 case 'expenditure_total_money':
-                    return "sum(expenditure_total_money) + sum(cashier_refund_money) as expenditure_total_money";
+                    // return "sum(expenditure_total_money) + sum(cashier_refund_money) as expenditure_total_money";
+                    return "sum(expenditure_total_money) as expenditure_total_money";
                     break;
                 case 'cashier_billing_money':
                     return "sum(cashier_billing_money) + sum(cashier_buycard_money) as cashier_order_pay_money";
@@ -231,7 +230,8 @@ class Stat extends BaseModel
                     return "sum(refund_total) + sum(cashier_refund_money) as refund_total";
                     break;
                 case 'expected_earnings_total_money':
-                    return "sum(expected_earnings_total_money) + sum(cashier_billing_money) + sum(cashier_buycard_money) - sum(cashier_refund_money) as expected_earnings_total_money";
+                    // return "sum(expected_earnings_total_money) + sum(cashier_billing_money) + sum(cashier_buycard_money) - sum(cashier_refund_money) as expected_earnings_total_money";
+                    return "sum(earnings_total_money) + sum(cashier_billing_money) + sum(cashier_buycard_money) - sum(expenditure_total_money)  as expected_earnings_total_money";
                     break;
                 case 'order_pay_count':
                     return "sum(order_pay_count) + sum(cashier_billing_count) + sum(cashier_buycard_count) as order_pay_count";
@@ -240,6 +240,8 @@ class Stat extends BaseModel
                     return "sum($field) as $field";
             }
         }, $this->getStatField());
+        // outFileLog($condition,'stat','$condition');
+        //   outFileLog($field,'stat','$field');
         $info = model('stat_shop')->getInfo($condition, $field);
         if (isset($info[ 'goods_order_count' ])) {
             $info[ 'goods_order_count' ] = numberFormat($info[ 'goods_order_count' ]);
@@ -259,7 +261,6 @@ class Stat extends BaseModel
             [ 'day_time', '>=', $start_time ],
             [ 'day_time', '<=', $end_time ],
         ];
-
         $list = model('stat_shop')->getList($condition, $this->handleStatField());
         foreach ($list as $k => $v) {
             $list[ $k ][ 'goods_order_count' ] = numberFormat($list[ $k ][ 'goods_order_count' ]);
@@ -388,17 +389,21 @@ class Stat extends BaseModel
             [ 'og.refund_status', '<>', OrderRefund::REFUND_COMPLETE ]
         ];
         if (!empty($start_time) && empty($end_time)) {
-            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            // $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $condition[] = [ 'o.create_time', '>=', $start_time ];
         } elseif (empty($start_time) && !empty($end_time)) {
-            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $condition[] = [ 'o.create_time', '<=', $end_time ];
         } elseif (!empty($start_time) && !empty($end_time)) {
-            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $condition[] = [ 'o.create_time', 'between', [ $start_time, $end_time ] ];
         }
         $join = [
             [ 'order o', 'og.order_id = o.order_id', 'left' ],
             [ 'goods g', 'og.goods_id = g.goods_id', 'right' ]
         ];
-        $list = model('order_goods')->pageList($condition, 'og.goods_id,g.goods_name,g.goods_state,SUM(og.num) AS sale_num', 'sale_num desc', $page_index, $page_size, 'og', $join, 'og.goods_id');
+        $list = model('order_goods')->pageList($condition, 'og.goods_id,g.goods_name,g.goods_state,SUM(FLOOR(og.num)) AS sale_num', 'sale_num desc', $page_index, $page_size, 'og', $join, 'og.goods_id');
+        // foreach($list as &$v){
+        //     $v['sale_num'] = round($v['sale_num'],0);
+        // }
         return $this->success($list);
     }
 
@@ -421,11 +426,11 @@ class Stat extends BaseModel
             [ 'og.refund_status', '<>', OrderRefund::REFUND_COMPLETE ]
         ];
         if (!empty($start_time) && empty($end_time)) {
-            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $condition[] = [ 'o.create_time', '>=', $start_time ];
         } elseif (empty($start_time) && !empty($end_time)) {
-            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $condition[] = [ 'o.create_time', '<=', $end_time ];
         } elseif (!empty($start_time) && !empty($end_time)) {
-            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $condition[] = [ 'o.create_time', 'between', [ $start_time, $end_time ] ];
         }
         $join = [
             [ 'order o', 'og.order_id = o.order_id', 'left' ],

+ 1176 - 0
app/shop/controller/Member_bak.php

@@ -0,0 +1,1176 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\shop\controller;
+
+use addon\fenxiao\model\Fenxiao;
+use addon\supermember\model\MemberCard;
+use app\model\member\Member as MemberModel;
+use app\model\member\MemberAddress as MemberAddressModel;
+use app\model\member\MemberLabel as MemberLabelModel;
+use app\model\member\MemberLevel as MemberLevelModel;
+use app\model\member\MemberAccount as MemberAccountModel;
+use app\model\member\Config as ConfigModel;
+use app\model\system\Stat;
+use Carbon\Carbon;
+use think\facade\Db;
+use phpoffice\phpexcel\Classes\PHPExcel;
+use phpoffice\phpexcel\Classes\PHPExcel\Writer\Excel2007;
+use app\model\upload\Upload as UploadModel;
+use app\model\member\MemberCluster as MemberClusterModel;
+use think\facade\Config;
+use addon\coupon\model\Coupon as CouponModel;
+
+/**
+ * 会员管理 控制器
+ */
+class Member extends BaseShop
+{
+    /*
+     *  会员概况
+     */
+    public function index()
+    {
+        $member = new MemberModel();
+        // 累计会员数
+        $total_count = $member->getMemberCount([ [ 'site_id', '=', $this->site_id ] ]);
+        // 今日新增数
+        $newadd_count = $member->getMemberCount([ [ 'site_id', '=', $this->site_id ], [ 'reg_time', 'between', [ date_to_time(date('Y-m-d 00:00:00')), time() ] ] ]);
+        // 已购会员数
+        $buyed_count = $member->getMemberCount([ [ 'site_id', '=', $this->site_id ], [ 'order_num', '>', 0 ] ]);
+        $this->assign('data', [
+            'total_count' => $total_count[ 'data' ],
+            'newadd_count' => $newadd_count[ 'data' ],
+            'buyed_count' => $buyed_count[ 'data' ]
+        ]);
+
+        $stat_shop_model = new Stat();
+        $today = Carbon::now();
+        $yesterday = Carbon::yesterday();
+        $stat_today = $stat_shop_model->getStatShop($this->site_id, $today->year, $today->month, $today->day)[ 'data' ];
+        $stat_yesterday = $stat_shop_model->getStatShop($this->site_id, $yesterday->year, $yesterday->month, $yesterday->day)[ 'data' ];
+        $this->assign('today', $stat_today);
+        $this->assign('yesterday', $stat_yesterday);
+
+        return $this->fetch('member/index');
+    }
+
+    /**
+     * 获取区域会员数量
+     */
+    public function areaCount()
+    {
+        if (request()->isAjax()) {
+            $member = new MemberModel();
+            $handle = input('handle', false);
+            $res = $member->getMemberCountByArea($this->site_id, $handle);
+            return $res;
+        }
+    }
+
+    /**
+     * 会员列表
+     */
+    public function memberList()
+    {
+        //判断分销是否存在
+        $is_exit_fenxiao = addon_is_exit('fenxiao');
+        $cluster_id = input('cluster_id', '');//获取会员群体
+        $member_cluster_model = new MemberClusterModel();
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $search_text = input('search_text', '');
+            $search_text_type = input('search_text_type', 'username');//可以传username mobile email
+            $level_id = input('level_id', 0);
+            $label_id = input('label_id', 0);
+            $reg_start_date = input('reg_start_date', '');
+            $reg_end_date = input('reg_end_date', '');
+            $status = input('status', '');
+            $cluster_id = input('cluster_id', '');//获取会员群体
+            $last_login_time_start = input('last_login_time_start', '');//上次登录时间
+            $last_login_time_end = input('last_login_time_end', '');
+            $start_order_complete_num = input('start_order_complete_num', '');//成交次数
+            $end_order_complete_num = input('end_order_complete_num', '');
+            $start_order_complete_money = input('start_order_complete_money', '');//消费金额
+            $end_order_complete_money = input('end_order_complete_money', '');
+            $start_point = input('start_point', '');//积分
+            $end_point = input('end_point', '');
+            $start_balance = input('start_balance', '');//余额
+            $end_balance = input('end_balance', '');
+            $start_growth = input('start_growth', '');//成长值
+            $end_growth = input('end_growth', '');
+            $login_type = input('login_type', '');//来源渠道
+            $is_member = input('is_member', '');
+
+            $condition[] = [ 'site_id', '=', $this->site_id ];
+            //下拉选择
+            $condition[] = [ $search_text_type, 'like', "%" . $search_text . "%" ];
+            //会员等级
+            if ($level_id != 0) {
+                $condition[] = [ 'member_level', '=', $level_id ];
+            }
+            //会员标签
+            if ($label_id != 0) {
+                //raw方法变为public类型 需要实例化以后调用
+                $condition[] = [ "", 'exp', Db::raw("FIND_IN_SET({$label_id}, member_label)") ];
+            }
+            //注册时间
+            if ($reg_start_date != '' && $reg_end_date != '') {
+                $condition[] = [ 'reg_time', 'between', [ strtotime($reg_start_date), strtotime($reg_end_date) ] ];
+            } else if ($reg_start_date != '' && $reg_end_date == '') {
+                $condition[] = [ 'reg_time', '>=', strtotime($reg_start_date) ];
+            } else if ($reg_start_date == '' && $reg_end_date != '') {
+                $condition[] = [ 'reg_time', '<=', strtotime($reg_end_date) ];
+            }
+            //会员状态
+            if ($status != '') {
+                $condition[] = [ 'status', '=', $status ];
+            }
+
+            //会员群体
+            if ($cluster_id != '') {
+                //获取会员群体的member_id值
+                $member_cluster_info = $member_cluster_model->getMemberClusterInfo([ "cluster_id" => $cluster_id ], 'member_ids');
+                if (!empty($member_cluster_info[ 'data' ][ 'member_ids' ])) {
+                    $condition[] = [ 'member_id', 'in', $member_cluster_info[ 'data' ][ 'member_ids' ] ];
+                }
+            }
+            //上次访问时间
+            if ($last_login_time_start != '' && $last_login_time_end != '') {
+                $condition[] = [ 'last_login_time', 'between', [ strtotime($last_login_time_start), strtotime($last_login_time_end) ] ];
+            } else if ($last_login_time_start != '' && $last_login_time_end == '') {
+                $condition[] = [ 'last_login_time', '>=', strtotime($last_login_time_start) ];
+            } else if ($last_login_time_start == '' && $last_login_time_end != '') {
+                $condition[] = [ 'last_login_time', '<=', strtotime($last_login_time_end) ];
+            }
+            //成交次数
+            if ($start_order_complete_num != '' && $end_order_complete_num != '') {
+                $condition[] = [ 'order_complete_num', 'between', [ $start_order_complete_num, $end_order_complete_num ] ];
+            } else if ($start_order_complete_num != '' && $end_order_complete_num == '') {
+                $condition[] = [ 'order_complete_num', '>=', $start_order_complete_num ];
+            } else if ($start_order_complete_num == '' && $end_order_complete_num != '') {
+                $condition[] = [ 'order_complete_num', '<=', $end_order_complete_num ];
+            }
+            //消费金额
+            if ($start_order_complete_money != '' && $end_order_complete_money != '') {
+                $condition[] = [ 'order_complete_money', 'between', [ $start_order_complete_money, $end_order_complete_money ] ];
+            } else if ($start_order_complete_money != '' && $end_order_complete_money == '') {
+                $condition[] = [ 'order_complete_money', '>=', $start_order_complete_money ];
+            } else if ($start_order_complete_money == '' && $end_order_complete_money != '') {
+                $condition[] = [ 'order_complete_money', '<=', $end_order_complete_money ];
+            }
+            //积分
+            if ($start_point != '' && $end_point != '') {
+                $condition[] = [ 'point', 'between', [ $start_point, $end_point ] ];
+            } else if ($start_point != '' && $end_point == '') {
+                $condition[] = [ 'point', '>=', $start_point ];
+            } else if ($start_point == '' && $end_point != '') {
+                $condition[] = [ 'point', '<=', $end_point ];
+            }
+            //余额
+            if ($start_balance != '' && $end_balance != '') {
+                $condition[] = [ '', 'exp', Db::raw("(balance + balance_money) between {$start_balance} and {$end_balance}") ];
+            } else if ($start_balance != '' && $end_balance == '') {
+                $condition[] = [ '', 'exp', Db::raw("(balance + balance_money) >= {$start_balance}") ];
+            } else if ($start_balance == '' && $end_balance != '') {
+                $condition[] = [ '', 'exp', Db::raw("(balance + balance_money) <= {$end_balance}") ];
+            }
+            //成长值
+            if ($start_growth != '' && $end_growth != '') {
+                $condition[] = [ 'growth', 'between', [ $start_growth, $end_growth ] ];
+            } else if ($start_growth != '' && $end_growth == '') {
+                $condition[] = [ 'growth', '>=', $start_growth ];
+            } else if ($start_growth == '' && $end_growth != '') {
+                $condition[] = [ 'growth', '<=', $end_growth ];
+            }
+            //来源渠道
+            if ($login_type != '') {
+                $condition[] = [ 'login_type', '=', $login_type ];
+            }
+            if ($is_member != '') $condition[] = [ 'is_member', '=', $is_member ];
+            $order = 'last_visit_time desc';
+            $field = '*';
+
+            $member_model = new MemberModel();
+            $result = $member_model->getMemberPageList($condition, $page, $page_size, $order, $field);
+            $member_label_model = new MemberLabelModel();
+            $label_list = $member_label_model->getMemberLabelList([], 'label_id, label_name');
+            if (!empty($label_list[ 'data' ])) {
+                //格式化标签
+                $format_label_list = array_column($label_list[ 'data' ], 'label_name', 'label_id');
+            }
+            $list = $result[ 'data' ][ 'list' ];
+            if (!empty($list)) {
+                if ($is_exit_fenxiao == 1) {
+                    $fenxiao_model = new Fenxiao();
+                }
+                foreach ($list as $k => $v) {
+                    if ($is_exit_fenxiao == 1) {
+                        if ($v[ 'is_fenxiao' ] == 1) {
+                            $parent_fenxiao_name = $fenxiao_model->getParentFenxiaoName($v[ 'fenxiao_id' ], 2);
+                        } else {
+                            $parent_fenxiao_name = $fenxiao_model->getParentFenxiaoName($v[ 'fenxiao_id' ], 1);
+                        }
+                        $list[ $k ][ 'parent_fenxiao_name' ] = $parent_fenxiao_name;
+                    }
+                    $list[ $k ][ 'member_label_name' ] = '';
+                    $member_label_name = '';
+                    if (!empty($v[ 'member_label' ]) && !empty($label_list[ 'data' ])) {
+                        $member_labels = explode(',', $v[ 'member_label' ]);
+                        foreach ($member_labels as $kk => $vv) {
+
+                            if (isset($format_label_list[ $vv ])) {
+                                $member_label_name .= ',' . $format_label_list[ $vv ];
+                            }
+                        }
+                        $member_label_name = ltrim($member_label_name, ',');
+                    }
+                    $list[ $k ][ 'member_label_name' ] = $member_label_name;
+                }
+
+            }
+            $result[ 'data' ][ 'list' ] = $list;
+            return $result;
+        } else {
+            //会员等级
+            $member_level_model = new MemberLevelModel();
+            $member_level_list = $member_level_model->getMemberLevelList([ [ 'site_id', '=', $this->site_id ] ], 'level_id, level_name, level_type,status', 'growth asc');
+            $this->assign('member_level_list', $member_level_list[ 'data' ]);
+
+            //会员标签
+            $member_label_model = new MemberLabelModel();
+            $member_label_list = $member_label_model->getMemberLabelList([ [ 'site_id', '=', $this->site_id ] ], 'label_id, label_name', 'sort asc');
+            $this->assign('member_label_list', $member_label_list[ 'data' ]);
+
+            /*奖励规则*/
+            //积分
+            $point = event('MemberAccountRule', [ 'account' => 'point', 'site_id' => $this->site_id ]);
+            $this->assign('point', $point);
+            //余额
+            $balance = event('MemberAccountRule', [ 'account' => 'balance', 'site_id' => $this->site_id ]);
+            $this->assign('balance', $balance);
+            //成长值
+            $growth = event('MemberAccountRule', [ 'account' => 'growth', 'site_id' => $this->site_id ]);
+            $this->assign('growth', $growth);
+
+            $this->assign('is_exit_fenxiao', $is_exit_fenxiao);
+
+            //会员群体
+            $member_cluster_list = $member_cluster_model->getMemberClusterList([ [ 'site_id', '=', $this->site_id ] ], 'cluster_id, cluster_name', 'create_time desc');
+            $this->assign('member_cluster_list', $member_cluster_list[ 'data' ]);
+            $this->assign('cluster_id', $cluster_id);
+
+            //订单来源 (支持端口)
+            $order_from = Config::get("app_type");
+            $this->assign('order_from_list', $order_from);
+
+            $this->assign('supermember_is_exit', addon_is_exit('supermember', $this->site_id));
+
+            return $this->fetch('member/member_list');
+        }
+    }
+
+    /**
+     * 会员添加
+     */
+    public function addMember()
+    {
+        if (request()->isAjax()) {
+            $data = [
+                'site_id' => $this->site_id,
+                'username' => input('username', ''),
+                'mobile' => input('mobile', ''),
+                'email' => input('email', ''),
+                'password' => data_md5(input('password', '')),
+                'status' => input('status', 1),
+                'headimg' => input('headimg', ''),
+                'member_level' => input('member_level', ''),
+                'member_level_name' => input('member_level_name', ''),
+                'nickname' => input('nickname', ''),
+                'sex' => input('sex', 0),
+                'birthday' => input('birthday', '') ? strtotime(input('birthday', '')) : 0,
+                'realname' => input('realname', ''),
+                'reg_time' => time(),
+            ];
+
+            $member_model = new MemberModel();
+            $this->addLog("添加会员" . $data[ 'username' ] . $data[ 'mobile' ]);
+            return $member_model->addMember($data);
+        } else {
+            //会员等级
+            $member_level_model = new MemberLevelModel();
+            $member_level_list = $member_level_model->getMemberLevelList([ [ 'site_id', '=', $this->site_id ], [ 'level_type', '=', 0 ] ], 'level_id, level_name', 'growth asc');
+            $this->assign('member_level_list', $member_level_list[ 'data' ]);
+
+            $this->assign('type', input('type', 'member'));
+
+            return $this->fetch('member/add_member');
+        }
+    }
+
+    /**
+     * 会员编辑
+     */
+    public function editMember()
+    {
+        if (request()->isAjax()) {
+            $input = input();
+            $data = [];
+            if (isset($input[ 'nickname' ])) $data[ 'nickname' ] = $input[ 'nickname' ];
+            if (isset($input[ 'realname' ])) $data[ 'realname' ] = $input[ 'realname' ];
+            if (isset($input[ 'sex' ])) $data[ 'sex' ] = $input[ 'sex' ];
+            if (isset($input[ 'birthday' ])) $data[ 'birthday' ] = $input[ 'birthday' ] ? strtotime($input[ 'birthday' ]) : 0;
+            if (isset($input[ 'mobile' ])) $data[ 'mobile' ] = $input[ 'mobile' ];
+            if (isset($input[ 'province_id' ])) $data[ 'province_id' ] = $input[ 'province_id' ];
+            if (isset($input[ 'city_id' ])) $data[ 'city_id' ] = $input[ 'city_id' ];
+            if (isset($input[ 'district_id' ])) $data[ 'district_id' ] = $input[ 'district_id' ];
+            if (isset($input[ 'address' ])) $data[ 'address' ] = $input[ 'address' ];
+            if (isset($input[ 'full_address' ])) $data[ 'full_address' ] = $input[ 'full_address' ];
+
+            $member_id = input('member_id', 0);
+            $member_model = new MemberModel();
+            $this->addLog("编辑会员:id" . $member_id, $data);
+            return $member_model->editMember($data, [ [ 'member_id', '=', $member_id ], [ 'site_id', '=', $this->site_id ] ]);
+        } else {
+            //会员信息
+            $member_id = input('member_id', 0);
+
+            $member_model = new MemberModel();
+            $member_info = $member_model->getMemberInfo([ [ 'site_id', '=', $this->site_id ], [ 'member_id', '=', $member_id ] ]);
+
+            if (empty($member_info[ 'data' ])) $this->error('未获取到会员数据', addon_url('shop/member/memberlist'));
+
+            $this->assign('member_info', $member_info);
+
+            //会员等级
+            $member_level_model = new MemberLevelModel();
+            $member_level_list = $member_level_model->getMemberLevelList([ [ 'site_id', '=', $this->site_id ] ], 'level_id,level_name,level_type,is_free_shipping,consume_discount,point_feedback,charge_rule', 'level_type asc,growth asc');
+            $this->assign('member_level_list', $member_level_list[ 'data' ]);
+
+            //账户类型和来源类型
+            $member_account_model = new MemberAccountModel();
+            $account_type_arr = $member_account_model->getAccountType();
+            $this->assign('account_type_arr', $account_type_arr);
+
+            $supermember_is_exit = addon_is_exit('supermember', $this->site_id);
+            $this->assign('supermember_is_exit', $supermember_is_exit);
+            $this->assign('level_time', $member_level_model->level_time);
+
+            return $this->fetch('member/edit_member');
+        }
+    }
+
+    /**
+     * 会员删除
+     */
+    public function deleteMember()
+    {
+        $member_ids = input('member_ids', '');
+        $member_model = new MemberModel();
+        $this->addLog("删除会员:id" . $member_ids);
+        return $member_model->deleteMember([ [ 'member_id', 'in', $member_ids ], [ 'site_id', '=', $this->site_id ] ]);
+    }
+
+    /**
+     * 修改会员标签
+     */
+    public function modifyLabel()
+    {
+        $member_ids = input('member_ids', '');
+        $label_ids = input('label_ids', '');
+        $member_model = new MemberModel();
+        return $member_model->modifyMemberLabel($label_ids, [ [ 'member_id', 'in', $member_ids ] ]);
+    }
+
+    /**
+     * 修改会员状态
+     */
+    public function modifyStatus()
+    {
+        $member_ids = input('member_ids', '');
+        $status = input('status', 0);
+        $member_model = new MemberModel();
+        return $member_model->modifyMemberStatus($status, [ [ 'member_id', 'in', $member_ids ], [ 'site_id', '=', $this->site_id ] ]);
+    }
+
+    /**
+     * 修改会员密码
+     */
+    public function modifyPassword()
+    {
+
+        $member_ids = input('member_ids', '');
+        $password = input('password', '123456');
+        $member_model = new MemberModel();
+        return $member_model->resetMemberPassword($password, [ [ 'member_id', 'in', $member_ids ] ]);
+    }
+
+    /**
+     * 账户详情
+     */
+    public function accountDetail()
+    {
+        $account_type = input('account_type', '');
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+
+            $from_type = input('from_type', '');
+            $start_date = input('start_date', '');
+            $end_date = input('end_date', '');
+            $member_id = input('member_id', 0);
+
+            $condition[] = [ 'site_id', '=', $this->site_id ];
+            $condition[] = [ 'member_id', '=', $member_id ];
+            //账户类型
+            if ($account_type != '') {
+                $condition[] = [ 'account_type', 'in', $account_type ];
+            }
+            //来源类型
+            if ($from_type != '') {
+                $condition[] = [ 'from_type', '=', $from_type ];
+            }
+            //发生时间
+            if ($start_date != '' && $end_date != '') {
+                $condition[] = [ 'create_time', 'between', [ strtotime($start_date), strtotime($end_date) ] ];
+            } else if ($start_date != '' && $end_date == '') {
+                $condition[] = [ 'create_time', '>=', strtotime($start_date) ];
+            } else if ($start_date == '' && $end_date != '') {
+                $condition[] = [ 'create_time', '<=', strtotime($end_date) ];
+            }
+
+            $member_account_model = new MemberAccountModel();
+            $res = $member_account_model->getMemberAccountPageList($condition, $page, $page_size);
+            $account_type_arr = $member_account_model->getAccountType();
+            foreach ($res[ 'data' ][ 'list' ] as $key => $val) {
+                $res[ 'data' ][ 'list' ][ $key ][ 'account_type_name' ] = $account_type_arr[ $val[ 'account_type' ] ];
+            }
+            return $res;
+
+        } else {
+            $member_id = input('member_id', 0);
+
+            //会员信息
+            $member_model = new MemberModel();
+            $member_info = $member_model->getMemberDetail($member_id, $this->site_id);
+
+            if (empty($member_info[ 'data' ])) $this->error('未获取到会员数据', addon_url('shop/member/memberlist'));
+
+            $this->assign('member_info', $member_info[ 'data' ]);
+
+            //账户类型和来源类型
+            $member_account_model = new MemberAccountModel();
+            $account_type_arr = $member_account_model->getAccountType();
+			$from_type_arr = $member_account_model->getFromType();
+            $this->assign('account_type_arr', $account_type_arr);
+			$this->assign('from_type_arr', $from_type_arr[$account_type] ?? []);
+			$this->assign('account_type', $account_type);
+			$this->assign('member_id', $member_id);
+
+            return $this->fetch('member/account_detail');
+        }
+    }
+
+    /**
+     * 余额调整(不可提现)
+     */
+    public function adjustBalance()
+    {
+        $member_id = input('member_id', 0);
+        $adjust_num = input('adjust_num', 0);
+        $remark = input('remark', '商家调整');
+        $this->addLog("会员余额调整id:" . $member_id . "金额" . $adjust_num);
+        $member_account_model = new MemberAccountModel();
+        return $member_account_model->addMemberAccount($this->site_id, $member_id, 'balance', $adjust_num, 'adjust', 0, $remark ? $remark : '商家调整');
+    }
+
+    /**
+     * 积分调整
+     */
+    public function adjustPoint()
+    {
+        $member_id = input('member_id', 0);
+        $adjust_num = input('adjust_num', 0);
+        $remark = input('remark', '商家调整');
+        $this->addLog("会员积分调整id:" . $member_id . "数量" . $adjust_num);
+        $member_account_model = new MemberAccountModel();
+        return $member_account_model->addMemberAccount($this->site_id, $member_id, 'point', $adjust_num, 'adjust', 0, $remark ? $remark : '商家调整');
+    }
+
+    /**
+     * 成长值调整
+     */
+    public function adjustGrowth()
+    {
+        $member_id = input('member_id', 0);
+        $adjust_num = input('adjust_num', 0);
+        $remark = input('remark', '商家调整');
+        $this->addLog("会员成长值调整id:" . $member_id . "数量" . $adjust_num);
+        $member_account_model = new MemberAccountModel();
+        return $member_account_model->addMemberAccount($this->site_id, $member_id, 'growth', $adjust_num, 'adjust', 0, $remark ? $remark : '商家调整');
+    }
+
+    /**
+     * 注册协议
+     */
+    public function regAgreement()
+    {
+        if (request()->isAjax()) {
+            //设置注册协议
+            $title = input('title', '');
+            $content = input('content', '');
+            $config_model = new ConfigModel();
+            return $config_model->setRegisterDocument($title, $content, $this->site_id, 'shop');
+        } else {
+            $this->forthMenu();
+            //获取注册协议
+            $config_model = new ConfigModel();
+            $document_info = $config_model->getRegisterDocument($this->site_id, 'shop');
+            $this->assign('document_info', $document_info);
+
+            return $this->fetch('member/reg_agreement');
+        }
+    }
+
+    /**
+     * 注册设置
+     */
+    public function regConfig()
+    {
+        $config_model = new ConfigModel();
+        if (request()->isAjax()) {
+            //设置注册设置
+            $data = array (
+                'login' => input('login', ''),
+                'register' => input('register', ''),
+                'pwd_len' => input('pwd_len', 6),
+                'pwd_complexity' => input('pwd_complexity', 'number,letter,upper_case,symbol'),
+                'third_party' => input('third_party', 0),
+                'bind_mobile' => input('bind_mobile', 0),
+            );
+            return $config_model->setRegisterConfig($data, $this->site_id, 'shop');
+        } else {
+            $this->forthMenu();
+            //获取注册设置
+            $config_info = $config_model->getRegisterConfig($this->site_id, 'shop');
+            $value = $config_info[ 'data' ][ 'value' ];
+            if (!empty($value)) {
+                $value[ 'pwd_complexity_arr' ] = explode(',', $value[ 'pwd_complexity' ]);
+                $value[ 'login' ] = explode(',', $value[ 'login' ]);
+                $value[ 'register' ] = explode(',', $value[ 'register' ]);
+            }
+            $this->assign('value', $value);
+            return $this->fetch('member/reg_config');
+        }
+    }
+
+    /**
+     * 注销协议
+     */
+    public function cancelAgreement()
+    {
+        if (request()->isAjax()) {
+            //设置注销协议
+            $title = input('title', '');
+            $content = input('content', '');
+            $config_model = new ConfigModel();
+            return $config_model->setCancelDocument($title, $content, $this->site_id, 'shop');
+        } else {
+            //获取注销协议
+            $config_model = new ConfigModel();
+            $document_info = $config_model->getCancelDocument($this->site_id, 'shop');
+            $this->assign('document_info', $document_info);
+
+            return $this->fetch('member/cancel_agreement');
+        }
+    }
+
+    /**
+     * 注销设置
+     */
+    public function cancelConfig()
+    {
+        $config_model = new ConfigModel();
+        if (request()->isAjax()) {
+            //设置注册设置
+            $data = array (
+                'is_enable' => input('is_enable', 0),
+                'is_audit' => input('is_audit', 1),
+            );
+            return $config_model->setCancelConfig($data, $this->site_id, 'shop');
+        } else {
+            //获取注册设置
+            $config_info = $config_model->getCancelConfig($this->site_id, 'shop');
+            $value = $config_info[ 'data' ][ 'value' ];
+
+            $this->assign('value', $value);
+            return $this->fetch('member/cancel_config');
+        }
+    }
+
+    /**
+     * 搜索会员
+     * 不是菜单 不入权限
+     */
+    public function searchMember()
+    {
+        $search_text = input('search_text', '');
+        $member_model = new MemberModel();
+        $member_info = $member_model->getMemberInfo([ [ 'username|mobile', '=', $search_text ], [ 'site_id', '=', $this->site_id ] ]);
+        return $member_info;
+    }
+
+    /**
+     * 导出会员信息
+     */
+    public function exportMember()
+    {
+        //获取会员信息
+        $search_text = input('search_text', '');
+        $search_text_type = input('search_text_type', 'username');//可以传username mobile email
+        $level_id = input('level_id', 0);
+        $label_id = input('label_id', 0);
+        $reg_start_date = input('reg_start_date', '');
+        $reg_end_date = input('reg_end_date', '');
+        $status = input('status', '');
+        $cluster_id = input('cluster_id', '');//获取会员群体
+        $last_login_time_start = input('last_login_time_start', '');//上次登录时间
+        $last_login_time_end = input('last_login_time_end', '');
+        $start_order_complete_num = input('start_order_complete_num', '');//成交次数
+        $end_order_complete_num = input('end_order_complete_num', '');
+        $start_order_complete_money = input('start_order_complete_money', '');//消费金额
+        $end_order_complete_money = input('end_order_complete_money', '');
+        $start_point = input('start_point', '');//积分
+        $end_point = input('end_point', '');
+        $start_balance = input('start_balance', '');//余额
+        $end_balance = input('end_balance', '');
+        $start_growth = input('start_growth', '');//成长值
+        $end_growth = input('end_growth', '');
+        $login_type = input('login_type', '');//来源渠道
+
+        $condition[] = [ 'site_id', '=', $this->site_id ];
+        //下拉选择
+        $condition[] = [ $search_text_type, 'like', "%" . $search_text . "%" ];
+        //会员等级
+        if ($level_id != 0) {
+            $condition[] = [ 'member_level', '=', $level_id ];
+        }
+        //会员标签
+        if ($label_id != 0) {
+            //raw方法变为public类型 需要实例化以后调用
+            $condition[] = [ "", 'exp', Db::raw("FIND_IN_SET({$label_id}, member_label)") ];
+        }
+        //注册时间
+        if ($reg_start_date != '' && $reg_end_date != '') {
+            $condition[] = [ 'reg_time', 'between', [ strtotime($reg_start_date), strtotime($reg_end_date) ] ];
+        } else if ($reg_start_date != '' && $reg_end_date == '') {
+            $condition[] = [ 'reg_time', '>=', strtotime($reg_start_date) ];
+        } else if ($reg_start_date == '' && $reg_end_date != '') {
+            $condition[] = [ 'reg_time', '<=', strtotime($reg_end_date) ];
+        }
+        //会员状态
+        if ($status != '') {
+            $condition[] = [ 'status', '=', $status ];
+        }
+
+        //会员群体
+        $member_cluster_model = new MemberClusterModel();
+        if ($cluster_id != '') {
+            //获取会员群体的member_id值
+            $member_cluster_info = $member_cluster_model->getMemberClusterInfo([ "cluster_id" => $cluster_id ], 'member_ids');
+            if (!empty($member_cluster_info[ 'data' ][ 'member_ids' ])) {
+                $condition[] = [ 'member_id', 'in', $member_cluster_info[ 'data' ][ 'member_ids' ] ];
+            }
+        }
+        //上次访问时间
+        if ($last_login_time_start != '' && $last_login_time_end != '') {
+            $condition[] = [ 'last_login_time', 'between', [ strtotime($last_login_time_start), strtotime($last_login_time_end) ] ];
+        } else if ($last_login_time_start != '' && $last_login_time_end == '') {
+            $condition[] = [ 'last_login_time', '>=', strtotime($last_login_time_start) ];
+        } else if ($last_login_time_start == '' && $last_login_time_end != '') {
+            $condition[] = [ 'last_login_time', '<=', strtotime($last_login_time_end) ];
+        }
+        //成交次数
+        if ($start_order_complete_num != '' && $end_order_complete_num != '') {
+            $condition[] = [ 'order_complete_num', 'between', [ $start_order_complete_num, $end_order_complete_num ] ];
+        } else if ($start_order_complete_num != '' && $end_order_complete_num == '') {
+            $condition[] = [ 'order_complete_num', '>=', $start_order_complete_num ];
+        } else if ($start_order_complete_num == '' && $end_order_complete_num != '') {
+            $condition[] = [ 'order_complete_num', '<=', $end_order_complete_num ];
+        }
+        //消费金额
+        if ($start_order_complete_money != '' && $end_order_complete_money != '') {
+            $condition[] = [ 'order_complete_num', 'between', [ $start_order_complete_money, $end_order_complete_money ] ];
+        } else if ($start_order_complete_money != '' && $end_order_complete_money == '') {
+            $condition[] = [ 'order_complete_num', '>=', $start_order_complete_money ];
+        } else if ($start_order_complete_money == '' && $end_order_complete_money != '') {
+            $condition[] = [ 'order_complete_num', '<=', $end_order_complete_money ];
+        }
+        //积分
+        if ($start_point != '' && $end_point != '') {
+            $condition[] = [ 'point', 'between', [ $start_point, $end_point ] ];
+        } else if ($start_point != '' && $end_point == '') {
+            $condition[] = [ 'point', '>=', $start_point ];
+        } else if ($start_point == '' && $end_point != '') {
+            $condition[] = [ 'point', '<=', $end_point ];
+        }
+        //余额
+        if ($start_balance != '' && $end_balance != '') {
+            $condition[] = [ 'balance', 'between', [ $start_balance, $end_balance ] ];
+        } else if ($start_balance != '' && $end_balance == '') {
+            $condition[] = [ 'balance', '>=', $start_balance ];
+        } else if ($start_balance == '' && $end_balance != '') {
+            $condition[] = [ 'balance', '<=', $end_balance ];
+        }
+        //成长值
+        if ($start_growth != '' && $end_growth != '') {
+            $condition[] = [ 'growth', 'between', [ $start_growth, $end_growth ] ];
+        } else if ($start_growth != '' && $end_growth == '') {
+            $condition[] = [ 'growth', '>=', $start_growth ];
+        } else if ($start_growth == '' && $end_growth != '') {
+            $condition[] = [ 'growth', '<=', $end_growth ];
+        }
+        //来源渠道
+        if ($login_type != '') {
+            $condition[] = [ 'login_type', '=', $login_type ];
+        }
+
+        $order = 'reg_time desc';
+        $field = 'username,nickname,realname,mobile,sex,birthday,email,member_level_name,member_label_name,
+        qq,location,balance,balance_money,point,growth,reg_time,last_login_ip,last_login_time,is_fenxiao,fenxiao_id';
+
+        $member_model = new MemberModel();
+        $list = $member_model->getMemberList($condition, $field, $order);
+
+        $is_exit_fenxiao = addon_is_exit('fenxiao');
+        if ($is_exit_fenxiao == 1) {
+            if (!empty($list[ 'data' ])) {
+
+                $fenxiao_model = new Fenxiao();
+                foreach ($list[ 'data' ] as $k => $v) {
+
+                    if ($v[ 'is_fenxiao' ] == 1) {
+                        $parent_fenxiao_name = $fenxiao_model->getParentFenxiaoName($v[ 'fenxiao_id' ], 2);
+                    } else {
+                        $parent_fenxiao_name = $fenxiao_model->getParentFenxiaoName($v[ 'fenxiao_id' ], 1);
+                    }
+                    $list[ 'data' ][ $k ][ 'parent_fenxiao_name' ] = $parent_fenxiao_name;
+                }
+            }
+        }
+        // 实例化excel
+        $phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
+
+        $phpExcel->getProperties()->setTitle("会员信息");
+        $phpExcel->getProperties()->setSubject("会员信息");
+        // 对单元格设置居中效果
+        $phpExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('J')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('K')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('L')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('M')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('N')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('O')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('P')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('Q')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        //单独添加列名称
+        $phpExcel->setActiveSheetIndex(0);
+        $phpExcel->getActiveSheet()->setCellValue('A1', '会员账号');//可以指定位置
+        $phpExcel->getActiveSheet()->setCellValue('B1', '会员昵称');
+        $phpExcel->getActiveSheet()->setCellValue('C1', '真实姓名');
+        $phpExcel->getActiveSheet()->setCellValue('D1', '手机号');
+        $phpExcel->getActiveSheet()->setCellValue('E1', '性别');
+        $phpExcel->getActiveSheet()->setCellValue('F1', '生日');
+        $phpExcel->getActiveSheet()->setCellValue('G1', '会员等级');
+        $phpExcel->getActiveSheet()->setCellValue('H1', '会员标签');
+        $phpExcel->getActiveSheet()->setCellValue('I1', 'qq');
+        $phpExcel->getActiveSheet()->setCellValue('J1', '地址');
+        $phpExcel->getActiveSheet()->setCellValue('K1', '余额');
+        $phpExcel->getActiveSheet()->setCellValue('L1', '积分');
+        $phpExcel->getActiveSheet()->setCellValue('M1', '成长值');
+        $phpExcel->getActiveSheet()->setCellValue('N1', '上次登录时间');
+        $phpExcel->getActiveSheet()->setCellValue('O1', '上次登录ip');
+        $phpExcel->getActiveSheet()->setCellValue('P1', '注册时间');
+        $phpExcel->getActiveSheet()->setCellValue('Q1', '上级分销商');
+        //循环添加数据(根据自己的逻辑)
+        $sex = [ '保密', '男', '女' ];
+        foreach ($list[ 'data' ] as $k => $v) {
+            $i = $k + 2;
+            $phpExcel->getActiveSheet()->setCellValue('A' . $i, $v[ 'username' ] . ' ');
+            $phpExcel->getActiveSheet()->setCellValue('B' . $i, $v[ 'nickname' ] . ' ');
+            $phpExcel->getActiveSheet()->setCellValue('C' . $i, $v[ 'realname' ] . ' ');
+            $phpExcel->getActiveSheet()->setCellValue('D' . $i, $v[ 'mobile' ] . ' ');
+            $phpExcel->getActiveSheet()->setCellValue('E' . $i, $sex[ $v[ 'sex' ] ]);
+            $phpExcel->getActiveSheet()->setCellValue('F' . $i, date('Y-m-d', $v[ 'birthday' ]));
+            $phpExcel->getActiveSheet()->setCellValue('G' . $i, $v[ 'member_level_name' ]);
+            $phpExcel->getActiveSheet()->setCellValue('H' . $i, $v[ 'member_label_name' ]);
+            $phpExcel->getActiveSheet()->setCellValue('I' . $i, $v[ 'qq' ]);
+            $phpExcel->getActiveSheet()->setCellValue('J' . $i, $v[ 'location' ]);
+            $phpExcel->getActiveSheet()->setCellValue('K' . $i, $v[ 'balance' ] + $v[ 'balance_money' ]);
+            $phpExcel->getActiveSheet()->setCellValue('L' . $i, $v[ 'point' ]);
+            $phpExcel->getActiveSheet()->setCellValue('M' . $i, $v[ 'growth' ]);
+            $phpExcel->getActiveSheet()->setCellValue('N' . $i, date('Y-m-d H:i:s', $v[ 'last_login_time' ]));
+            $phpExcel->getActiveSheet()->setCellValue('O' . $i, $v[ 'last_login_ip' ]);
+            $phpExcel->getActiveSheet()->setCellValue('P' . $i, date('Y-m-d H:i:s', $v[ 'reg_time' ]));
+            $phpExcel->getActiveSheet()->setCellValue('Q' . $i, !empty($v[ 'parent_fenxiao_name' ]) ? $v[ 'parent_fenxiao_name' ] . ' ' : '');
+        }
+
+        // 重命名工作sheet
+        $phpExcel->getActiveSheet()->setTitle('会员信息');
+        // 设置第一个sheet为工作的sheet
+        $phpExcel->setActiveSheetIndex(0);
+        // 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
+        $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
+        $file = date('Y年m月d日-会员信息表', time()) . '.xlsx';
+        $objWriter->save($file);
+
+        header("Content-type:application/octet-stream");
+
+        $filename = basename($file);
+        header("Content-Disposition:attachment;filename = " . $filename);
+        header("Accept-ranges:bytes");
+        header("Accept-length:" . filesize($file));
+        readfile($file);
+        unlink($file);
+        exit;
+    }
+
+    /**
+     * 订单管理
+     */
+    public function order()
+    {
+        $member_id = input("member_id", 0);//会员id
+        $this->assign('member_id', $member_id);
+        //会员详情四级菜单
+        $this->forthMenu([ 'member_id' => $member_id ]);
+        return $this->fetch('member/order');
+
+    }
+
+    /**
+     * 会员地址
+     */
+    public function addressDetail()
+    {
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $member_id = input('member_id', 0);
+
+            $condition[] = [ 'site_id', '=', $this->site_id ];
+            $condition[] = [ 'member_id', '=', $member_id ];
+
+            //会员地址
+            $member_address_model = new MemberAddressModel();
+            $res = $member_address_model->getMemberAddressPageList($condition, $page, $page_size);
+            return $res;
+
+        } else {
+            $member_id = input('member_id', 0);
+            $this->assign('member_id', $member_id);
+
+            //会员详情四级菜单
+            $this->forthMenu([ 'member_id' => $member_id ]);
+
+            return $this->fetch('member/address_detail');
+        }
+    }
+
+    /**
+     * 会员领取优惠卷
+     */
+    public function memberCoupon()
+    {
+        $coupon_model = new CouponModel();
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $member_id = input('member_id', 0);
+
+            $condition[] = [ 'site_id', '=', $this->site_id ];
+            $condition[] = [ 'member_id', '=', $member_id ];
+
+            //查询会员领取的优惠券
+            $res = $coupon_model->getCouponPageList($condition, $page, $page_size);
+            return $res;
+        } else {
+            $member_id = input('member_id', 0);
+            $this->assign('member_id', $member_id);
+
+            //会员详情四级菜单
+            $this->forthMenu([ 'member_id' => $member_id ]);
+            $this->assign('get_type', $coupon_model->getCouponGetType());
+
+            return $this->fetch('member/member_coupon');
+        }
+    }
+
+    /**
+     * 根据账户类型获取来源类型
+     * @return array
+     */
+    public function getFromType()
+    {
+        $type = input('type', '');
+        $model = new MemberAccountModel();
+        $res = $model->getFromType();
+
+        return $res[ $type ];
+    }
+
+    /**
+     * 会员导入列表页
+     */
+    public function memberImport()
+    {
+        if (request()->isAjax()) {
+            $member_model = new MemberModel();
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $condition = [];
+            $result = $member_model->getMemberImportRecordList($condition, $page, $page_size);
+            return $result;
+        }
+        return $this->fetch('member/memberImport');
+    }
+
+    /**
+     * 下载会员导入模板
+     */
+    public function downloadMemberFile()
+    {
+        // 实例化excel
+        $phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
+        $phpExcel->getProperties()->setTitle("会员导入模板");
+        $phpExcel->getProperties()->setSubject("会员导入模板");
+        // 对单元格设置居中效果
+        $phpExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('J')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('K')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        $phpExcel->getActiveSheet()->getStyle('L')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
+        //单独添加列名称
+        $phpExcel->setActiveSheetIndex(0);
+        $phpExcel->getActiveSheet()->setCellValue('A1', '用户名');//可以指定位置
+        $phpExcel->getActiveSheet()->setCellValue('B1', '手机号');
+        $phpExcel->getActiveSheet()->setCellValue('C1', '昵称');
+        $phpExcel->getActiveSheet()->setCellValue('D1', '密码(明文)');
+        $phpExcel->getActiveSheet()->setCellValue('E1', '微信公众号openid');
+        $phpExcel->getActiveSheet()->setCellValue('F1', '微信小程序openid');
+        $phpExcel->getActiveSheet()->setCellValue('G1', '真实姓名');
+        $phpExcel->getActiveSheet()->setCellValue('H1', '积分');
+        $phpExcel->getActiveSheet()->setCellValue('I1', '成长值');
+        $phpExcel->getActiveSheet()->setCellValue('J1', '余额(可提现)');
+        $phpExcel->getActiveSheet()->setCellValue('K1', '余额(不可提现)');
+        $phpExcel->getActiveSheet()->setCellValue('L1', '会员等级(名称)');
+        // 设置第一个sheet为工作的sheet
+        $phpExcel->setActiveSheetIndex(0);
+        // 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
+        $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
+        $file = date('Y年m月d日-会员导入模板', time()) . '.xlsx';
+        $objWriter->save($file);
+
+        header("Content-type:application/octet-stream");
+
+        $filename = basename($file);
+        header("Content-Disposition:attachment;filename = " . $filename);
+        header("Accept-ranges:bytes");
+        header("Accept-length:" . filesize($file));
+        readfile($file);
+        unlink($file);
+        exit;
+    }
+
+    /**
+     * 上传文件
+     */
+    public function file()
+    {
+        $upload_model = new UploadModel($this->site_id);
+
+        $param = array (
+            "name" => "file",
+            'extend_type' => [ 'xlsx' ]
+        );
+
+        $result = $upload_model->setPath("common/member/member_import/" . date("Ymd") . '/')->file($param);
+        return $result;
+    }
+
+    /**
+     * 导入
+     */
+    public function import()
+    {
+        if (request()->isAjax()) {
+            $filename = input('filename', '');
+            $path = input('path', '');
+            $index = input('index', '');
+            $success_num = input('success_num', 0);
+            $error_num = input('error_num', 0);
+            $record = input('record', 0);
+            $member_model = new MemberModel();
+
+            $params = [
+                'filename' => $filename,
+                'path' => $path,
+                'index' => $index,
+                'success_num' => $success_num,
+                "error_num" => $error_num,
+                "record" => $record
+            ];
+
+            $res = $member_model->importMember($params, $this->site_id);
+            return $res;
+        }
+    }
+
+    /**
+     * 黑名单
+     * @return mixed
+     */
+    public function blacklist()
+    {
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $search_text = input('search_text', '');
+            $search_text_type = input('search_text_type', 'username');//可以传username mobile email
+
+            $condition[] = [ 'status', '=', 0 ];
+            $condition[] = [ 'site_id', '=', $this->site_id ];
+            //下拉选择
+            $condition[] = [ $search_text_type, 'like', "%" . $search_text . "%" ];
+            $order = 'reg_time desc';
+            $field = '*';
+
+            $member_model = new MemberModel();
+            $result = $member_model->getMemberPageList($condition, $page, $page_size, $order, $field);
+            return $result;
+        }
+        return $this->fetch('member/blacklist');
+    }
+
+    /*
+     *  会员导入记录
+     */
+    public function memberimportlist()
+    {
+
+        if (request()->isAjax()) {
+            $member_model = new MemberModel();
+            $id = input("id", 0);
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $condition[ 'record_id' ] = $id;
+            $list = $member_model->getMemberImportLogList($condition, $page, $page_size);
+
+            return $list;
+        }
+
+        $id = request()->get("id", 0);
+        $member_model = new MemberModel();
+        $info = $member_model->getMemberImportRecordInfo($id);
+
+        if (empty($info[ 'data' ])) $this->error('未获取到导入数据', addon_url('shop/member/memberimport'));
+
+        $this->assign('info', $info);
+        $this->assign('id', $id);
+        return $this->fetch('member/import_log');
+    }
+
+    /**
+     * 变更会员会员卡
+     */
+    public function changeMemberLevel()
+    {
+        if (request()->isAjax()) {
+            $member_id = input('member_id', 0);
+            $level_id = input('level_id', 0);
+            $period_unit = input('period_unit', '');
+            $expire_time = 0;
+            switch ($period_unit) {
+                case 'week':
+                    $expire_time = strtotime('+1 week');
+                    break;
+                case 'month':
+                    $expire_time = strtotime('+1 month');
+                    break;
+                case 'quarter':
+                    $expire_time = strtotime('+3 month');
+                    break;
+                case 'year':
+                    $expire_time = strtotime('+1 year');
+                    break;
+            }
+            $member_level = new MemberLevelModel();
+            $res = $member_level->addMemberLevelChangeRecord($member_id, $this->site_id, $level_id, $expire_time, 'adjust', $this->user_info[ 'uid' ], 'user', $this->user_info[ 'username' ]);
+            return $res;
+        }
+    }
+
+    /**
+     * 获取各渠道会员数量
+     * @return array
+     */
+    public function getRegisterChannelMemberNum()
+    {
+        if (request()->isAjax()) {
+            $app_type = Config::get("app_type");
+            $member_model = new MemberModel();
+            $data = [];
+            foreach ($app_type as $k => $v) {
+                array_push($data, [
+                    'name' => $v[ 'name' ],
+                    'member_num' => $member_model->getMemberCount([ [ 'login_type', '=', $k ], [ 'is_delete', '=', 0 ] ])[ 'data' ]
+                ]);
+            }
+            return success(0, '', $data);
+        }
+    }
+
+    /**
+     * 办理会员
+     */
+    public function handleMember()
+    {
+        if (request()->isAjax()) {
+            $member_id = input('member_id', 0);
+            $level_id = input('level_id', 0);
+            $member_code = input('member_code', '');
+            $member_model = new MemberModel();
+            $res = $member_model->handleMember([
+                'member_id' => $member_id,
+                'level_id' => $level_id,
+                'member_code' => $member_code,
+                'site_id' => $this->site_id
+            ]);
+            return $res;
+        }
+    }
+
+}

+ 239 - 0
app/shop/controller/Memberlevel_bak.php

@@ -0,0 +1,239 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\shop\controller;
+
+use app\model\member\MemberLevel as MemberLevelModel;
+use addon\coupon\model\CouponType;
+use app\model\member\Member as MemberModel;
+use app\model\member\Config;
+
+/**
+ * 会员等级管理 控制器
+ */
+class Memberlevel extends BaseShop
+{
+    /**
+     * 会员等级列表
+     */
+    public function levelList()
+    {
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $search_text = input('search_text', '');
+            $level_type = input('level_type', 0);
+
+            $condition = [
+                [ 'site_id', '=', $this->site_id ],
+                [ 'level_type', '=', $level_type ]
+            ];
+            if (!empty($search_text)) $condition[] = [ 'level_name', 'like', "%" . $search_text . "%" ];
+            $order = 'growth asc';
+            $field = '*';
+
+            $member_level_model = new MemberLevelModel();
+            $list = $member_level_model->getMemberLevelPageList($condition, 1, MEMBER_LEVEL, $order, $field);
+            $member_count = count($list[ 'data' ][ 'list' ]);
+            $list_count = MEMBER_LEVEL - $member_count;
+            $member_level = array ();
+            for ($i = 1; $i <= $list_count; $i++) {
+                $member_level[ $i ][ 'level_vip' ] = "VIP" . ( $i + count($list[ 'data' ][ 'list' ]) );
+            }
+
+            $list[ 'data' ][ 'list' ] = array_merge($list[ 'data' ][ 'list' ], $member_level);
+            $member_status = 0;
+            if (!empty($list[ 'data' ][ 'list' ])) {
+                $member_model = new MemberModel();
+                foreach ($list[ 'data' ][ 'list' ] as $k => $item) {
+                    $list[ 'data' ][ 'list' ][ $k ][ 'member_num' ] = 0;
+                    if (isset($item[ 'level_id' ])) {
+                        $count = $member_model->getMemberCount([ [ 'member_level', '=', $item[ 'level_id' ] ], [ 'is_delete', '=', 0 ] ]);
+                        $list[ 'data' ][ 'list' ][ $k ][ 'member_num' ] = $count[ 'data' ];
+                    }
+                    $list[ 'data' ][ 'list' ][ $k ][ 'level_vip' ] = 'VIP' . ( $k + 1 );
+                    $list[ 'data' ][ 'list' ][ $k ][ 'is_show' ] = 0;
+                    if ($k > 1 && $k == $member_count && $k < MEMBER_LEVEL) {
+                        if ($list[ 'data' ][ 'list' ][ $k - 1 ][ 'status' ] == 1) $list[ 'data' ][ 'list' ][ $k ][ 'is_add' ] = 1;
+                    }
+
+                    if ($k > 0 && $k < $member_count && $member_status == 0) {
+                        $list[ 'data' ][ 'list' ][ $k ][ 'is_one' ] = 0;
+                        if ($item[ 'status' ] == 0) {
+                            $list[ 'data' ][ 'list' ][ $k ][ 'is_show' ] = 1;
+                            $list[ 'data' ][ 'list' ][ $k - 1 ][ 'is_show' ] = 1;
+                            $member_status = 1;
+                        }
+                        if ($k == $member_count - 1 && $list[ 'data' ][ 'list' ][ $member_count - 1 ] [ 'status' ] == 1) {
+                            $list[ 'data' ][ 'list' ][ $k ][ 'is_show' ] = 1;
+                        }
+                    }
+                }
+                if ($member_count == 1) {
+                    $list[ 'data' ][ 'list' ][ $member_count ][ 'is_add' ] = 1;
+                }
+                $list[ 'data' ][ 'list' ][ 0 ][ 'is_show' ] = 0;
+            }
+            return $list;
+        } else {
+
+            $config = ( new Config )->getMemberConfig($this->site_id, $this->app_module)[ 'data' ] ?? [];
+            $this->assign('is_update', $config[ 'value' ][ 'is_update' ] ?? 1);
+            return $this->fetch('memberlevel/level_list');
+        }
+    }
+
+    /**
+     * 会员等级添加
+     */
+    public function addLevel()
+    {
+        $member_level_model = new MemberLevelModel();
+        if (request()->isAjax()) {
+            $data = [
+                'site_id' => $this->site_id,
+                'level_name' => input('level_name', ''),
+                'growth' => input('growth', 0),
+                'remark' => input('remark', ''),
+                'is_free_shipping' => input('is_free_shipping', 0),
+                'consume_discount' => input('consume_discount', 100),
+                'point_feedback' => input('point_feedback', 0),
+                'send_point' => input('send_point', 0),
+                'send_balance' => input('send_balance', 0),
+                'send_coupon' => input('send_coupon', ''),
+                'level_type' => 0,
+                'charge_rule' => '',
+                'charge_type' => 0,
+                'bg_color' => input('bg_color', '#333333'),
+                'level_text_color' => input('level_text_color', '#ffffff'),
+                'level_picture' => input('level_picture', ''),
+            ];
+            $this->addLog("会员等级添加:" . $data[ 'level_name' ]);
+            $res = $member_level_model->addMemberLevel($data);
+            ( new Config )->setMemberConfig([ 'is_update' => 1 ], $this->site_id, $this->app_module)[ 'data' ] ?? [];
+            return $res;
+
+        } else {
+
+            //获取优惠券列表
+            $coupon_model = new CouponType();
+            $condition = [
+                [ 'status', '=', 1 ],
+                [ 'site_id', '=', $this->site_id ],
+            ];
+            //优惠券字段
+            $coupon_field = 'coupon_type_id,type,coupon_name,image,money,discount,validity_type,fixed_term,status,is_limit,at_least,count,lead_count,end_time,goods_type,max_fetch';
+            $coupon_list = $coupon_model->getCouponTypeList($condition, $coupon_field);
+            $this->assign('coupon_list', $coupon_list);
+
+            $this->assign('level_time', $member_level_model->level_time);
+
+            $growth_up = $member_level_model->getFirstMemberLevel([ [ 'site_id', '=', $this->site_id ], [ 'level_type', '=', '0' ] ], 'growth', 'growth desc')[ 'data' ][ 'growth' ] ?? 0;
+            $this->assign('growth_up', $growth_up);
+
+            return $this->fetch('memberlevel/add_level');
+        }
+    }
+
+    /**
+     * 会员等级修改
+     */
+    public function editLevel()
+    {
+        $member_level_model = new MemberLevelModel();
+        if (request()->isAjax()) {
+            $data = [
+                'level_name' => input('level_name', ''),
+                'growth' => input('growth', 0.00),
+                'remark' => input('remark', ''),
+                'is_free_shipping' => input('is_free_shipping', 0),
+                'consume_discount' => input('consume_discount', 100),
+                'point_feedback' => input('point_feedback', 0),
+                'send_point' => input('send_point', 0),
+                'send_balance' => input('send_balance', 0),
+                'send_coupon' => input('send_coupon', ''),
+                'charge_rule' => '',
+                'bg_color' => input('bg_color', '#333333'),
+                'level_text_color' => input('level_text_color', '#ffffff'),
+                'level_picture' => input('level_picture', ''),
+            ];
+
+            $level_id = input('level_id', 0);
+
+            $this->addLog("会员等级修改:" . $data[ 'level_name' ]);
+            ( new Config )->setMemberConfig([ 'is_update' => 1 ], $this->site_id, $this->app_module)[ 'data' ] ?? [];
+            return $member_level_model->editMemberLevel($data, [ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
+        } else {
+
+            $level_id = input('get.level_id', 0);
+            $level_info = $member_level_model->getMemberLevelInfo([ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
+
+            if (empty($level_info[ 'data' ])) $this->error('未获取到等级数据', addon_url('shop/memberlevel/levellist'));
+
+            $this->assign('level_info', $level_info[ 'data' ]);
+
+            $this->assign('level_time', $member_level_model->level_time);
+
+            //获取优惠券列表
+            $coupon_model = new CouponType();
+            $condition = [
+                [ 'status', '=', 1 ],
+                [ 'site_id', '=', $this->site_id ],
+            ];
+            //优惠券字段
+            $coupon_field = 'coupon_type_id,type,coupon_name,image,money,discount,validity_type,fixed_term,status,is_limit,at_least,count,lead_count,end_time,goods_type,max_fetch';
+            $coupon_list = $coupon_model->getCouponTypeList($condition, $coupon_field);
+            $this->assign('coupon_list', $coupon_list);
+
+            $growth_up = $member_level_model->getFirstMemberLevel([ [ 'growth', '<', $level_info[ 'data' ][ 'growth' ] ], [ 'site_id', '=', $this->site_id ], [ 'level_type', '=', '0' ] ], 'growth', 'growth desc')[ 'data' ];
+            //下级
+            $growth_down = $member_level_model->getFirstMemberLevel([ [ 'growth', '>', $level_info[ 'data' ][ 'growth' ] ], [ 'site_id', '=', $this->site_id ], [ 'level_type', '=', '0' ] ], 'growth', 'growth asc')[ 'data' ];
+
+            $this->assign('growth_up', $growth_up ? $growth_up['growth'] : 0);
+            $this->assign('growth_down', $growth_down ? $growth_down['growth'] : 0);
+
+            return $this->fetch('memberlevel/edit_level');
+        }
+    }
+
+    /**
+     * 会员等级删除
+     */
+    public function deleteLevel()
+    {
+        $level_id = input('level_id', '');
+        $member_level_model = new MemberLevelModel();
+        $this->addLog("会员等级删除id:" . $level_id);
+        return $member_level_model->deleteMemberLevel($level_id, $this->site_id);
+    }
+
+    /**
+     * 会员等级状态
+     */
+    public function statusLevel()
+    {
+        $level_id = input('level_id', '');
+        $status = input('status', '');
+        $member_level_model = new MemberLevelModel();
+        $this->addLog("会员等级修改id:" . $level_id);
+        return $member_level_model->editMemberLevel([ 'status' => $status ], [ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
+    }
+
+
+    /**
+     * 更新会员等级状态
+     */
+    public function startlevel()
+    {
+        $member_level_model = new MemberLevelModel();
+        ( new Config )->setMemberConfig([ 'is_update' => 0 ], $this->site_id, $this->app_module)[ 'data' ] ?? [];
+        return $member_level_model->startlevel($this->site_id);
+    }
+}

+ 2020 - 0
app/shop/controller/Order0625.php

@@ -0,0 +1,2020 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\shop\controller;
+
+use app\model\order\Config as ConfigModel;
+use app\model\order\Order as OrderModel;
+use app\model\order\OrderCommon;
+use app\model\order\OrderCommon as OrderCommonModel;
+use app\model\order\OrderExport;
+use app\model\store\Store as StoreModel;
+use app\model\system\Promotion as PromotionModel;
+use app\model\system\UserGroup;
+use app\model\web\Config as WebConfig;
+use phpoffice\phpexcel\Classes\PHPExcel;
+use phpoffice\phpexcel\Classes\PHPExcel\Writer\Excel2007;
+
+/**
+ * 订单
+ * Class Order
+ * @package app\shop\controller
+ */
+class Order extends BaseShop
+{
+
+    /**
+     * 快递订单列表
+     */
+    public function lists()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '交易流水号',
+            'remark' => '订单备注',
+            'name' => '收货人姓名',
+            'order_name' => '商品名称',
+            'mobile' => '收货人电话',
+            'nick_name' => '会员昵称',
+            'sku_no' => '商品编码',
+        );
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $delivery_start_time = input('delivery_start_time', '');
+        $delivery_end_time = input('delivery_end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');//订单类型
+        $order_type = input('order_type', 'all');//营销类型
+        $is_verify = input('is_verify', 'all');
+        $store_id = input('store_id', 0); // 所属门店id
+        $field = 'a.*,s.store_name';
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $alias = 'a';
+            $join = null;
+            $condition = [
+                [ 'a.site_id', '=', $this->site_id ],
+                [ 'a.is_delete', '=', 0 ],
+                [ 'a.order_scene', '=', 'online' ]
+            ];
+            $join[] = [
+                'store s',
+                's.store_id = a.store_id',
+                'left'
+            ];
+            //订单状态
+            if ($order_status != '') {
+                if ($order_status == 'refunding') {
+                    $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'refund_status', 'not in', [ 0, 3 ] ] ], 'order_id')[ 'data' ];
+                    $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                    $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                } else {
+                    $condition[] = [ 'a.order_status', '=', $order_status ];
+                }
+            }
+
+            if ($is_verify != 'all') {
+                $join[] = [
+                    'verify v',
+                    'v.verify_code = a.virtual_code',
+                    'left'
+                ];
+                $condition[] = [ 'v.is_verify', '=', $is_verify ];
+            }
+
+            //订单内容 模糊查询
+            if ($order_name != '') {
+                $condition[] = [ 'a.order_name', 'like', '%' . $order_name . '%' ];
+            }
+            //订单来源
+            if ($order_from != '') {
+                $condition[] = [ 'a.order_from', '=', $order_from ];
+            }
+            //订单支付
+            if ($pay_type != '') {
+                $condition[] = [ 'a.pay_type', '=', $pay_type ];
+            }
+            //订单类型
+            if ($order_type != 'all') {
+                $condition[] = [ 'a.order_type', '=', $order_type ];
+            }
+            //营销类型
+            if ($promotion_type != '') {
+                if ($promotion_type == 'empty') {
+                    $condition[] = [ 'a.promotion_type', '=', '' ];
+                } else {
+                    $condition[] = [ 'a.promotion_type', '=', $promotion_type ];
+                }
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'a.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            if (!empty($delivery_start_time) && empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '>=', date_to_time($delivery_start_time) ];
+            } elseif (empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '<=', date_to_time($delivery_end_time) ];
+            } elseif (!empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', 'between', [ date_to_time($delivery_start_time), date_to_time($delivery_end_time) ] ];
+            }
+
+            if (!empty($store_id)) {
+                $condition[] = [ 'a.store_id', '=', $store_id ];
+            }
+
+            if ($search_text != '') {
+                switch ( $order_label ) {
+                    case 'nick_name':
+                        $join[] = [
+                            'member m',
+                            'm.member_id = a.member_id',
+                            'left'
+                        ];
+                        $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+                        break;
+                    case 'sku_no':
+                        $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'sku_no', 'like', '%' . $search_text . '%' ] ], 'order_id')[ 'data' ];
+                        $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                        $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                        break;
+                    default:
+                        $condition[] = [ 'a.' . $order_label, 'like', '%' . $search_text . '%' ];
+                }
+            }
+
+            $order = 'a.create_time desc';
+
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, $order, $field, $alias, $join);
+            $list[ 'data' ][ 'order_status' ] = $order_status;
+            return $list;
+        } else {
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $this->assign('order_type_list', $order_type_list);
+            $this->assign('order_label_list', $order_label_list);
+            $this->assign('order_status_list', $order_type_list[ 'all' ][ 'status' ]);//订单状态
+
+            //订单来源 (支持端口)
+            $this->assign('order_from_list', $order_common_model->getOrderFromList([ 'order_scene' => 'online' ]));
+
+            $pay_type = $order_common_model->getPayType();
+            $this->assign('pay_type_list', $pay_type);
+
+            $this->assign('order_status', $order_status);
+
+            //营销活动类型
+            $order_promotion_type = event('OrderPromotionType');
+            $this->assign('promotion_type', $order_promotion_type);
+            $this->assign('http_type', get_http_type());
+
+            $config_model = new ConfigModel();
+            $order_config = $config_model->getOrderEventTimeConfig($this->site_id, $this->app_module)[ 'data' ][ 'value' ] ?? [];
+            $this->assign('order_config', $order_config);
+
+            $config_model = new WebConfig();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+            if (addon_is_exit('store') == 1) {
+                $store_model = new StoreModel();
+                $store_list = $store_model->getStoreList([
+                    [ 'site_id', '=', $this->site_id ]
+                ], 'store_id,store_name')[ 'data' ];
+                $this->assign('store_list', $store_list);
+            }
+
+            return $this->fetch('order/lists');
+        }
+
+    }
+
+    /**
+     * 自提订单
+     */
+    public function pickUpOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '交易流水号',
+            'name' => '收货人姓名',
+            'order_name' => '商品名称',
+            'mobile' => '收货人电话',
+            'nick_name' => '会员昵称',
+        );
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');//订单类型
+//        $order_type = input('order_type', 'all');//营销类型
+        $is_verify = input('is_verify', 'all');
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $alias = 'a';
+            $join = null;
+            $condition = [
+                [ 'a.order_type', '=', 2 ],
+                [ 'a.site_id', '=', $this->site_id ],
+                [ 'a.is_delete', '=', 0 ]
+            ];
+            //订单状态
+            if ($order_status != '') {
+                if ($order_status == 2) {
+                    //待提货
+                    $condition[] = [ 'a.order_status', '=', $order_status ];
+                } else {
+                    //待提货
+                    $condition[] = [ 'order_status', 'not in', '0,-1,2' ];
+                }
+
+            } else {
+                $condition[] = [ 'order_status', 'not in', '0,-1' ];
+            }
+
+            $order = 'a.create_time desc';
+
+            if ($is_verify != 'all') {
+                $join[] = [
+                    'verify v',
+                    'v.verify_code = a.virtual_code',
+                    'right'
+                ];
+                $condition[] = [ 'v.is_verify', '=', $is_verify ];
+                $order = 'a.create_time desc';
+            }
+
+            //订单内容 模糊查询
+            if ($order_name != '') {
+                $condition[] = [ 'a.order_name', 'like', '%' . $order_name . '%' ];
+            }
+            //订单来源
+            if ($order_from != '') {
+                $condition[] = [ 'a.order_from', '=', $order_from ];
+            }
+            //订单支付
+            if ($pay_type != '') {
+                $condition[] = [ 'a.pay_type', '=', $pay_type ];
+            }
+            //营销类型
+            if ($promotion_type != '') {
+                if ($promotion_type == 'empty') {
+                    $condition[] = [ 'a.promotion_type', '=', '' ];
+                } else {
+                    $condition[] = [ 'a.promotion_type', '=', $promotion_type ];
+                }
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'a.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            if ($order_label == 'nick_name') {
+                $join[] = [
+                    'member m',
+                    'm.member_id = a.member_id',
+                    'right'
+                ];
+                $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+            } else {
+                if ($search_text != '') {
+                    $condition[] = [ 'a.' . $order_label, 'like', '%' . $search_text . '%' ];
+                }
+            }
+            $join[] = [
+                'store s',
+                's.store_id = a.delivery_store_id',
+                'inner'
+            ];
+
+            $store_id_arr = [];
+            $userGroupModel = new UserGroup();
+            $userInfo = $this->user_info;
+            $userGroupWhere['uid'] = $userInfo['uid'];
+            $userGroupList = $userGroupModel->getUserList($userGroupWhere,'uid,store_id');
+            $store_id_arr = array_column($userGroupList['data'],'store_id');
+            if(!empty($store_id_arr) &&  !$userInfo['is_admin']){
+                $condition[] = [ "a.store_id", "in", $store_id_arr];
+            }
+
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, $order, $field = 'a.*,s.address,s.full_address', $alias, $join);
+            return $list;
+        } else {
+
+            $order_type_list = array (
+                2 => [
+                    'status' => [
+                        2 => '待提货',
+                        4 => '已提货'
+                    ]
+
+                ]
+            );
+            $this->assign('order_type_list', $order_type_list);
+            $this->assign('order_label_list', $order_label_list);
+
+            //订单来源 (支持端口)
+            $order_from = $order_common_model->getOrderFromList();
+            $this->assign('order_from_list', $order_from);
+
+            $pay_type = $order_common_model->getPayType();
+            $this->assign('pay_type_list', $pay_type);
+
+            //营销活动类型
+            $order_promotion_type = event('OrderPromotionType');
+            $this->assign('promotion_type', $order_promotion_type);
+            $this->assign('http_type', get_http_type());
+
+            $config_model = new WebConfig();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+            return $this->fetch('order/pickuporder');
+        }
+    }
+
+    /**
+     * 自提订单导出(已订单为主)
+     */
+    public function exportPickUpOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+//        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ]
+        ];
+        //订单类型
+//        $order_type_name = '全部';
+//        if ($order_type != 'all') {
+        $condition[] = [ 'o.order_type', '=', 2 ];
+
+        $order_type_list = $order_common_model->getOrderTypeStatusList();
+        $order_type_list = array_column($order_type_list, 'name', 'type');
+        $order_type_name = $order_type_list[ 2 ];
+//        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+
+    /**
+     * 自提订单导出(已订单商品为主)
+     */
+    public function exportPickUpOrderGoods()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+//        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ]
+        ];
+        //订单类型
+//        $order_type_name = '全部';
+//        if ($order_type != 'all') {
+        $condition[] = [ 'o.order_type', '=', 2 ];
+
+        $order_type_list = $order_common_model->getOrderTypeStatusList();
+        $order_type_list = array_column($order_type_list, 'name', 'type');
+        $order_type_name = $order_type_list[ 2 ];
+//        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', "%$order_name%" ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', "%$search_text%" ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', "%$search_text%" ];
+        }
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderGoodsExport($condition, $condition_desc, $this->site_id, $is_verify, $order_label);
+        return $result;
+    }
+
+    /**
+     * 快递订单详情
+     */
+    public function detail()
+    {
+        $order_id = input('order_id', 0);
+        $order_common_model = new OrderCommonModel();
+        $order_detail_result = $order_common_model->getOrderDetail($order_id);
+        $order_detail = $order_detail_result[ 'data' ];
+//        if(!empty($order_detail['package_list'])){
+//            $order_detail['package_list'] = array_reverse($order_detail['package_list']);
+//        }
+        if (empty($order_detail)) $this->error('未获取到订单数据', addon_url('shop/order/lists'));
+
+        $this->assign('order_detail', $order_detail);
+        switch ( $order_detail[ 'order_type' ] ) {
+            case 1 :
+                $template = 'order/detail';
+                break;
+            case 2 :
+                $template = 'storeorder/detail';
+                break;
+            case 3 :
+                $template = 'localorder/detail';
+                break;
+            case 4 :
+                $template = 'virtualorder/detail';
+                break;
+            case 5 :
+                $template = 'cashorder/detail';
+                break;
+        }
+
+        $this->assign('http_type', get_http_type());
+
+        $config_model = new WebConfig();
+        $mp_config = $config_model->getMapConfig($this->site_id);
+        $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+        return $this->fetch($template);
+    }
+
+    /**
+     * 订单设置
+     */
+    public function config()
+    {
+        $config_model = new ConfigModel();
+        if (request()->isAjax()) {
+            //订单事件时间设置数据
+            $order_event_time_config_data = [
+                'auto_close' => (int) input('order_auto_close_time', 0),//订单未付款自动关闭时间 数字 单位(分钟)
+                'auto_take_delivery' => (int) input('order_auto_take_delivery_time', 0),//订单发货后自动收货时间 数字 单位(天)
+                'auto_complete' => (int) input('order_auto_complete_time', 0),//订单收货后自动完成时间 数字 单位(天)
+                'after_sales_time' => (int) input('after_sales_time', 0),//订单完成后可维权时间 数字 单位(天)
+                'invoice_status' => input('invoice_status', 0),
+                'invoice_rate' => input('invoice_rate', 0),
+                'invoice_content' => implode(',', input('invoice_content', [])),
+                'invoice_money' => number_format(input('invoice_money', 0), 2, '.', ''),
+                'invoice_type' => implode(',', input('invoice_type', [])),
+                'do_refund' => input('do_refund', 1)
+            ];
+            //订单评价设置数据
+            $order_evaluate_config_data = [
+                'evaluate_status' => input('evaluate_status', 0),//订单评价状态(0关闭 1开启)
+                'evaluate_show' => input('evaluate_show', 0),//显示评价(0关闭 1开启)
+                'evaluate_audit' => input('evaluate_audit', 0),//评价审核状态(0关闭 1开启)
+            ];
+
+            //余额支付配置
+            $balance_config_data = [
+                'balance_show' => input('balance_show', 0),//余额支付配置(0关闭 1开启)
+            ];
+
+            $res = $config_model->setOrderEventTimeConfig($order_event_time_config_data, $this->site_id, $this->app_module);
+            $config_model->setOrderEvaluateConfig($order_evaluate_config_data, $this->site_id, $this->app_module);
+            $config_model->setBalanceConfig($balance_config_data, $this->site_id, $this->app_module);
+            return $res;
+        } else {
+            $this->forthMenu();
+            //订单事件时间设置
+            $order_event_time_config = $config_model->getOrderEventTimeConfig($this->site_id, $this->app_module);
+            $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_content' ] = explode(',', $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_content' ]);
+            $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_type' ] = explode(',', $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_type' ]);
+            //订单评价设置
+            $order_evaluate_config = $config_model->getOrderEvaluateConfig($this->site_id, $this->app_module);
+
+            //余额支付配置
+            $balance_config = $config_model->getBalanceConfig($this->site_id, $this->app_module);
+            $this->assign('balance_config', $balance_config[ 'data' ][ 'value' ]);
+            $this->assign('order_event_time_config', $order_event_time_config[ 'data' ][ 'value' ]);
+            $this->assign('order_evaluate_config', $order_evaluate_config[ 'data' ][ 'value' ]);
+
+            return $this->fetch('order/config');
+        }
+    }
+
+    /**
+     * 订单关闭
+     * @return mixed
+     */
+    public function close()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action_way' => 2
+            ];
+
+            $result = $order_common_model->orderClose($order_id, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单调价
+     * @return mixed
+     */
+    public function adjustPrice()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $adjust_money = input('adjust_money', 0);
+            $delivery_money = input('delivery_money', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderAdjustMoney($order_id, $adjust_money, $delivery_money);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单发货
+     * @return mixed
+     */
+    public function delivery()
+    {
+        if (request()->isAjax()) {
+
+            $order_model = new OrderModel();
+            $data = array (
+                'type' => input('type', 'manual'),//发货方式(手动发货、电子面单)
+                'order_goods_ids' => input('order_goods_ids', ''),//商品id
+                'express_company_id' => input('express_company_id', 0),//物流公司
+                'delivery_no' => input('delivery_no', ''),//快递单号
+                'order_id' => input('order_id', 0),//订单id
+                'delivery_type' => input('delivery_type', 0),//是否需要物流
+                'site_id' => $this->site_id,
+                'template_id' => input('template_id', 0),//电子面单模板id
+                'user_info' => $this->user_info
+            );
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action' => '商家对订单进行了发货',
+                'action_way' => 2,
+            ];
+            $result = $order_model->orderGoodsDelivery($data, 1, $log_data);
+            return $result;
+        } else {
+            $order_id = input('order_id', 0);
+            $delivery_status = input('delivery_status', '');
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            if ($delivery_status === '') {
+                $condition[] = [ 'delivery_status', '=', $delivery_status ];
+            }
+            $field = 'order_goods_id, order_id, site_id, site_name, sku_name, sku_image, sku_no, is_virtual, price, cost_price, num, goods_money, cost_money, delivery_status, delivery_no, goods_id, delivery_status_name';
+            $order_goods_list_result = $order_common_model->getOrderGoodsList($condition, $field, '', null, 'delivery_no');
+            $order_goods_list = $order_goods_list_result[ 'data' ];
+            $this->assign('order_goods_list', $order_goods_list);
+            return $this->fetch('order/delivery');
+        }
+    }
+
+    /**
+     * 获取订单项列表
+     */
+    public function getOrderGoodsList()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $delivery_status = input('delivery_status', '');
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+                [ 'refund_status', '<>', 3 ],
+            );
+            if ($delivery_status != '') {
+                $condition[] = [ 'delivery_status', '=', $delivery_status ];
+            }
+            $field = 'order_goods_id, order_id, site_id, sku_name, sku_image, sku_no, is_virtual, price, cost_price, num, goods_money, cost_money, delivery_status, delivery_no, goods_id, delivery_status_name';
+            $result = $order_common_model->getOrderGoodsList($condition, $field, '', null, '');
+            return $result;
+        }
+    }
+
+    /**
+     * 订单修改收货地址
+     * @return mixed
+     */
+    public function editAddress()
+    {
+        $order_id = input('order_id', 0);
+        if (request()->isAjax()) {
+            $order_model = new OrderModel();
+            $province_id = input('province_id');
+            $city_id = input('city_id');
+            $district_id = input('district_id');
+            $community_id = input('community_id', 0);
+            $address = input('address');
+            $full_address = input('full_address');
+            $longitude = input('longitude', 0);
+            $latitude = input('latitude', 0);
+            $mobile = input('mobile');
+            $telephone = input('telephone');
+            $name = input('name');
+            $data = array (
+                'province_id' => $province_id,
+                'city_id' => $city_id,
+                'district_id' => $district_id,
+                'community_id' => $community_id,
+                'address' => $address,
+                'full_address' => $full_address,
+                'longitude' => $longitude,
+                'latitude' => $latitude,
+                'mobile' => $mobile,
+                'telephone' => $telephone,
+                'name' => $name,
+            );
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ]
+            );
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action' => '商家修改了收货地址',
+                'action_way' => '2',
+                'order_id' => $order_id
+            ];
+            $result = $order_model->orderAddressUpdate($data, $condition, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 获取订单信息
+     */
+    public function getOrderInfo()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            $result = $order_common_model->getOrderInfo($condition);
+            return $result;
+        }
+    }
+
+    /**
+     * 获取订单 订单项内容
+     */
+    public function getOrderDetail()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->getOrderDetail($order_id);
+            return $result;
+        }
+    }
+
+    /**
+     * 卖家备注
+     */
+    public function orderRemark()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $remark = input('remark', 0);
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            $data = array (
+                'remark' => $remark
+            );
+
+            $log_data[ 'action' ] = '商家备注了订单,备注内容:' . $remark;
+            $log_data[ 'action_way' ] = 2;
+            $log_data[ 'uid' ] = $this->user_info[ 'uid' ];
+            $log_data[ 'nick_name' ] = $this->user_info[ 'username' ];
+            $log_data[ 'order_id' ] = $order_id;
+
+            $result = $order_common_model->orderUpdate($data, $condition, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单导出(已订单为主)
+     */
+    public function exportOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $order_ids = input('order_ids', '');
+        $store_id = input('store_id', 0);
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'online' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+    /**
+     * 订单导出(已订单为主)
+     */
+    public function exportMoneyOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $order_ids = input('order_ids', '');
+        $store_id = input('store_id', 0);
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'cashier' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+    /**
+     * 订单导出(已订单商品为主)
+     */
+    public function exportOrderGoods()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_ids = input('order_ids', '');
+
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $store_id = input('store_id', 0); // 所属门店id
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'online' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderGoodsExport($condition, $condition_desc, $this->site_id, $is_verify, $order_label);
+        return $result;
+    }
+    public function exportMoneyOrderGoods()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_ids = input('order_ids', '');
+
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $store_id = input('store_id', 0); // 所属门店id
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'cashier' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderGoodsExport($condition, $condition_desc, $this->site_id, $is_verify, $order_label);
+        return $result;
+    }
+    /**
+     * 导出字段
+     * @return array
+     */
+    public function getPrintingField()
+    {
+        $model = new OrderExport();
+        $data = [
+            'order_field' => $model->order_field,
+            'order_goods_field' => $model->order_goods_field
+        ];
+
+        return success('1', '', $data);
+    }
+
+    public function printOrder()
+    {
+        $order_id = input('order_id', 0);
+        $order_common_model = new OrderCommonModel();
+        $order_detail_result = $order_common_model->getOrderDetail($order_id);
+        $order_detail = $order_detail_result[ 'data' ];
+        $this->assign('order_detail', $order_detail);
+        return $this->fetch('order/print_order');
+    }
+
+    /**
+     * 交易记录
+     */
+    public function tradelist()
+    {
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $member_id = input('member_id', 0);//会员id
+            $search_text = input('search_text', 0);//h关键字查询
+            $condition = array ();
+            if ($member_id > 0) {
+                $condition[] = [ 'member_id', '=', $member_id ];
+            }
+            if (!empty($search_text)) {
+                $condition[] = [ 'order_no|order_name', 'like', '%' . $search_text . '%' ];
+            }
+
+            return $order_common_model->getTradePageList($condition, $page, $page_size, 'create_time desc');
+
+        }
+    }
+
+    /**
+     * 订单关闭
+     * @return mixed
+     */
+    public function delete()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderDelete($order_id, $this->user_info);
+            return $result;
+        }
+    }
+
+    /**
+     * 线下支付
+     * @return \app\model\order\unknown
+     */
+    public function offlinePay()
+    {
+        $log_data = [
+            'uid' => $this->user_info[ 'uid' ],
+            'nick_name' => $this->user_info[ 'username' ],
+            'action_way' => 2
+        ];
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderOfflinePay($order_id, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单列表(发票)
+     */
+    public function invoiceOrderList()
+    {
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $invoice_status = input('invoice_status', '');
+            $invoice_type = input('invoice_type', '');
+            $taxpayer_number = input('taxpayer_number', '');
+            $invoice_title = input('invoice_title', '');
+            $invoice_title_type = input('invoice_title_type', '');
+            $alias = 'o';
+            $join = [];
+
+            $condition = [
+                [ 'o.site_id', '=', $this->site_id ],
+                [ 'o.is_delete', '=', 0 ],
+                [ 'o.is_invoice', '=', 1 ]
+            ];
+            //发票状态
+            if ($invoice_status != null) {
+                $condition[] = [ 'o.invoice_status', '=', $invoice_status ];
+            }
+            //发票类型
+            if (!empty($invoice_type)) {
+                $condition[] = [ 'o.invoice_type', '=', $invoice_type ];
+            }
+            //纳税人识别号
+            if (!empty($taxpayer_number)) {
+                $condition[] = [ 'o.taxpayer_number', 'like', '%' . $taxpayer_number . '%' ];
+                $condition[] = [ 'o.invoice_title_type', '=', 2 ];
+            }
+            //抬头类型
+            if (!empty($invoice_title_type)) {
+                $condition[] = [ 'o.invoice_title_type', '=', $invoice_title_type ];
+            }
+            //纳税人公司
+            if (!empty($invoice_title)) {
+                $condition[] = [ 'o.invoice_title', 'like', '%' . $invoice_title . '%' ];
+            }
+            //订单编号
+            $order_no = input('order_no', '');
+            if ($order_no) {
+                $condition[] = [ 'o.order_no', 'like', '%' . $order_no . '%' ];
+            }
+            //订单状态
+            $order_status = input('order_status', '');
+            if ($order_status != '') {
+                if ($order_status != 'refunding') {
+                    $condition[] = [ 'o.order_status', '=', $order_status ];
+                } else {
+                    $join = [
+                        [
+                            'order_goods og',
+                            'og.order_id = o.order_id',
+                            'left'
+                        ]
+                    ];
+                    $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                }
+            }
+            $order_type = input('order_type', 'all');//营销类型
+            $start_time = input('start_time', '');
+            $end_time = input('end_time', '');
+
+            //订单类型
+            if ($order_type != 'all') {
+                $condition[] = [ 'o.order_type', '=', $order_type ];
+            }
+
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+            $condition[] = [ 'o.order_status', '>', 0 ];
+            $order_common_model = new OrderCommonModel();
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, 'o.create_time desc', 'o.*', $alias, $join);
+            return $list;
+        } else {
+            $order_model = new OrderModel();
+//            $order_status_list = $order_model->order_status;
+            $order_common_model = new OrderCommonModel();
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $this->assign('order_type_list', $order_type_list);
+
+            return $this->fetch('order/invoice_list');
+        }
+    }
+
+    /**
+     * 订单列表(发票编辑)
+     */
+    public function invoiceEdit()
+    {
+        if (request()->isAjax()) {
+            //接收数据
+            $order_id = input('order_id', '');
+            $invoice_status = input('invoice_status', '');
+            $invoice_code = input('invoice_code', '');
+            $invoice_remark = input('invoice_remark', '');
+            $condition = [
+                [ 'order_id', '=', $order_id ]
+            ];
+
+            $data[ 'invoice_status' ] = $invoice_status;
+            $data[ 'invoice_code' ] = $invoice_code;
+            $data[ 'invoice_remark' ] = $invoice_remark;
+            $data[ 'invoice_time' ] = time();
+
+            $order_common_model = new OrderCommonModel();
+            $res = $order_common_model->orderUpdate($data, $condition);
+            return $res;
+        } else {
+            $order_id = input('order_id', '');
+            $this->assign('order_id', $order_id);
+
+            //订单详情
+            $order_common_model = new OrderCommonModel();
+            $order_detail = $order_common_model->getOrderDetail($order_id);
+
+            if (empty($order_detail[ 'data' ])) $this->error('未获取到订单数据', addon_url('shop/order/invoiceorderlist'));
+
+            $this->assign('order_detail', $order_detail[ 'data' ]);
+
+            return $this->fetch('order/invoice_edit');
+        }
+    }
+
+    /**
+     * 发票导出
+     */
+    public function exportInvoice()
+    {
+        $page_index = input('page', 1);
+        $page_size = 0;
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.is_invoice', '=', 1 ]
+        ];
+        $alias = 'o';
+        $join = null;
+        //订单编号
+        $order_no = input('order_no', '');
+        if ($order_no) {
+            $condition[] = [ 'o.order_no', 'like', '%' . $order_no . '%' ];
+        }
+        //订单状态
+        $order_status = input('order_status', '');
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+            }
+        }
+        $order_type = input('order_type', 'all');//营销类型
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+
+
+        //订单类型
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+        }
+
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+        }
+
+        $order_common_model = new OrderCommonModel();
+        $list_result = $order_common_model->getOrderPageList($condition, $page_index, $page_size, 'o.create_time desc', 'o.*', $alias, $join);
+        $list = $list_result[ 'data' ][ 'list' ];
+
+        // 实例化excel
+        $phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
+
+        $phpExcel->getProperties()->setTitle('退款维权订单');
+        $phpExcel->getProperties()->setSubject('退款维权订单');
+        //单独添加列名称
+        $phpExcel->setActiveSheetIndex(0);
+
+        $phpExcel->getActiveSheet()->setCellValue('A1', '订单编号');
+        $phpExcel->getActiveSheet()->setCellValue('B1', '订单总额(元)');
+        $phpExcel->getActiveSheet()->setCellValue('C1', '发票税费');
+        $phpExcel->getActiveSheet()->setCellValue('D1', '发票邮寄费用');
+        $phpExcel->getActiveSheet()->setCellValue('E1', '发票类型');
+        $phpExcel->getActiveSheet()->setCellValue('F1', '发票抬头');
+        $phpExcel->getActiveSheet()->setCellValue('G1', '抬头类型');
+        $phpExcel->getActiveSheet()->setCellValue('H1', '纳税人识别号');
+        $phpExcel->getActiveSheet()->setCellValue('I1', '发票内容');
+        $phpExcel->getActiveSheet()->setCellValue('J1', '发票税率(%)');
+        $phpExcel->getActiveSheet()->setCellValue('K1', '订单状态');
+        $phpExcel->getActiveSheet()->setCellValue('L1', '下单时间');
+
+        if (!empty($list)) {
+            foreach ($list as $k => $v) {
+                $start = $k + 2;
+                $phpExcel->getActiveSheet()->setCellValue('A' . $start, $v[ 'order_no' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('B' . $start, $v[ 'order_money' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('C' . $start, $v[ 'invoice_money' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('D' . $start, $v[ 'invoice_delivery_money' ] . ' ');
+
+                $invoice_name = '';
+                if ($v[ 'invoice_type' ] == 1) {
+                    $invoice_name = '纸质';
+                } else {
+                    $invoice_name = '电子';
+                }
+                if ($v[ 'is_tax_invoice' ] == 1) {
+                    $invoice_name .= '专用发票';
+                } else {
+                    $invoice_name .= '普通发票';
+                }
+                $phpExcel->getActiveSheet()->setCellValue('E' . $start, $invoice_name . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('F' . $start, $v[ 'invoice_title' ] . ' ');
+                $invoice_title_type = $v[ 'invoice_title_type' ] == 1 ? '个人' : '企业';
+                $phpExcel->getActiveSheet()->setCellValue('G' . $start, $invoice_title_type . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('H' . $start, $v[ 'taxpayer_number' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('I' . $start, $v[ 'invoice_title_type' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('J' . $start, $v[ 'invoice_rate' ] . '%');
+                $phpExcel->getActiveSheet()->setCellValue('K' . $start, $v[ 'order_status_name' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('L' . $start, time_to_date($v[ 'create_time' ]) . ' ');
+            }
+        }
+
+        // 重命名工作sheet
+        $phpExcel->getActiveSheet()->setTitle('发票列表');
+        // 设置第一个sheet为工作的sheet
+        $phpExcel->setActiveSheetIndex(0);
+        // 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
+        $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
+        $file = date('Y年m月d日-发票列表', time()) . '.xlsx';
+        $objWriter->save($file);
+
+        header('Content-type:application/octet-stream');
+
+        $filename = basename($file);
+        header('Content-Disposition:attachment;filename = ' . $filename);
+        header('Accept-ranges:bytes');
+        header('Accept-length:' . filesize($file));
+        readfile($file);
+        unlink($file);
+        exit;
+    }
+
+    /**
+     * 确认收货
+     */
+    public function takeDelivery()
+    {
+        if (request()->isAjax()) {
+
+            $order_id = input('order_id', '');
+            $type = input('type', 0);
+
+            $order_model = new OrderCommonModel();
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action_way' => 2
+            ];
+            if ($type == 1) {
+                $error_num = 0;
+                $success_num = 0;
+                $order_arr = explode(',', $order_id);
+                foreach ($order_arr as $key => $val) {
+                    $result = $order_model->orderCommonTakeDelivery($val, $log_data);
+                    if ($result[ 'code' ] >= 0) {
+                        $success_num += 1;
+                    } else {
+                        $error_num += 1;
+                    }
+                }
+                return success(0, '成功' . $success_num . '条,失败' . $error_num . '条');
+
+            } else {
+
+                $result = $order_model->orderCommonTakeDelivery($order_id, $log_data);
+                return $result;
+            }
+        }
+
+    }
+
+    /**
+     * 订单导出记录
+     * @return mixed
+     */
+    public function export()
+    {
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $export_model = new OrderExport();
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ]
+            );
+            $result = $export_model->getExportPageList($condition, $page_index, $page_size, 'create_time desc', '*');
+            return $result;
+        } else {
+            return $this->fetch('order/export');
+        }
+    }
+
+    /**
+     * 删除订单导出记录
+     */
+    public function deleteExport()
+    {
+        if (request()->isAjax()) {
+            $export_ids = input('export_ids', '');
+
+            $export_model = new OrderExport();
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ],
+                [ 'export_id', 'in', (string) $export_ids ]
+            );
+            $result = $export_model->deleteExport($condition);
+            return $result;
+        }
+    }
+
+    /**
+     * 购物须知
+     */
+    public function transactionAgreement()
+    {
+        if (request()->isAjax()) {
+            //设置注册协议
+            $title = input('title', '');
+            $content = input('content', '');
+            $config_model = new ConfigModel();
+            return $config_model->setTransactionDocument($title, $content, $this->site_id, 'shop');
+        } else {
+            $this->forthMenu();
+            //获取注册协议
+            $config_model = new ConfigModel();
+            $document_info = $config_model->getTransactionDocument($this->site_id, 'shop');
+            $this->assign('document_info', $document_info);
+
+            return $this->fetch('order/transaction_agreement');
+        }
+    }
+}

+ 2137 - 0
app/shop/controller/Order062501.php

@@ -0,0 +1,2137 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\shop\controller;
+
+use app\model\order\Config as ConfigModel;
+use app\model\order\Order as OrderModel;
+use app\model\order\OrderCommon;
+use app\model\order\OrderCommon as OrderCommonModel;
+use app\model\order\OrderExport;
+use app\model\store\Store as StoreModel;
+use app\model\system\Promotion as PromotionModel;
+use app\model\system\UserGroup;
+use app\model\web\Config as WebConfig;
+use phpoffice\phpexcel\Classes\PHPExcel;
+use phpoffice\phpexcel\Classes\PHPExcel\Writer\Excel2007;
+
+/**
+ * 订单
+ * Class Order
+ * @package app\shop\controller
+ */
+class Order extends BaseShop
+{
+
+    /**
+     * 快递订单列表
+     */
+    public function lists()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '交易流水号',
+            'remark' => '订单备注',
+            'name' => '收货人姓名',
+            'order_name' => '商品名称',
+            'mobile' => '收货人电话',
+            'nick_name' => '会员昵称',
+            'sku_no' => '商品编码',
+        );
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $delivery_start_time = input('delivery_start_time', '');
+        $delivery_end_time = input('delivery_end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');//订单类型
+        $order_type = input('order_type', 'all');//营销类型
+        $is_verify = input('is_verify', 'all');
+        $store_id = input('store_id', 0); // 所属门店id
+        $field = 'a.*,s.store_name';
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $alias = 'a';
+            $join = null;
+            $condition = [
+                [ 'a.site_id', '=', $this->site_id ],
+                [ 'a.is_delete', '=', 0 ],
+                [ 'a.order_scene', '=', 'online' ]
+            ];
+            $join[] = [
+                'store s',
+                's.store_id = a.store_id',
+                'left'
+            ];
+            //订单状态
+            if ($order_status != '') {
+                if ($order_status == 'refunding') {
+                    $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'refund_status', 'not in', [ 0, 3 ] ] ], 'order_id')[ 'data' ];
+                    $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                    $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                } else {
+                    $condition[] = [ 'a.order_status', '=', $order_status ];
+                }
+            }
+
+            if ($is_verify != 'all') {
+                $join[] = [
+                    'verify v',
+                    'v.verify_code = a.virtual_code',
+                    'left'
+                ];
+                $condition[] = [ 'v.is_verify', '=', $is_verify ];
+            }
+
+            //订单内容 模糊查询
+            if ($order_name != '') {
+                $condition[] = [ 'a.order_name', 'like', '%' . $order_name . '%' ];
+            }
+            //订单来源
+            if ($order_from != '') {
+                $condition[] = [ 'a.order_from', '=', $order_from ];
+            }
+            //订单支付
+            if ($pay_type != '') {
+                $condition[] = [ 'a.pay_type', '=', $pay_type ];
+            }
+            //订单类型
+            if ($order_type != 'all') {
+                $condition[] = [ 'a.order_type', '=', $order_type ];
+            }
+            //营销类型
+            if ($promotion_type != '') {
+                if ($promotion_type == 'empty') {
+                    $condition[] = [ 'a.promotion_type', '=', '' ];
+                } else {
+                    $condition[] = [ 'a.promotion_type', '=', $promotion_type ];
+                }
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'a.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            if (!empty($delivery_start_time) && empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '>=', date_to_time($delivery_start_time) ];
+            } elseif (empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '<=', date_to_time($delivery_end_time) ];
+            } elseif (!empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', 'between', [ date_to_time($delivery_start_time), date_to_time($delivery_end_time) ] ];
+            }
+
+            if (!empty($store_id)) {
+                $condition[] = [ 'a.store_id', '=', $store_id ];
+            }
+
+            if ($search_text != '') {
+                switch ( $order_label ) {
+                    case 'nick_name':
+                        $join[] = [
+                            'member m',
+                            'm.member_id = a.member_id',
+                            'left'
+                        ];
+                        $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+                        break;
+                    case 'sku_no':
+                        $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'sku_no', 'like', '%' . $search_text . '%' ] ], 'order_id')[ 'data' ];
+                        $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                        $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                        break;
+                    default:
+                        $condition[] = [ 'a.' . $order_label, 'like', '%' . $search_text . '%' ];
+                }
+            }
+
+            $order = 'a.create_time desc';
+
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, $order, $field, $alias, $join);
+            $list[ 'data' ][ 'order_status' ] = $order_status;
+            return $list;
+        } else {
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $this->assign('order_type_list', $order_type_list);
+            $this->assign('order_label_list', $order_label_list);
+            $this->assign('order_status_list', $order_type_list[ 'all' ][ 'status' ]);//订单状态
+
+            //订单来源 (支持端口)
+            $this->assign('order_from_list', $order_common_model->getOrderFromList([ 'order_scene' => 'online' ]));
+
+            $pay_type = $order_common_model->getPayType();
+            $this->assign('pay_type_list', $pay_type);
+
+            $this->assign('order_status', $order_status);
+
+            //营销活动类型
+            $order_promotion_type = event('OrderPromotionType');
+            $this->assign('promotion_type', $order_promotion_type);
+            $this->assign('http_type', get_http_type());
+
+            $config_model = new ConfigModel();
+            $order_config = $config_model->getOrderEventTimeConfig($this->site_id, $this->app_module)[ 'data' ][ 'value' ] ?? [];
+            $this->assign('order_config', $order_config);
+
+            $config_model = new WebConfig();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+            if (addon_is_exit('store') == 1) {
+                $store_model = new StoreModel();
+                $store_list = $store_model->getStoreList([
+                    [ 'site_id', '=', $this->site_id ]
+                ], 'store_id,store_name')[ 'data' ];
+                $this->assign('store_list', $store_list);
+            }
+
+            return $this->fetch('order/lists');
+        }
+
+    }
+
+    /**
+     * 自提订单
+     */
+    public function pickUpOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '交易流水号',
+            'name' => '收货人姓名',
+            'order_name' => '商品名称',
+            'mobile' => '收货人电话',
+            'nick_name' => '会员昵称',
+        );
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');//订单类型
+//        $order_type = input('order_type', 'all');//营销类型
+        $is_verify = input('is_verify', 'all');
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $alias = 'a';
+            $join = null;
+            $condition = [
+                [ 'a.order_type', '=', 2 ],
+                [ 'a.site_id', '=', $this->site_id ],
+                [ 'a.is_delete', '=', 0 ]
+            ];
+            //订单状态
+            if ($order_status != '') {
+                if ($order_status == 2) {
+                    //待提货
+                    $condition[] = [ 'a.order_status', '=', $order_status ];
+                } else {
+                    //待提货
+                    $condition[] = [ 'order_status', 'not in', '0,-1,2' ];
+                }
+
+            } else {
+                $condition[] = [ 'order_status', 'not in', '0,-1' ];
+            }
+
+            $order = 'a.create_time desc';
+
+            if ($is_verify != 'all') {
+                $join[] = [
+                    'verify v',
+                    'v.verify_code = a.virtual_code',
+                    'right'
+                ];
+                $condition[] = [ 'v.is_verify', '=', $is_verify ];
+                $order = 'a.create_time desc';
+            }
+
+            //订单内容 模糊查询
+            if ($order_name != '') {
+                $condition[] = [ 'a.order_name', 'like', '%' . $order_name . '%' ];
+            }
+            //订单来源
+            if ($order_from != '') {
+                $condition[] = [ 'a.order_from', '=', $order_from ];
+            }
+            //订单支付
+            if ($pay_type != '') {
+                $condition[] = [ 'a.pay_type', '=', $pay_type ];
+            }
+            //营销类型
+            if ($promotion_type != '') {
+                if ($promotion_type == 'empty') {
+                    $condition[] = [ 'a.promotion_type', '=', '' ];
+                } else {
+                    $condition[] = [ 'a.promotion_type', '=', $promotion_type ];
+                }
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'a.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            if ($order_label == 'nick_name') {
+                $join[] = [
+                    'member m',
+                    'm.member_id = a.member_id',
+                    'right'
+                ];
+                $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+            } else {
+                if ($search_text != '') {
+                    $condition[] = [ 'a.' . $order_label, 'like', '%' . $search_text . '%' ];
+                }
+            }
+            $join[] = [
+                'store s',
+                's.store_id = a.delivery_store_id',
+                'inner'
+            ];
+
+            $store_id_arr = [];
+            $userGroupModel = new UserGroup();
+            $userInfo = $this->user_info;
+            $userGroupWhere['uid'] = $userInfo['uid'];
+            $userGroupList = $userGroupModel->getUserList($userGroupWhere,'uid,store_id');
+            $store_id_arr = array_column($userGroupList['data'],'store_id');
+            if(!empty($store_id_arr) &&  !$userInfo['is_admin']){
+                $condition[] = [ "a.store_id", "in", $store_id_arr];
+            }
+
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, $order, $field = 'a.*,s.address,s.full_address', $alias, $join);
+            return $list;
+        } else {
+
+            $order_type_list = array (
+                2 => [
+                    'status' => [
+                        2 => '待提货',
+                        4 => '已提货'
+                    ]
+
+                ]
+            );
+            $this->assign('order_type_list', $order_type_list);
+            $this->assign('order_label_list', $order_label_list);
+
+            //订单来源 (支持端口)
+            $order_from = $order_common_model->getOrderFromList();
+            $this->assign('order_from_list', $order_from);
+
+            $pay_type = $order_common_model->getPayType();
+            $this->assign('pay_type_list', $pay_type);
+
+            //营销活动类型
+            $order_promotion_type = event('OrderPromotionType');
+            $this->assign('promotion_type', $order_promotion_type);
+            $this->assign('http_type', get_http_type());
+
+            $config_model = new WebConfig();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+            return $this->fetch('order/pickuporder');
+        }
+    }
+
+    /**
+     * 自提订单导出(已订单为主)
+     */
+    public function exportPickUpOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+//        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ]
+        ];
+        //订单类型
+//        $order_type_name = '全部';
+//        if ($order_type != 'all') {
+        $condition[] = [ 'o.order_type', '=', 2 ];
+
+        $order_type_list = $order_common_model->getOrderTypeStatusList();
+        $order_type_list = array_column($order_type_list, 'name', 'type');
+        $order_type_name = $order_type_list[ 2 ];
+//        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+
+    /**
+     * 自提订单导出(已订单商品为主)
+     */
+    public function exportPickUpOrderGoods()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+//        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ]
+        ];
+        //订单类型
+//        $order_type_name = '全部';
+//        if ($order_type != 'all') {
+        $condition[] = [ 'o.order_type', '=', 2 ];
+
+        $order_type_list = $order_common_model->getOrderTypeStatusList();
+        $order_type_list = array_column($order_type_list, 'name', 'type');
+        $order_type_name = $order_type_list[ 2 ];
+//        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', "%$order_name%" ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', "%$search_text%" ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', "%$search_text%" ];
+        }
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderGoodsExport($condition, $condition_desc, $this->site_id, $is_verify, $order_label);
+        return $result;
+    }
+
+    /**
+     * 快递订单详情
+     */
+    public function detail()
+    {
+        $order_id = input('order_id', 0);
+        $order_common_model = new OrderCommonModel();
+        $order_detail_result = $order_common_model->getOrderDetail($order_id);
+        $order_detail = $order_detail_result[ 'data' ];
+//        if(!empty($order_detail['package_list'])){
+//            $order_detail['package_list'] = array_reverse($order_detail['package_list']);
+//        }
+        if (empty($order_detail)) $this->error('未获取到订单数据', addon_url('shop/order/lists'));
+
+        $this->assign('order_detail', $order_detail);
+        switch ( $order_detail[ 'order_type' ] ) {
+            case 1 :
+                $template = 'order/detail';
+                break;
+            case 2 :
+                $template = 'storeorder/detail';
+                break;
+            case 3 :
+                $template = 'localorder/detail';
+                break;
+            case 4 :
+                $template = 'virtualorder/detail';
+                break;
+            case 5 :
+                $template = 'cashorder/detail';
+                break;
+        }
+
+        $this->assign('http_type', get_http_type());
+
+        $config_model = new WebConfig();
+        $mp_config = $config_model->getMapConfig($this->site_id);
+        $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+        return $this->fetch($template);
+    }
+
+    /**
+     * 订单设置
+     */
+    public function config()
+    {
+        $config_model = new ConfigModel();
+        if (request()->isAjax()) {
+            //订单事件时间设置数据
+            $order_event_time_config_data = [
+                'auto_close' => (int) input('order_auto_close_time', 0),//订单未付款自动关闭时间 数字 单位(分钟)
+                'auto_take_delivery' => (int) input('order_auto_take_delivery_time', 0),//订单发货后自动收货时间 数字 单位(天)
+                'auto_complete' => (int) input('order_auto_complete_time', 0),//订单收货后自动完成时间 数字 单位(天)
+                'after_sales_time' => (int) input('after_sales_time', 0),//订单完成后可维权时间 数字 单位(天)
+                'invoice_status' => input('invoice_status', 0),
+                'invoice_rate' => input('invoice_rate', 0),
+                'invoice_content' => implode(',', input('invoice_content', [])),
+                'invoice_money' => number_format(input('invoice_money', 0), 2, '.', ''),
+                'invoice_type' => implode(',', input('invoice_type', [])),
+                'do_refund' => input('do_refund', 1)
+            ];
+            //订单评价设置数据
+            $order_evaluate_config_data = [
+                'evaluate_status' => input('evaluate_status', 0),//订单评价状态(0关闭 1开启)
+                'evaluate_show' => input('evaluate_show', 0),//显示评价(0关闭 1开启)
+                'evaluate_audit' => input('evaluate_audit', 0),//评价审核状态(0关闭 1开启)
+            ];
+
+            //余额支付配置
+            $balance_config_data = [
+                'balance_show' => input('balance_show', 0),//余额支付配置(0关闭 1开启)
+            ];
+
+            $res = $config_model->setOrderEventTimeConfig($order_event_time_config_data, $this->site_id, $this->app_module);
+            $config_model->setOrderEvaluateConfig($order_evaluate_config_data, $this->site_id, $this->app_module);
+            $config_model->setBalanceConfig($balance_config_data, $this->site_id, $this->app_module);
+            return $res;
+        } else {
+            $this->forthMenu();
+            //订单事件时间设置
+            $order_event_time_config = $config_model->getOrderEventTimeConfig($this->site_id, $this->app_module);
+            $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_content' ] = explode(',', $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_content' ]);
+            $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_type' ] = explode(',', $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_type' ]);
+            //订单评价设置
+            $order_evaluate_config = $config_model->getOrderEvaluateConfig($this->site_id, $this->app_module);
+
+            //余额支付配置
+            $balance_config = $config_model->getBalanceConfig($this->site_id, $this->app_module);
+            $this->assign('balance_config', $balance_config[ 'data' ][ 'value' ]);
+            $this->assign('order_event_time_config', $order_event_time_config[ 'data' ][ 'value' ]);
+            $this->assign('order_evaluate_config', $order_evaluate_config[ 'data' ][ 'value' ]);
+
+            return $this->fetch('order/config');
+        }
+    }
+
+    /**
+     * 订单关闭
+     * @return mixed
+     */
+    public function close()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action_way' => 2
+            ];
+
+            $result = $order_common_model->orderClose($order_id, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单调价
+     * @return mixed
+     */
+    public function adjustPrice()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $adjust_money = input('adjust_money', 0);
+            $delivery_money = input('delivery_money', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderAdjustMoney($order_id, $adjust_money, $delivery_money);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单发货
+     * @return mixed
+     */
+    public function delivery()
+    {
+        if (request()->isAjax()) {
+
+            $order_model = new OrderModel();
+            $data = array (
+                'type' => input('type', 'manual'),//发货方式(手动发货、电子面单)
+                'order_goods_ids' => input('order_goods_ids', ''),//商品id
+                'express_company_id' => input('express_company_id', 0),//物流公司
+                'delivery_no' => input('delivery_no', ''),//快递单号
+                'order_id' => input('order_id', 0),//订单id
+                'delivery_type' => input('delivery_type', 0),//是否需要物流
+                'site_id' => $this->site_id,
+                'template_id' => input('template_id', 0),//电子面单模板id
+                'user_info' => $this->user_info
+            );
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action' => '商家对订单进行了发货',
+                'action_way' => 2,
+            ];
+            $result = $order_model->orderGoodsDelivery($data, 1, $log_data);
+            return $result;
+        } else {
+            $order_id = input('order_id', 0);
+            $delivery_status = input('delivery_status', '');
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            if ($delivery_status === '') {
+                $condition[] = [ 'delivery_status', '=', $delivery_status ];
+            }
+            $field = 'order_goods_id, order_id, site_id, site_name, sku_name, sku_image, sku_no, is_virtual, price, cost_price, num, goods_money, cost_money, delivery_status, delivery_no, goods_id, delivery_status_name';
+            $order_goods_list_result = $order_common_model->getOrderGoodsList($condition, $field, '', null, 'delivery_no');
+            $order_goods_list = $order_goods_list_result[ 'data' ];
+            $this->assign('order_goods_list', $order_goods_list);
+            return $this->fetch('order/delivery');
+        }
+    }
+
+    /**
+     * 获取订单项列表
+     */
+    public function getOrderGoodsList()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $delivery_status = input('delivery_status', '');
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+                [ 'refund_status', '<>', 3 ],
+            );
+            if ($delivery_status != '') {
+                $condition[] = [ 'delivery_status', '=', $delivery_status ];
+            }
+            $field = 'order_goods_id, order_id, site_id, sku_name, sku_image, sku_no, is_virtual, price, cost_price, num, goods_money, cost_money, delivery_status, delivery_no, goods_id, delivery_status_name';
+            $result = $order_common_model->getOrderGoodsList($condition, $field, '', null, '');
+            return $result;
+        }
+    }
+
+    /**
+     * 订单修改收货地址
+     * @return mixed
+     */
+    public function editAddress()
+    {
+        $order_id = input('order_id', 0);
+        if (request()->isAjax()) {
+            $order_model = new OrderModel();
+            $province_id = input('province_id');
+            $city_id = input('city_id');
+            $district_id = input('district_id');
+            $community_id = input('community_id', 0);
+            $address = input('address');
+            $full_address = input('full_address');
+            $longitude = input('longitude', 0);
+            $latitude = input('latitude', 0);
+            $mobile = input('mobile');
+            $telephone = input('telephone');
+            $name = input('name');
+            $data = array (
+                'province_id' => $province_id,
+                'city_id' => $city_id,
+                'district_id' => $district_id,
+                'community_id' => $community_id,
+                'address' => $address,
+                'full_address' => $full_address,
+                'longitude' => $longitude,
+                'latitude' => $latitude,
+                'mobile' => $mobile,
+                'telephone' => $telephone,
+                'name' => $name,
+            );
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ]
+            );
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action' => '商家修改了收货地址',
+                'action_way' => '2',
+                'order_id' => $order_id
+            ];
+            $result = $order_model->orderAddressUpdate($data, $condition, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 获取订单信息
+     */
+    public function getOrderInfo()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            $result = $order_common_model->getOrderInfo($condition);
+            return $result;
+        }
+    }
+
+    /**
+     * 获取订单 订单项内容
+     */
+    public function getOrderDetail()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->getOrderDetail($order_id);
+            return $result;
+        }
+    }
+
+    /**
+     * 卖家备注
+     */
+    public function orderRemark()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $remark = input('remark', 0);
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            $data = array (
+                'remark' => $remark
+            );
+
+            $log_data[ 'action' ] = '商家备注了订单,备注内容:' . $remark;
+            $log_data[ 'action_way' ] = 2;
+            $log_data[ 'uid' ] = $this->user_info[ 'uid' ];
+            $log_data[ 'nick_name' ] = $this->user_info[ 'username' ];
+            $log_data[ 'order_id' ] = $order_id;
+
+            $result = $order_common_model->orderUpdate($data, $condition, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单导出(已订单为主)
+     */
+    public function exportOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $order_ids = input('order_ids', '');
+        $store_id = input('store_id', 0);
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'online' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+    /**
+     * 订单导出(已订单为主)
+     */
+    public function exportMoneyOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $order_ids = input('order_ids', '');
+        $store_id = input('store_id', 0);
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'cashier' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        $store_id_arr = [];
+        $userGroupModel = new UserGroup();
+        $userInfo = $this->user_info;
+        $userGroupWhere['uid'] = $userInfo['uid'];
+        $userGroupList = $userGroupModel->getUserList($userGroupWhere,'uid,store_id');
+        $store_id_arr = array_column($userGroupList['data'],'store_id');
+        if(!empty($store_id_arr) &&  !$userInfo['is_admin']){
+            $condition[] = [ "o.store_id", "in", $store_id_arr];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+    /**
+     * 订单导出(已订单为主)
+     */
+    public function exportRechargeorder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_no = input('order_no', '');//订单状态
+        $nickname = input('nickname', '');
+        $store_id = input('store_id', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_ids = input('order_ids', '');
+
+
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $is_verify = input('is_verify', 'all');
+        $order_ids = input('order_ids', '');
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'cashier' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        if(!empty($order_no)){
+            $order_id = model('member_recharge_order')->getValue([ [ 'order_no', 'like', '%'.$order_no.'%' ] ], 'relate_id');
+            $condition[] = [ 'o.order_id', '=', $order_id ];
+        }
+
+        if(!empty($nickname)){
+            $member_id_arr = model('member')->getColumn([ [ 'nickname', 'like', '%'.$nickname.'%' ] ], 'member_id');
+            $condition[] = [ 'o.member_id', 'in', $member_id_arr ];
+        }
+
+        $time_name = '';
+        $time_flag = false;
+        $recharge_timewhere=[];
+        if (!empty($start_time) && empty($end_time)) {
+            $recharge_timewhere[] = [ 'pay_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+            $time_flag = true;
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $recharge_timewhere[] = [ 'pay_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+            $time_flag = true;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $recharge_timewhere[] = [ 'pay_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+            $time_flag = true;
+        }
+        if($time_flag){
+            $recharge_timewhere[]=[ 'status', '=', 2 ];
+            $relate_id_arr = model('member_recharge_order')->getColumn($recharge_timewhere, 'relate_id');
+            $condition[] = [ 'o.order_id', 'in', $relate_id_arr ];
+        }else{
+            $relate_id_arr = model('member_recharge_order')->getColumn([ [ 'status', '=', 2 ] ], 'relate_id');
+            $condition[] = [ 'o.order_id', 'in', $relate_id_arr ];
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+    /**
+     * 订单导出(已订单商品为主)
+     */
+    public function exportOrderGoods()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_ids = input('order_ids', '');
+
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $store_id = input('store_id', 0); // 所属门店id
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'online' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderGoodsExport($condition, $condition_desc, $this->site_id, $is_verify, $order_label);
+        return $result;
+    }
+    public function exportMoneyOrderGoods()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_ids = input('order_ids', '');
+
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $store_id = input('store_id', 0); // 所属门店id
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'cashier' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderGoodsExport($condition, $condition_desc, $this->site_id, $is_verify, $order_label);
+        return $result;
+    }
+    /**
+     * 导出字段
+     * @return array
+     */
+    public function getPrintingField()
+    {
+        $model = new OrderExport();
+        $data = [
+            'order_field' => $model->order_field,
+            'order_goods_field' => $model->order_goods_field
+        ];
+
+        return success('1', '', $data);
+    }
+
+    public function printOrder()
+    {
+        $order_id = input('order_id', 0);
+        $order_common_model = new OrderCommonModel();
+        $order_detail_result = $order_common_model->getOrderDetail($order_id);
+        $order_detail = $order_detail_result[ 'data' ];
+        $this->assign('order_detail', $order_detail);
+        return $this->fetch('order/print_order');
+    }
+
+    /**
+     * 交易记录
+     */
+    public function tradelist()
+    {
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $member_id = input('member_id', 0);//会员id
+            $search_text = input('search_text', 0);//h关键字查询
+            $condition = array ();
+            if ($member_id > 0) {
+                $condition[] = [ 'member_id', '=', $member_id ];
+            }
+            if (!empty($search_text)) {
+                $condition[] = [ 'order_no|order_name', 'like', '%' . $search_text . '%' ];
+            }
+
+            return $order_common_model->getTradePageList($condition, $page, $page_size, 'create_time desc');
+
+        }
+    }
+
+    /**
+     * 订单关闭
+     * @return mixed
+     */
+    public function delete()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderDelete($order_id, $this->user_info);
+            return $result;
+        }
+    }
+
+    /**
+     * 线下支付
+     * @return \app\model\order\unknown
+     */
+    public function offlinePay()
+    {
+        $log_data = [
+            'uid' => $this->user_info[ 'uid' ],
+            'nick_name' => $this->user_info[ 'username' ],
+            'action_way' => 2
+        ];
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderOfflinePay($order_id, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单列表(发票)
+     */
+    public function invoiceOrderList()
+    {
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $invoice_status = input('invoice_status', '');
+            $invoice_type = input('invoice_type', '');
+            $taxpayer_number = input('taxpayer_number', '');
+            $invoice_title = input('invoice_title', '');
+            $invoice_title_type = input('invoice_title_type', '');
+            $alias = 'o';
+            $join = [];
+
+            $condition = [
+                [ 'o.site_id', '=', $this->site_id ],
+                [ 'o.is_delete', '=', 0 ],
+                [ 'o.is_invoice', '=', 1 ]
+            ];
+            //发票状态
+            if ($invoice_status != null) {
+                $condition[] = [ 'o.invoice_status', '=', $invoice_status ];
+            }
+            //发票类型
+            if (!empty($invoice_type)) {
+                $condition[] = [ 'o.invoice_type', '=', $invoice_type ];
+            }
+            //纳税人识别号
+            if (!empty($taxpayer_number)) {
+                $condition[] = [ 'o.taxpayer_number', 'like', '%' . $taxpayer_number . '%' ];
+                $condition[] = [ 'o.invoice_title_type', '=', 2 ];
+            }
+            //抬头类型
+            if (!empty($invoice_title_type)) {
+                $condition[] = [ 'o.invoice_title_type', '=', $invoice_title_type ];
+            }
+            //纳税人公司
+            if (!empty($invoice_title)) {
+                $condition[] = [ 'o.invoice_title', 'like', '%' . $invoice_title . '%' ];
+            }
+            //订单编号
+            $order_no = input('order_no', '');
+            if ($order_no) {
+                $condition[] = [ 'o.order_no', 'like', '%' . $order_no . '%' ];
+            }
+            //订单状态
+            $order_status = input('order_status', '');
+            if ($order_status != '') {
+                if ($order_status != 'refunding') {
+                    $condition[] = [ 'o.order_status', '=', $order_status ];
+                } else {
+                    $join = [
+                        [
+                            'order_goods og',
+                            'og.order_id = o.order_id',
+                            'left'
+                        ]
+                    ];
+                    $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                }
+            }
+            $order_type = input('order_type', 'all');//营销类型
+            $start_time = input('start_time', '');
+            $end_time = input('end_time', '');
+
+            //订单类型
+            if ($order_type != 'all') {
+                $condition[] = [ 'o.order_type', '=', $order_type ];
+            }
+
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+            $condition[] = [ 'o.order_status', '>', 0 ];
+            $order_common_model = new OrderCommonModel();
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, 'o.create_time desc', 'o.*', $alias, $join);
+            return $list;
+        } else {
+            $order_model = new OrderModel();
+//            $order_status_list = $order_model->order_status;
+            $order_common_model = new OrderCommonModel();
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $this->assign('order_type_list', $order_type_list);
+
+            return $this->fetch('order/invoice_list');
+        }
+    }
+
+    /**
+     * 订单列表(发票编辑)
+     */
+    public function invoiceEdit()
+    {
+        if (request()->isAjax()) {
+            //接收数据
+            $order_id = input('order_id', '');
+            $invoice_status = input('invoice_status', '');
+            $invoice_code = input('invoice_code', '');
+            $invoice_remark = input('invoice_remark', '');
+            $condition = [
+                [ 'order_id', '=', $order_id ]
+            ];
+
+            $data[ 'invoice_status' ] = $invoice_status;
+            $data[ 'invoice_code' ] = $invoice_code;
+            $data[ 'invoice_remark' ] = $invoice_remark;
+            $data[ 'invoice_time' ] = time();
+
+            $order_common_model = new OrderCommonModel();
+            $res = $order_common_model->orderUpdate($data, $condition);
+            return $res;
+        } else {
+            $order_id = input('order_id', '');
+            $this->assign('order_id', $order_id);
+
+            //订单详情
+            $order_common_model = new OrderCommonModel();
+            $order_detail = $order_common_model->getOrderDetail($order_id);
+
+            if (empty($order_detail[ 'data' ])) $this->error('未获取到订单数据', addon_url('shop/order/invoiceorderlist'));
+
+            $this->assign('order_detail', $order_detail[ 'data' ]);
+
+            return $this->fetch('order/invoice_edit');
+        }
+    }
+
+    /**
+     * 发票导出
+     */
+    public function exportInvoice()
+    {
+        $page_index = input('page', 1);
+        $page_size = 0;
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.is_invoice', '=', 1 ]
+        ];
+        $alias = 'o';
+        $join = null;
+        //订单编号
+        $order_no = input('order_no', '');
+        if ($order_no) {
+            $condition[] = [ 'o.order_no', 'like', '%' . $order_no . '%' ];
+        }
+        //订单状态
+        $order_status = input('order_status', '');
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+            }
+        }
+        $order_type = input('order_type', 'all');//营销类型
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+
+
+        //订单类型
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+        }
+
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+        }
+
+        $order_common_model = new OrderCommonModel();
+        $list_result = $order_common_model->getOrderPageList($condition, $page_index, $page_size, 'o.create_time desc', 'o.*', $alias, $join);
+        $list = $list_result[ 'data' ][ 'list' ];
+
+        // 实例化excel
+        $phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
+
+        $phpExcel->getProperties()->setTitle('退款维权订单');
+        $phpExcel->getProperties()->setSubject('退款维权订单');
+        //单独添加列名称
+        $phpExcel->setActiveSheetIndex(0);
+
+        $phpExcel->getActiveSheet()->setCellValue('A1', '订单编号');
+        $phpExcel->getActiveSheet()->setCellValue('B1', '订单总额(元)');
+        $phpExcel->getActiveSheet()->setCellValue('C1', '发票税费');
+        $phpExcel->getActiveSheet()->setCellValue('D1', '发票邮寄费用');
+        $phpExcel->getActiveSheet()->setCellValue('E1', '发票类型');
+        $phpExcel->getActiveSheet()->setCellValue('F1', '发票抬头');
+        $phpExcel->getActiveSheet()->setCellValue('G1', '抬头类型');
+        $phpExcel->getActiveSheet()->setCellValue('H1', '纳税人识别号');
+        $phpExcel->getActiveSheet()->setCellValue('I1', '发票内容');
+        $phpExcel->getActiveSheet()->setCellValue('J1', '发票税率(%)');
+        $phpExcel->getActiveSheet()->setCellValue('K1', '订单状态');
+        $phpExcel->getActiveSheet()->setCellValue('L1', '下单时间');
+
+        if (!empty($list)) {
+            foreach ($list as $k => $v) {
+                $start = $k + 2;
+                $phpExcel->getActiveSheet()->setCellValue('A' . $start, $v[ 'order_no' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('B' . $start, $v[ 'order_money' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('C' . $start, $v[ 'invoice_money' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('D' . $start, $v[ 'invoice_delivery_money' ] . ' ');
+
+                $invoice_name = '';
+                if ($v[ 'invoice_type' ] == 1) {
+                    $invoice_name = '纸质';
+                } else {
+                    $invoice_name = '电子';
+                }
+                if ($v[ 'is_tax_invoice' ] == 1) {
+                    $invoice_name .= '专用发票';
+                } else {
+                    $invoice_name .= '普通发票';
+                }
+                $phpExcel->getActiveSheet()->setCellValue('E' . $start, $invoice_name . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('F' . $start, $v[ 'invoice_title' ] . ' ');
+                $invoice_title_type = $v[ 'invoice_title_type' ] == 1 ? '个人' : '企业';
+                $phpExcel->getActiveSheet()->setCellValue('G' . $start, $invoice_title_type . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('H' . $start, $v[ 'taxpayer_number' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('I' . $start, $v[ 'invoice_title_type' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('J' . $start, $v[ 'invoice_rate' ] . '%');
+                $phpExcel->getActiveSheet()->setCellValue('K' . $start, $v[ 'order_status_name' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('L' . $start, time_to_date($v[ 'create_time' ]) . ' ');
+            }
+        }
+
+        // 重命名工作sheet
+        $phpExcel->getActiveSheet()->setTitle('发票列表');
+        // 设置第一个sheet为工作的sheet
+        $phpExcel->setActiveSheetIndex(0);
+        // 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
+        $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
+        $file = date('Y年m月d日-发票列表', time()) . '.xlsx';
+        $objWriter->save($file);
+
+        header('Content-type:application/octet-stream');
+
+        $filename = basename($file);
+        header('Content-Disposition:attachment;filename = ' . $filename);
+        header('Accept-ranges:bytes');
+        header('Accept-length:' . filesize($file));
+        readfile($file);
+        unlink($file);
+        exit;
+    }
+
+    /**
+     * 确认收货
+     */
+    public function takeDelivery()
+    {
+        if (request()->isAjax()) {
+
+            $order_id = input('order_id', '');
+            $type = input('type', 0);
+
+            $order_model = new OrderCommonModel();
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action_way' => 2
+            ];
+            if ($type == 1) {
+                $error_num = 0;
+                $success_num = 0;
+                $order_arr = explode(',', $order_id);
+                foreach ($order_arr as $key => $val) {
+                    $result = $order_model->orderCommonTakeDelivery($val, $log_data);
+                    if ($result[ 'code' ] >= 0) {
+                        $success_num += 1;
+                    } else {
+                        $error_num += 1;
+                    }
+                }
+                return success(0, '成功' . $success_num . '条,失败' . $error_num . '条');
+
+            } else {
+
+                $result = $order_model->orderCommonTakeDelivery($order_id, $log_data);
+                return $result;
+            }
+        }
+
+    }
+
+    /**
+     * 订单导出记录
+     * @return mixed
+     */
+    public function export()
+    {
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $export_model = new OrderExport();
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ]
+            );
+            $result = $export_model->getExportPageList($condition, $page_index, $page_size, 'create_time desc', '*');
+            return $result;
+        } else {
+            return $this->fetch('order/export');
+        }
+    }
+
+    /**
+     * 删除订单导出记录
+     */
+    public function deleteExport()
+    {
+        if (request()->isAjax()) {
+            $export_ids = input('export_ids', '');
+
+            $export_model = new OrderExport();
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ],
+                [ 'export_id', 'in', (string) $export_ids ]
+            );
+            $result = $export_model->deleteExport($condition);
+            return $result;
+        }
+    }
+
+    /**
+     * 购物须知
+     */
+    public function transactionAgreement()
+    {
+        if (request()->isAjax()) {
+            //设置注册协议
+            $title = input('title', '');
+            $content = input('content', '');
+            $config_model = new ConfigModel();
+            return $config_model->setTransactionDocument($title, $content, $this->site_id, 'shop');
+        } else {
+            $this->forthMenu();
+            //获取注册协议
+            $config_model = new ConfigModel();
+            $document_info = $config_model->getTransactionDocument($this->site_id, 'shop');
+            $this->assign('document_info', $document_info);
+
+            return $this->fetch('order/transaction_agreement');
+        }
+    }
+}

+ 2127 - 0
app/shop/controller/Order0626.php

@@ -0,0 +1,2127 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\shop\controller;
+
+use app\model\order\Config as ConfigModel;
+use app\model\order\Order as OrderModel;
+use app\model\order\OrderCommon;
+use app\model\order\OrderCommon as OrderCommonModel;
+use app\model\order\OrderExport;
+use app\model\store\Store as StoreModel;
+use app\model\system\Promotion as PromotionModel;
+use app\model\system\UserGroup;
+use app\model\web\Config as WebConfig;
+use phpoffice\phpexcel\Classes\PHPExcel;
+use phpoffice\phpexcel\Classes\PHPExcel\Writer\Excel2007;
+
+/**
+ * 订单
+ * Class Order
+ * @package app\shop\controller
+ */
+class Order extends BaseShop
+{
+
+    /**
+     * 快递订单列表
+     */
+    public function lists()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '交易流水号',
+            'remark' => '订单备注',
+            'name' => '收货人姓名',
+            'order_name' => '商品名称',
+            'mobile' => '收货人电话',
+            'nick_name' => '会员昵称',
+            'sku_no' => '商品编码',
+        );
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $delivery_start_time = input('delivery_start_time', '');
+        $delivery_end_time = input('delivery_end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');//订单类型
+        $order_type = input('order_type', 'all');//营销类型
+        $is_verify = input('is_verify', 'all');
+        $store_id = input('store_id', 0); // 所属门店id
+        $field = 'a.*,s.store_name';
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $alias = 'a';
+            $join = null;
+            $condition = [
+                [ 'a.site_id', '=', $this->site_id ],
+                [ 'a.is_delete', '=', 0 ],
+                [ 'a.order_scene', '=', 'online' ]
+            ];
+            $join[] = [
+                'store s',
+                's.store_id = a.store_id',
+                'left'
+            ];
+            //订单状态
+            if ($order_status != '') {
+                if ($order_status == 'refunding') {
+                    $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'refund_status', 'not in', [ 0, 3 ] ] ], 'order_id')[ 'data' ];
+                    $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                    $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                } else {
+                    $condition[] = [ 'a.order_status', '=', $order_status ];
+                }
+            }
+
+            if ($is_verify != 'all') {
+                $join[] = [
+                    'verify v',
+                    'v.verify_code = a.virtual_code',
+                    'left'
+                ];
+                $condition[] = [ 'v.is_verify', '=', $is_verify ];
+            }
+
+            //订单内容 模糊查询
+            if ($order_name != '') {
+                $condition[] = [ 'a.order_name', 'like', '%' . $order_name . '%' ];
+            }
+            //订单来源
+            if ($order_from != '') {
+                $condition[] = [ 'a.order_from', '=', $order_from ];
+            }
+            //订单支付
+            if ($pay_type != '') {
+                $condition[] = [ 'a.pay_type', '=', $pay_type ];
+            }
+            //订单类型
+            if ($order_type != 'all') {
+                $condition[] = [ 'a.order_type', '=', $order_type ];
+            }
+            //营销类型
+            if ($promotion_type != '') {
+                if ($promotion_type == 'empty') {
+                    $condition[] = [ 'a.promotion_type', '=', '' ];
+                } else {
+                    $condition[] = [ 'a.promotion_type', '=', $promotion_type ];
+                }
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'a.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            if (!empty($delivery_start_time) && empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '>=', date_to_time($delivery_start_time) ];
+            } elseif (empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '<=', date_to_time($delivery_end_time) ];
+            } elseif (!empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', 'between', [ date_to_time($delivery_start_time), date_to_time($delivery_end_time) ] ];
+            }
+
+            if (!empty($store_id)) {
+                $condition[] = [ 'a.store_id', '=', $store_id ];
+            }
+
+            if ($search_text != '') {
+                switch ( $order_label ) {
+                    case 'nick_name':
+                        $join[] = [
+                            'member m',
+                            'm.member_id = a.member_id',
+                            'left'
+                        ];
+                        $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+                        break;
+                    case 'sku_no':
+                        $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'sku_no', 'like', '%' . $search_text . '%' ] ], 'order_id')[ 'data' ];
+                        $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                        $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                        break;
+                    default:
+                        $condition[] = [ 'a.' . $order_label, 'like', '%' . $search_text . '%' ];
+                }
+            }
+
+            $order = 'a.create_time desc';
+
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, $order, $field, $alias, $join);
+            $list[ 'data' ][ 'order_status' ] = $order_status;
+            return $list;
+        } else {
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $this->assign('order_type_list', $order_type_list);
+            $this->assign('order_label_list', $order_label_list);
+            $this->assign('order_status_list', $order_type_list[ 'all' ][ 'status' ]);//订单状态
+
+            //订单来源 (支持端口)
+            $this->assign('order_from_list', $order_common_model->getOrderFromList([ 'order_scene' => 'online' ]));
+
+            $pay_type = $order_common_model->getPayType();
+            $this->assign('pay_type_list', $pay_type);
+
+            $this->assign('order_status', $order_status);
+
+            //营销活动类型
+            $order_promotion_type = event('OrderPromotionType');
+            $this->assign('promotion_type', $order_promotion_type);
+            $this->assign('http_type', get_http_type());
+
+            $config_model = new ConfigModel();
+            $order_config = $config_model->getOrderEventTimeConfig($this->site_id, $this->app_module)[ 'data' ][ 'value' ] ?? [];
+            $this->assign('order_config', $order_config);
+
+            $config_model = new WebConfig();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+            if (addon_is_exit('store') == 1) {
+                $store_model = new StoreModel();
+                $store_list = $store_model->getStoreList([
+                    [ 'site_id', '=', $this->site_id ]
+                ], 'store_id,store_name')[ 'data' ];
+                $this->assign('store_list', $store_list);
+            }
+
+            return $this->fetch('order/lists');
+        }
+
+    }
+
+    /**
+     * 自提订单
+     */
+    public function pickUpOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '交易流水号',
+            'name' => '收货人姓名',
+            'order_name' => '商品名称',
+            'mobile' => '收货人电话',
+            'nick_name' => '会员昵称',
+        );
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');//订单类型
+//        $order_type = input('order_type', 'all');//营销类型
+        $is_verify = input('is_verify', 'all');
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $alias = 'a';
+            $join = null;
+            $condition = [
+                [ 'a.order_type', '=', 2 ],
+                [ 'a.site_id', '=', $this->site_id ],
+                [ 'a.is_delete', '=', 0 ]
+            ];
+            //订单状态
+            if ($order_status != '') {
+                if ($order_status == 2) {
+                    //待提货
+                    $condition[] = [ 'a.order_status', '=', $order_status ];
+                } else {
+                    //待提货
+                    $condition[] = [ 'order_status', 'not in', '0,-1,2' ];
+                }
+
+            } else {
+                $condition[] = [ 'order_status', 'not in', '0,-1' ];
+            }
+
+            $order = 'a.create_time desc';
+
+            if ($is_verify != 'all') {
+                $join[] = [
+                    'verify v',
+                    'v.verify_code = a.virtual_code',
+                    'right'
+                ];
+                $condition[] = [ 'v.is_verify', '=', $is_verify ];
+                $order = 'a.create_time desc';
+            }
+
+            //订单内容 模糊查询
+            if ($order_name != '') {
+                $condition[] = [ 'a.order_name', 'like', '%' . $order_name . '%' ];
+            }
+            //订单来源
+            if ($order_from != '') {
+                $condition[] = [ 'a.order_from', '=', $order_from ];
+            }
+            //订单支付
+            if ($pay_type != '') {
+                $condition[] = [ 'a.pay_type', '=', $pay_type ];
+            }
+            //营销类型
+            if ($promotion_type != '') {
+                if ($promotion_type == 'empty') {
+                    $condition[] = [ 'a.promotion_type', '=', '' ];
+                } else {
+                    $condition[] = [ 'a.promotion_type', '=', $promotion_type ];
+                }
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'a.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            if ($order_label == 'nick_name') {
+                $join[] = [
+                    'member m',
+                    'm.member_id = a.member_id',
+                    'right'
+                ];
+                $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+            } else {
+                if ($search_text != '') {
+                    $condition[] = [ 'a.' . $order_label, 'like', '%' . $search_text . '%' ];
+                }
+            }
+            $join[] = [
+                'store s',
+                's.store_id = a.delivery_store_id',
+                'inner'
+            ];
+
+            $store_id_arr = [];
+            $userGroupModel = new UserGroup();
+            $userInfo = $this->user_info;
+            $userGroupWhere['uid'] = $userInfo['uid'];
+            $userGroupList = $userGroupModel->getUserList($userGroupWhere,'uid,store_id');
+            $store_id_arr = array_column($userGroupList['data'],'store_id');
+            if(!empty($store_id_arr) &&  !$userInfo['is_admin']){
+                $condition[] = [ "a.store_id", "in", $store_id_arr];
+            }
+
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, $order, $field = 'a.*,s.address,s.full_address', $alias, $join);
+            return $list;
+        } else {
+
+            $order_type_list = array (
+                2 => [
+                    'status' => [
+                        2 => '待提货',
+                        4 => '已提货'
+                    ]
+
+                ]
+            );
+            $this->assign('order_type_list', $order_type_list);
+            $this->assign('order_label_list', $order_label_list);
+
+            //订单来源 (支持端口)
+            $order_from = $order_common_model->getOrderFromList();
+            $this->assign('order_from_list', $order_from);
+
+            $pay_type = $order_common_model->getPayType();
+            $this->assign('pay_type_list', $pay_type);
+
+            //营销活动类型
+            $order_promotion_type = event('OrderPromotionType');
+            $this->assign('promotion_type', $order_promotion_type);
+            $this->assign('http_type', get_http_type());
+
+            $config_model = new WebConfig();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+            return $this->fetch('order/pickuporder');
+        }
+    }
+
+    /**
+     * 自提订单导出(已订单为主)
+     */
+    public function exportPickUpOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+//        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ]
+        ];
+        //订单类型
+//        $order_type_name = '全部';
+//        if ($order_type != 'all') {
+        $condition[] = [ 'o.order_type', '=', 2 ];
+
+        $order_type_list = $order_common_model->getOrderTypeStatusList();
+        $order_type_list = array_column($order_type_list, 'name', 'type');
+        $order_type_name = $order_type_list[ 2 ];
+//        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+
+    /**
+     * 自提订单导出(已订单商品为主)
+     */
+    public function exportPickUpOrderGoods()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+//        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ]
+        ];
+        //订单类型
+//        $order_type_name = '全部';
+//        if ($order_type != 'all') {
+        $condition[] = [ 'o.order_type', '=', 2 ];
+
+        $order_type_list = $order_common_model->getOrderTypeStatusList();
+        $order_type_list = array_column($order_type_list, 'name', 'type');
+        $order_type_name = $order_type_list[ 2 ];
+//        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', "%$order_name%" ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', "%$search_text%" ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', "%$search_text%" ];
+        }
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderGoodsExport($condition, $condition_desc, $this->site_id, $is_verify, $order_label);
+        return $result;
+    }
+
+    /**
+     * 快递订单详情
+     */
+    public function detail()
+    {
+        $order_id = input('order_id', 0);
+        $order_common_model = new OrderCommonModel();
+        $order_detail_result = $order_common_model->getOrderDetail($order_id);
+        $order_detail = $order_detail_result[ 'data' ];
+//        if(!empty($order_detail['package_list'])){
+//            $order_detail['package_list'] = array_reverse($order_detail['package_list']);
+//        }
+        if (empty($order_detail)) $this->error('未获取到订单数据', addon_url('shop/order/lists'));
+
+        $this->assign('order_detail', $order_detail);
+        switch ( $order_detail[ 'order_type' ] ) {
+            case 1 :
+                $template = 'order/detail';
+                break;
+            case 2 :
+                $template = 'storeorder/detail';
+                break;
+            case 3 :
+                $template = 'localorder/detail';
+                break;
+            case 4 :
+                $template = 'virtualorder/detail';
+                break;
+            case 5 :
+                $template = 'cashorder/detail';
+                break;
+        }
+
+        $this->assign('http_type', get_http_type());
+
+        $config_model = new WebConfig();
+        $mp_config = $config_model->getMapConfig($this->site_id);
+        $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+        return $this->fetch($template);
+    }
+
+    /**
+     * 订单设置
+     */
+    public function config()
+    {
+        $config_model = new ConfigModel();
+        if (request()->isAjax()) {
+            //订单事件时间设置数据
+            $order_event_time_config_data = [
+                'auto_close' => (int) input('order_auto_close_time', 0),//订单未付款自动关闭时间 数字 单位(分钟)
+                'auto_take_delivery' => (int) input('order_auto_take_delivery_time', 0),//订单发货后自动收货时间 数字 单位(天)
+                'auto_complete' => (int) input('order_auto_complete_time', 0),//订单收货后自动完成时间 数字 单位(天)
+                'after_sales_time' => (int) input('after_sales_time', 0),//订单完成后可维权时间 数字 单位(天)
+                'invoice_status' => input('invoice_status', 0),
+                'invoice_rate' => input('invoice_rate', 0),
+                'invoice_content' => implode(',', input('invoice_content', [])),
+                'invoice_money' => number_format(input('invoice_money', 0), 2, '.', ''),
+                'invoice_type' => implode(',', input('invoice_type', [])),
+                'do_refund' => input('do_refund', 1)
+            ];
+            //订单评价设置数据
+            $order_evaluate_config_data = [
+                'evaluate_status' => input('evaluate_status', 0),//订单评价状态(0关闭 1开启)
+                'evaluate_show' => input('evaluate_show', 0),//显示评价(0关闭 1开启)
+                'evaluate_audit' => input('evaluate_audit', 0),//评价审核状态(0关闭 1开启)
+            ];
+
+            //余额支付配置
+            $balance_config_data = [
+                'balance_show' => input('balance_show', 0),//余额支付配置(0关闭 1开启)
+            ];
+
+            $res = $config_model->setOrderEventTimeConfig($order_event_time_config_data, $this->site_id, $this->app_module);
+            $config_model->setOrderEvaluateConfig($order_evaluate_config_data, $this->site_id, $this->app_module);
+            $config_model->setBalanceConfig($balance_config_data, $this->site_id, $this->app_module);
+            return $res;
+        } else {
+            $this->forthMenu();
+            //订单事件时间设置
+            $order_event_time_config = $config_model->getOrderEventTimeConfig($this->site_id, $this->app_module);
+            $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_content' ] = explode(',', $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_content' ]);
+            $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_type' ] = explode(',', $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_type' ]);
+            //订单评价设置
+            $order_evaluate_config = $config_model->getOrderEvaluateConfig($this->site_id, $this->app_module);
+
+            //余额支付配置
+            $balance_config = $config_model->getBalanceConfig($this->site_id, $this->app_module);
+            $this->assign('balance_config', $balance_config[ 'data' ][ 'value' ]);
+            $this->assign('order_event_time_config', $order_event_time_config[ 'data' ][ 'value' ]);
+            $this->assign('order_evaluate_config', $order_evaluate_config[ 'data' ][ 'value' ]);
+
+            return $this->fetch('order/config');
+        }
+    }
+
+    /**
+     * 订单关闭
+     * @return mixed
+     */
+    public function close()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action_way' => 2
+            ];
+
+            $result = $order_common_model->orderClose($order_id, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单调价
+     * @return mixed
+     */
+    public function adjustPrice()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $adjust_money = input('adjust_money', 0);
+            $delivery_money = input('delivery_money', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderAdjustMoney($order_id, $adjust_money, $delivery_money);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单发货
+     * @return mixed
+     */
+    public function delivery()
+    {
+        if (request()->isAjax()) {
+
+            $order_model = new OrderModel();
+            $data = array (
+                'type' => input('type', 'manual'),//发货方式(手动发货、电子面单)
+                'order_goods_ids' => input('order_goods_ids', ''),//商品id
+                'express_company_id' => input('express_company_id', 0),//物流公司
+                'delivery_no' => input('delivery_no', ''),//快递单号
+                'order_id' => input('order_id', 0),//订单id
+                'delivery_type' => input('delivery_type', 0),//是否需要物流
+                'site_id' => $this->site_id,
+                'template_id' => input('template_id', 0),//电子面单模板id
+                'user_info' => $this->user_info
+            );
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action' => '商家对订单进行了发货',
+                'action_way' => 2,
+            ];
+            $result = $order_model->orderGoodsDelivery($data, 1, $log_data);
+            return $result;
+        } else {
+            $order_id = input('order_id', 0);
+            $delivery_status = input('delivery_status', '');
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            if ($delivery_status === '') {
+                $condition[] = [ 'delivery_status', '=', $delivery_status ];
+            }
+            $field = 'order_goods_id, order_id, site_id, site_name, sku_name, sku_image, sku_no, is_virtual, price, cost_price, num, goods_money, cost_money, delivery_status, delivery_no, goods_id, delivery_status_name';
+            $order_goods_list_result = $order_common_model->getOrderGoodsList($condition, $field, '', null, 'delivery_no');
+            $order_goods_list = $order_goods_list_result[ 'data' ];
+            $this->assign('order_goods_list', $order_goods_list);
+            return $this->fetch('order/delivery');
+        }
+    }
+
+    /**
+     * 获取订单项列表
+     */
+    public function getOrderGoodsList()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $delivery_status = input('delivery_status', '');
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+                [ 'refund_status', '<>', 3 ],
+            );
+            if ($delivery_status != '') {
+                $condition[] = [ 'delivery_status', '=', $delivery_status ];
+            }
+            $field = 'order_goods_id, order_id, site_id, sku_name, sku_image, sku_no, is_virtual, price, cost_price, num, goods_money, cost_money, delivery_status, delivery_no, goods_id, delivery_status_name';
+            $result = $order_common_model->getOrderGoodsList($condition, $field, '', null, '');
+            return $result;
+        }
+    }
+
+    /**
+     * 订单修改收货地址
+     * @return mixed
+     */
+    public function editAddress()
+    {
+        $order_id = input('order_id', 0);
+        if (request()->isAjax()) {
+            $order_model = new OrderModel();
+            $province_id = input('province_id');
+            $city_id = input('city_id');
+            $district_id = input('district_id');
+            $community_id = input('community_id', 0);
+            $address = input('address');
+            $full_address = input('full_address');
+            $longitude = input('longitude', 0);
+            $latitude = input('latitude', 0);
+            $mobile = input('mobile');
+            $telephone = input('telephone');
+            $name = input('name');
+            $data = array (
+                'province_id' => $province_id,
+                'city_id' => $city_id,
+                'district_id' => $district_id,
+                'community_id' => $community_id,
+                'address' => $address,
+                'full_address' => $full_address,
+                'longitude' => $longitude,
+                'latitude' => $latitude,
+                'mobile' => $mobile,
+                'telephone' => $telephone,
+                'name' => $name,
+            );
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ]
+            );
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action' => '商家修改了收货地址',
+                'action_way' => '2',
+                'order_id' => $order_id
+            ];
+            $result = $order_model->orderAddressUpdate($data, $condition, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 获取订单信息
+     */
+    public function getOrderInfo()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            $result = $order_common_model->getOrderInfo($condition);
+            return $result;
+        }
+    }
+
+    /**
+     * 获取订单 订单项内容
+     */
+    public function getOrderDetail()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->getOrderDetail($order_id);
+            return $result;
+        }
+    }
+
+    /**
+     * 卖家备注
+     */
+    public function orderRemark()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $remark = input('remark', 0);
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            $data = array (
+                'remark' => $remark
+            );
+
+            $log_data[ 'action' ] = '商家备注了订单,备注内容:' . $remark;
+            $log_data[ 'action_way' ] = 2;
+            $log_data[ 'uid' ] = $this->user_info[ 'uid' ];
+            $log_data[ 'nick_name' ] = $this->user_info[ 'username' ];
+            $log_data[ 'order_id' ] = $order_id;
+
+            $result = $order_common_model->orderUpdate($data, $condition, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单导出(已订单为主)
+     */
+    public function exportOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $order_ids = input('order_ids', '');
+        $store_id = input('store_id', 0);
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'online' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+    /**
+     * 订单导出(已订单为主)
+     */
+    public function exportMoneyOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $order_ids = input('order_ids', '');
+        $store_id = input('store_id', 0);
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'cashier' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+    /**
+     * 订单导出(已订单为主)
+     */
+    public function exportRechargeorder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_no = input('order_no', '');//订单状态
+        $nickname = input('nickname', '');
+        $store_id = input('store_id', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_ids = input('order_ids', '');
+
+
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $is_verify = input('is_verify', 'all');
+        $order_ids = input('order_ids', '');
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'cashier' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        if(!empty($order_no)){
+            $order_id = model('member_recharge_order')->getValue([ [ 'order_no', 'like', '%'.$order_no.'%' ] ], 'relate_id');
+            $condition[] = [ 'o.order_id', '=', $order_id ];
+        }
+
+        if(!empty($nickname)){
+            $member_id_arr = model('member')->getColumn([ [ 'nickname', 'like', '%'.$nickname.'%' ] ], 'member_id');
+            $condition[] = [ 'o.member_id', 'in', $member_id_arr ];
+        }
+
+        $time_name = '';
+        $time_flag = false;
+        $recharge_timewhere=[];
+        if (!empty($start_time) && empty($end_time)) {
+            $recharge_timewhere[] = [ 'pay_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+            $time_flag = true;
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $recharge_timewhere[] = [ 'pay_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+            $time_flag = true;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $recharge_timewhere[] = [ 'pay_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+            $time_flag = true;
+        }
+        if($time_flag){
+            $recharge_timewhere[]=[ 'status', '=', 2 ];
+            $relate_id_arr = model('member_recharge_order')->getColumn($recharge_timewhere, 'relate_id');
+            $condition[] = [ 'o.order_id', 'in', $relate_id_arr ];
+        }else{
+            $relate_id_arr = model('member_recharge_order')->getColumn([ [ 'status', '=', 2 ] ], 'relate_id');
+            $condition[] = [ 'o.order_id', 'in', $relate_id_arr ];
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+    /**
+     * 订单导出(已订单商品为主)
+     */
+    public function exportOrderGoods()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_ids = input('order_ids', '');
+
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $store_id = input('store_id', 0); // 所属门店id
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'online' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderGoodsExport($condition, $condition_desc, $this->site_id, $is_verify, $order_label);
+        return $result;
+    }
+    public function exportMoneyOrderGoods()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_ids = input('order_ids', '');
+
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $store_id = input('store_id', 0); // 所属门店id
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'cashier' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderGoodsExport($condition, $condition_desc, $this->site_id, $is_verify, $order_label);
+        return $result;
+    }
+    /**
+     * 导出字段
+     * @return array
+     */
+    public function getPrintingField()
+    {
+        $model = new OrderExport();
+        $data = [
+            'order_field' => $model->order_field,
+            'order_goods_field' => $model->order_goods_field
+        ];
+
+        return success('1', '', $data);
+    }
+
+    public function printOrder()
+    {
+        $order_id = input('order_id', 0);
+        $order_common_model = new OrderCommonModel();
+        $order_detail_result = $order_common_model->getOrderDetail($order_id);
+        $order_detail = $order_detail_result[ 'data' ];
+        $this->assign('order_detail', $order_detail);
+        return $this->fetch('order/print_order');
+    }
+
+    /**
+     * 交易记录
+     */
+    public function tradelist()
+    {
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $member_id = input('member_id', 0);//会员id
+            $search_text = input('search_text', 0);//h关键字查询
+            $condition = array ();
+            if ($member_id > 0) {
+                $condition[] = [ 'member_id', '=', $member_id ];
+            }
+            if (!empty($search_text)) {
+                $condition[] = [ 'order_no|order_name', 'like', '%' . $search_text . '%' ];
+            }
+
+            return $order_common_model->getTradePageList($condition, $page, $page_size, 'create_time desc');
+
+        }
+    }
+
+    /**
+     * 订单关闭
+     * @return mixed
+     */
+    public function delete()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderDelete($order_id, $this->user_info);
+            return $result;
+        }
+    }
+
+    /**
+     * 线下支付
+     * @return \app\model\order\unknown
+     */
+    public function offlinePay()
+    {
+        $log_data = [
+            'uid' => $this->user_info[ 'uid' ],
+            'nick_name' => $this->user_info[ 'username' ],
+            'action_way' => 2
+        ];
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderOfflinePay($order_id, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单列表(发票)
+     */
+    public function invoiceOrderList()
+    {
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $invoice_status = input('invoice_status', '');
+            $invoice_type = input('invoice_type', '');
+            $taxpayer_number = input('taxpayer_number', '');
+            $invoice_title = input('invoice_title', '');
+            $invoice_title_type = input('invoice_title_type', '');
+            $alias = 'o';
+            $join = [];
+
+            $condition = [
+                [ 'o.site_id', '=', $this->site_id ],
+                [ 'o.is_delete', '=', 0 ],
+                [ 'o.is_invoice', '=', 1 ]
+            ];
+            //发票状态
+            if ($invoice_status != null) {
+                $condition[] = [ 'o.invoice_status', '=', $invoice_status ];
+            }
+            //发票类型
+            if (!empty($invoice_type)) {
+                $condition[] = [ 'o.invoice_type', '=', $invoice_type ];
+            }
+            //纳税人识别号
+            if (!empty($taxpayer_number)) {
+                $condition[] = [ 'o.taxpayer_number', 'like', '%' . $taxpayer_number . '%' ];
+                $condition[] = [ 'o.invoice_title_type', '=', 2 ];
+            }
+            //抬头类型
+            if (!empty($invoice_title_type)) {
+                $condition[] = [ 'o.invoice_title_type', '=', $invoice_title_type ];
+            }
+            //纳税人公司
+            if (!empty($invoice_title)) {
+                $condition[] = [ 'o.invoice_title', 'like', '%' . $invoice_title . '%' ];
+            }
+            //订单编号
+            $order_no = input('order_no', '');
+            if ($order_no) {
+                $condition[] = [ 'o.order_no', 'like', '%' . $order_no . '%' ];
+            }
+            //订单状态
+            $order_status = input('order_status', '');
+            if ($order_status != '') {
+                if ($order_status != 'refunding') {
+                    $condition[] = [ 'o.order_status', '=', $order_status ];
+                } else {
+                    $join = [
+                        [
+                            'order_goods og',
+                            'og.order_id = o.order_id',
+                            'left'
+                        ]
+                    ];
+                    $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                }
+            }
+            $order_type = input('order_type', 'all');//营销类型
+            $start_time = input('start_time', '');
+            $end_time = input('end_time', '');
+
+            //订单类型
+            if ($order_type != 'all') {
+                $condition[] = [ 'o.order_type', '=', $order_type ];
+            }
+
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+            $condition[] = [ 'o.order_status', '>', 0 ];
+            $order_common_model = new OrderCommonModel();
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, 'o.create_time desc', 'o.*', $alias, $join);
+            return $list;
+        } else {
+            $order_model = new OrderModel();
+//            $order_status_list = $order_model->order_status;
+            $order_common_model = new OrderCommonModel();
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $this->assign('order_type_list', $order_type_list);
+
+            return $this->fetch('order/invoice_list');
+        }
+    }
+
+    /**
+     * 订单列表(发票编辑)
+     */
+    public function invoiceEdit()
+    {
+        if (request()->isAjax()) {
+            //接收数据
+            $order_id = input('order_id', '');
+            $invoice_status = input('invoice_status', '');
+            $invoice_code = input('invoice_code', '');
+            $invoice_remark = input('invoice_remark', '');
+            $condition = [
+                [ 'order_id', '=', $order_id ]
+            ];
+
+            $data[ 'invoice_status' ] = $invoice_status;
+            $data[ 'invoice_code' ] = $invoice_code;
+            $data[ 'invoice_remark' ] = $invoice_remark;
+            $data[ 'invoice_time' ] = time();
+
+            $order_common_model = new OrderCommonModel();
+            $res = $order_common_model->orderUpdate($data, $condition);
+            return $res;
+        } else {
+            $order_id = input('order_id', '');
+            $this->assign('order_id', $order_id);
+
+            //订单详情
+            $order_common_model = new OrderCommonModel();
+            $order_detail = $order_common_model->getOrderDetail($order_id);
+
+            if (empty($order_detail[ 'data' ])) $this->error('未获取到订单数据', addon_url('shop/order/invoiceorderlist'));
+
+            $this->assign('order_detail', $order_detail[ 'data' ]);
+
+            return $this->fetch('order/invoice_edit');
+        }
+    }
+
+    /**
+     * 发票导出
+     */
+    public function exportInvoice()
+    {
+        $page_index = input('page', 1);
+        $page_size = 0;
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.is_invoice', '=', 1 ]
+        ];
+        $alias = 'o';
+        $join = null;
+        //订单编号
+        $order_no = input('order_no', '');
+        if ($order_no) {
+            $condition[] = [ 'o.order_no', 'like', '%' . $order_no . '%' ];
+        }
+        //订单状态
+        $order_status = input('order_status', '');
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+            }
+        }
+        $order_type = input('order_type', 'all');//营销类型
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+
+
+        //订单类型
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+        }
+
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+        }
+
+        $order_common_model = new OrderCommonModel();
+        $list_result = $order_common_model->getOrderPageList($condition, $page_index, $page_size, 'o.create_time desc', 'o.*', $alias, $join);
+        $list = $list_result[ 'data' ][ 'list' ];
+
+        // 实例化excel
+        $phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
+
+        $phpExcel->getProperties()->setTitle('退款维权订单');
+        $phpExcel->getProperties()->setSubject('退款维权订单');
+        //单独添加列名称
+        $phpExcel->setActiveSheetIndex(0);
+
+        $phpExcel->getActiveSheet()->setCellValue('A1', '订单编号');
+        $phpExcel->getActiveSheet()->setCellValue('B1', '订单总额(元)');
+        $phpExcel->getActiveSheet()->setCellValue('C1', '发票税费');
+        $phpExcel->getActiveSheet()->setCellValue('D1', '发票邮寄费用');
+        $phpExcel->getActiveSheet()->setCellValue('E1', '发票类型');
+        $phpExcel->getActiveSheet()->setCellValue('F1', '发票抬头');
+        $phpExcel->getActiveSheet()->setCellValue('G1', '抬头类型');
+        $phpExcel->getActiveSheet()->setCellValue('H1', '纳税人识别号');
+        $phpExcel->getActiveSheet()->setCellValue('I1', '发票内容');
+        $phpExcel->getActiveSheet()->setCellValue('J1', '发票税率(%)');
+        $phpExcel->getActiveSheet()->setCellValue('K1', '订单状态');
+        $phpExcel->getActiveSheet()->setCellValue('L1', '下单时间');
+
+        if (!empty($list)) {
+            foreach ($list as $k => $v) {
+                $start = $k + 2;
+                $phpExcel->getActiveSheet()->setCellValue('A' . $start, $v[ 'order_no' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('B' . $start, $v[ 'order_money' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('C' . $start, $v[ 'invoice_money' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('D' . $start, $v[ 'invoice_delivery_money' ] . ' ');
+
+                $invoice_name = '';
+                if ($v[ 'invoice_type' ] == 1) {
+                    $invoice_name = '纸质';
+                } else {
+                    $invoice_name = '电子';
+                }
+                if ($v[ 'is_tax_invoice' ] == 1) {
+                    $invoice_name .= '专用发票';
+                } else {
+                    $invoice_name .= '普通发票';
+                }
+                $phpExcel->getActiveSheet()->setCellValue('E' . $start, $invoice_name . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('F' . $start, $v[ 'invoice_title' ] . ' ');
+                $invoice_title_type = $v[ 'invoice_title_type' ] == 1 ? '个人' : '企业';
+                $phpExcel->getActiveSheet()->setCellValue('G' . $start, $invoice_title_type . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('H' . $start, $v[ 'taxpayer_number' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('I' . $start, $v[ 'invoice_title_type' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('J' . $start, $v[ 'invoice_rate' ] . '%');
+                $phpExcel->getActiveSheet()->setCellValue('K' . $start, $v[ 'order_status_name' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('L' . $start, time_to_date($v[ 'create_time' ]) . ' ');
+            }
+        }
+
+        // 重命名工作sheet
+        $phpExcel->getActiveSheet()->setTitle('发票列表');
+        // 设置第一个sheet为工作的sheet
+        $phpExcel->setActiveSheetIndex(0);
+        // 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
+        $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
+        $file = date('Y年m月d日-发票列表', time()) . '.xlsx';
+        $objWriter->save($file);
+
+        header('Content-type:application/octet-stream');
+
+        $filename = basename($file);
+        header('Content-Disposition:attachment;filename = ' . $filename);
+        header('Accept-ranges:bytes');
+        header('Accept-length:' . filesize($file));
+        readfile($file);
+        unlink($file);
+        exit;
+    }
+
+    /**
+     * 确认收货
+     */
+    public function takeDelivery()
+    {
+        if (request()->isAjax()) {
+
+            $order_id = input('order_id', '');
+            $type = input('type', 0);
+
+            $order_model = new OrderCommonModel();
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action_way' => 2
+            ];
+            if ($type == 1) {
+                $error_num = 0;
+                $success_num = 0;
+                $order_arr = explode(',', $order_id);
+                foreach ($order_arr as $key => $val) {
+                    $result = $order_model->orderCommonTakeDelivery($val, $log_data);
+                    if ($result[ 'code' ] >= 0) {
+                        $success_num += 1;
+                    } else {
+                        $error_num += 1;
+                    }
+                }
+                return success(0, '成功' . $success_num . '条,失败' . $error_num . '条');
+
+            } else {
+
+                $result = $order_model->orderCommonTakeDelivery($order_id, $log_data);
+                return $result;
+            }
+        }
+
+    }
+
+    /**
+     * 订单导出记录
+     * @return mixed
+     */
+    public function export()
+    {
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $export_model = new OrderExport();
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ]
+            );
+            $result = $export_model->getExportPageList($condition, $page_index, $page_size, 'create_time desc', '*');
+            return $result;
+        } else {
+            return $this->fetch('order/export');
+        }
+    }
+
+    /**
+     * 删除订单导出记录
+     */
+    public function deleteExport()
+    {
+        if (request()->isAjax()) {
+            $export_ids = input('export_ids', '');
+
+            $export_model = new OrderExport();
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ],
+                [ 'export_id', 'in', (string) $export_ids ]
+            );
+            $result = $export_model->deleteExport($condition);
+            return $result;
+        }
+    }
+
+    /**
+     * 购物须知
+     */
+    public function transactionAgreement()
+    {
+        if (request()->isAjax()) {
+            //设置注册协议
+            $title = input('title', '');
+            $content = input('content', '');
+            $config_model = new ConfigModel();
+            return $config_model->setTransactionDocument($title, $content, $this->site_id, 'shop');
+        } else {
+            $this->forthMenu();
+            //获取注册协议
+            $config_model = new ConfigModel();
+            $document_info = $config_model->getTransactionDocument($this->site_id, 'shop');
+            $this->assign('document_info', $document_info);
+
+            return $this->fetch('order/transaction_agreement');
+        }
+    }
+}

+ 1700 - 0
app/shop/controller/Order_bak.php

@@ -0,0 +1,1700 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\shop\controller;
+
+use app\model\order\Config as ConfigModel;
+use app\model\order\Order as OrderModel;
+use app\model\order\OrderCommon;
+use app\model\order\OrderCommon as OrderCommonModel;
+use app\model\order\OrderExport;
+use app\model\store\Store as StoreModel;
+use app\model\system\Promotion as PromotionModel;
+use app\model\web\Config as WebConfig;
+use phpoffice\phpexcel\Classes\PHPExcel;
+use phpoffice\phpexcel\Classes\PHPExcel\Writer\Excel2007;
+
+/**
+ * 订单
+ * Class Order
+ * @package app\shop\controller
+ */
+class Order extends BaseShop
+{
+
+    /**
+     * 快递订单列表
+     */
+    public function lists()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '交易流水号',
+            'remark' => '订单备注',
+            'name' => '收货人姓名',
+            'order_name' => '商品名称',
+            'mobile' => '收货人电话',
+            'nick_name' => '会员昵称',
+            'sku_no' => '商品编码',
+        );
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $delivery_start_time = input('delivery_start_time', '');
+        $delivery_end_time = input('delivery_end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');//订单类型
+        $order_type = input('order_type', 'all');//营销类型
+        $is_verify = input('is_verify', 'all');
+        $store_id = input('store_id', 0); // 所属门店id
+        $field = 'a.*,s.store_name';
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $alias = 'a';
+            $join = null;
+            $condition = [
+                [ 'a.site_id', '=', $this->site_id ],
+                [ 'a.is_delete', '=', 0 ],
+                [ 'a.order_scene', '=', 'online' ]
+            ];
+            $join[] = [
+                'store s',
+                's.store_id = a.store_id',
+                'left'
+            ];
+            //订单状态
+            if ($order_status != '') {
+                if ($order_status == 'refunding') {
+                    $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'refund_status', 'not in', [ 0, 3 ] ] ], 'order_id')[ 'data' ];
+                    $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                    $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                } else {
+                    $condition[] = [ 'a.order_status', '=', $order_status ];
+                }
+            }
+
+            if ($is_verify != 'all') {
+                $join[] = [
+                    'verify v',
+                    'v.verify_code = a.virtual_code',
+                    'left'
+                ];
+                $condition[] = [ 'v.is_verify', '=', $is_verify ];
+            }
+
+            //订单内容 模糊查询
+            if ($order_name != '') {
+                $condition[] = [ 'a.order_name', 'like', '%' . $order_name . '%' ];
+            }
+            //订单来源
+            if ($order_from != '') {
+                $condition[] = [ 'a.order_from', '=', $order_from ];
+            }
+            //订单支付
+            if ($pay_type != '') {
+                $condition[] = [ 'a.pay_type', '=', $pay_type ];
+            }
+            //订单类型
+            if ($order_type != 'all') {
+                $condition[] = [ 'a.order_type', '=', $order_type ];
+            }
+            //营销类型
+            if ($promotion_type != '') {
+                if ($promotion_type == 'empty') {
+                    $condition[] = [ 'a.promotion_type', '=', '' ];
+                } else {
+                    $condition[] = [ 'a.promotion_type', '=', $promotion_type ];
+                }
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'a.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            if (!empty($delivery_start_time) && empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '>=', date_to_time($delivery_start_time) ];
+            } elseif (empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', '<=', date_to_time($delivery_end_time) ];
+            } elseif (!empty($delivery_start_time) && !empty($delivery_end_time)) {
+                $condition[] = [ 'a.buyer_ask_delivery_time', 'between', [ date_to_time($delivery_start_time), date_to_time($delivery_end_time) ] ];
+            }
+
+            if (!empty($store_id)) {
+                $condition[] = [ 'a.store_id', '=', $store_id ];
+            }
+
+            if ($search_text != '') {
+                switch ( $order_label ) {
+                    case 'nick_name':
+                        $join[] = [
+                            'member m',
+                            'm.member_id = a.member_id',
+                            'left'
+                        ];
+                        $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+                        break;
+                    case 'sku_no':
+                        $order_goods_list = $order_common_model->getOrderGoodsList([ [ 'sku_no', 'like', '%' . $search_text . '%' ] ], 'order_id')[ 'data' ];
+                        $order_id_arr = array_unique(array_column($order_goods_list, 'order_id'));
+                        $condition[] = [ 'a.order_id', 'in', $order_id_arr ];
+                        break;
+                    default:
+                        $condition[] = [ 'a.' . $order_label, 'like', '%' . $search_text . '%' ];
+                }
+            }
+
+            $order = 'a.create_time desc';
+
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, $order, $field, $alias, $join);
+            $list[ 'data' ][ 'order_status' ] = $order_status;
+            return $list;
+        } else {
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $this->assign('order_type_list', $order_type_list);
+            $this->assign('order_label_list', $order_label_list);
+            $this->assign('order_status_list', $order_type_list[ 'all' ][ 'status' ]);//订单状态
+
+            //订单来源 (支持端口)
+            $this->assign('order_from_list', $order_common_model->getOrderFromList([ 'order_scene' => 'online' ]));
+
+            $pay_type = $order_common_model->getPayType();
+            $this->assign('pay_type_list', $pay_type);
+
+            $this->assign('order_status', $order_status);
+
+            //营销活动类型
+            $order_promotion_type = event('OrderPromotionType');
+            $this->assign('promotion_type', $order_promotion_type);
+            $this->assign('http_type', get_http_type());
+
+            $config_model = new ConfigModel();
+            $order_config = $config_model->getOrderEventTimeConfig($this->site_id, $this->app_module)[ 'data' ][ 'value' ] ?? [];
+            $this->assign('order_config', $order_config);
+
+            $config_model = new WebConfig();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+            if (addon_is_exit('store') == 1) {
+                $store_model = new StoreModel();
+                $store_list = $store_model->getStoreList([
+                    [ 'site_id', '=', $this->site_id ]
+                ], 'store_id,store_name')[ 'data' ];
+                $this->assign('store_list', $store_list);
+            }
+
+            return $this->fetch('order/lists');
+        }
+
+    }
+
+    /**
+     * 自提订单
+     */
+    public function pickUpOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '交易流水号',
+            'name' => '收货人姓名',
+            'order_name' => '商品名称',
+            'mobile' => '收货人电话',
+            'nick_name' => '会员昵称',
+        );
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');//订单类型
+//        $order_type = input('order_type', 'all');//营销类型
+        $is_verify = input('is_verify', 'all');
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $alias = 'a';
+            $join = null;
+            $condition = [
+                [ 'a.order_type', '=', 2 ],
+                [ 'a.site_id', '=', $this->site_id ],
+                [ 'a.is_delete', '=', 0 ]
+            ];
+            //订单状态
+            if ($order_status != '') {
+                if ($order_status == 2) {
+                    //待提货
+                    $condition[] = [ 'a.order_status', '=', $order_status ];
+                } else {
+                    //待提货
+                    $condition[] = [ 'order_status', 'not in', '0,-1,2' ];
+                }
+
+            } else {
+                $condition[] = [ 'order_status', 'not in', '0,-1' ];
+            }
+
+            $order = 'a.create_time desc';
+
+            if ($is_verify != 'all') {
+                $join[] = [
+                    'verify v',
+                    'v.verify_code = a.virtual_code',
+                    'right'
+                ];
+                $condition[] = [ 'v.is_verify', '=', $is_verify ];
+                $order = 'a.create_time desc';
+            }
+
+            //订单内容 模糊查询
+            if ($order_name != '') {
+                $condition[] = [ 'a.order_name', 'like', '%' . $order_name . '%' ];
+            }
+            //订单来源
+            if ($order_from != '') {
+                $condition[] = [ 'a.order_from', '=', $order_from ];
+            }
+            //订单支付
+            if ($pay_type != '') {
+                $condition[] = [ 'a.pay_type', '=', $pay_type ];
+            }
+            //营销类型
+            if ($promotion_type != '') {
+                if ($promotion_type == 'empty') {
+                    $condition[] = [ 'a.promotion_type', '=', '' ];
+                } else {
+                    $condition[] = [ 'a.promotion_type', '=', $promotion_type ];
+                }
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'a.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'a.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            if ($order_label == 'nick_name') {
+                $join[] = [
+                    'member m',
+                    'm.member_id = a.member_id',
+                    'right'
+                ];
+                $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+            } else {
+                if ($search_text != '') {
+                    $condition[] = [ 'a.' . $order_label, 'like', '%' . $search_text . '%' ];
+                }
+            }
+            $join[] = [
+                'store s',
+                's.store_id = a.delivery_store_id',
+                'inner'
+            ];
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, $order, $field = 'a.*,s.address,s.full_address', $alias, $join);
+            return $list;
+        } else {
+
+            $order_type_list = array (
+                2 => [
+                    'status' => [
+                        2 => '待提货',
+                        4 => '已提货'
+                    ]
+
+                ]
+            );
+            $this->assign('order_type_list', $order_type_list);
+            $this->assign('order_label_list', $order_label_list);
+
+            //订单来源 (支持端口)
+            $order_from = $order_common_model->getOrderFromList();
+            $this->assign('order_from_list', $order_from);
+
+            $pay_type = $order_common_model->getPayType();
+            $this->assign('pay_type_list', $pay_type);
+
+            //营销活动类型
+            $order_promotion_type = event('OrderPromotionType');
+            $this->assign('promotion_type', $order_promotion_type);
+            $this->assign('http_type', get_http_type());
+
+            $config_model = new WebConfig();
+            $mp_config = $config_model->getMapConfig($this->site_id);
+            $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+            return $this->fetch('order/pickuporder');
+        }
+    }
+
+    /**
+     * 自提订单导出(已订单为主)
+     */
+    public function exportPickUpOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+//        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ]
+        ];
+        //订单类型
+//        $order_type_name = '全部';
+//        if ($order_type != 'all') {
+        $condition[] = [ 'o.order_type', '=', 2 ];
+
+        $order_type_list = $order_common_model->getOrderTypeStatusList();
+        $order_type_list = array_column($order_type_list, 'name', 'type');
+        $order_type_name = $order_type_list[ 2 ];
+//        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+
+    /**
+     * 自提订单导出(已订单商品为主)
+     */
+    public function exportPickUpOrderGoods()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+//        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ]
+        ];
+        //订单类型
+//        $order_type_name = '全部';
+//        if ($order_type != 'all') {
+        $condition[] = [ 'o.order_type', '=', 2 ];
+
+        $order_type_list = $order_common_model->getOrderTypeStatusList();
+        $order_type_list = array_column($order_type_list, 'name', 'type');
+        $order_type_name = $order_type_list[ 2 ];
+//        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', "%$order_name%" ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', "%$search_text%" ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', "%$search_text%" ];
+        }
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderGoodsExport($condition, $condition_desc, $this->site_id, $is_verify, $order_label);
+        return $result;
+    }
+
+    /**
+     * 快递订单详情
+     */
+    public function detail()
+    {
+        $order_id = input('order_id', 0);
+        $order_common_model = new OrderCommonModel();
+        $order_detail_result = $order_common_model->getOrderDetail($order_id);
+        $order_detail = $order_detail_result[ 'data' ];
+//        if(!empty($order_detail['package_list'])){
+//            $order_detail['package_list'] = array_reverse($order_detail['package_list']);
+//        }
+        if (empty($order_detail)) $this->error('未获取到订单数据', addon_url('shop/order/lists'));
+
+        $this->assign('order_detail', $order_detail);
+        switch ( $order_detail[ 'order_type' ] ) {
+            case 1 :
+                $template = 'order/detail';
+                break;
+            case 2 :
+                $template = 'storeorder/detail';
+                break;
+            case 3 :
+                $template = 'localorder/detail';
+                break;
+            case 4 :
+                $template = 'virtualorder/detail';
+                break;
+            case 5 :
+                $template = 'cashorder/detail';
+                break;
+        }
+
+        $this->assign('http_type', get_http_type());
+
+        $config_model = new WebConfig();
+        $mp_config = $config_model->getMapConfig($this->site_id);
+        $this->assign('tencent_map_key', $mp_config[ 'data' ][ 'value' ][ 'tencent_map_key' ]);
+
+        return $this->fetch($template);
+    }
+
+    /**
+     * 订单设置
+     */
+    public function config()
+    {
+        $config_model = new ConfigModel();
+        if (request()->isAjax()) {
+            //订单事件时间设置数据
+            $order_event_time_config_data = [
+                'auto_close' => (int) input('order_auto_close_time', 0),//订单未付款自动关闭时间 数字 单位(分钟)
+                'auto_take_delivery' => (int) input('order_auto_take_delivery_time', 0),//订单发货后自动收货时间 数字 单位(天)
+                'auto_complete' => (int) input('order_auto_complete_time', 0),//订单收货后自动完成时间 数字 单位(天)
+                'after_sales_time' => (int) input('after_sales_time', 0),//订单完成后可维权时间 数字 单位(天)
+                'invoice_status' => input('invoice_status', 0),
+                'invoice_rate' => input('invoice_rate', 0),
+                'invoice_content' => implode(',', input('invoice_content', [])),
+                'invoice_money' => number_format(input('invoice_money', 0), 2, '.', ''),
+                'invoice_type' => implode(',', input('invoice_type', [])),
+                'do_refund' => input('do_refund', 1)
+            ];
+            //订单评价设置数据
+            $order_evaluate_config_data = [
+                'evaluate_status' => input('evaluate_status', 0),//订单评价状态(0关闭 1开启)
+                'evaluate_show' => input('evaluate_show', 0),//显示评价(0关闭 1开启)
+                'evaluate_audit' => input('evaluate_audit', 0),//评价审核状态(0关闭 1开启)
+            ];
+
+            //余额支付配置
+            $balance_config_data = [
+                'balance_show' => input('balance_show', 0),//余额支付配置(0关闭 1开启)
+            ];
+
+            $res = $config_model->setOrderEventTimeConfig($order_event_time_config_data, $this->site_id, $this->app_module);
+            $config_model->setOrderEvaluateConfig($order_evaluate_config_data, $this->site_id, $this->app_module);
+            $config_model->setBalanceConfig($balance_config_data, $this->site_id, $this->app_module);
+            return $res;
+        } else {
+            $this->forthMenu();
+            //订单事件时间设置
+            $order_event_time_config = $config_model->getOrderEventTimeConfig($this->site_id, $this->app_module);
+            $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_content' ] = explode(',', $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_content' ]);
+            $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_type' ] = explode(',', $order_event_time_config[ 'data' ][ 'value' ][ 'invoice_type' ]);
+            //订单评价设置
+            $order_evaluate_config = $config_model->getOrderEvaluateConfig($this->site_id, $this->app_module);
+
+            //余额支付配置
+            $balance_config = $config_model->getBalanceConfig($this->site_id, $this->app_module);
+            $this->assign('balance_config', $balance_config[ 'data' ][ 'value' ]);
+            $this->assign('order_event_time_config', $order_event_time_config[ 'data' ][ 'value' ]);
+            $this->assign('order_evaluate_config', $order_evaluate_config[ 'data' ][ 'value' ]);
+
+            return $this->fetch('order/config');
+        }
+    }
+
+    /**
+     * 订单关闭
+     * @return mixed
+     */
+    public function close()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action_way' => 2
+            ];
+
+            $result = $order_common_model->orderClose($order_id, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单调价
+     * @return mixed
+     */
+    public function adjustPrice()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $adjust_money = input('adjust_money', 0);
+            $delivery_money = input('delivery_money', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderAdjustMoney($order_id, $adjust_money, $delivery_money);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单发货
+     * @return mixed
+     */
+    public function delivery()
+    {
+        if (request()->isAjax()) {
+
+            $order_model = new OrderModel();
+            $data = array (
+                'type' => input('type', 'manual'),//发货方式(手动发货、电子面单)
+                'order_goods_ids' => input('order_goods_ids', ''),//商品id
+                'express_company_id' => input('express_company_id', 0),//物流公司
+                'delivery_no' => input('delivery_no', ''),//快递单号
+                'order_id' => input('order_id', 0),//订单id
+                'delivery_type' => input('delivery_type', 0),//是否需要物流
+                'site_id' => $this->site_id,
+                'template_id' => input('template_id', 0),//电子面单模板id
+                'user_info' => $this->user_info
+            );
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action' => '商家对订单进行了发货',
+                'action_way' => 2,
+            ];
+            $result = $order_model->orderGoodsDelivery($data, 1, $log_data);
+            return $result;
+        } else {
+            $order_id = input('order_id', 0);
+            $delivery_status = input('delivery_status', '');
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            if ($delivery_status === '') {
+                $condition[] = [ 'delivery_status', '=', $delivery_status ];
+            }
+            $field = 'order_goods_id, order_id, site_id, site_name, sku_name, sku_image, sku_no, is_virtual, price, cost_price, num, goods_money, cost_money, delivery_status, delivery_no, goods_id, delivery_status_name';
+            $order_goods_list_result = $order_common_model->getOrderGoodsList($condition, $field, '', null, 'delivery_no');
+            $order_goods_list = $order_goods_list_result[ 'data' ];
+            $this->assign('order_goods_list', $order_goods_list);
+            return $this->fetch('order/delivery');
+        }
+    }
+
+    /**
+     * 获取订单项列表
+     */
+    public function getOrderGoodsList()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $delivery_status = input('delivery_status', '');
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+                [ 'refund_status', '<>', 3 ],
+            );
+            if ($delivery_status != '') {
+                $condition[] = [ 'delivery_status', '=', $delivery_status ];
+            }
+            $field = 'order_goods_id, order_id, site_id, sku_name, sku_image, sku_no, is_virtual, price, cost_price, num, goods_money, cost_money, delivery_status, delivery_no, goods_id, delivery_status_name';
+            $result = $order_common_model->getOrderGoodsList($condition, $field, '', null, '');
+            return $result;
+        }
+    }
+
+    /**
+     * 订单修改收货地址
+     * @return mixed
+     */
+    public function editAddress()
+    {
+        $order_id = input('order_id', 0);
+        if (request()->isAjax()) {
+            $order_model = new OrderModel();
+            $province_id = input('province_id');
+            $city_id = input('city_id');
+            $district_id = input('district_id');
+            $community_id = input('community_id', 0);
+            $address = input('address');
+            $full_address = input('full_address');
+            $longitude = input('longitude', 0);
+            $latitude = input('latitude', 0);
+            $mobile = input('mobile');
+            $telephone = input('telephone');
+            $name = input('name');
+            $data = array (
+                'province_id' => $province_id,
+                'city_id' => $city_id,
+                'district_id' => $district_id,
+                'community_id' => $community_id,
+                'address' => $address,
+                'full_address' => $full_address,
+                'longitude' => $longitude,
+                'latitude' => $latitude,
+                'mobile' => $mobile,
+                'telephone' => $telephone,
+                'name' => $name,
+            );
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ]
+            );
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action' => '商家修改了收货地址',
+                'action_way' => '2',
+                'order_id' => $order_id
+            ];
+            $result = $order_model->orderAddressUpdate($data, $condition, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 获取订单信息
+     */
+    public function getOrderInfo()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            $result = $order_common_model->getOrderInfo($condition);
+            return $result;
+        }
+    }
+
+    /**
+     * 获取订单 订单项内容
+     */
+    public function getOrderDetail()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->getOrderDetail($order_id);
+            return $result;
+        }
+    }
+
+    /**
+     * 卖家备注
+     */
+    public function orderRemark()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $remark = input('remark', 0);
+            $order_common_model = new OrderCommonModel();
+            $condition = array (
+                [ 'order_id', '=', $order_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+            $data = array (
+                'remark' => $remark
+            );
+
+            $log_data[ 'action' ] = '商家备注了订单,备注内容:' . $remark;
+            $log_data[ 'action_way' ] = 2;
+            $log_data[ 'uid' ] = $this->user_info[ 'uid' ];
+            $log_data[ 'nick_name' ] = $this->user_info[ 'username' ];
+            $log_data[ 'order_id' ] = $order_id;
+
+            $result = $order_common_model->orderUpdate($data, $condition, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单导出(已订单为主)
+     */
+    public function exportOrder()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $order_ids = input('order_ids', '');
+        $store_id = input('store_id', 0);
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'online' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+
+        $result = $order_export_model->orderExport($condition, $condition_desc, $this->site_id, $join ?? null, $is_verify, $order_label);
+        return $result;
+    }
+
+    /**
+     * 订单导出(已订单商品为主)
+     */
+    public function exportOrderGoods()
+    {
+        $order_label_list = array (
+            'order_no' => '订单号',
+            'out_trade_no' => '外部单号',
+            'name' => '收货人姓名',
+            'mobile' => '收货人手机号',
+            'order_name' => '商品名称',
+            'nick_name' => '会员昵称'
+        );
+
+        $order_status = input('order_status', '');//订单状态
+        $order_name = input('order_name', '');
+        $pay_type = input('pay_type', '');
+        $order_from = input('order_from', '');
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+        $order_ids = input('order_ids', '');
+
+        $order_label = !empty($order_label_list[ input('order_label') ]) ? input('order_label') : '';
+
+        $search_text = input('search', '');
+        $promotion_type = input('promotion_type', '');
+        $order_type = input('order_type', 'all');
+        $is_verify = input('is_verify', 'all');
+        $store_id = input('store_id', 0); // 所属门店id
+        $condition_desc = [];
+
+        $order_common_model = new OrderCommon();
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.order_scene', '=', 'online' ]
+        ];
+
+        if (!empty($order_ids)) {
+            $condition[] = [ 'o.order_id', 'in', $order_ids ];
+            $condition_desc[] = [ 'name' => 'order_id', 'value' => $order_ids ];
+        }
+
+        //订单类型
+        $order_type_name = '全部';
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $order_type_list = array_column($order_type_list, 'name', 'type');
+            $order_type_name = $order_type_list[ $order_type ];
+        }
+        $condition_desc[] = [ 'name' => '订单类型', 'value' => $order_type_name ];
+
+        //订单状态
+        $order_status_name = '全部';
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+                $order_status_list = $order_common_model->order_status;
+                $order_status_name = $order_status_list[ $order_status ][ 'name' ] ?? '';
+            } else {
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                $order_status_name = '维权中';
+            }
+
+        }
+        $condition_desc[] = [ 'name' => '订单状态', 'value' => $order_status_name ];
+
+        //订单内容 模糊查询
+        if ($order_name != '') {
+            $condition[] = [ 'o.order_name', 'like', '%' . $order_name . '%' ];
+        }
+
+        if ($is_verify != 'all') {
+            $condition[] = [ 'v.is_verify', '=', $is_verify ];
+        }
+
+        //订单来源
+        $order_from_name = '全部';
+        if ($order_from != '') {
+            $condition[] = [ 'o.order_from', '=', $order_from ];
+            //订单来源 (支持端口)
+            $order_from_list = $order_common_model->getOrderFromList();
+            $order_from_name = $order_from_list[ $order_from ][ 'name' ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '订单来源', 'value' => $order_from_name ];
+
+        //订单支付
+        $pay_type_name = '全部';
+        if ($pay_type != '') {
+            $condition[] = [ 'o.pay_type', '=', $pay_type ];
+            $pay_type_list = $order_common_model->getPayType();
+            $pay_type_name = $pay_type_list[ $pay_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '支付方式', 'value' => $pay_type_name ];
+
+        //营销类型
+        $promotion_type_name = '全部';
+        if ($promotion_type != '') {
+            if ($promotion_type == 'empty') {
+                $condition[] = [ 'o.promotion_type', '=', '' ];
+            } else {
+                $condition[] = [ 'o.promotion_type', '=', $promotion_type ];
+            }
+            //营销活动类型
+            $promotion_model = new PromotionModel();
+            $promotion_type_list = $promotion_model->getPromotionType();
+            $promotion_type_list = array_column($promotion_type_list, 'name', 'type');
+            $promotion_type_name = $promotion_type_list[ $promotion_type ] ?? '';
+        }
+        $condition_desc[] = [ 'name' => '营销活动', 'value' => $promotion_type_name ];
+
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '下单时间', 'value' => $time_name ];
+
+        if ($order_label != 'nick_name') {
+            if ($search_text != '') {
+                $condition[] = [ 'o.' . $order_label, 'like', '%' . $search_text . '%' ];
+            }
+            foreach ($order_label_list as $k => $v) {
+                $order_label_name = $v;
+                if ($k == $order_label) {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => $search_text ];
+                } else {
+                    $condition_desc[] = [ 'name' => $order_label_name, 'value' => '' ];
+                }
+            }
+        } else {
+            $condition[] = [ 'm.nickname', 'like', '%' . $search_text . '%' ];
+        }
+
+        if (addon_is_exit('store') == 1 && !empty($store_id)) {
+            $store_model = new StoreModel();
+            $store_info = $store_model->getStoreInfo([ [ 'store_id', '=', $store_id ] ], 'store_name')[ 'data' ];
+
+            $condition[] = [ 'o.store_id', '=', $store_id ];
+            $condition_desc[] = [ 'name' => '来源门店', 'value' => $store_info[ 'store_name' ] ];
+        }
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderGoodsExport($condition, $condition_desc, $this->site_id, $is_verify, $order_label);
+        return $result;
+    }
+
+    /**
+     * 导出字段
+     * @return array
+     */
+    public function getPrintingField()
+    {
+        $model = new OrderExport();
+        $data = [
+            'order_field' => $model->order_field,
+            'order_goods_field' => $model->order_goods_field
+        ];
+
+        return success('1', '', $data);
+    }
+
+    public function printOrder()
+    {
+        $order_id = input('order_id', 0);
+        $order_common_model = new OrderCommonModel();
+        $order_detail_result = $order_common_model->getOrderDetail($order_id);
+        $order_detail = $order_detail_result[ 'data' ];
+        $this->assign('order_detail', $order_detail);
+        return $this->fetch('order/print_order');
+    }
+
+    /**
+     * 交易记录
+     */
+    public function tradelist()
+    {
+        $order_common_model = new OrderCommonModel();
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $member_id = input('member_id', 0);//会员id
+            $search_text = input('search_text', 0);//h关键字查询
+            $condition = array ();
+            if ($member_id > 0) {
+                $condition[] = [ 'member_id', '=', $member_id ];
+            }
+            if (!empty($search_text)) {
+                $condition[] = [ 'order_no|order_name', 'like', '%' . $search_text . '%' ];
+            }
+
+            return $order_common_model->getTradePageList($condition, $page, $page_size, 'create_time desc');
+
+        }
+    }
+
+    /**
+     * 订单关闭
+     * @return mixed
+     */
+    public function delete()
+    {
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderDelete($order_id, $this->user_info);
+            return $result;
+        }
+    }
+
+    /**
+     * 线下支付
+     * @return \app\model\order\unknown
+     */
+    public function offlinePay()
+    {
+        $log_data = [
+            'uid' => $this->user_info[ 'uid' ],
+            'nick_name' => $this->user_info[ 'username' ],
+            'action_way' => 2
+        ];
+        if (request()->isAjax()) {
+            $order_id = input('order_id', 0);
+            $order_common_model = new OrderCommonModel();
+            $result = $order_common_model->orderOfflinePay($order_id, $log_data);
+            return $result;
+        }
+    }
+
+    /**
+     * 订单列表(发票)
+     */
+    public function invoiceOrderList()
+    {
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $invoice_status = input('invoice_status', '');
+            $invoice_type = input('invoice_type', '');
+            $taxpayer_number = input('taxpayer_number', '');
+            $invoice_title = input('invoice_title', '');
+            $invoice_title_type = input('invoice_title_type', '');
+            $alias = 'o';
+            $join = [];
+
+            $condition = [
+                [ 'o.site_id', '=', $this->site_id ],
+                [ 'o.is_delete', '=', 0 ],
+                [ 'o.is_invoice', '=', 1 ]
+            ];
+            //发票状态
+            if ($invoice_status != null) {
+                $condition[] = [ 'o.invoice_status', '=', $invoice_status ];
+            }
+            //发票类型
+            if (!empty($invoice_type)) {
+                $condition[] = [ 'o.invoice_type', '=', $invoice_type ];
+            }
+            //纳税人识别号
+            if (!empty($taxpayer_number)) {
+                $condition[] = [ 'o.taxpayer_number', 'like', '%' . $taxpayer_number . '%' ];
+                $condition[] = [ 'o.invoice_title_type', '=', 2 ];
+            }
+            //抬头类型
+            if (!empty($invoice_title_type)) {
+                $condition[] = [ 'o.invoice_title_type', '=', $invoice_title_type ];
+            }
+            //纳税人公司
+            if (!empty($invoice_title)) {
+                $condition[] = [ 'o.invoice_title', 'like', '%' . $invoice_title . '%' ];
+            }
+            //订单编号
+            $order_no = input('order_no', '');
+            if ($order_no) {
+                $condition[] = [ 'o.order_no', 'like', '%' . $order_no . '%' ];
+            }
+            //订单状态
+            $order_status = input('order_status', '');
+            if ($order_status != '') {
+                if ($order_status != 'refunding') {
+                    $condition[] = [ 'o.order_status', '=', $order_status ];
+                } else {
+                    $join = [
+                        [
+                            'order_goods og',
+                            'og.order_id = o.order_id',
+                            'left'
+                        ]
+                    ];
+                    $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+                }
+            }
+            $order_type = input('order_type', 'all');//营销类型
+            $start_time = input('start_time', '');
+            $end_time = input('end_time', '');
+
+            //订单类型
+            if ($order_type != 'all') {
+                $condition[] = [ 'o.order_type', '=', $order_type ];
+            }
+
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+            $condition[] = [ 'o.order_status', '>', 0 ];
+            $order_common_model = new OrderCommonModel();
+            $list = $order_common_model->getOrderPageList($condition, $page_index, $page_size, 'o.create_time desc', 'o.*', $alias, $join);
+            return $list;
+        } else {
+            $order_model = new OrderModel();
+//            $order_status_list = $order_model->order_status;
+            $order_common_model = new OrderCommonModel();
+            $order_type_list = $order_common_model->getOrderTypeStatusList();
+            $this->assign('order_type_list', $order_type_list);
+
+            return $this->fetch('order/invoice_list');
+        }
+    }
+
+    /**
+     * 订单列表(发票编辑)
+     */
+    public function invoiceEdit()
+    {
+        if (request()->isAjax()) {
+            //接收数据
+            $order_id = input('order_id', '');
+            $invoice_status = input('invoice_status', '');
+            $invoice_code = input('invoice_code', '');
+            $invoice_remark = input('invoice_remark', '');
+            $condition = [
+                [ 'order_id', '=', $order_id ]
+            ];
+
+            $data[ 'invoice_status' ] = $invoice_status;
+            $data[ 'invoice_code' ] = $invoice_code;
+            $data[ 'invoice_remark' ] = $invoice_remark;
+            $data[ 'invoice_time' ] = time();
+
+            $order_common_model = new OrderCommonModel();
+            $res = $order_common_model->orderUpdate($data, $condition);
+            return $res;
+        } else {
+            $order_id = input('order_id', '');
+            $this->assign('order_id', $order_id);
+
+            //订单详情
+            $order_common_model = new OrderCommonModel();
+            $order_detail = $order_common_model->getOrderDetail($order_id);
+
+            if (empty($order_detail[ 'data' ])) $this->error('未获取到订单数据', addon_url('shop/order/invoiceorderlist'));
+
+            $this->assign('order_detail', $order_detail[ 'data' ]);
+
+            return $this->fetch('order/invoice_edit');
+        }
+    }
+
+    /**
+     * 发票导出
+     */
+    public function exportInvoice()
+    {
+        $page_index = input('page', 1);
+        $page_size = 0;
+        $condition = [
+            [ 'o.site_id', '=', $this->site_id ],
+            [ 'o.is_delete', '=', 0 ],
+            [ 'o.is_invoice', '=', 1 ]
+        ];
+        $alias = 'o';
+        $join = null;
+        //订单编号
+        $order_no = input('order_no', '');
+        if ($order_no) {
+            $condition[] = [ 'o.order_no', 'like', '%' . $order_no . '%' ];
+        }
+        //订单状态
+        $order_status = input('order_status', '');
+        if ($order_status != '') {
+            if ($order_status != 'refunding') {
+                $condition[] = [ 'o.order_status', '=', $order_status ];
+            } else {
+                $join = [
+                    [
+                        'order_goods og',
+                        'og.order_id = o.order_id',
+                        'left'
+                    ]
+                ];
+                $condition[] = [ 'og.refund_status', 'not in', [ 0, 3 ] ];
+            }
+        }
+        $order_type = input('order_type', 'all');//营销类型
+        $start_time = input('start_time', '');
+        $end_time = input('end_time', '');
+
+
+        //订单类型
+        if ($order_type != 'all') {
+            $condition[] = [ 'o.order_type', '=', $order_type ];
+        }
+
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'o.create_time', '>=', date_to_time($start_time) ];
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', '<=', date_to_time($end_time) ];
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'o.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+        }
+
+        $order_common_model = new OrderCommonModel();
+        $list_result = $order_common_model->getOrderPageList($condition, $page_index, $page_size, 'o.create_time desc', 'o.*', $alias, $join);
+        $list = $list_result[ 'data' ][ 'list' ];
+
+        // 实例化excel
+        $phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
+
+        $phpExcel->getProperties()->setTitle('退款维权订单');
+        $phpExcel->getProperties()->setSubject('退款维权订单');
+        //单独添加列名称
+        $phpExcel->setActiveSheetIndex(0);
+
+        $phpExcel->getActiveSheet()->setCellValue('A1', '订单编号');
+        $phpExcel->getActiveSheet()->setCellValue('B1', '订单总额(元)');
+        $phpExcel->getActiveSheet()->setCellValue('C1', '发票税费');
+        $phpExcel->getActiveSheet()->setCellValue('D1', '发票邮寄费用');
+        $phpExcel->getActiveSheet()->setCellValue('E1', '发票类型');
+        $phpExcel->getActiveSheet()->setCellValue('F1', '发票抬头');
+        $phpExcel->getActiveSheet()->setCellValue('G1', '抬头类型');
+        $phpExcel->getActiveSheet()->setCellValue('H1', '纳税人识别号');
+        $phpExcel->getActiveSheet()->setCellValue('I1', '发票内容');
+        $phpExcel->getActiveSheet()->setCellValue('J1', '发票税率(%)');
+        $phpExcel->getActiveSheet()->setCellValue('K1', '订单状态');
+        $phpExcel->getActiveSheet()->setCellValue('L1', '下单时间');
+
+        if (!empty($list)) {
+            foreach ($list as $k => $v) {
+                $start = $k + 2;
+                $phpExcel->getActiveSheet()->setCellValue('A' . $start, $v[ 'order_no' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('B' . $start, $v[ 'order_money' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('C' . $start, $v[ 'invoice_money' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('D' . $start, $v[ 'invoice_delivery_money' ] . ' ');
+
+                $invoice_name = '';
+                if ($v[ 'invoice_type' ] == 1) {
+                    $invoice_name = '纸质';
+                } else {
+                    $invoice_name = '电子';
+                }
+                if ($v[ 'is_tax_invoice' ] == 1) {
+                    $invoice_name .= '专用发票';
+                } else {
+                    $invoice_name .= '普通发票';
+                }
+                $phpExcel->getActiveSheet()->setCellValue('E' . $start, $invoice_name . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('F' . $start, $v[ 'invoice_title' ] . ' ');
+                $invoice_title_type = $v[ 'invoice_title_type' ] == 1 ? '个人' : '企业';
+                $phpExcel->getActiveSheet()->setCellValue('G' . $start, $invoice_title_type . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('H' . $start, $v[ 'taxpayer_number' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('I' . $start, $v[ 'invoice_title_type' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('J' . $start, $v[ 'invoice_rate' ] . '%');
+                $phpExcel->getActiveSheet()->setCellValue('K' . $start, $v[ 'order_status_name' ] . ' ');
+                $phpExcel->getActiveSheet()->setCellValue('L' . $start, time_to_date($v[ 'create_time' ]) . ' ');
+            }
+        }
+
+        // 重命名工作sheet
+        $phpExcel->getActiveSheet()->setTitle('发票列表');
+        // 设置第一个sheet为工作的sheet
+        $phpExcel->setActiveSheetIndex(0);
+        // 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
+        $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
+        $file = date('Y年m月d日-发票列表', time()) . '.xlsx';
+        $objWriter->save($file);
+
+        header('Content-type:application/octet-stream');
+
+        $filename = basename($file);
+        header('Content-Disposition:attachment;filename = ' . $filename);
+        header('Accept-ranges:bytes');
+        header('Accept-length:' . filesize($file));
+        readfile($file);
+        unlink($file);
+        exit;
+    }
+
+    /**
+     * 确认收货
+     */
+    public function takeDelivery()
+    {
+        if (request()->isAjax()) {
+
+            $order_id = input('order_id', '');
+            $type = input('type', 0);
+
+            $order_model = new OrderCommonModel();
+            $log_data = [
+                'uid' => $this->user_info[ 'uid' ],
+                'nick_name' => $this->user_info[ 'username' ],
+                'action_way' => 2
+            ];
+            if ($type == 1) {
+                $error_num = 0;
+                $success_num = 0;
+                $order_arr = explode(',', $order_id);
+                foreach ($order_arr as $key => $val) {
+                    $result = $order_model->orderCommonTakeDelivery($val, $log_data);
+                    if ($result[ 'code' ] >= 0) {
+                        $success_num += 1;
+                    } else {
+                        $error_num += 1;
+                    }
+                }
+                return success(0, '成功' . $success_num . '条,失败' . $error_num . '条');
+
+            } else {
+
+                $result = $order_model->orderCommonTakeDelivery($order_id, $log_data);
+                return $result;
+            }
+        }
+
+    }
+
+    /**
+     * 订单导出记录
+     * @return mixed
+     */
+    public function export()
+    {
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $export_model = new OrderExport();
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ]
+            );
+            $result = $export_model->getExportPageList($condition, $page_index, $page_size, 'create_time desc', '*');
+            return $result;
+        } else {
+            return $this->fetch('order/export');
+        }
+    }
+
+    /**
+     * 删除订单导出记录
+     */
+    public function deleteExport()
+    {
+        if (request()->isAjax()) {
+            $export_ids = input('export_ids', '');
+
+            $export_model = new OrderExport();
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ],
+                [ 'export_id', 'in', (string) $export_ids ]
+            );
+            $result = $export_model->deleteExport($condition);
+            return $result;
+        }
+    }
+
+    /**
+     * 购物须知
+     */
+    public function transactionAgreement()
+    {
+        if (request()->isAjax()) {
+            //设置注册协议
+            $title = input('title', '');
+            $content = input('content', '');
+            $config_model = new ConfigModel();
+            return $config_model->setTransactionDocument($title, $content, $this->site_id, 'shop');
+        } else {
+            $this->forthMenu();
+            //获取注册协议
+            $config_model = new ConfigModel();
+            $document_info = $config_model->getTransactionDocument($this->site_id, 'shop');
+            $this->assign('document_info', $document_info);
+
+            return $this->fetch('order/transaction_agreement');
+        }
+    }
+}

+ 416 - 0
app/shop/controller/Orderrefund_bak.php

@@ -0,0 +1,416 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\shop\controller;
+
+use app\model\order\OrderCommon;
+use app\model\order\OrderRefund as OrderRefundModel;
+use app\model\order\OrderExport;
+use app\model\member\Member;
+
+/**
+ * 订单维权
+ * Class Orderrefund
+ * @package app\shop\controller
+ */
+class Orderrefund extends BaseShop
+{
+
+    /**
+     * 维权订单列表
+     * @return mixed
+     */
+    public function lists()
+    {
+        $refund_status = input("refund_status", "");//退款状态
+        $sku_name = input("sku_name", '');//商品名称
+        $refund_type = input("refund_type", '');//退款方式
+        $start_time = input("start_time", '');//开始时间
+        $end_time = input("end_time", '');//结束时间
+        $order_no = input("order_no", '');//订单编号
+        $delivery_status = input("delivery_status", '');//物流状态
+        $refund_no = input("refund_no", '');//退款编号
+
+        $delivery_no = input("delivery_no", '');//物流编号
+        $refund_delivery_no = input("refund_delivery_no", '');//退款物流编号
+        $refund_mode = input("refund_mode", '');//退款类型
+
+        $order_refund_model = new OrderRefundModel();
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $condition = [
+                [ "nop.site_id", "=", $this->site_id ]
+            ];
+            //退款状态
+            if ($refund_status != "") {
+                $condition[] = [ "nop.refund_status", "=", $refund_status ];
+            } else {
+                $condition[] = [ "nop.refund_status", "<>", 0 ];
+            }
+            //物流状态
+            if ($delivery_status != "") {
+                $condition[] = [ "nop.delivery_status", "=", $delivery_status ];
+            }
+            //商品名称
+            if ($sku_name != "") {
+                $condition[] = [ "nop.sku_name", "like", "%$sku_name%" ];
+            }
+            //退款方式
+            if ($refund_type != "") {
+                $condition[] = [ "nop.refund_type", "=", $refund_type ];
+            }
+            //退款编号
+            if ($refund_no != "") {
+                $condition[] = [ "nop.refund_no", "like", "%$refund_no%" ];
+            }
+            //订单编号
+            if ($order_no != "") {
+                $condition[] = [ "nop.order_no", "like", "%$order_no%" ];
+            }
+            //物流编号
+            if ($delivery_no != "") {
+                $condition[] = [ "nop.delivery_no", "like", "%$delivery_no%" ];
+            }
+            //退款物流编号
+            if ($refund_delivery_no != "") {
+                $condition[] = [ "nop.refund_delivery_no", "like", "%$refund_delivery_no%" ];
+            }
+            //退款类型
+            if ($refund_mode == 1) {
+                $condition[] = [ "nop.refund_mode", "in", [ 0, 1 ] ];
+            } else if ($refund_mode == 2) {
+                $condition[] = [ "nop.refund_mode", "=", 2 ];
+            }
+
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ "nop.refund_action_time", ">=", date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ "nop.refund_action_time", "<=", date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'nop.refund_action_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+
+            $list = $order_refund_model->getRefundOrderGoodsPageList($condition, $page_index, $page_size, "nop.refund_action_time desc");
+            return $list;
+        } else {
+            $refund_status_list = $order_refund_model->order_refund_status;
+            $this->assign("refund_status_list", $refund_status_list);//退款状态
+            $this->assign("refund_type_list", $order_refund_model->refund_type);//退款方式
+            return $this->fetch("orderrefund/lists");
+        }
+    }
+
+    /**
+     * 维权订单详情
+     * @return mixed
+     */
+    public function detail()
+    {
+        $order_goods_id = input("order_goods_id", 0);
+        //维权订单项信息
+        $order_refund_model = new OrderRefundModel();
+        $detail_result = $order_refund_model->getRefundDetail($order_goods_id);
+        $detail = $detail_result[ "data" ];
+
+        if (empty($detail))
+            $this->error("未获取到维权信息", addon_url('shop/orderrefund/lists'));
+
+        $order_common_model = new OrderCommon();
+//        $order_info_result  = $order_common_model->getOrderInfo([["order_id", "=", $detail["order_id"]]]);
+        $order_info_result = $order_common_model->getOrderDetail($detail[ "order_id" ]);
+        $order_info = $order_info_result[ "data" ];
+        if (empty($order_info))
+            $this->error("未获取到维权信息", addon_url('shop/orderrefund/lists'));
+
+        $template = "orderrefund/detail";
+        if ($order_info[ "order_type" ] == 4) {
+            $template = "orderrefund/virtualdetail";
+        }
+
+        //添加会员昵称
+        $member = new Member();
+        $member_info = $member->getMemberInfo([ [ "member_id", '=', $order_info[ 'member_id' ] ] ], 'nickname')['data'] ?? [];
+        $order_info[ 'nickname' ] = $member_info[ 'nickname' ] ?? '';
+        $this->assign("detail", $detail);
+        $this->assign("order_info", $order_info);
+        return $this->fetch($template);
+    }
+
+    /**
+     * 维权拒绝
+     * @return mixed
+     */
+    public function refuse()
+    {
+        $order_goods_id = input("order_goods_id", 0);
+        $refund_refuse_reason = input("refund_refuse_reason", '');
+        $order_refund_model = new OrderRefundModel();
+        $data = array (
+            "order_goods_id" => $order_goods_id,
+            "refund_refuse_reason" => $refund_refuse_reason
+        );
+        $log_data = [
+            'uid' => $this->user_info[ 'uid' ],
+            'nick_name' => $this->user_info[ 'username' ],
+            'action' => '商家拒绝了维权',
+            'action_way' => 2
+        ];
+        $res = $order_refund_model->orderRefundRefuse($data, $this->user_info, $refund_refuse_reason, $log_data);
+        return $res;
+    }
+
+    /**
+     * 维权同意
+     * @return mixed
+     */
+    public function agree()
+    {
+        $order_goods_id = input("order_goods_id", 0);
+        $order_refund_model = new OrderRefundModel();
+        $data = array (
+            "order_goods_id" => $order_goods_id
+        );
+        $res = $order_refund_model->orderRefundConfirm($data, $this->user_info);
+        return $res;
+    }
+
+    /**
+     * 维权收货
+     * @return mixed
+     */
+    public function receive()
+    {
+        $order_goods_id = input("order_goods_id", 0);
+        $is_refund_stock = input("is_refund_stock", 0);//是否入库
+
+        $order_refund_model = new OrderRefundModel();
+        $data = array (
+            "order_goods_id" => $order_goods_id,
+            "is_refund_stock" => $is_refund_stock
+        );
+        $res = $order_refund_model->orderRefundTakeDelivery($data, $this->user_info);
+        return $res;
+    }
+
+    /**
+     * 维权通过
+     * @return mixed
+     */
+    public function complete()
+    {
+        $order_goods_id = input("order_goods_id", 0);
+        $refund_money_type = input('refund_money_type', '');
+        $shop_refund_remark = input('shop_refund_remark', '');
+        $refund_real_money = input('refund_real_money', 0);
+        $is_deposit_back = input('is_deposit_back', 1);
+
+        $order_refund_model = new OrderRefundModel();
+        $data = array (
+            "order_goods_id" => $order_goods_id,
+            'refund_money_type' => $refund_money_type,
+            'shop_refund_remark' => $shop_refund_remark,
+            'refund_real_money' => $refund_real_money,
+            'is_deposit_back' => $is_deposit_back
+        );
+        $log_data = [
+            'uid' => $this->user_info[ 'uid' ],
+            'nick_name' => $this->user_info[ 'username' ],
+            'action' => '商家对维权进行了转账,维权结束',
+            'action_way' => 2
+        ];
+        $res = $order_refund_model->orderRefundFinish($data, $this->user_info, $log_data);
+
+        return $res;
+    }
+
+
+    /**
+     * 订单导出(维权订单)
+     */
+    public function exportRefundOrder()
+    {
+        $refund_status = input("refund_status", "");//退款状态
+        $sku_name = input("sku_name", '');//商品名称
+        $refund_type = input("refund_type", '');//退款方式
+        $start_time = input("start_time", '');//开始时间
+        $end_time = input("end_time", '');//结束时间
+        $order_no = input("order_no", '');//订单编号
+        $delivery_status = input("delivery_status", '');//物流状态
+        $refund_no = input("refund_no", '');//退款编号
+
+        $order_refund_model = new OrderRefundModel();
+        $delivery_no = input("delivery_no", '');//物流编号
+        $refund_delivery_no = input("refund_delivery_no", '');//退款物流编号
+        $condition_desc = [];
+
+        $condition[] = [ 'og.site_id', '=', $this->site_id ];
+        //退款状态
+        $refund_status_list = $order_refund_model->order_refund_status;
+        $refund_status_name = '全部';
+        if ($refund_status != "") {
+            $condition[] = [ "og.refund_status", "=", $refund_status ];
+            $refund_status_name = $refund_status_list[ $refund_status ][ 'name' ] ?? '';
+        } else {
+            $condition[] = [ "og.refund_status", "<>", 0 ];
+        }
+        $condition_desc[] = [ 'name' => '维权状态', 'value' => $refund_status_name ];
+
+        //物流状态
+        if ($delivery_status != "") {
+            $condition[] = [ "og.delivery_status", "=", $delivery_status ];
+        }
+
+        //商品名称
+        $sku_name_value = '';
+        if ($sku_name != "") {
+            $condition[] = [ "og.sku_name", "like", "%$sku_name%" ];
+            $sku_name_value = $sku_name;
+        }
+        $condition_desc[] = [ 'name' => '商品名称', 'value' => $sku_name_value ];
+
+        //退款方式
+        $refund_type_name = '全部';
+        if ($refund_type != "") {
+            $condition[] = [ "og.refund_type", "=", $refund_type ];
+            $refund_type_name = $order_refund_model->refund_type[ $refund_type ];
+        }
+        $condition_desc[] = [ 'name' => '退款方式', 'value' => $refund_type_name ];
+
+        //退款编号
+        if ($refund_no != "") {
+            $condition[] = [ "og.refund_no", "like", "%$refund_no%" ];
+        }
+        $condition_desc[] = [ 'name' => '退款编号', 'value' => $refund_no ];
+
+        //订单编号
+        if ($order_no != "") {
+            $condition[] = [ "og.order_no", "like", "%$order_no%" ];
+        }
+        $condition_desc[] = [ 'name' => '订单编号', 'value' => $order_no ];
+
+        //物流编号
+        if ($delivery_no != "") {
+            $condition[] = [ "og.delivery_no", "like", "%$delivery_no%" ];
+        }
+        //退款物流编号
+        if ($refund_delivery_no != "") {
+            $condition[] = [ "og.refund_delivery_no", "like", "%$refund_delivery_no%" ];
+        }
+        $time_name = '';
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ "og.refund_action_time", ">=", date_to_time($start_time) ];
+            $time_name = $start_time . '起';
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ "og.refund_action_time", "<=", date_to_time($end_time) ];
+            $time_name = '至' . $end_time;
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'og.refund_action_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            $time_name = $start_time . ' 至 ' . $end_time;
+        }
+        $condition_desc[] = [ 'name' => '申请时间', 'value' => $time_name ];
+
+        $order_export_model = new OrderExport();
+        $result = $order_export_model->orderRefundExport($condition, $condition_desc, $this->site_id);
+        return $result;
+    }
+
+    /**
+     * 订单导出记录
+     * @return mixed
+     */
+    public function export()
+    {
+        if (request()->isAjax()) {
+            $page_index = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $export_model = new OrderExport();
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ]
+            );
+            $result = $export_model->getRefundExportPageList($condition, $page_index, $page_size, 'create_time desc', '*');
+            return $result;
+        } else {
+            return $this->fetch("orderrefund/export");
+
+        }
+    }
+
+    /**
+     * 删除订单导出记录
+     */
+    public function deleteExport()
+    {
+
+        if (request()->isAjax()) {
+            $export_ids = input('export_ids', '');
+
+            $export_model = new OrderExport();
+            $condition = array (
+                [ 'site_id', '=', $this->site_id ],
+                [ 'export_id', 'in', (string) $export_ids ]
+            );
+            $result = $export_model->deleteRefundExport($condition);
+            return $result;
+        }
+    }
+
+    /**
+     * 关闭维权
+     * @return \app\model\order\multitype
+     */
+    public function close()
+    {
+        if (request()->isAjax()) {
+            $order_goods_id = input("order_goods_id", 0);
+            $order_refund_model = new OrderRefundModel();
+            $res = $order_refund_model->orderRefundClose($order_goods_id, $this->site_id, $this->user_info);
+            return $res;
+        }
+    }
+
+    /**
+     * 获取订单项退款信息
+     */
+    public function getOrderGoodsRefundInfo()
+    {
+        if (request()->isAjax()) {
+            $order_goods_id = input('order_goods_id', '');
+            $order_refund_model = new OrderRefundModel();
+            $res = $order_refund_model->getOrderGoodsRefundInfo($order_goods_id, $this->site_id);
+            return $res;
+        }
+    }
+
+    /**
+     * 主动退款
+     * @return mixed
+     */
+    public function shopActiveRefund()
+    {
+        $order_goods_id = input("order_goods_id", 0);
+        $refund_money_type = input('refund_money_type', '');
+        $shop_refund_remark = input('shop_refund_remark', '');
+        $do_refund_money = input('do_refund_money', '');
+        $order_refund_model = new OrderRefundModel();
+
+        $params = array (
+            'site_id' => $this->site_id,
+            'app_module' => $this->app_module,
+            'refund_money_type' => $refund_money_type,
+            'shop_refund_remark' => $shop_refund_remark,
+            'user_info' => $this->user_info,
+            'order_goods_id' => $order_goods_id,
+            'do_refund_money' => $do_refund_money
+        );
+        $res = $order_refund_model->doOrderOrderRefund($params);
+        return $res;
+    }
+}

+ 514 - 0
app/shop/controller/Verify_bak.php

@@ -0,0 +1,514 @@
+<?php
+/**
+ * Niushop商城系统 - 团队十年电商经验汇集巨献!
+ * =========================================================
+ * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
+ * ----------------------------------------------
+ * 官方网址: https://www.niushop.com
+ * =========================================================
+ */
+
+namespace app\shop\controller;
+
+use app\model\member\Member;
+use app\model\store\Store;
+use app\model\verify\Verifier;
+use app\model\verify\Verify as VerifyModel;
+use app\model\verify\VerifyRecord;
+use app\model\web\Config as ConfigModel;
+
+/**
+ * 核销
+ * Class Verify
+ * @package app\shop\controller
+ */
+class Verify extends BaseShop
+{
+
+    /**
+     * 核销码
+     * @return array|mixed
+     */
+    public function lists()
+    {
+        $verify_model = new VerifyModel();
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $order = input("order", "create_time desc");
+            $verify_type = input('verify_type', "");//验证类型
+            $verify_code = input('verify_code', "");//验证码
+            $verifier_name = input('verifier_name', "");
+            $start_time = input("start_time", '');
+            $end_time = input("end_time", '');
+            $verify_from = input('verify_from', '');
+
+            $condition = [
+                [ 'site_id', "=", $this->site_id ],
+                [ 'is_verify', '=', 1 ]
+            ];
+            if (!empty($verify_type)) {
+                $condition[] = [ "verify_type", "=", $verify_type ];
+            }
+            if (!empty($verify_from)) {
+                $condition[] = [ "verify_from", "=", $verify_from ];
+            }
+            if (!empty($verify_code)) {
+                $condition[] = [ "verify_code", 'like', '%' . $verify_code . '%' ];
+            }
+            if (!empty($verifier_name)) {
+                $condition[] = [ 'verifier_name', 'like', '%' . $verifier_name . '%' ];
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'verify_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ "verify_time", "<=", date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'verify_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+            $list = $verify_model->getVerifyPageList($condition, $page, $page_size, $order, $field = 'id, verify_code, verify_type, verify_type_name, verify_content_json, verifier_id, verifier_name,verify_from,verify_remark, is_verify, create_time, verify_time');
+            return $list;
+        } else {
+            $verify_type = $verify_model->getVerifyType();
+            $verify_from = $verify_model->verifyFrom;
+            $this->assign('verify_from', $verify_from);
+            $this->assign('verify_type', $verify_type);
+            return $this->fetch("verify/lists");
+        }
+
+    }
+
+    /**
+     * 核销记录
+     * @return mixed
+     */
+    public function records()
+    {
+        $verify_model = new VerifyModel();
+        $verify_record_model = new VerifyRecord();
+        $verify_code = input('verify_code', "");//验证码
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $order = input("order", "create_time desc");
+            $verify_type = input('verify_type', "");//验证类型
+            $verifier_name = input('verifier_name', "");
+            $start_time = input("start_time", '');
+            $end_time = input("end_time", '');
+            $store_id = input('store_id', '');
+
+            $condition = [
+                [ 'vr.site_id', "=", $this->site_id ],
+//                ['is_verify', '=', 1]
+            ];
+            if (!empty($verify_type)) {
+                $condition[] = [ "v.verify_type", "=", $verify_type ];
+            }
+            if (!empty($store_id)) {
+                $condition[] = [ "vr.store_id", "=", $store_id ];
+            }
+            if (!empty($verify_code)) {
+                $condition[] = [ "vr.verify_code", 'like', '%' . $verify_code . '%' ];
+            }
+            if (!empty($verifier_name)) {
+                $condition[] = [ 'vr.verifier_name', 'like', '%' . $verifier_name . '%' ];
+            }
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'vr.verify_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ "vr.verify_time", "<=", date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'vr.verify_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+            $list = $verify_record_model->getVerifyRecordsViewPageList($condition, $page, $page_size, $order, $field = 'id, verify_code, verify_type, verify_type_name, verify_content_json, verifier_id, verifier_name,verify_from,verify_remark, is_verify, create_time, verify_time');
+            return $list;
+        } else {
+            $verify_type = $verify_model->getVerifyType();
+            $verify_from = $verify_model->verifyFrom;
+            $this->assign('verify_code', $verify_code);
+            $this->assign('verify_from', $verify_from);
+            $this->assign('verify_type', $verify_type);
+            $store_list = ( new Store() )->getStoreList([ [ 'site_id', '=', $this->site_id ] ], 'store_name,store_id');
+            $this->assign('store_list', $store_list[ 'data' ]);
+            return $this->fetch("verify/records");
+        }
+
+    }
+
+    /**
+     * 订单核销
+     * @return mixed
+     */
+    public function orderverify()
+    {
+        $verify_model = new VerifyModel();
+        if (request()->isAjax()) {
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $verify_code = input('verify_code', "");
+            $start_time = input("start_time", '');
+            $end_time = input("end_time", '');
+            $verify_from = input('verify_from', '');
+            $verify_type = input('verify_type', '');
+            $is_verify = input('is_verify', '');
+
+            $condition = [
+                [ 'site_id', "=", $this->site_id ],
+
+            ];
+            if (!empty($verify_type)) {
+                $condition[] = [ "verify_type", "=", $verify_type ];
+            }
+            if ($is_verify !== '') {
+                $condition[] = [ "is_verify", "=", $is_verify ];
+            }
+            if (!empty($verify_from)) {
+                $condition[] = [ "verify_from", "=", $verify_from ];
+            }
+            if (!empty($verify_code)) {
+                $condition[] = [ "verify_code", 'like', '%' . $verify_code . '%' ];
+            }
+
+            if (!empty($start_time) && empty($end_time)) {
+                $condition[] = [ 'create_time', '>=', date_to_time($start_time) ];
+            } elseif (empty($start_time) && !empty($end_time)) {
+                $condition[] = [ "create_time", "<=", date_to_time($end_time) ];
+            } elseif (!empty($start_time) && !empty($end_time)) {
+                $condition[] = [ 'create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+            }
+            $list = $verify_model->getVerifyPageList($condition, $page, $page_size, 'id desc');
+            return $list;
+        } else {
+
+            $verify_count = $verify_model->getVerifyInfo([ [ 'site_id', '=', $this->site_id ] ], 'count(id) as total_count, sum(verify_use_num) as verify_use_num,is_verify,verify_content_json')[ 'data' ] ?? [];
+            $this->assign('total_count', $verify_count[ 'total_count' ] ?? 0);
+            $this->assign('verify_use_num', $verify_count[ 'verify_use_num' ] ?? 0);
+
+            $verify_info = $verify_model->getVerifyInfo([ [ 'site_id', '=', $this->site_id ], [ 'verify_type', '=', 'virtualgoods' ] ], 'count(id) as total_count, sum(verify_total_count) as verify_total_count, sum(verify_use_num) as verify_use_num,is_verify,verify_content_json')[ 'data' ] ?? [];
+            $this->assign('verify_goods_num', (int) abs($verify_info[ 'verify_total_count' ] - $verify_info[ 'verify_use_num' ]));
+            $this->assign('verify_goods_count', $verify_info[ 'total_count' ]);
+
+            $verify_info = $verify_model->getVerifyInfo([ [ 'site_id', '=', $this->site_id ], [ 'verify_type', '=', 'pickup' ] ], 'count(id) as total_count,sum(verify_total_count) as verify_total_count, sum(verify_use_num) as verify_use_num,is_verify,verify_content_json')[ 'data' ] ?? [];
+            $this->assign('pickup_num', (int) abs($verify_info[ 'verify_total_count' ] - $verify_info[ 'verify_use_num' ]));
+            $this->assign('pickup_count', $verify_info[ 'total_count' ]);
+
+            $card_goods_count = $verify_model->getVerifyCount([ [ 'site_id', '=', $this->site_id ], [ 'verify_type', '=', 'cardgoods' ] ], 'id')[ 'data' ] ?? [];
+            $verify_info = $verify_model->getVerifyInfo([ [ 'site_id', '=', $this->site_id ], [ 'verify_type', '=', 'cardgoods' ], [ 'verify_total_count', '>', 0 ] ], 'sum(verify_total_count) as verify_total_count, sum(verify_use_num) as verify_use_num,is_verify,verify_content_json')[ 'data' ] ?? [];
+            $card_goods_num = (int) abs($verify_info[ 'verify_total_count' ] - $verify_info[ 'verify_use_num' ]);
+            $card_goods_num += $verify_model->getVerifyCount([ [ 'site_id', '=', $this->site_id ], [ 'verify_type', '=', 'cardgoods' ], [ 'verify_total_count', '=', 0 ], [ 'expire_time', '>', 0 ], [ 'expire_time', '<', time() ] ], 'id')[ 'data' ];
+
+            $this->assign('card_goods_num', $card_goods_num);
+            $this->assign('card_goods_count', $card_goods_count);
+
+            $verify_type = $verify_model->getVerifyType();
+            $this->assign('verify_type', $verify_type);
+            return $this->fetch("verify/order_verify");
+        }
+
+    }
+
+    /**
+     * 核销信息
+     */
+    public function verifyInfo()
+    {
+        $id = input('id', '');
+
+        $verify_model = new VerifyModel();
+        $info = $verify_model->getVerifyInfo([ [ 'id', '=', $id ], [ 'site_id', '=', $this->site_id ] ]);
+        return $info;
+    }
+
+    /**
+     * 核销台
+     * @return mixed
+     */
+    public function verifyCard()
+    {
+        if (request()->isAjax()) {
+            $verify_code = input("verify_code", "");
+            $verify_model = new VerifyModel();
+            $res = $verify_model->getVerifyInfo([ [ "verify_code", "=", $verify_code ], [ "site_id", "=", $this->site_id ] ]);
+            return $res;
+        } else {
+            return $this->fetch("verify/verify_card");
+        }
+
+    }
+
+    /**
+     * 核销人员
+     * @return mixed
+     */
+    public function user()
+    {
+        if (request()->isAjax()) {
+            $verifier = new Verifier();
+            $page = input('page', 1);
+            $page_size = input('page_size', PAGE_LIST_ROWS);
+            $order = input("order", "v.create_time desc");
+            $verifier_name = input('verifier_name', '');
+            $verifier_type = input('verifier_type', 0);
+            $store_id = input('store_id', 0);
+            $condition = [];
+            $condition[] = [ 'v.site_id', "=", $this->site_id ];
+            if ($verifier_name) {
+                $condition[] = [ 'v.verifier_name', '=', $verifier_name ];
+            }
+            if ($verifier_type != '') {
+                $condition[] = [ 'v.verifier_type', '=', $verifier_type ];
+            }
+            if ($store_id) {
+                $condition[] = [ 'v.store_id', '=', $store_id ];
+            }
+            $list = $verifier->getVerifierPageList($condition, $page, $page_size, $order);
+            return $list;
+        } else {
+            // 门店列表
+            $store_model = new Store();
+            $store_list = $store_model->getStoreList([ [ 'site_id', "=", $this->site_id ], [ 'is_frozen', '=', 0 ] ], 'store_id,store_name', 'store_id desc')[ 'data' ];
+            $this->assign('store_list', $store_list);
+            return $this->fetch("verify/user");
+        }
+    }
+
+    /**
+     * 添加核销人员
+     * @return mixed
+     */
+    public function addUser()
+    {
+        if (request()->isAjax()) {
+            $verifier_name = input("verifier_name", "");
+            $member_id = input("member_id", 0);//会员账号
+            $uid = input("uid", 0);//管理员账号
+            $verifier_type = input('verifier_type', 0);//核销员类型:0平台核销员,1门店核销员
+            $store_id = input('store_id', 0);//门店ID
+            $model = new Verifier();
+            $data = [
+                'site_id' => $this->site_id,
+                "verifier_name" => $verifier_name,
+                "member_id" => $member_id,
+                "uid" => $uid,
+                'verifier_type' => $verifier_type,
+                'store_id' => $store_id
+            ];
+            $result = $model->addVerifier($data);
+            return $result;
+        } else {
+            $upload_config_model = new ConfigModel();
+            $upload_config_result = $upload_config_model->getDefaultImg($this->site_id, $this->app_module)[ 'data' ][ 'value' ];
+            $this->assign("default_headimg", $upload_config_result[ 'head' ]);
+
+            // 门店列表
+            $store_model = new Store();
+            $store_list = $store_model->getStoreList([ [ 'site_id', "=", $this->site_id ], [ 'is_frozen', '=', 0 ] ], 'store_id,store_name', 'store_id desc')[ 'data' ];
+            $this->assign('store_list', $store_list);
+
+            return $this->fetch("verify/add_user");
+        }
+    }
+
+    /**
+     * 编辑核销人员
+     * @return mixed
+     */
+    public function editUser()
+    {
+        $verifier_id = input("verifier_id", 0);//核销员id
+        $model = new Verifier();
+
+        if (request()->isAjax()) {
+            $verifier_name = input("verifier_name", "");
+            $member_id = input("member_id", 0);//会员账号
+            $verifier_type = input('verifier_type', 0);//核销员类型:0平台核销员,1门店核销员
+            $store_id = input('store_id', 0);//门店ID
+            $data = [
+                'verifier_name' => $verifier_name,
+                'member_id' => $member_id,
+                'uid' => 0,
+                'verifier_type' => $verifier_type,
+                'store_id' => $verifier_type == 1 ? $store_id : 0
+            ];
+            $condition = array (
+                [ 'verifier_id', '=', $verifier_id ],
+                [ 'site_id', '=', $this->site_id ],
+            );
+
+            $result = $model->editVerifier($data, $condition);
+            return $result;
+        } else {
+            $this->assign("verifier_id", $verifier_id);
+
+            //用户信息
+            $info = $model->getVerifierInfo([
+                [ "verifier_id", "=", $verifier_id ],
+                [ "site_id", "=", $this->site_id ],
+            ])[ 'data' ];
+
+            if (empty($info)) $this->error('未获取到核销员数据', addon_url('shop/verify/user'));
+
+            $info[ "member_name" ] = '';
+            if (!empty($info[ "member_id" ])) {
+                $member_model = new Member();
+                $member_info = $member_model->getMemberInfo([ [ "member_id", "=", $info[ "member_id" ] ] ], "username")[ "data" ];
+                $info[ "member_name" ] = $member_info[ "username" ];
+            }
+
+            if ($info[ 'verifier_type' ] == 1) {
+                // 门店列表
+                $store_model = new Store();
+                $store = $store_model->getStoreInfo([ [ 'store_id', '=', $info[ 'store_id' ] ] ], 'store_name')[ 'data' ];
+                $info[ 'store_name' ] = $store[ 'store_name' ];
+            }
+
+            $this->assign("data", $info);
+
+            $upload_config_model = new ConfigModel();
+            $upload_config_result = $upload_config_model->getDefaultImg($this->site_id, $this->app_module)[ 'data' ][ 'value' ];
+            $this->assign("default_headimg", $upload_config_result[ 'head' ]);
+
+            // 门店列表
+            $store_model = new Store();
+            $store_list = $store_model->getStoreList([ [ 'site_id', "=", $this->site_id ], [ 'is_frozen', '=', 0 ] ], 'store_id,store_name', 'store_id desc')[ 'data' ];
+            $this->assign('store_list', $store_list);
+
+            return $this->fetch("verify/edit_user");
+        }
+
+    }
+
+    /**
+     * 删除核销人员
+     * @return mixed
+     */
+    public function deleteUser()
+    {
+        if (request()->isAjax()) {
+            $verifier = new Verifier();
+            $verifier_id = input('ids', 0);
+            $res = $verifier->deleteVerifier($verifier_id, $this->site_id);
+            return $res;
+        }
+    }
+
+    /**
+     * 核销
+     */
+    public function verify()
+    {
+        $info = array (
+            "verifier_id" => $this->uid,
+            "verifier_name" => $this->user_info[ 'username' ],
+            "verify_from" => 'shop'
+        );
+        $verify_code = input("verify_code", "");
+        $verify_model = new VerifyModel();
+        $res = $verify_model->verify($info, $verify_code);
+        return $res;
+    }
+
+    /**
+     * 搜索会员
+     * 不是菜单 不入权限
+     */
+    public function searchMember()
+    {
+        if (request()->isAjax()) {
+            $search_text = input('search_text', '');
+            $member_model = new Member();
+            $member_info = $member_model->getMemberInfo([ [ 'username|mobile', '=', $search_text ], [ 'site_id', '=', $this->site_id ] ]);
+            return $member_info;
+        }
+    }
+
+    /**
+     * 核销记录导出
+     */
+    public function exportVerify()
+    {
+        $verify_model = new VerifyModel();
+        $page = input('page', 1);
+        $page_size = 0;
+        $order = input("order", "create_time desc");
+        $verify_type = input('verify_type', "");//验证类型
+        $verify_code = input('verify_code', "");//验证码
+        $verifier_name = input('verifier_name', "");
+        $start_time = input("start_time", '');
+        $end_time = input("end_time", '');
+
+        $condition = [
+            [ 'site_id', "=", $this->site_id ],
+            [ 'is_verify', '=', 1 ]
+        ];
+        if (!empty($verify_type)) {
+            $condition[] = [ "verify_type", "=", $verify_type ];
+        }
+        if (!empty($verify_code)) {
+            $condition[] = [ "verify_code", 'like', '%' . $verify_code . '%' ];
+        }
+        if (!empty($verifier_name)) {
+            $condition[] = [ 'verifier_name', 'like', '%' . $verifier_name . '%' ];
+        }
+        if (!empty($start_time) && empty($end_time)) {
+            $condition[] = [ 'verify_time', '>=', date_to_time($start_time) ];
+        } elseif (empty($start_time) && !empty($end_time)) {
+            $condition[] = [ "verify_time", "<=", date_to_time($end_time) ];
+        } elseif (!empty($start_time) && !empty($end_time)) {
+            $condition[] = [ 'verify_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
+        }
+        $list_result = $verify_model->getVerifyPageList($condition, $page, $page_size, $order, $field = 'id, verify_code, verify_type, verify_type_name, verify_content_json, verifier_id, verifier_name, is_verify, create_time, verify_time');
+        $list = $list_result[ 'data' ][ 'list' ];
+
+        // 实例化excel
+        $phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
+
+        $phpExcel->getProperties()->setTitle("核销记录");
+        $phpExcel->getProperties()->setSubject("核销记录");
+        //单独添加列名称
+        $phpExcel->setActiveSheetIndex(0);
+
+        $phpExcel->getActiveSheet()->setCellValue("A1", '核销码');
+        $phpExcel->getActiveSheet()->setCellValue("B1", '核销类型');
+        $phpExcel->getActiveSheet()->setCellValue("C1", '核销员');
+        $phpExcel->getActiveSheet()->setCellValue("D1", '状态');
+        $phpExcel->getActiveSheet()->setCellValue("E1", '创建时间');
+        $phpExcel->getActiveSheet()->setCellValue("F1", '核销时间');
+
+        if (!empty($list)) {
+            foreach ($list as $k => $v) {
+                $start = $k + 2;
+                $phpExcel->getActiveSheet()->setCellValue('A' . $start, $v[ 'verify_code' ] . "\t");
+                $phpExcel->getActiveSheet()->setCellValue('B' . $start, $v[ 'verify_type_name' ] . "\t");
+                $phpExcel->getActiveSheet()->setCellValue('C' . $start, $v[ 'verifier_name' ] . "\t");
+                if ($v[ 'is_verify' ] == 1) {
+                    $verify_status = "已核销";
+                } else {
+                    $verify_status = "尚未核销";
+                }
+                $phpExcel->getActiveSheet()->setCellValue('D' . $start, $verify_status . "\t");
+                $phpExcel->getActiveSheet()->setCellValue('E' . $start, time_to_date($v[ 'create_time' ]) . "\t");
+                $phpExcel->getActiveSheet()->setCellValue('F' . $start, time_to_date($v[ 'verify_time' ]) . "\t");
+            }
+        }
+
+        // 重命名工作sheet
+        $phpExcel->getActiveSheet()->setTitle('核销记录');
+        // 设置第一个sheet为工作的sheet
+        $phpExcel->setActiveSheetIndex(0);
+        // 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
+        $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
+        $file = date('Y年m月d日-核销记录', time()) . '.xlsx';
+        $objWriter->save($file);
+
+        header("Content-type:application/octet-stream");
+
+        $filename = basename($file);
+        header("Content-Disposition:attachment;filename = " . $filename);
+        header("Accept-ranges:bytes");
+        header("Accept-length:" . filesize($file));
+        readfile($file);
+        unlink($file);
+        exit;
+    }
+}

+ 0 - 1
app/shopapi/controller/Order.php

@@ -96,7 +96,6 @@ class Order extends BaseApi
             [ "o.site_id", "=", $this->site_id ],
             [ 'o.is_delete', '=', 0 ]
         ];
-
         //订单状态
         if ($order_status != "") {
             if ($order_status != 'refunding') {