<?php
/**
 * Created by PhpStorm.
 * User: 29925
 * Date: 2018/8/16
 * Time: 14:14
 */

namespace app\admin\controller;

use app\admin\model\OrderModel;
use cmf\controller\AdminBaseController;
use think\Db;

class OrderController extends AdminBaseController
{

    protected $table;
    protected $order_model;
    protected $option_table;
    protected $sort_model;
    public function _initialize()
    {
        $this->table = 'Order';
        $this->order_model = new OrderModel();
        $this->option_table = 'OrderOption';
        
        $this->sort_model[1] = '<div class="text_item form_options" data-validate="{validate}">
            <p class="text_tit"><span class=" _validate">{name}</span>{must}</p>
            <input type="text" name="" id="" value="{value}" class="baby_input" placeholder="请输入{name}" />
        </div>';
        $this->sort_model[2] = '<div class="text_item form_options" data-validate="{validate}">
            <p class="text_tit"><span class=" _validate">{name}</span>{must}</p>
            <input type="number" name="" id="" value="{value}" class="baby_input" placeholder="请输入{name}" />
        </div>';
        $this->sort_model[3] = '<div class="text_item form_options" data-validate="{validate}">
            <p class="text_tit"><span class=" _validate">{name}</span>{must}</p>
            <input type="number" maxlength="11" name="" id="" value="{value}" class="baby_input" placeholder="请输入{name}" />
        </div>';
        $this->sort_model[4] = '<div class="write_tit form_options" data-validate="{validate}">
            <p class="tit"><span class=" _validate">{name}</span></p>
            <div class="flex_style">
                {options}
            </div>
        </div>';
        $this->sort_model[5] = '<div class="text_item form_options" data-validate="{validate}">
            <p class="text_tit"><span class=" _validate">{name}</span>{must}</p>
            <input type="text" name="" id="" value="{value}" class="baby_input" placeholder="请输入{name}" />
        </div>';
        $this->sort_model[6] = '<div class="text_item form_options" data-validate="{validate}">
            <p class="text_tit"><span class=" _validate">{name}</span>{must}</p>
            <textarea class="baby_input">{value}</textarea>
        </div>';
        $this->sort_model[7] = '<div class="text_item form_options" data-validate="{validate}">
            <p class="text_tit"><span class=" _validate">{name}</span>{must}</p>
            <input type="text" name="" id="product" value="{value}" class="baby_input" placeholder="请选择{name}" />
            <img src="__TMPL__/public/mobile/images/youjiantou.png" class="jiantou" />
        </div>';
        $this->sort_model[8] = '<div class="write_wrap" style="margin: 0;" data-validate="{validate}">
					<p class="text_tit" style="line-height: 0.6rem;"><span class=" _validate">{name}</span>{must}</p>
				</div>
		<div class="up_wrap form_options">
            <div class="up_pic">
                <i class="iconfont icon-msnui-cloud-upload"></i>
                <p class="click_up">点击上传</p>
            </div>
        </div>';
        $this->sort_model[10] = '<div class="text_item no_margin form_options" data-validate="{validate}">
            <p class="text_tit"><span class=" _validate">{name}</span>{must}</p>
            <input type="text" name="" id="birthday" readonly="readonly" value="{value}" class="baby_input" placeholder="请选择{name}" />
            <img src="__TMPL__/public/mobile/images/youjiantou.png" class="jiantou" />
        </div>';
        $this->sort_model[11] = '<div class="text_item form_options" data-validate="{validate}">
            <p class="text_tit"><span class=" _validate">{name}</span>{must}</p>
            <weui-distpicker province="广东省" city="广州市" area="海珠区"></weui-distpicker>
            <input type="text" name="" id="address" readonly="readonly" value="{value}" class="baby_input" placeholder="请输入{name}" />
            <img src="__TMPL__/public/mobile/images/youjiantou.png" class="jiantou" />
        </div>';
    }

