<?php
/**
 * 首页控制器
 */
namespace app\modules\engineer\v1\controllers;
use app\modules\common\Helper;
use app\modules\common\Verify;
use app\modules\logic\services\UserService;
use app\modules\logic\services\AccountService;
use app\modules\logic\model\NoticeModel;
use app\modules\logic\model\OrderModel;
use app\modules\logic\model\OrderInfoModel;
use app\modules\logic\model\UsersModel;
use app\modules\logic\model\UsersShopInfoModel;
use app\modules\logic\model\UsersTechInfoModel;
use app\modules\logic\model\OrderCommentModel;
use Yii;
use yii\web\Controller;

class HomeController extends MiddleController {
	/**
	 * 返回
	 * @param $code
	 * @param string $info
	 * @param string $controller
	 * @param string $total
	 */
	protected function response($code, $info = '', $total = '', $controller = 'home') {
		return parent::response($code, $info, $total, $controller);
	}
	/**
	 * [actionGetuserinfo ]
	 * @apiDoc
	 * @api     v1/home/getuserinfo
	 * @group   home
	 * @name    获取用户基本信息
	 * @desc    获取账号基本信息
	 * @method  POST
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		    "code": "000000",
		    "msg": "获取成功",
		    "info": {
		        "base": {
		            "user_id": "1",
		            "username": "18980647855",
		            "online_status": "1",
		            "wx_nick": null,
		            "wx_openid": null,
		            "realname": "",
		            "mobile": "18980647855",
		            "longitude": "104.024426",
		            "latitude": "30.680660"
		        },
		        "approve": {
		            "yw_id": "1",
		            "level_id": "1",
		            "tech_level": "一级美容师"
		        },
		        "detail": {
		            "ut_contact": "测试联系人",
		            "ut_tel": "测试电话号码",
		            "work_type": "测试工种",
		            "work_age": "测试年限",
		            "ut_footing": "夫妻",
		            "crash_save_valid": "2019-11-12",
		            "verify_status": "0" //审核状态 0，待审核 1，通过审核 2，审核失败
		        }
		    }
		}
	 */
	public function actionGetuserinfo(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
		$res = UserService::getTechUserInfo($this->user_id);
		return $this->response('deal_succ', '获取成功', $res);
	}
	/**
	 * [actionModuserinfo 修改个人资料]
	 * @apiDoc
	 * @api    v1/home/moduserinfo
	 * @group  home
	 * @name   修改个人资料
	 * @desc   技师APP-个人中心-修改个人资料
	 * @method POST
	 * @param ut_contact string 紧急联系人 noreq
	 * @param ut_tel string 紧急联系人电话 noreq
	 * @param work_type string 从业工种 noreq
	 * @param ut_footing string 紧急联系关系 noreq
	 * @param crash_save_valid date 意外险有效期[2019-10-11] req
	 * @param work_age string 从业年龄 noreq
	 * @return json
		{
		"code": "000000",
		"msg": "操作成功",
		"info": ''
		} 
	 */
	public function actionModuserinfo(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        $UsersTechInfo= new UsersTechInfoModel();//技师基本信息
        $param  = Helper::elements(['ut_contact','ut_tel','work_type','work_age','ut_footing','crash_save_valid'],$this->para,'');
        $user_id = $this->user_id;
		//查询是否有记录
		$row = $UsersTechInfo->getWidgetRow(['user_id'=>$user_id]);
		if(!empty($row)){
			$ret = $UsersTechInfo->saveUs($param,$user_id);
		}else{
			$param['user_id'] = $user_id;
			$param['created'] = time();
			$ret = $UsersTechInfo->saveUs($param);
		}
		if($ret){
            return $this->response('deal_succ',"操作成功");
        }else{
            return $this->response('deal_false',"操作失败");
        }
	}
	/**
	 * [actionMsglist  通知消息列表]
	 * @apiDoc
	 * @api     v1/home/msglist
	 * @group   home
	 * @name    消息列表
	 * @desc    技师APP-消息通知中心-系统通知/交易提醒/活动通知
	 * @method  POST
	 * @param msg_type int 消息类型【1.系统通知，2.交易提醒，3.活动通知】 req
	 * @param currentPage string 当前页 noreq 1
     * @param pageSize string 每页条数 noreq 15
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		"code": "000000",
		"msg": "获取成功",
		"info": [
		{
		    "content": "test",
		    "created": "2019-09-19 11:55:57",
		    "extra": null
		},
		{
		    "content": "通知消息来拉",
		    "created": "2019-09-09 11:09:40",
		    "extra": null
		}
		]
		}
	 */
	public function actionMsglist(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if (empty($this->para['msg_type'])) {
            return $this->response('para_miss', '消息类型不能为空');
        }
		$_where = [];
        $_where['order'] = ['id' => 'desc'];
        $_where['cols'] = ['content','created','extra'];
        $_where['msg_type'] = $this->para['msg_type'];
        /*分页处理*/
        $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'];
        }
        $Notice = new NoticeModel();
        $list = $Notice->getWidgetPages($_where, $pageSize, $pageSize * ($currentPage - 1));
        if (!empty($list)) {
            foreach ($list as &$value) {
                $value['created'] = date("Y-m-d H:i:s", $value['created']);
            }
        }
        return $this->response('deal_succ','获取成功', $list);
	}
	/**
	 * [actionUpcoordinates  更新用户实时坐标]
	 * @apiDoc
	 * @api     v1/home/upcoordinates
	 * @group   home
	 * @name    更新用户实时坐标
	 * @desc    技师APP-更新用户实时坐标-每隔10秒请求一次接口
	 * @method  POST
	 * @param longitude string 用户经度  noreq
     * @param latitude string 用户纬度  noreq
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
        "code": "000000",
        "msg": "更新成功",
        "info": ''
        }   
	 */
	public function actionUpcoordinates(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        $param = Helper::elements(['longitude','latitude'],$this->para,'');
        $param['last_coor_time'] = time();
        $Users = new UsersModel();
        $res = $Users->saveUs($param,$this->user_id);
        if($res){
            return $this->response('deal_succ',"更新成功");
        }else{
            return $this->response('deal_false',"更新失败");
        }
	}
	/**
	 * [actionMyorder  我的派单]
	 * @apiDoc
	 * @api     v1/home/myorder
	 * @group   home
	 * @name    我的派单
	 * @desc    技师APP-每3-5秒请求一次接口
	 * @method  POST
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
		"code": "000000",
		"msg": "获取成功",
		"info": {
		"pro_extra": "1",
		"order_id": "1",
		"carmodel_id": "2",
		"pro_extra_show": "美容-保养",
		"carmodel_id_show": "越野车",
		"distance": 4500,
		"assign_time": "2019-10-05 11:42:01"
		}
		}
	 */
	public  function actionMyorder()
	{
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        $redis = Yii::$app->redis;
        $redis_key = 'order:tech'.$this->user_id;
        $ret = [];
        if($redis->exists($redis_key)){
        	$ret = json_decode($redis->get($redis_key),true);
        }
        if(!empty($ret)){
        	return $this->response('deal_succ',"获取成功",$ret);
        }else{
        	return $this->response('deal_false',"暂无订单");
        }
	}
	/**
	 * [actionConfirm  确认/拒绝接单]
	 * @apiDoc
	 * @api     v1/home/confirm
	 * @group   home
	 * @name    确认/拒绝接单
	 * @desc    技师APP-确认/拒绝接单
	 * @method  POST
	 * @param order_id int 订单ID req
	 * @param confirm int 确认类型【1，是，2，否】 req
	 * @author JOHN.W
	 * @version [1.0]
	 * @return  json
		{
        "code": "000000",
        "msg": "操作成功",
        "info": ''
        }   
	 */
	public function actionConfirm(){
		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['confirm']) || !in_array($this->para['confirm'], ['1','2'])){
        	return $this->response('para_miss', '确认类型不正确');
        }
        $order_id = $this->para['order_id'];
		$Order = new OrderModel();
        switch ($this->para['confirm']) {
        	case '1':
        		$param = [
        			're_time'=>time(),
        			'depa_time'=>time(),//添加出发时间
        			'status'=>2
        		];
        		$res = $Order->saveUs($param,$order_id);
        		break;
        	case '2':
        		$param = [
        			're_user_id'=>0,
        		];
        		$res = $Order->saveUs($param,$order_id);
        		break;
        }
       if($res){
			$redis = Yii::$app->redis;
			$redis_key = 'order:tech'.$this->user_id;
        	$redis->del($redis_key);
        	return $this->response('deal_succ',"操作成功");
        }else{
        	return $this->response('deal_false',"操作失败");
        } 
        
	}
	/**
	 * [actionBindwx 绑定微信]
	 * @apiDoc
	 * @api    v1/home/bindwx
	 * @group  home
	 * @name   绑定微信登录
	 * @desc   个人中心绑定微信登录
	 * @method POST
	 * @param wx_openid string 微信openid req
	 * @param wx_nick string 微信昵称 noreq
	 * @return json
	 {
		"code": "000000",
		"msg": "操作成功",
		"info": ""
		}
	 */
	public function actionBindwx(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if (empty($this->para['wx_openid'])) {
            return $this->response('para_miss', '微信openid不能为空');
        }
        $Users = new UsersModel();
        //判断微信是否已绑定
        $row = $Users->getWidgetRow(['cols'=>['wx_openid'],'user_id'=>$this->user_id]);
        if(isset($row) && !empty($row['wx_openid'])){
        	return $this->response('para_miss', '已绑定微信登录');
        }
        //校验微信是否已绑定其他账号
        $flag = $Users->getWidgetRow(['cols'=>['user_id'],'wx_openid'=>$this->para['wx_openid']]);
        if(isset($flag) && !empty($flag['user_id'])){
        	return $this->response('para_miss', '微信已绑定过其他账号');
        }
        $param = Helper::elements(['wx_nick','wx_openid'],$this->para,'');
        $res = $Users->saveUs($param,$this->user_id);
        if($res){
        	return $this->response('deal_succ', '操作成功');
        }else{
        	return $this->response('deal_false', '操作失败');
        }
	}
	/**
	 * [actionMycomment 我的评论]
	 * @apiDoc
	 * @api    v1/home/mycomment
	 * @group  home
	 * @name   我的评论
	 * @desc   技师APP-个人中心-我的评论
	 * @method POST
	 * @param  type string 类型【good:好评,bad:差评 全部 ''】 noreq 0
	 * @param currentPage string 当前页 noreq 1
	 * @param pageSize string 每页条数 noreq 15
	 * @return json
		{
    "code": "000000",
    "msg": "获取成功",
    "info": {
        "total": "8",
        "list": [
            {
                "order_id": "211",
                "created": "2019-11-23 12:02:12",
                "score": 4,
                "shop_pic_url": "http://test-img.zgytkj.com/uploads/app/images/201909/tech_20190904_5d6f8094c212c.jpg",
                "pro_extra": "精准抛光4"
            },
            {
                "order_id": "151",
                "created": "2019-11-09 22:51:26",
                "score": 2.3,
                "shop_pic_url": "http://test-img.zgytkj.com/uploads/app/images/201911/shop_20191109_5dc65a71f3f2f.jpg",
                "pro_extra": "精准抛光3"
            },
            {
                "order_id": "106",
                "created": "2019-11-08 20:19:06",
                "score": 5,
                "shop_pic_url": "http://test-img.zgytkj.com/uploads/app/images/201911/shop_20191103_5dbe4ca66c3ac.jpg",
                "pro_extra": "精准抛光q"
            }
        ]
    }
}
	 */
	public function actionMycomment(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }

		$_where = [];
		$_where['cols'] = ['order_id','extra','created'];
		$_where['tech_user_id']  = $this->user_id;
		$_where['order'] = ['order_id' => 'desc'];
        /*区搜索*/
		if (!empty($this->para['type'])) {
			$_where['type'] = $this->para['type'];
		}
		/*分页处理*/
		$currentPage = 1;
		$pageSize = 10;
		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'];
		}
		$OrderComment = new OrderCommentModel();
		$total = $OrderComment->getWidgetTotal($_where);
		$list = $OrderComment->getWidgetPages($_where, $pageSize, $pageSize * ($currentPage - 1));
		if (!empty($list)) {
			foreach ($list as &$value) {
				$comment_text = json_decode($value['extra'],true);
				$fen = array_sum($comment_text);
				$value['score'] = ($fen>0)?round($fen/3,1):0;
				$value['created'] = date("Y-m-d H:i:s", $value['created']);
				//项目产品以及门店头像
				$arr = $this->getMcLstr($value['order_id']);
				$value['shop_pic_url'] = $arr['shop_pic_url'];
				$value['pro_extra'] = $arr['pro_extra'];
				unset($value['extra']);
			}
		}
		$ret = [
			'total'=>$total,
			'list'=>!empty($list)?$list:[]
		];
		return $this->response('deal_succ','获取成功',$ret);
	}
	//获取产品-门店头像
	private function getMcLstr($order_id = 0){
		$OrderInfo = new OrderInfoModel();
		$Order = new OrderModel();
		$UsersShopInfo = new UsersShopInfoModel();
		$row = $OrderInfo->getWidgetRow(['cols'=>['pro_extra'],'order_id'=>$order_id]);
		$shop_user = $Order->getWidgetRow(['cols'=>['shop_user_id'],'order_id'=>$order_id]);
		if(!empty($shop_user['shop_user_id'])){
			$shop_pic = $UsersShopInfo->getWidgetRow(['cols'=>['door_pic'],'user_id'=>$shop_user['shop_user_id']]);
			$shop_pic_url = !empty($shop_pic['door_pic'])?Helper::getImageUrl($shop_pic['door_pic']):'';
		}
		return ['shop_pic_url'=>isset($shop_pic_url)?$shop_pic_url:'','pro_extra'=>Helper::getProExtraNameById($row['pro_extra'])];
	}
}