<?php

namespace Admin\Controller;

use User\Api\UserApi as UserApi;
use Think\Controller;

/**
 * 订单控制器
 *
 * @author 鹿文学
 */
class OrderController extends ThinkController
{

    const model_name = 'Order';

    /**
     * 订单列表
     */
    public function lists()
    {

        if (!empty($_REQUEST['order_number'])) {
            $extend['order_number'] = array('like', '%' . $_REQUEST['order_number'] . '%');
        }
        if (!empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) {
            $extend['order_time'] = array('between', [strtotime($_REQUEST['timestart']), strtotime($_REQUEST['timeend']) + 86399]);
        } elseif (!empty($_REQUEST['timestart']) && empty($_REQUEST['timeend'])) {
            $extend['order_time'] = array('between', [strtotime($_REQUEST['timestart']), time()]);
        } elseif (empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) {
            $extend['order_time'] = array('elt', (strtotime($_REQUEST['timeend']) + 86399));
        }
        if (is_numeric($_REQUEST['game_id']) && $_REQUEST['game_id'] > 0) {
            $extend['m.game_id'] = $_REQUEST['game_id'];
        }
        if (is_numeric($_REQUEST['pay_status'])) {
            if (intval($_REQUEST['pay_status']) == 2) {
                $extend['pay_status'] = 0;
                $extend['order_time'] = array('lt', time() - 1800);
            } elseif (intval($_REQUEST['pay_status']) == 0) {
                $extend['pay_status'] = $_REQUEST['pay_status'];
                $extend['order_time'] = array('egt', time() - 1800);
            } else {
                $extend['pay_status'] = $_REQUEST['pay_status'];
            }

        }
        if (!empty($_REQUEST['keyword'])) {
            $extend['game_name|title|server_name|small_account'] = array('like', '%' . $_REQUEST['keyword'] . '%');
        }

        $this->checkListOrCountAuthRestMap($map,[]);

        $extend['admin_status'] = 0;
        $this -> m_title = '订单列表';
        $this -> meta_title = '订单列表';
        $this -> assign('commonset', M('Kuaijieicon') -> where(['url' => 'Order/lists', 'status' => 1]) -> find());
        $data = D(self::model_name) -> lists($_GET['p'], $extend);
        $this -> assign('list_data', $data['data']);
        $this -> assign('_page', $data['page']);
        $this -> display();

    }

    public function del()
    {

        $this -> update_status(I('request.ids'), - 2);

    }

    /**
     * 订单状态
     */
    public function update_status($ids = '', $status = 0)
    {
        $ids = $ids ? $ids : I('request.ids');
        $field = 'pay_status';
        if (empty($ids)) {
            $this -> error('请选择要操作的数据');
        }
        $map['id'] = array('in', $ids);
        switch ($status) {
            case - 2 : /* 删除 */
                $data = ['admin_status' => 1];
                $msg = array('success' => '删除成功', 'error' => '删除失败');
                break;
            case 0  : /* 禁用 */
                $data = [$field => 0];
                $msg = array('success' => '禁用成功', 'error' => '禁用失败');
                break;
            case 1  : /* 成功 */
                $data = [$field => 1];
                $msg = array('success' => '交易成功', 'error' => '交易失败');
                break;
            case 2  : /* 驳回/拒绝 */
                $data = [$field => 2];
                $msg = array('success' => '取消成功', 'error' => '取消失败');
                break;
            case 3  :
                $data = ['send_time' => time()];
                $msg = array('success' => '发货成功', 'error' => '发货失败');
                break;
            case 4  :
                $data = ['is_refund' => 1, 'pay_status' => 2];
                $msg = array('success' => '退款成功', 'error' => '退款失败');
                break;
            case 5  :/* 补单 */
                $orderModel = D(self::model_name);
                $result = $orderModel->field('id, merchandise_id, seller_id')->where($map)->select();
                $newIds = null;
                $refundIds = null;
                foreach ($result as $key => $value) {
                    $extend = array(
                        'pay_time'=>['gt', 0],
                        'seller_id'=>$value['seller_id'],
                        'merchandise_id'=>$value['merchandise_id'],
                        'id'=>['neq', $value['id']]
                    );
                    $orderData = $orderModel->field('id')->where($extend)->find();
                    if(empty($orderData)) {
                        $newIds[] = $value['id'];
                    } else {
                        $refundIds[] = $value['id'];
                    }
                }
                if(!empty($refundIds)) {
                    $orderModel->where(['id'=>['in',$refundIds]])->save(['is_refund'=>2]);
                }
                if(empty($newIds)) {
                    $this->error('补单失败,此商品已出售', U('lists'));
                }

                $map['id'] = ['in', $newIds];
                $data = ['pay_time' => time(), 'pay_status' => 1];
                $msg = array('success' => '补单成功', 'error' => '补单失败');
                break;
            default :
                $this -> error('参数错误');
                break;
        }
        $user = D('User');
        if (D(self::model_name) -> where($map) -> save($data) !== false) {
            switch ($status) {
                case 3 :
                    {
                        $order = D(self::model_name) -> field('merchandise_id,real_money,seller_id,buyer_id,order_small_id') -> where(['id' => $ids]) -> find();
                        D('Merchandise') -> where(['id' => $order['merchandise_id']]) -> save(['over_time' => time(), 'status' => 1]);
                        $buyer = $user -> field('promote_id,promote_account,parent_id,parent_name') -> where(['id' => $order['buyer_id']]) -> find();
                        $user -> where(['id' => $order['order_small_id']]) -> save(['puid' => $order['buyer_id'], 'source_time' => time(), 'promote_id' => $buyer['promote_id'], 'promote_account' => $buyer['promote_account'], 'parent_id' => $buyer['parent_id'], 'parent_name' => $buyer['parent_name']]);
                        $gold_coin = $user -> field('gold_coin') -> where(['id' => $order['seller_id']]) -> find();
                        $user -> where(['id' => $order['seller_id']]) -> save(['gold_coin' => $gold_coin['gold_coin'] + $order['real_money']]);
                    };
                    break;
            }
            $this -> success($msg['success'], '', IS_AJAX);
        } else {
            $this -> error($msg['error'], '', IS_AJAX);
        }

    }


}