<?php
/**
 * 公用计划任务
 * @date 2019-10-09
 */
namespace app\commands;

use app\modules\common\Helper;
use app\modules\logic\model\OrderModel;
use app\modules\logic\model\UsersModel;
use app\modules\logic\services\AssignService;
use app\modules\logic\services\OrderService;
use app\modules\logic\services\SettleService;
use Yii;
use yii\console\Controller;

//use app\modules\sys\log\ImLog;
class CommonController extends Controller {
	/**
	 * [actionOrderag 自动派送订单]
	 * @return [type] [description]
	 */
	public function actionAgorder() {
		//查找等待派单的实时单
		$Order = new OrderModel;
		$rows = $Order->getWidgetRows(['cols' => ['order_id'], 'status' => 1, 're_user_id' => 0, 'is_del' => 0, 'type' => 1]);
		foreach ($rows as $value) {
			try {
				AssignService::agOrder($value['order_id']);
			} catch (Exception $e) {
				Yii::error('派单异常>order_id:' . $value['order_id'] . 'error_msg:' . $e->getMessage());
			}
		}
	}
	/**
	 * [actionAutosettle 自动结算]
	 * @return [type]          [description]
	 */
	public function actionAutosettle() {
		$Order = new OrderModel;
		$rows = $Order->getWidgetRows(['cols' => ['order_id'], 'status' => 5, 'settle_status' => 0]);
		foreach ($rows as $value) {
			try {
				SettleService::autoStOrder($value['order_id']);
			} catch (Exception $e) {
				Yii::error('结算异常>order_id:' . $value['order_id'] . 'error_msg:' . $e->getMessage());
			}
		}
		//超过40个小时待评论
		$rows = $Order->getWidgetRows(['cols' => ['order_id'], 'status' => 4,'scope'=>['mt'=>['confirm_time'=>time()-40*3600]],'settle_status' => 0]);
		foreach ($rows as $value) {
			try {
				SettleService::autoStOrder($value['order_id']);
			} catch (Exception $e) {
				Yii::error('结算异常>order_id:' . $value['order_id'] . 'error_msg:' . $e->getMessage());
			}
		}
	}
	/**
	 * [actionAutocomporder 自动完成订单]
	 * @return [type]          [description]
	 */
	public function actionAutocomporder() {
		$Order = new OrderModel;
		$rows = $Order->getWidgetRows(['cols' => ['order_id', 'comp_time'], 'status' => 3, 'scope' => ['lt' => ['comp_time' => 0]]]);
		$redis = $redis = Yii::$app->redis;
		foreach ($rows as $value) {
			if (time() - $value['comp_time'] > 600) {
				//大约10分钟门店没有完成，则自动确认完成
				OrderService::finishOrder($value['order_id']);
			}
		}
	}
	/**
	 * [actionUpuserregion 自动更新用户省市区-每天更新1次]
	 * @desc   接口描述
	 * @method POST
	 * @return [type]          [description]
	 */
	public function actionUpuserregion() {
		$Users = new UsersModel();
		$rows = $Users->getWidgetRows(['cols' => ['user_id', 'longitude', 'latitude'],'type'=>'tech']);
		if (!empty($rows)) {
			foreach ($rows as $value) {
				if (!empty($value['longitude']) && !empty($value['latitude'])) {
					$region = Helper::getAddress($value['longitude'], $value['latitude']);
					$region_ids = Helper::GetProvinceCityByName($region['province'], $region['city'], $region['district']);
					if (!empty($region_ids)) {
						$data = [];
						$data['prov_id'] = isset($region_ids['prov_id']) ? $region_ids['prov_id'] : 0;
						$data['city_id'] = isset($region_ids['city_id']) ? $region_ids['city_id'] : 0;
						$data['area_id'] = isset($region_ids['district_id']) ? $region_ids['district_id'] : 0;
						$Users->saveUs($data, $value['user_id']);
					}
				}
			}
		}
	}
	/**
	 * [actionAutorecyor 派单后1分钟后没有接单的订单自动回收到订单池]
	 * @apiDoc
	 * @method POST
	 * @return [type]          [description]
	 */
	public function actionAutorecyor() {
		//查找已派单，未接单的技师-
		$Order = new OrderModel;
		$where = [
            'cols' => ['order_id','assign_time','re_user_id'], 
            'scope'=>[
                'lt'=>['re_user_id'=>0,'assign_time'=>0],
            ],
            're_time'=>0,
            'status' => 1, 
            'is_del' => 0, 
            'type' => 1
        ];

		$rows = $Order->getWidgetRows($where);
        
		foreach ($rows as $value) {
			try {
                //超过1分钟没有接单，自动回收
                if((time()-$value['assign_time'])>60){
                    AssignService::recycleOrder($value['order_id']);
                }
                exit;
			} catch (Exception $e) {
				Yii::error('回收异常>order_id:' . $value['order_id'] . 'error_msg:' . $e->getMessage());
			}
		}
	}
	/**
	 * [actionAtoffline 技师自动离线]
	 * @apiDoc
	 * @name   技师自动离线 每天晚上11点
	 * @desc   接口描述
	 * @method POST
	 * @return 
	 */
	public function actionAtoffline(){
		$Users = new UsersModel();
		$rows = $Users->getWidgetRows(['cols'=>['user_id','last_online_time','online_times'],'type'=>'tech','online_status'=>1]);
		if(!empty($rows)){
			foreach ($rows as $value) {
				$this->techOffle($value['user_id'],$value['last_online_time'],$value['online_times']);
			}
		}

	}
	//师傅是否自动离线
	private  function techOffle($user_id=0,$last_online_time,$online_times)
	{
		if(empty($user_id)) return false;
		//判断技师当前是否有未完成订单
		$Order = new OrderModel();
		$flag = $Order->getWidgetRow(['cols'=>['order_id'],'re_user_id'=>$user_id,'in'=>['status'=>['2','3']]]);
		if(!empty($flag)) return false;

		$redis = Yii::$app->redis;
        $redis_key = 'online:tech-info';
        if ($redis->hexists($redis_key, $user_id)) {
            $redis->hdel($redis_key, $user_id);
        }
        $Users = new UsersModel();
        $res = $Users->saveUs(['online_status'=>0,'online_times'=>(time()-$last_online_time)+$online_times],$user_id);
        if($res){
            return true;
        }else{
            return false;
        }
	}
}