<?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\model\SysBasePriceSetModel;
use app\modules\logic\model\UsersModel;
use app\modules\logic\model\OrderModel;
use app\modules\logic\model\UsersShopInfoModel;
use app\modules\logic\model\SysCarmodelPriceSetModel;
use app\modules\logic\services\CouponService;
use Yii;
use yii\web\Controller;

class ReleaseController extends MiddleController {
	/**
	 * 返回
	 * @param $code
	 * @param string $info
	 * @param string $controller
	 * @param string $total
	 */
	protected function response($code, $info = '', $total = '', $controller = 'release') {
		return parent::response($code, $info, $total, $controller);
	}
	/**
	 * [actionGetcom 获取最近施工时间等公用数据-逻辑待完成]
	 * @apiDoc
	 * @api     v1/release/getcom
	 * @group   release
	 * @name    获取公用数据
	 * @desc    发布需求－获取最快施工时间－授信额度＝＝
	 * @method  POST
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  josn
		{
		"code": "000000",
		"msg": "获取成功",
		"info": {
		"fconstm": "11:30",
		"credit_pay": {
		"total": 1000,
		"use": 50
		}
		}
		}
	 */
	public function actionGetcom(){
		$data = [
			'fconstm'=>date("H:i",time()+3600),
			'credit_pay'=>[
				'total'=>0,
				'use'=>0,
			],
		];
		return $this->response('deal_succ', '获取成功',$data);
	}
	/**
	 * [actionSend 发布需求]
	 * @apiDoc
	 * @api     v1/release/send
	 * @group   release
	 * @name    发布需求
	 * @desc    门店发布需求
	 * @method  POST
	 * @param  plate_no string 车牌 req 
	 * @param  carmodel_id string 车型ID req 
	 * @param  car_tel string 车主联系电话 req 
	 * @param  type int 订单类型【1，实时单，2，预约单】 req
	 * @param  fore_time date 预计施工时间【预约单必填】 noreq
	 * @param  shop_tel string 指定联系人 req 
	 * @param  pro_extra string 产品【可多选,】 req 
	 * @param  cid string 优惠劵ID[1,2] noreq
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		"code": "000000",
		"msg": "发布成功",
		"info": "1"
		}
	 */
	public function actionSend(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if(empty($this->para['plate_no'])){
        	return $this->response('para_miss', '请录入车牌号');
        }
        $param = Helper::elements(['plate_no','carmodel_id','car_tel','type','shop_tel','pro_extra','fore_time','cid'],$this->para,'');
        $param['user_id'] = $this->user_id;
        $param['plate_no'] = strtoupper($param['plate_no']);
        $param['shop_user_id'] = UserService::getShopUserId($this->user_id);
        //未获取到门店账号不允许发布需求
        if(empty($param['shop_user_id'])){
        	return $this->response('para_miss', '您的账号不允许发布需求');
        }
        //判断门店是否审核
		$UsersShopInfo = new UsersShopInfoModel();
		$row_vf = $UsersShopInfo->getWidgetRow(['cols'=>['verify_status'],'user_id'=>$param['shop_user_id']]);
		$auth_sta = isset($row_vf['verify_status'])?Helper::authStatus($row_vf['verify_status']):'miss';
		if($auth_sta!='pass'){
			return $this->response('para_miss', '您的门店未通过认证，请先认证');
		}
		//未通过审核不能发布需求
        //指定联系人手机号非必填
        if(empty($param['shop_tel'])){
        	$users_base = Helper::getUsersBase($this->user_id);
        	$param['shop_tel'] = !empty($users_base['mobile'])?$users_base['mobile']:'';
        }
        //判断预约单时间范围
        if($param['type']==2){
        	$f_end_time = time()+7200;
        	if(empty($param['fore_time']) || (strtotime($param['fore_time'])<=$f_end_time)){
        		return $this->response('para_miss', '预约单，预约施工时间请选择2小时后');
        	}
        }
        //判断相同的车牌，相同的产品，没有完工时不允许发布
        $Order = new OrderModel();
        $flag_o = $Order->find()->select(['{{%order}}.order_id','status','plate_no','pro_extra'])->leftJoin("{{%order_info}}", '{{%order}}.`order_id` = {{%order_info}}.`order_id`')->where(['in','status',['0','1','2','3','4']])->andWhere(['plate_no'=>$param['plate_no'],'pro_extra'=>$param['pro_extra']])->one();
        if($flag_o){
        	return $this->response('para_miss', '该车牌已有相同业务未完成，请勿重复发布需求');
        }
        //车牌判断结束
        $res = OrderService::ctOrder($param);
        if($res){
        	return $this->response('deal_succ', '发布成功',$res);
        }else{
        	return $this->response('deal_false', '发布失败');
        }
	}
	/**
	 * [actionCalcucom 计算价格和预计完成时间]
	 * @apiDoc
	 * @api    v1/release/calcucom
	 * @group  release
	 * @name   计算价格和预计完成时间
	 * @desc   门店发布需求-总价计算和完成时间计算
	 * @method POST
	 * @param pro_extra string 产品组[1,2] req
	 * @param carmodel_id int 车型ID[废弃] noreq
	 * @param cid string 优惠劵ID[1,2] noreq
	 * @return json
		{
		"code": "000000",
		"msg": "获取成功",
		"info": {
		"cons_time": "2019-10-14 11:53:20",
		"total_price": 67.76
		}
		}
	 */
	public function actionCalcucom(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if(empty($this->para['pro_extra'])){
        	return $this->response('para_miss', '产品不能为空');
        }
        /*if(empty($this->para['carmodel_id'])){
        	return $this->response('para_miss', '车型不能为空');
        }*/
        $shop_user_id = UserService::getShopUserId($this->user_id);
        if(empty($shop_user_id)){
        	return $this->response('para_miss', '账号异常#no role');
        }
        $pro_ids = explode(',', $this->para['pro_extra']);
		$SysBasePriceSet = new SysBasePriceSetModel();
		$price_rows = $SysBasePriceSet->find()->where(['in','id',$pro_ids])->sum('price');
		$cons_time_rows = $SysBasePriceSet->find()->where(['in','id',$pro_ids])->sum('cons_time');
		$cid = !empty($this->para['cid'])?$this->para['cid']:'';
		$couMoney = 0;
		if(!empty($cid)){
			$cid_arr = explode(",",$cid);
			if(!empty($cid_arr) && is_array($cid_arr)){
				foreach ($cid_arr as $value) {
					$cmoney = CouponService::getCouPrice($value);
					$couMoney = $couMoney+$cmoney;
				}
			}
			
		}	
		$rt_money = round($price_rows,2)-$couMoney;
		$ret = ['cons_time'=>date("Y-m-d H:i:s",time()+$cons_time_rows*60),'total_price'=>($rt_money>0)?$rt_money:0];

		return $this->response('deal_succ', '获取成功',$ret);
	}
	/**
	 * [actionGetdesig 获取门店指定联系人]
	 * @apiDoc
	 * @api    v1/release/getdesig
	 * @group  release
	 * @name   获取门店指定联系人
	 * @desc   门店APP-发布订单-获取门店指定联系人
	 * @method POST
	 * @return josn
		{
		"code": "000000",
		"msg": "获取成功",
		"info": [
			{
			    "realname": "李波",
			    "mobile": "18200143340"
			},
			{
			    "realname": "李波1",
			    "mobile": "18200143921"
			},
			{
			    "realname": "李波",
			    "mobile": "18200113942"
			},
			{
			    "realname": "测试1",
			    "mobile": "15200143947"
			}
		]
		}
	 */
	public function actionGetdesig(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        $shop_user_id = UserService::getShopUserId($this->user_id);
        if($shop_user_id==0){
        	return $this->response('deal_succ', '获取成功',[]);
        }
        $Users = new UsersModel();
        $rows = $Users->find()->select(['realname','mobile'])->where(['parent_id'=>$shop_user_id])->orWhere(['user_id'=>$shop_user_id])->asArray()->all();
        return $this->response('deal_succ', '获取成功',$rows);
	}
}