<?php

/**
 * 控制器:后台系统-订单管理-控制器
 * date:2019-08-31
 */

namespace app\modules\manage\v1\controllers;

use app\modules\common\Helper;
use app\modules\logic\model\OrderModel;
use app\modules\logic\model\UsersModel;
use app\modules\logic\model\OrderInfoModel;
use app\modules\logic\services\OrderService;
use app\modules\logic\services\AssignService;
use Yii;
use yii\web\Controller;

class OrderController extends MiddleController {
	/**
	 * 返回
	 * @param $code
	 * @param string $info
	 * @param string $controller
	 * @param string $total
	 */
	protected function response($code, $info = '', $total = '', $controller = 'order') {
		return parent::response($code, $info, $total, $controller);
	}
	/**
	 * [actionList 订单列表]
	 * @apiDoc
	 * @api     v1/order/list
	 * @group   order
	 * @name    订单列表
	 * @desc    后台管理-订单管理-订单列表
	 * @method  POST
	 * @param currentPage string 当前页 noreq 1
	 * @param pageSize string 每页条数 noreq 15
	 * @param status string 订单状态 noreq
	 * @param nid string 订单号 noreq
	 * @param addtime_from string 查询时间【开始】 noreq
	 * @param addtime_to string 查询时间【结束】 noreq
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		"code": "000000",
		"msg": "操作成功",
		"total": "31",
		"info": [
		{
		    "order_id": "31",
		    "nid": "ORD2019103119104111c13ccd7db0130",
		    "price": "0.01",
		    "re_user_id": "1",
		    "status": "已取消",
		    "fore_time": "2019-10-31 21:10:41",
		    "sp_time": "2019-10-31 19:10:41",
		    "bill_status": "0",
		    "shop_user_id": "49",
		    "plate_no": "川A09V49",
		    "pro_extra": "美容-保养",
		    "tech_base": {
		        "realname": "",
		        "mobile": "18980647855"
		    },
		    "shop_name": "众合汽修"
		},
		{
		    "order_id": "30",
		    "nid": "ORD2019103117191551a199a9135424f",
		    "price": "650.00",
		    "re_user_id": "1",
		    "status": "待付款",
		    "fore_time": "2019-10-31 19:19:15",
		    "sp_time": "2019-10-31 17:19:15",
		    "bill_status": "0",
		    "shop_user_id": "38",
		    "plate_no": "川A09V4V",
		    "pro_extra": "美容-保养 精准抛光2 精准抛光5",
		    "tech_base": {
		        "realname": "",
		        "mobile": "18980647855"
		    },
		    "shop_name": ""
		},
		{
		    "order_id": "29",
		    "nid": "ORD201910311614007cc334cd9d53298",
		    "price": "0.01",
		    "re_user_id": "0",
		    "status": "已取消",
		    "fore_time": "2019-10-31 18:14:00",
		    "sp_time": "2019-10-31 16:14:00",
		    "bill_status": "0",
		    "shop_user_id": "49",
		    "plate_no": "川A09V4V",
		    "pro_extra": "美容-保养",
		    "tech_base": [],
		    "shop_name": "众合汽修"
		}
		]
		}
	 */
	public function actionList(){
		$_where = "";
		//$_where .= " and p1.type= 'tech' ";
        if (isset($this->para['status']) && $this->para['status']!='all' && $this->para['status']!=6) {
            $_where .= " and p1.status= '" . $this->para['status'] . "' ";
        }
        if(isset($this->para['status']) && $this->para['status']==6){
        	$_where .= " and p1.abn_status>0 ";
        }
        if (isset($this->para['nid'])) {
            $_where .= " and p1.nid= '" . $this->para['nid'] . "' ";
        }
        if (!empty($this->para['addtime_from'])) {
            $_where .= " and p1.sp_time>= '" . strtotime($this->para['addtime_from']) . "' ";
        }
        if (!empty($this->para['addtime_to'])) {
            $_where .= " and p1.sp_time<= '" . strtotime($this->para['addtime_to']) . "' ";
        }
        $currentPage = 1;
        $pageSize = 15;
        if (isset($this->para['currentPage']) && !empty($this->para['currentPage']) && is_numeric($this->para['currentPage'])) {
            $currentPage = $this->para['currentPage'];
        }
        if (isset($this->para['pageSize']) && !empty($this->para['pageSize']) && is_numeric($this->para['pageSize'])) {
            $pageSize = $this->para['pageSize'];
        }

        $limit_start = ($currentPage - 1) * $pageSize;
        $_limit = " limit " . $limit_start . " , " . $pageSize;
        $_order = " order by p1.order_id desc";
        /*数据库链接*/
        $conn = Yii::$app->db;
        //记录总数
        $sql_total = "select count(1) as total_num from {{%order}} as p1 left join {{%order_info}} as p2  on p1.order_id=p2.order_id where 1  " . $_where;
        $cmd_total = $conn->createCommand($sql_total);
        $res_total = $cmd_total->queryOne();
        $total_records = $res_total['total_num'];
        $select = "p1.order_id,p1.nid,p1.price,re_user_id,p1.status,p1.fore_time,p1.sp_time,p1.bill_status,p1.shop_user_id,p1.confirm_time,p2.plate_no,p2.pro_extra";
        //当前记录
        $sql = "select ".$select." from {{%order}} as p1 left join {{%order_info}} as p2  on p1.order_id=p2.order_id where 1 " . $_where . $_order . $_limit;
        $cmd = $conn->createCommand($sql);
        $data = $cmd->queryAll();
        foreach ($data as &$value) {
        	$value['tech_base'] = Helper::getUsersBase($value['re_user_id']);
        	$value['fore_time'] = !empty($value['fore_time'])?date("Y-m-d H:i:s",$value['fore_time']):'';
        	$value['sp_time'] = !empty($value['sp_time'])?date("Y-m-d H:i:s",$value['sp_time']):'';
        	$value['pro_extra'] = Helper::getProExtraNameById($value['pro_extra']);
        	$value['status'] = Helper::getOrderSta($value['status']);
        	$value['shop_name'] = Helper::getShopName($value['shop_user_id']);
        }
 		$conn->close();
        return $this->response('search_succ', $data, $total_records);
	}
	/**
	 * [actionDetail 订单详情]
	 * @apiDoc
	 * @api     v1/order/detail
	 * @group   order
	 * @name    订单详情
	 * @desc    管理后台-订单管理-订单详情
	 * @method  POST
	 * @param order_id int 订单ID req
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		 {
		"code": "000000",
		"msg": "操作成功",
		"info": {
		    "base": {
		        "plate_no": "川A12356",
		        "carmodel_id": "越野车",
		        "pro_extra": "美容-保养"
		    },
		    "order_info": {
		        "nid": "201909132334265050535098426",
		        "sp_time": "2019-09-13 23:34:26",
		        "fore_time": "-",
		        "realname": "",
		        "mobile": "15067462246",
		        "shop_name": "众合汽修",
		        "shop_address": "成都市新光路99号",
		        "shop_phone": "082",
		        "zd_shop_tel": "18980647855"
		    },
		    "cons_info": {
		        "re_time": "-",
		        "reach_time": "-",
		        "star_work_time": "-",
		        "comp_time": "-",
		        "confirm_time": "-",
		        "work_total": "-"
		    },
		    "tech_info": {
		        "name": "-",
		        "mobile": "-",
		        "level": "-",
		        "star_level": "-"
		    },
		    "pay_info": {
		        "total_price": "18.00",
		        "offer_money": "0.00",
		        "pay_money": "10.00"
		    },
		    "complex_info": {
		        "order_id": "1",
		        "nid": "201909132334265050535098426",
		        "sp_user_id": "2",
		        "re_user_id": "0",
		        "sp_time": "1568388866",
		        "fore_time": "0",
		        "assign_time": "0",
		        "re_time": "0",
		        "status": "5",
		        "abn_status": "0",
		        "remark": null,
		        "settle_status": "0",
		        "type": "1",
		        "old_type": "1",
		        "price": "18.00",
		        "pay_time": "1569912826",
		        "reach_time": "0",
		        "star_work_time": "0",
		        "comp_time": "0",
		        "confirm_time": "0",
		        "depa_time": "0",
		        "next_cons_time": "0",
		        "bill_status": "1",
		        "is_del": "0",
		        "shop_user_id": "3"
		    },
		    "comment_info": []
		}
		}
	 */
	public function actionDetail(){
		if (empty($this->para['order_id']) || !is_numeric($this->para['order_id'])) {
            return $this->response('para_miss', '订单ID不能为空');
        }
        $data = OrderService::getOrMoreDtl($this->para['order_id']);
        return $this->response('deal_succ', $data);
	}
	/**
	 * [actionMlorder 手动派单]
	 * @apiDoc
	 * @api    v1/order/mlorder
	 * @group  order
	 * @name   手动派单
	 * @desc   管理后台-待派单列表-手动派单
	 * @method POST
	 * @param order_id int 订单ID req
	 * @param user_id int 技师ID req
	 * @return json
		{
			"code": "000000",
			"msg": "操作成功",
			"info": true
		}
	 */
	public function actionMlorder(){
		if (empty($this->para['order_id']) || !is_numeric($this->para['order_id'])) {
            return $this->response('para_miss', '订单ID不能为空');
        }
        if (empty($this->para['user_id']) || !is_numeric($this->para['user_id'])) {
            return $this->response('para_miss', '技师ID不能为空');
        }
		$Order = new OrderModel();
		//开始派单
		$res = $Order->saveUs(['re_user_id'=>$this->para['user_id'],'assign_time'=>time()],$this->para['order_id']);
		//派单成功锁定技师接单
		if($res){
			//$distance =  Helper::calcDistance($shop_place['latitude'],$shop_place['longitude'],$value['latitude'],$value['longitude']);
			AssignService::orderPushTech($this->para['order_id'],$this->para['user_id'],5000);
			AssignService::lockRece($this->para['user_id']);
		}
		return $this->response('deal_succ', $res);
	}
	/**
	 * [actionDwabn 处理异常]
	 * @apiDoc
	 * @api    v1/order/dwabn
	 * @group  order
	 * @name   处理异常
	 * @desc   管理后台-异常订单列表-处理异常
	 * @method POST
	 * @param order_id int 订单ID req
	 * @param rework string 返工扣费 req
	 * @return json
	 	{
			"code": "000000",
			"msg": "操作成功",
			"info": true
		}
	 */
	public function actionDwabn(){
		if (empty($this->para['order_id']) || !is_numeric($this->para['order_id'])) {
            return $this->response('para_miss', '订单ID不能为空');
        }
        $order_id = $this->para['order_id'];
        $Order = new OrderModel();
        $row = $Order->getWidgetRow(['cols'=>['shop_user_id','sp_user_id','status','re_user_id','re_time'],'order_id'=>$order_id]);
		if($row['status']!=6){
			return $this->response('para_miss', '该订单不处于异常情况下');
		}
        //清除派单痕迹
		AssignService::unlockRece($row['re_user_id']);
		//开始结算
		
		//结算结束
		$res = $Order->saveUs(['status'=>5,'settle_status'=>1],$order_id);
		//结算-修改状态
		return $this->response('deal_succ', $res);
	}
	/**
	 * [actionGetnbtech 获取门店附近技师]
	 * @apiDoc
	 * @api    v1/order/getnbtech
	 * @group  order
	 * @name   获取门店附近技师
	 * @desc   管理后台-待派单列表-手动派单-选择技师
	 * @method POST
	 * @param shop_user_id int 门店ID【订单列表中获取】 req
	 * @return json
	 {
	    "code": "000000",
	    "msg": "操作成功",
	    "info": [
	        {
	            "user_id": "108",
	            "realname": xx,
	            "mobile": "13710001003"
	        },
	        {
	            "user_id": "113",
	            "realname": ee,
	            "mobile": "13710001002"
	        },
	        {
	            "user_id": "114",
	            "realname": bb,
	            "mobile": "13710001001"
	        }
	    ]
	}
	 */
	public function actionGetnbtech(){
		if (empty($this->para['shop_user_id']) || !is_numeric($this->para['shop_user_id'])) {
            return $this->response('para_miss', '门店ID不能为空');
        }
        //获取门店省市
        $arr_area = Helper::getAreaByUid($this->para['shop_user_id']);
        //查找省市的空闲技师
        $User = new UsersModel();
		$t_were =[
			'type'=>'tech',
			'online_status'=>1,
			'prov_id'=>$arr_area['prov_id'],
			'city_id'=>$arr_area['city_id'],
			'cols'=>['user_id','realname','mobile'],
		];
		$rows = $User->getWidgetRows($t_were);
        //返回技师信息
        return $this->response('deal_succ', $rows);
	}
}
