<?php


namespace App\Modules\Subscribe\Models;
use Illuminate\Database\Eloquent\Model;
use DB;


class Order extends Model
{
    protected $table = 'orders';

    protected $fillable = [
        'uid', 'product_id', 'price', 'status', 'pay_type', 'trade_no', 'send_order_id', 'send_order_name',
        'transaction_id', 'distribution_channel_id', 'pay_end_at', 'create_ip', 'u', 'pay_merchant_source', 'pay_merchant_id', 'from_bid', 'order_type',
        'activity_id','from_type','inner_send_order_id'
    ];

	static function getByTradeNo($trade_no)
	{
		return self::where('trade_no',$trade_no)->first();
	}

	public static  function  getOrderList($uid,$page_size){
	    return self::select('id','price','created_at','status','trade_no')->where('uid',$uid)->orderBy('id','desc')->paginate($page_size);
    }

    /**
     * 订单生成
     */
    static function generate($data)
    {
        //订单号生成
        $data['trade_no'] = $data['product_id'].date("YmdHis").hexdec(uniqid());
        return self::create($data);
    }


    static function save_order($data){

        return self::firstOrCreate($data);
    }

    /**
     * 渠道公众号重充值统计
     */
    static function OfficialAccountOrderStat($distribution_channel_id,$start_time,$end_time,$page_size = 15){
        return self::where('orders.distribution_channel_id',$distribution_channel_id)
            ->where('orders.status','=','PAID')
            ->where('orders.created_at','>=',$start_time)
            ->where('orders.created_at','<',$end_time)
            ->join('force_subscribe_users','force_subscribe_users.uid','=','orders.uid')
            ->groupBy(DB::raw('date(orders.created_at)'))
            ->groupBy('force_subscribe_users.appid')
            ->select(DB::raw('sum(price) as amount'),DB::raw('date(orders.created_at) as `date`'),'force_subscribe_users.appid')
            ->orderBy(DB::raw('date(orders.created_at)'),'desc')
            ->paginate($page_size);
    }


    /**
     * 渠道公众号重充值统计
     */
    static function OfficialAccountOrderSum($distribution_channel_id,$start_time,$end_time,$appid){
$data = DB::select("select sum(price) price from orders where `orders`.`created_at` >= '{$start_time}' and `orders`.`created_at` < '{$end_time}' and `orders`.`status` = 'PAID' and uid in (select uid from force_subscribe_users where `appid` = '{$appid}') and `orders`.`distribution_channel_id` = {$distribution_channel_id}");
return $data ? $data[0]->price : 0;/*
        return self::where('orders.distribution_channel_id',$distribution_channel_id)
            ->join('force_subscribe_users','force_subscribe_users.uid','=','orders.uid')
            ->where('orders.created_at','>=',$start_time)
            ->where('orders.created_at','<',$end_time)
            ->where('orders.status','=','PAID')
            ->where('force_subscribe_users.appid',$appid)
            ->sum('orders.price');*/
    }

    /**
     * 个人充值统计
     */
    static function getRechargeAmountByUidAndTime($uid,$start_time,$end_time){
        return self::where('uid',$uid)
            ->where('orders.status','=','PAID')
            ->where('orders.created_at','>=',$start_time)
            ->where('orders.created_at','<',$end_time)
            ->sum('price');
    }

}