    /**
     * 电子订单列表
     * @adminMenu(
     *     'name'   => '电子订单列表',
     *     'parent' => 'admin/OrderOption/default',
     *     'display'=> true,
     *     'hasView'=> true,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '电子订单列表',
     *     'param'  => ''
     * )
     */
    public function index() {
        $param = $this->request->param();
        $where = [
            'delete_time'=>0
        ];
        if(isset($param['keyword'])) {
            $where['order_sn|sort_name|user_login|number'] = ['like','%'.$param['keyword'].'%'];
        }
        if(!empty($param['sort_id'])) {
            $where['sort_id'] = $param['sort_id'];
        }
        if(isset($param['status']) && $param['status'] >= 0) {
            $where['status'] = $param['status'];
        }
        if(isset($param['is_excel']) && $param['is_excel'] >= 0) {
            $where['is_excel'] = $param['is_excel'];
        }
        if(isset($param['is_over']) && $param['is_over'] >= 0) {
            if($param['is_over'] == 0) {
                $where['over_time'] = ['egt',time()];
            }
            if($param['is_over'] == 1) {
                $where['over_time'] = ['lt',time()];
            }
        }
        $startTime = empty($param['start_time']) ? 0 : strtotime($param['start_time']);
        $endTime   = empty($param['end_time']) ? 0 : strtotime($param['end_time']);
        if (!empty($startTime) && !empty($endTime)) {
            $where['create_time'] = [['>= time', $startTime], ['<= time', $endTime]];
        } else {
            if (!empty($startTime)) {
                $where['create_time'] = ['>= time', $startTime];
            }
            if (!empty($endTime)) {
                $where['create_time'] = ['<= time', $endTime];
            }
        }
        $list = Db::name('order_view')->where($where)->paginate(10);
        $list->appends($param);
        $this->assign('list',$list->items());
        $this->assign('page',$list->render());
        $this->assign('keyword',isset($param['keyword']) ? $param['keyword'] : '');
        $this->assign('sort_id',isset($param['sort_id']) ? $param['sort_id'] : '');
        $this->assign('status',isset($param['status']) ? $param['status'] : '');
        $this->assign('is_excel',isset($param['is_excel']) ? $param['is_excel'] : '');
        $this->assign('is_over',isset($param['is_over']) ? $param['is_over'] : '');
        $this->assign('start_time',isset($param['start_time']) ? $param['start_time'] : '');
        $this->assign('end_time',isset($param['end_time']) ? $param['end_time'] : '');
        // 订单类型
        $sortList = Db::name('OrderSort')->where(['delete_time'=>0])->select()->toArray();
        $this->assign('sortList',$sortList);
        return $this->fetch();
    }

    /**
     * 电子订单列表(表单类型下)
     * @adminMenu(
     *     'name'   => '电子订单列表',
     *     'parent' => 'admin/OrderSort/index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 1,
     *     'icon'   => '',
     *     'remark' => '电子订单列表(表单类型下)',
     *     'param'  => ''
     * )
     */
    public function index_sort() {
        $param = $this->request->param();
        $where = [
            'delete_time'=>0
        ];
        if(empty($param['sort_id'])) {
            $this->error('参数错误');
        }
        $where['sort_id'] = $param['sort_id'];
        if(isset($param['keyword'])) {
            $where['sort_name'] = ['like','%'.$param['keyword'].'%'];
        }
        $startTime = empty($filter['start_time']) ? 0 : strtotime($filter['start_time']);
        $endTime   = empty($filter['end_time']) ? 0 : strtotime($filter['end_time']);
        if (!empty($startTime) && !empty($endTime)) {
            $where['create_time'] = [['>= time', $startTime], ['<= time', $endTime]];
        } else {
            if (!empty($startTime)) {
                $where['create_time'] = ['>= time', $startTime];
            }
            if (!empty($endTime)) {
                $where['create_time'] = ['<= time', $endTime];
            }
        }
        $list = Db::name('order_view')->where($where)->paginate(10);
        $list->appends($param);
        $this->assign('list',$list->items());
        $this->assign('page',$list->render());
        $this->assign('keyword',isset($param['keyword']) ? $param['keyword'] : '');
        $this->assign('sort_id',$param['sort_id']);
        // 订单类型
        $sortList = Db::name('OrderSort')->where(['delete_time'=>0])->select()->toArray();
        $this->assign('sortList',$sortList);
        return $this->fetch();
    }

