<?php
namespace app\modules\logic\services;
use app\modules\common\Helper;
use app\modules\logic\model\OrderModel;
use app\modules\logic\model\OrderCommentModel;
use app\modules\logic\model\PayLogModel;
use app\modules\logic\model\OrderInfoModel;
use app\modules\logic\model\UsersShopInfoModel;
use app\modules\logic\model\UsersModel;
use app\modules\logic\model\SysBasePriceSetModel;
use app\modules\logic\model\OrderSettleModel;
use app\modules\logic\model\SysCarmodelPriceSetModel;
use app\modules\logic\services\AssignService;
use app\modules\logic\services\Accountervice;
use Yii;
use yii\db\Query;
/**
 * 订单结算服务
 */
class SettleService {
	/**
	 * [autoStOrder description]
	 * @name   订单结算
	 * @desc   接口描述
	 * @method POST
	 * @return [type]          [description]
	 */
	public static function autoStOrder($order_id = 0){
		$Order = new OrderModel();
		$row = $Order->getWidgetRow(['order_id'=>$order_id]);
		if(empty($row) || $row['settle_status']!=0 || !in_array($row['status'], [4,5]) || $row['abn_status']!=0){
			return false;
		}
		$income_list = self::calcTechIncome($row);
		$money = ($income_list['total']>0)?$income_list['total']:0;//获取技师应得资金
		$data = [
			'user_id'=>$row['re_user_id'],
			'nid'=>$row['nid'],
			'money'=>$money,
			'money_type'=>'money',
			'op_type'=>'income',
			'remark'=>'订单收入'
		];
		$res = AccountService::addAccountLog($data);//操作资金，增加收入
		if($res){
			$OrderSettle = new OrderSettleModel();
			$OrderSettle->saveUs(['order_id'=>$row['order_id'],'nid'=>$row['nid'],'user_id'=>$row['re_user_id'],'total'=>$money,'work_income'=>$income_list['work_income'],'extra'=>json_encode($income_list),'remark'=>'订单自动结算','created'=>time()]);
			return $Order->saveUs(['settle_status'=>1],$order_id);
		}else{
			return false;
		}
	}
	/**
	 * [calcTechIncome 计算技师收入明细]
	 * @desc   接口描述
	 * @method POST
	 * @param  array           $param [description]
	 * @return [type]                 [description]
	 */
	public static function calcTechIncome($param = []){
		//计算收入存入计算记录
		$work_income = $param['tech_price'];//技师工时费
		//获取订单产品
		$OrderInfo = new OrderInfoModel();
		$pro_row = $OrderInfo->getWidgetRow(['cols'=>['pro_extra'],'order_id'=>$param['order_id']]);
		$pro_ids = explode(',', $pro_row['pro_extra']);

		$SysBasePriceSet = new SysBasePriceSetModel();
		//按时到达奖励
		$reach_fee = $SysBasePriceSet->find()->where(['in','id',$pro_ids])->sum('pun_reach_award');
		//按时完工奖励
		$cons_fee = $SysBasePriceSet->find()->where(['in','id',$pro_ids])->sum('pun_work_award');
		//保险费
		$safe_fee = $SysBasePriceSet->find()->where(['in','id',$pro_ids])->sum('safe_fee');
		//好评奖励
		$poor_fee = $SysBasePriceSet->find()->where(['in','id',$pro_ids])->sum('praise_award');
		//保险费处理
		$safe_fee = ($safe_fee>0)?$safe_fee*-1:$safe_fee;//保险扣费，定额
		//判断是否到店超时了
		$reach_fee = !empty($reach_fee)?$reach_fee:0;
		//未按时到达
		if(round(($param['reach_time']-$param['depa_time'])/60)>1800){
			$reach_fee = 0;
		}
		$real_cons_time = round(($param['comp_time']-$param['star_work_time'])/60);//秒
		$plan_cons_time =  $SysBasePriceSet->find()->where(['in','id',$pro_ids])->sum('cons_time');
		$cons_fee = !empty($cons_fee)?$cons_fee:0;//按时完工奖励
		if($real_cons_time>$plan_cons_time){
			$cons_fee = 0;
		}
		/*$rework_fee = !empty($rework_fee)?$rework_fee:0;
		if($param['is_rework']==1){
			$rework_fee = 0;//有返工则返工奖励为0
		}*/
		$poor_fee = !empty($poor_fee)?$poor_fee:0;//好评奖励
		//暂缺判断好评规则
		$total = $work_income+$safe_fee+$reach_fee+$cons_fee+$poor_fee;
		$ret = [
			'total'=>$total,
			'work_income'=>$work_income,
			'safe_fee'=>$safe_fee,
			'reach_fee'=>$reach_fee,
			'cons_fee'=>$cons_fee,
			'rework_fee'=>0,
			'poor_fee'=>$poor_fee,
		];
		return $ret;
	}
	//计算订单施工时间
	public static function calcConsTimes($order_id = 0,$shop_user_id = 0){
		$OrderInfo = new OrderInfoModel();
		$para = $OrderInfo->getWidgetRow(['cols'=>['carmodel_id','pro_extra'],'order_id'=>$order_id]);

		$pro_ids = explode(',', $para['pro_extra']);
		$SysBasePriceSet = new SysBasePriceSetModel();
		$cons_time_rows = $SysBasePriceSet->find()->where(['in','id',$pro_ids])->sum('cons_time');
		/*$other = [
			'shop_user_id'=>$shop_user_id,
			'carmodel_id'=>$para['carmodel_id'],
		];*/
		//车型影响价格配置
		/*if(!empty($other) && !empty($shop_user_id)){
			$SysCarmodelPriceSet = new SysCarmodelPriceSetModel();
			$carmodel_id = $other['carmodel_id'];
			$area_row = Helper::getAreaByUid($shop_user_id);
			$where = [
				'cols'=>['price_up','cons_time_up'],
				'carmodel_id'=>$carmodel_id,
				'is_del'=>0
			];
			$where_c = $where ;
			$where_a = $where ;
			if(!empty($area_row['city_id'])){
				$where_c['city_id']  = $area_row['city_id'];
				$rows_city = $SysCarmodelPriceSet->getWidgetRow($where_c);
			}
			if(!empty($area_row['area_id'])){
				$where_a['area_id']  = $area_row['area_id'];
				$rows_area = $SysCarmodelPriceSet->getWidgetRow($where_a);
			}
			
			$res_up = isset($rows_area) && !empty($rows_area)?$rows_area:$rows_city;
			if(!empty($res_up)){
				$cons_time_up = $cons_time_rows*($res_up['cons_time_up']/100);
				$cons_time_rows+=$cons_time_up;
			}
		}*/
		return $cons_time_rows;
	}

}