<?php
/**
 * 订单管理控制器
 */
namespace app\modules\shops\v1\controllers;
use app\modules\common\Helper;
use app\modules\common\Verify;
use app\modules\logic\services\UserService;
use app\modules\logic\services\OrderService;
use app\modules\logic\services\AccountService;
use app\modules\logic\model\OrderModel;
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);
	}
	/**
	 * [actionGetordersta 获取订单状态显示]
	 * @apiDoc
	 * @api     v1/order/getordersta
	 * @group   order
	 * @name    获取订单状态菜单
	 * @desc    订单管理-状态下拉
	 * @method  POST
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		"code": "000000",
		"msg": "获取成功",
		"info": {
		"all": "全部",
		"0": "待付款",
		"1": "待接单",
		"2": "待施工",
		"3": "施工中",
		"4": "待评论",
		"5": "已完成",
		"6": "异常订单"
		}
		}
	 */
	public function actionGetordersta(){
		$data = Helper::getOrderSta(0,true);
		return $this->response('deal_succ', '获取成功', $data);
	}
	/**
	 * [actionList 订单列表]
	 * @apiDoc
	 * @api     v1/order/list
	 * @group   order
	 * @name    订单列表
	 * @desc    门店APP-订单列表
	 * @method  POST
	 * @param status string 订单状态 req
	 * @param currentPage string 当前页 noreq 1
	 * @param pageSize string 每页条数 noreq 15
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		"code": "000000",
		"msg": "获取成功",
		"info": [
		{
		    "order_id": "1",
		    "status": "0",
		    "abn_status": "0",
		    "sp_time": "2019-09-13 23:34:26",//下单时间
		    "fore_time": "1970-01-01 08:00:00",//预计施工时间
		    "price": "0.01",
		    "type": "1",
		    "plate_no": "川A12356",
		    "pro_extra": "1",
		    "carmodel_id": "2",
		    "type_show": "实时单",
		    "pro_extra_show": {
		        "show_name": [
		            "美容-保养"
		        ],
		        "total": 1
		    },
		    "carmodel_id_show": "SUV",
		    "status_show": "待付款"
		}
		]
		}	 
	 */
	public function actionList(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        $order_user_arr = AccountService::shopAccout($this->user_id);
        $order_user_str = implode(',', $order_user_arr);
		$_where = "";
		$_where .= " and p1.shop_user_id in (".$order_user_str.") and p1.is_del=0 ";
        if (isset($this->para['status']) && in_array($this->para['status'], ['0','1','2','3','4','5','6','7'])) {
            $_where .= " and p1.status= '" . $this->para['status'] . "' ";
        }
        if(isset($this->para['status']) && $this->para['status']==6){
        	$_where .= " and p1.abn_status > 0 ";
        }
        $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;
        //记录总数
        $select = "p1.order_id,p1.status,p1.abn_status,p1.sp_time,p1.fore_time,p1.price,p1.cou_money,p1.type,p1.comp_time,p2.plate_no,p2.pro_extra,p2.carmodel_id";
        //当前记录
        $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['type_show']= Helper::getOrderTypeNameApp($value['type']);
        	$value['pro_extra_show']= Helper::getProExtraNameById($value['pro_extra'],true);
        	$value['carmodel_id_show']= Helper::getCarModelName($value['carmodel_id']);
        	$value['sp_time'] = date("Y-m-d H:i:s",$value['sp_time']);
        	$value['fore_time'] = date("Y-m-d H:i:s",$value['fore_time']);
        	$value['cf_red'] = 0;
        	if($value['status']==3 && $value['comp_time']>0){
        		$value['cf_red'] = 1;
        	}
        	if($value['abn_status']>0){
        		$value['status_show'] = '异常订单';
        	}else{
        		$value['status_show'] = Helper::getOrderSta($value['status']);
        	}
        	
        }
 		$conn->close();
 		return $this->response('deal_succ', '获取成功', $data);
	}
	/**
	 * [actionDetail 订单详情]
	 * @apiDoc
	 * @api     v1/order/detail
	 * @group   order
	 * @name    订单详情
	 * @desc    门店APP-订单详情-未完成
	 * @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": "1分店",
		    "shop_phone": "028-5655622",
		    "zd_shop_tel": "18980647855"
		},
		"cons_info": {
		    "re_time": "-",
		    "reach_time": "-",
		    "star_work_time": "-",
		    "comp_time": "-",
		    "confirm_time": "-",
		    "work_total": "-"
		},
		"tech_info": {
		    "name": "*三",
		    "mobile": "189****7855",
		    "level": "一级美容师",
		    "star_level": "0"
		},
		"pay_info": {
		    "total_price": "18.00",
		    "offer_money": "0.00",
		    "pay_money": "10.00"
		}
		}
		}
	 */
	public function actionDetail(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if (empty($this->para['order_id']) || !is_numeric($this->para['order_id'])) {
            return $this->response('para_miss', '订单ID不能为空');
        }
        $order_id = $this->para['order_id'];
        $data = OrderService::getOrMoreDtl($order_id);
        
        return $this->response('deal_succ', '获取成功', $data);
	}
	/**
	 * [actionDetail 取消订单]
	 * @apiDoc
	 * @api     v1/order/cancel
	 * @group   order
	 * @name    取消订单
	 * @desc    门店APP-订单列表-取消订单
	 * @method  POST
	 * @param  order_id int 订单ID req
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		"code": "000000",
		"msg": "取消成功",
		"info": ""
		}
	 * */
	public function actionCancel(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if (empty($this->para['order_id']) || !is_numeric($this->para['order_id'])) {
            return $this->response('para_miss', '订单ID不能为空');
        }
        $order_id = $this->para['order_id'];
        $res = OrderService::cancelOrder($order_id);
        if($res){
        	return $this->response('deal_succ', '取消成功');
        }else{
        	return $this->response('deal_false', '取消失败');
        }
	}
	/**
	 * [actionCancelbf 取消订单]
	 * @apiDoc
	 * @api    v1/order/cancelbf
	 * @group  order
	 * @name   取消订单v2
	 * @desc   门店APP-订单列表-取消订单v2
	 * @method POST
	 * @param  order_id int 订单ID req
	 * @return json
		{
			"code": "000000",
			"msg": "获取成功",
			"info": {
				"note": "亲：师傅正在火速赶来，您的订单已超出无责取消时间，取消需支付：0.33违约金，您是否确认取消订单？",
				"back_money": 0.33,
				"order_id": 11
			}
		}
		{
			"code": "000000",
			"msg": "获取成功",
			"info": {
			"note": "您的订单师傅已接，师傅正在火速赶来，您确定取消吗？",
				"back_money": 0,
				"order_id": 11
			}
		}
	 */
	public function actionCancelbf(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        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'=>['status','re_time','re_user_id','price'],'order_id'=>$order_id]);
		if(empty($row) || !in_array($row['status'], [0,1,2])){
			return $this->response('deal_false', '取消失败');
		}
		//有责取消
		if($row['re_time']>0 && $row['status']==2 && (time()-$row['re_time'])>600){
			$back_money = round($row['price']*0.033,2);
			$ret = [
				'note'=>'亲：师傅正在火速赶来，您的订单已超出无责取消时间，取消需支付：'.$back_money.'元违约金，您是否确认取消订单？',
				'back_money'=>$back_money,
				'order_id'=>$order_id,
			];
		}else{
			$ret = [
				'note'=>'您的订单师傅已接，师傅正在火速赶来，您确定取消吗？',
				'back_money'=>0,
				'order_id'=>$order_id,
			];
		}
		return $this->response('deal_succ', '获取成功',$ret);
        /*$res = OrderService::cancelOrder($order_id);
        if($res){
        	return $this->response('deal_succ', '取消成功');
        }else{
        	return $this->response('deal_false', '取消失败');
        }*/
	}
	/**
	 * [actionDetail 确认完工]
	 * @apiDoc
	 * @api     v1/order/finish
	 * @group   order
	 * @name    确认完工
	 * @desc    门店APP-订单列表-确认完工
	 * @method  POST
	 * @param  order_id int 订单ID req
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		"code": "000000",
		"msg": "操作成功",
		"info": ""
		}
	 * */
	public function actionFinish(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if (empty($this->para['order_id']) || !is_numeric($this->para['order_id'])) {
            return $this->response('para_miss', '订单ID不能为空');
        }
        $order_id = $this->para['order_id'];
        $res = OrderService::finishOrder($order_id);
        if($res){
        	return $this->response('deal_succ', '操作成功');
        }else{
        	return $this->response('deal_false', '操作失败');
        }
	}
	/**
	 * [actionDetail 删除订单]
	 * @apiDoc
	 * @api     v1/order/del
	 * @group   order
	 * @name    删除订单
	 * @desc    门店APP-订单列表-删除订单
	 * @method  POST
	 * @param  order_id int 订单ID req
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		"code": "000000",
		"msg": "操作成功",
		"info": ""
		}
	 * */
	public function actionDel(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if (empty($this->para['order_id']) || !is_numeric($this->para['order_id'])) {
            return $this->response('para_miss', '订单ID不能为空');
        }
        $order_id = $this->para['order_id'];
        $res = OrderService::delOrder($order_id);
        if($res){
        	return $this->response('deal_succ', '操作成功');
        }else{
        	return $this->response('deal_false', '操作失败');
        }
	}
	/**
	 * [actionAberrant 提交异常]
	 * @apiDoc
	 * @api     v1/order/aberrant
	 * @group   order
	 * @name    提交异常
	 * @desc    门店APP-订单列表-提交异常
	 * @method  POST
	 * @param  order_id int 订单ID req
	 * @param  type int 异常类型【1普通异常，2施工异常，3暂停施工】 req
	 * @param  remark string 异常说明 req
	 * @param  next_cons_time string 下次施工时间 noreq
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		"code": "000000",
		"msg": "操作成功",
		"info": ""
		}
	 * */
	public function actionAberrant(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if (empty($this->para['order_id']) || !is_numeric($this->para['order_id'])) {
            return $this->response('para_miss', '订单ID不能为空');
        }
        if(empty($this->para['type']) || !in_array($this->para['type'], ['1','2','3']))
        {
        	return $this->response('para_miss', '异常类型不正确');
        }
        $param = Helper::elements(['order_id','remark','type','next_cons_time'],$this->para,'');
        $res = OrderService::aberOrder($param);
        if($res){
        	return $this->response('deal_succ', '操作成功');
        }else{
        	return $this->response('deal_false', '操作失败');
        }
	}
	/**
	 * [actionRework 发起返工]
	 * @apiDoc
	 * @api     v1/order/rework
	 * @group   order
	 * @name    发起返工
	 * @desc    门店APP-订单列表-发起返工
	 * @method  POST
	 * @param  order_id int 订单ID req
	 * @param  remark string 返工说明 req
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		"code": "000000",
		"msg": "操作成功",
		"info": ""
		}
	 * */
	public function actionRework(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if (empty($this->para['order_id']) || !is_numeric($this->para['order_id'])) {
            return $this->response('para_miss', '订单ID不能为空');
        }
        $param = Helper::elements(['order_id','remark'],$this->para,'');
        $res = OrderService::rwOrder($param);
        if($res){
        	return $this->response('deal_succ', '操作成功');
        }else{
        	return $this->response('deal_false', '操作失败');
        }
	}
	/**
	 * [actionComment 订单评论]
	 * @apiDoc
	 * @api    ｖ1/order/comment
	 * @group  order
	 * @name   订单评论
	 * @desc   门店ＡＰＰ－订单详情－评论
	 * @method POST
	 * @param  order_id int 订单ID req
	 * @param  extra json 评论分组合　req
	 * @param  comment_text string 评论内容　req
	 * @return json
	 {
		"code": "000000",
		"msg": "评论成功",
		"info": ""
		}
	 */
	public function actionComment(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if (empty($this->para['order_id']) || !is_numeric($this->para['order_id'])) {
            return $this->response('para_miss', '订单ID不能为空');
        }	
        $param = Helper::elements(['order_id','extra','comment_text'],$this->para,'');
        $param['user_id']  = $this->user_id;
        $res = OrderService::commentOr($param);
        if($res){
        	return $this->response('deal_succ', '评论成功');
        }else{
        	return $this->response('deal_false', '评论失败');
        }
	}

}