    /**
     * 电子订单列表(销售人员下)
     * @adminMenu(
     *     'name'   => '电子订单列表',
     *     'parent' => 'admin/OrderSort/index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 2,
     *     'icon'   => '',
     *     'remark' => '电子订单列表(销售人员下)',
     *     'param'  => ''
     * )
     */
    public function index_sales() {
        $param = $this->request->param();
        $where = [
            'delete_time'=>0
        ];
        if(empty($param['user_id'])) {
            $this->error('参数错误');
        }
        $where['user_id'] = $param['user_id'];
        if(isset($param['keyword'])) {
            $where['order_sn|sort_name|user_login|number'] = ['like','%'.$param['keyword'].'%'];
        }
        $startTime = empty($filter['start_time']) ? 0 : strtotime($filter['start_time']);
        $endTime   = empty($filter['end_time']) ? 0 : strtotime($filter['end_time']);
        if (!empty($startTime) && !empty($endTime)) {
            $where['create_time'] = [['>= time', $startTime], ['<= time', $endTime]];
        } else {
            if (!empty($startTime)) {
                $where['create_time'] = ['>= time', $startTime];
            }
            if (!empty($endTime)) {
                $where['create_time'] = ['<= time', $endTime];
            }
        }
        $list = Db::name('order_view')->where($where)->paginate(10);
        $list->appends($param);
        $this->assign('list',$list->items());
        $this->assign('page',$list->render());
        $this->assign('keyword',isset($param['keyword']) ? $param['keyword'] : '');
        $this->assign('user_id',$param['user_id']);
        // 订单类型
        $sortList = Db::name('OrderSort')->where(['delete_time'=>0])->select()->toArray();
        $this->assign('sortList',$sortList);
        return $this->fetch();
    }

    /**
     * 用户数据导出
     * @adminMenu(
     *     'name'   => '用户数据导出',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 3,
     *     'icon'   => '',
     *     'remark' => '用户数据导出',
     *     'param'  => ''
     * )
     */
    public function excel()
    {
        $param = $this->request->param();
        $where = [
            'delete_time'=>0
        ];
        if(!empty($param['ids'])) {
            $where['id'] = ['in',$param['ids']];
        }
        if(isset($param['keyword'])) {
            $where['order_sn|sort_name|user_login|number'] = ['like','%'.$param['keyword'].'%'];
        }
        if(!empty($param['sort_id'])) {
            $where['sort_id'] = $param['sort_id'];
        }
        if(isset($param['status']) && $param['status'] >= 0) {
            $where['status'] = $param['status'];
        }
        if(isset($param['is_excel']) && $param['is_excel'] >= 0) {
            $where['is_excel'] = $param['is_excel'];
        }
        if(isset($param['is_over']) && $param['is_over'] >= 0) {
            if($param['is_over'] == 0) {
                $where['over_time'] = ['egt',time()];
            }
            if($param['is_over'] == 1) {
                $where['over_time'] = ['lt',time()];
            }
        }
        $startTime = empty($param['start_time']) ? 0 : strtotime($param['start_time']);
        $endTime   = empty($param['end_time']) ? 0 : strtotime($param['end_time']);
        if (!empty($startTime) && !empty($endTime)) {
            $where['create_time'] = [['>= time', $startTime], ['<= time', $endTime]];
        } else {
            if (!empty($startTime)) {
                $where['create_time'] = ['>= time', $startTime];
            }
            if (!empty($endTime)) {
                $where['create_time'] = ['<= time', $endTime];
            }
        }
        $list = Db::name('order_view')->where($where)->select()->toArray();
        $this->expList($list);
    }

    // 数据导出
    private function expList($array)
    {

        //导出Excel
        $objPHPExcel = new \PHPExcel();

        //Add some data
        $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'ID')
            ->setCellValue('B1', '订单号')
            ->setCellValue('C1', '订单类型')
            ->setCellValue('D1', '销售用户名')
            ->setCellValue('E1', '订单确认码')
            ->setCellValue('F1', '订单状态')
            ->setCellValue('G1', '收集状态')
            ->setCellValue('H1', '发布时间')
            ->setCellValue('I1', '失效时间');

        $i = 2;

        foreach ($array as $v) {
            $status = '未支付';
            if($v['status'] == 1) {
                $status = '已支付';
            }
            $is_stop = '收集中';
            if($v['is_stop'] == 1) {
                $is_stop = '已停止';
            }
            $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A' . $i, $v['id'])
                ->setCellValueExplicit('B' . $i, $v['order_sn'],\PHPExcel_Cell_DataType::TYPE_STRING)
//                ->setCellValueExplicit('B' . $i, $v['order_sn'],\PHPExcel_Cell_DataType::TYPE_STRING)
                ->setCellValue('C' . $i, $v['sort_name'])
                ->setCellValue('D' . $i, $v['user_login'])
                ->setCellValue('E' . $i, $v['number'])
                ->setCellValue('F' . $i, $status)
                ->setCellValue('G' . $i, $is_stop)
                ->setCellValue('H' . $i, date('Y-m-d H:i',$v['create_time']))
                ->setCellValue('I' . $i, date('Y-m-d H:i',$v['over_time']));
            $i++;
            Db::name('Order')->where(['order_sn'=>$v['order_sn']])->update(['is_excel'=>1,'excel_time'=>time()]);
        }

        $filename = '订单数据导出'. date('Y-m-d').'.xls';
        ob_end_clean();
        header("Content-type:application/vnd.ms-excel;charset=UTF-8");
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="' . $filename . '"');
        header('Cache-Control: max-age=0');
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
    }

    /**
     * 编辑订单
     * @adminMenu(
     *     'name'   => '编辑订单',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 4,
     *     'icon'   => '',
     *     'remark' => '编辑订单',
     *     'param'  => ''
     * )
     */
    public function edit() {
        $id = $this->request->param('id',0,'intval');
        if(!$id) {
            $this->error('参数错误');
        }
        $where = [
            'id' => $id,
            'delete_time'=>0
        ];
        $info = Db::name('order_view')->where($where)->find();
        $info['options'] = json_decode($info['options'],true);
        foreach ($info['options'] as $k=>$v) {
            $optionsInfo = $this->singleData($this->option_table,['id'=>$v['id']]);
            $v['name'] = $optionsInfo['name'];
            $v['html'] = $this->form_model($v);
            $info['group'][] = $v;
        }
        $this->assign($info);
        return $this->fetch();
    }

    // 处理订单模型数据
    private function form_model($formData) {
        $html = $this->sort_model[$formData['type']];
        $html = str_replace('{name}',$formData['name'],$html);
        if($formData['checked'] == 1) {
            $html = str_replace('{must}','*',$html);
            $html = str_replace('{validate}',1,$html);
        } else {
            $html = str_replace('{must}','',$html);
            $html = str_replace('{validate}',0,$html);
        }
        if(!empty($formData['values']) && $formData['values'] != null) {
            $array = explode(',',$formData['values']);
            $options = '';
            foreach ($array as $k=>$v) {
                $active = isset($formData['user_choose'])?($formData['user_choose']==$v?'active':''):($k==0?'active':'');
                $options .= '<p class="order_style '.$active.'">'.$v.'</p>';
            }
            $html = str_replace('{options}',$options,$html);
        }
        if(!empty($formData['user_choose'])) {
            $html = str_replace('{value}',$formData['user_choose'],$html);
        } else {
            $html = str_replace('{value}','',$html);
        }
        return $html;
    }

    /**
     * 修改订单收集状态
     * @adminMenu(
     *     'name'   => '修改订单收集状态',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 5,
     *     'icon'   => '',
     *     'remark' => '修改订单收集状态',
     *     'param'  => ''
     * )
     */
    public function stop()
    {
        $param           = $this->request->param();
        $msg = '';

        if (isset($param['ids']) && isset($param["is_stop"])) {
            $stop = $param["is_stop"];
            $ids = $this->request->param('ids/a');

            $this->order_model->where(['id' => ['in', $ids]])->update(['is_stop' => $stop, 'update_time' => time()]);

            if($stop == 0) {
                $msg = "开启收集成功!";
            }
            if($stop == 1) {
                $msg = "停止收集成功!";
            }
            $this->success($msg, '');

        }
        if (isset($param['id']) && isset($param["is_stop"])) {
            $stop = $param["is_stop"];
            $id = $this->request->param('id');

            $this->order_model->where(['id' => $id])->update(['is_stop' => $stop, 'update_time' => time()]);

            if($stop == 0) {
                $msg = "开启收集成功!";
            }
            if($stop == 1) {
                $msg = "停止收集成功!";
            }
            $this->success($msg,'');

        }
    }

    /**
     * 删除订单
     * @adminMenu(
     *     'name'   => '删除订单',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 6,
     *     'icon'   => '',
     *     'remark' => '删除订单',
     *     'param'  => ''
     * )
     */
    public function delete() {
        $id = $this->request->param('id',0,'intval');
        $ids = $this->request->param('ids/a');
        if(isset($id)) {
            $result = $this->order_model->where(['id'=>$id])->update(['delete_time'=>time()]);
        }
        if(isset($ids)) {
            $result = $this->order_model->where(['id'=>['in',$ids]])->update(['delete_time'=>time()]);
        }
        if(!$result) {
            $this->error('删除失败');
        }
        $this->success('删除成功');
    }
}