| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 | <?phpnamespace App\Modules\Trade\Models;use Illuminate\Database\Eloquent\Model;use DB;use Carbon\Carbon;class OrderDayStat extends Model{    protected $table = 'order_day_stats';    protected $fillable = ['distribution_channel_id','channel_user_id','distribution_channel_name', 'date','pay_success_user_num', 'ticket_recharge_user_num', 'year_recharge_user_num', 'total_recharge_amount','unpaid_num','paid_num','promotion_total_uv','promotion_total_pv','force_user_num','ticket_recharge_paid_num','ticket_recharge_unpaid_num','ticket_recharge_amount','year_recharge_paid_num','year_recharge_unpaid_num','year_recharge_amount','send_order_num','real_send_order_num','register_user_num','first_recharge_user_num','first_recharge_amount','month','reg_user_first_recharge_amount','reg_user_first_recharge_user_num','fee','charge_balance','reward_balance','real_register_user_num','channel_merchant_recharge_amount',        'whole_site_uv','whole_site_pv','auto_force_sub_num','self_force_sub_num','subscribe_user_num','subscribe_amount','old_user_subscribe_num','male_channel_recharge','female_channel_recharge'];    //创建日统计数据    static function add($params)    {        $data = [];        $data['channel_user_id'] = $params['channel_user_id'];        $data['distribution_channel_id'] = $params['distribution_channel_id'];        $data['distribution_channel_name'] = $params['distribution_channel_name'];        $data['date'] = $params['date'];        $data['month'] = $params['month'];        $data['pay_success_user_num'] = $params['pay_success_user_num'];        $data['ticket_recharge_user_num'] = $params['ticket_recharge_user_num'];        $data['year_recharge_user_num'] = $params['year_recharge_user_num'];        $data['total_recharge_amount'] = $params['total_recharge_amount'];        $data['unpaid_num'] = $params['unpaid_num'];        $data['paid_num'] = $params['paid_num'];        $data['promotion_total_uv'] = $params['promotion_total_uv'];        $data['promotion_total_pv'] = $params['promotion_total_pv'];        $data['force_user_num'] = $params['force_user_num'];        //普通充值数据        $data['ticket_recharge_paid_num'] = $params['ticket_recharge_paid_num'];        $data['ticket_recharge_unpaid_num'] = $params['ticket_recharge_unpaid_num'];        $data['ticket_recharge_amount'] =  $params['ticket_recharge_amount'];        //包年充值数据        $data['year_recharge_paid_num'] = $params['year_recharge_paid_num'];        $data['year_recharge_unpaid_num'] = $params['year_recharge_unpaid_num'];        $data['year_recharge_amount'] = $params['year_recharge_amount'];        $data['send_order_num'] = $params['send_order_num'];        $data['real_send_order_num'] = $params['real_send_order_num'];        $data['register_user_num'] = $params['register_user_num'];        $data['real_register_user_num'] = $params['real_register_user_num'];        //注册用户当日充值数据        $data['reg_user_first_recharge_amount'] = $params['reg_user_first_recharge_amount'];        $data['reg_user_first_recharge_user_num'] = $params['reg_user_first_recharge_user_num'];        //首充数据        $data['first_recharge_user_num'] = $params['first_recharge_user_num'];        $data['first_recharge_amount'] = $params['first_recharge_amount'];        $data['channel_merchant_recharge_amount'] = $params['channel_merchant_recharge_amount'];        $data['whole_site_uv'] = $params['whole_site_uv'];        $data['whole_site_pv'] = $params['whole_site_pv'];        $data['auto_force_sub_num'] = $params['auto_force_sub_num'];        $data['self_force_sub_num'] = $params['self_force_sub_num'];        $data['old_user_subscribe_num'] =  $params['old_user_subscribe_num'];        // echo "<pre>";        // print_r($data);        return self::create($data);    }        static function accountSearch($params, $is_all)    {        	$search_obj = self::join('distribution_channels','distribution_channels.id','=','order_day_stats.distribution_channel_id')    	->join('channel_users','channel_users.id','=','distribution_channels.channel_user_id')    	->join('companies','companies.id','=','channel_users.company_id')    	->select("order_day_stats.date",    			DB::raw("sum(order_day_stats.pay_success_user_num) as pay_success_user_num"),    			DB::raw("sum(order_day_stats.ticket_recharge_user_num) as ticket_recharge_user_num"),    			DB::raw("sum(order_day_stats.year_recharge_user_num) as year_recharge_user_num"),    			DB::raw("sum(order_day_stats.total_recharge_amount) as total_recharge_amount"),    			DB::raw("sum(order_day_stats.unpaid_num) as unpaid_num"),    			DB::raw("sum(order_day_stats.paid_num) as paid_num"),    			DB::raw("sum(order_day_stats.promotion_total_uv) as promotion_total_uv"),    			DB::raw("sum(order_day_stats.promotion_total_pv) as promotion_total_pv"),    			DB::raw("sum(order_day_stats.force_user_num) as force_user_num"),    			"companies.name as company_name",    			"companies.fans_gender");        	if(isset($params['distribution_channel_id']) && $params['distribution_channel_id'])    	{    		if(is_array($params['distribution_channel_id']) && count($params['distribution_channel_id']))    		{    			$search_obj->whereIn('order_day_stats.distribution_channel_id',$params['distribution_channel_id']);    		}else{    			$search_obj->where('order_day_stats.distribution_channel_id',$params['distribution_channel_id']);    		}    	}    	if(isset($params['begin_time']) && $params['begin_time']) $search_obj->where('order_day_stats.date','>=',$params['begin_time']);    	if(isset($params['end_time']) && $params['end_time']) $search_obj->where('order_day_stats.date','<=',$params['end_time']);        	$search_obj->groupBy('order_day_stats.date');    	$search_obj->orderBy('order_day_stats.date','desc');    	    	if($is_all)    	{    		return $search_obj->get();    	}else{    		return $search_obj->paginate();    	}    }        static function search($params, $is_all)    {        $search_obj = self::join('distribution_channels','distribution_channels.id','=','order_day_stats.distribution_channel_id')            ->join('channel_users','channel_users.id','=','distribution_channels.channel_user_id')            ->join('companies','companies.id','=','channel_users.company_id')            ->select(DB::raw("order_day_stats.*,companies.name as company_name,companies.fans_gender"));        if(isset($params['orderBy']) && $params['orderBy'])        {            $search_obj->orderBy('order_day_stats.'.$params['orderBy'],'desc');        }else{            $search_obj->orderBy('order_day_stats.id','desc');        }        if(isset($params['distribution_channel_id']) && $params['distribution_channel_id'])        {            if(is_array($params['distribution_channel_id']) && count($params['distribution_channel_id']))            {                $search_obj->whereIn('order_day_stats.distribution_channel_id',$params['distribution_channel_id']);            }else{                $search_obj->where('order_day_stats.distribution_channel_id',$params['distribution_channel_id']);            }        }        if(isset($params['begin_time']) && $params['begin_time']) $search_obj->where('order_day_stats.date','>=',$params['begin_time']);        if(isset($params['end_time']) && $params['end_time']) $search_obj->where('order_day_stats.date','<=',$params['end_time']);        if($is_all)        {            return $search_obj->get();        }else{            return $search_obj->paginate();        }    }    /**     * 获取渠道汇总统计数据     * @param  int $distribution_channel_id 分销渠道ID     */    static function getSumByChannelId($distribution_channel_id)    {        $fields = [            DB::raw("sum(pay_success_user_num) pay_success_user_num,                     sum(total_recharge_amount) total_recharge_amount,                     sum(unpaid_num) unpaid_num,                     sum(paid_num) paid_num,                     sum(promotion_total_uv) promotion_total_uv,                     sum(promotion_total_pv) promotion_total_pv,                     sum(force_user_num) force_user_num,                     sum(ticket_recharge_user_num) ticket_recharge_user_num,                     sum(ticket_recharge_paid_num) ticket_recharge_paid_num,                     sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,                     sum(ticket_recharge_amount) ticket_recharge_amount,                     sum(year_recharge_user_num) year_recharge_user_num,                     sum(year_recharge_paid_num) year_recharge_paid_num,                     sum(year_recharge_unpaid_num) year_recharge_unpaid_num,                     sum(year_recharge_amount) year_recharge_amount,                     sum(send_order_num) send_order_num,                     sum(real_send_order_num) real_send_order_num,                     sum(register_user_num) register_user_num,                     sum(first_recharge_user_num) first_recharge_user_num,                     sum(first_recharge_amount) first_recharge_amount                                          ")        ];        return self::select($fields)->where('distribution_channel_id', $distribution_channel_id)->first();    }    /**     * 获取昨日渠道汇总统计数据     * @param  int $distribution_channel_id 分销渠道ID     */    static function getYesterdaySumByChannelId($distribution_channel_id)    {        $fields = [            DB::raw("sum(pay_success_user_num) pay_success_user_num,                     sum(total_recharge_amount) total_recharge_amount,                     sum(unpaid_num) unpaid_num,                     sum(paid_num) paid_num,                     sum(promotion_total_uv) promotion_total_uv,                     sum(promotion_total_pv) promotion_total_pv,                     sum(force_user_num) force_user_num,                     sum(ticket_recharge_user_num) ticket_recharge_user_num,                     sum(ticket_recharge_paid_num) ticket_recharge_paid_num,                     sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,                     sum(ticket_recharge_amount) ticket_recharge_amount,                     sum(year_recharge_user_num) year_recharge_user_num,                     sum(year_recharge_paid_num) year_recharge_paid_num,                     sum(year_recharge_unpaid_num) year_recharge_unpaid_num,                     sum(year_recharge_amount) year_recharge_amount,                     sum(send_order_num) send_order_num,                     sum(register_user_num) register_user_num,                     sum(first_recharge_user_num) first_recharge_user_num,                     sum(first_recharge_amount) first_recharge_amount                     ")        ];        $yesterday = date("Y-m-d",strtotime('-1 day'));        return self::select($fields)->where('distribution_channel_id', $distribution_channel_id)->where('date','=',$yesterday)->first();    }    /**     * 获取当月渠道汇总统计数据     * @param  int $distribution_channel_id 分销渠道ID     */    static function getCurrentMonthSumByChannelId($distribution_channel_id)    {        $fields = [            DB::raw("sum(pay_success_user_num) pay_success_user_num,                     sum(total_recharge_amount) total_recharge_amount,                     sum(unpaid_num) unpaid_num,                     sum(paid_num) paid_num,                     sum(promotion_total_uv) promotion_total_uv,                     sum(promotion_total_pv) promotion_total_pv,                     sum(force_user_num) force_user_num,                     sum(ticket_recharge_user_num) ticket_recharge_user_num,                     sum(ticket_recharge_paid_num) ticket_recharge_paid_num,                     sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,                     sum(ticket_recharge_amount) ticket_recharge_amount,                     sum(year_recharge_user_num) year_recharge_user_num,                     sum(year_recharge_paid_num) year_recharge_paid_num,                     sum(year_recharge_unpaid_num) year_recharge_unpaid_num,                     sum(year_recharge_amount) year_recharge_amount,                     sum(send_order_num) send_order_num,                     sum(register_user_num) register_user_num,                     sum(first_recharge_user_num) first_recharge_user_num,                     sum(first_recharge_amount) first_recharge_amount                     ")        ];        $begin_date = date("Y-m").'-1';        $end_date = date("Y-m",strtotime('+1 month')).'-1';        return self::select($fields)->where('distribution_channel_id', $distribution_channel_id)                   ->where('date','>=',$begin_date)                   ->where('date','<',$end_date)                   ->first();    }    /**     * 获取上月渠道汇总统计数据     * @param  int $distribution_channel_id 分销渠道ID     */    static function getLastMonthSumByChannelId($distribution_channel_id)    {        $fields = [            DB::raw("sum(pay_success_user_num) pay_success_user_num,                     sum(total_recharge_amount) total_recharge_amount,                     sum(unpaid_num) unpaid_num,                     sum(paid_num) paid_num,                     sum(promotion_total_uv) promotion_total_uv,                     sum(promotion_total_pv) promotion_total_pv,                     sum(force_user_num) force_user_num,                     sum(ticket_recharge_user_num) ticket_recharge_user_num,                     sum(ticket_recharge_paid_num) ticket_recharge_paid_num,                     sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,                     sum(ticket_recharge_amount) ticket_recharge_amount,                     sum(year_recharge_user_num) year_recharge_user_num,                     sum(year_recharge_paid_num) year_recharge_paid_num,                     sum(year_recharge_unpaid_num) year_recharge_unpaid_num,                     sum(year_recharge_amount) year_recharge_amount,                     sum(send_order_num) send_order_num,                     sum(register_user_num) register_user_num,                     sum(first_recharge_user_num) first_recharge_user_num,                     sum(first_recharge_amount) first_recharge_amount                     ")        ];        $begin_date = date("Y-m",strtotime('-1 month')).'-01';        $end_date = date("Y-m").'-01';        return self::select($fields)->where('distribution_channel_id', $distribution_channel_id)                   ->where('date','>=',$begin_date)                   ->where('date','<',$end_date)                   ->first();    }    //根据渠道获取合计    static function getStatByChannel($params)    {        $fields = [            DB::raw("date,                     sum(pay_success_user_num) pay_success_user_num,                     sum(total_recharge_amount) total_recharge_amount,                     sum(unpaid_num) unpaid_num,                     sum(paid_num) paid_num,                     sum(promotion_total_uv) promotion_total_uv,                     sum(promotion_total_pv) promotion_total_pv,                     sum(force_user_num) force_user_num,                     sum(ticket_recharge_user_num) ticket_recharge_user_num,                     sum(ticket_recharge_paid_num) ticket_recharge_paid_num,                     sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,                     sum(ticket_recharge_amount) ticket_recharge_amount,                     sum(year_recharge_user_num) year_recharge_user_num,                     sum(year_recharge_paid_num) year_recharge_paid_num,                     sum(year_recharge_unpaid_num) year_recharge_unpaid_num,                     sum(year_recharge_amount) year_recharge_amount,                     sum(send_order_num) send_order_num,                     sum(real_send_order_num) real_send_order_num,                     sum(register_user_num) register_user_num,                     sum(real_register_user_num) real_register_user_num,                     sum(first_recharge_user_num) first_recharge_user_num,                     sum(first_recharge_amount) first_recharge_amount,                     sum(reg_user_first_recharge_amount) reg_user_first_recharge_amount,                     sum(reg_user_first_recharge_user_num) reg_user_first_recharge_user_num,                     sum(channel_merchant_recharge_amount) channel_merchant_recharge_amount                     ")        ];        $begin_time = $params['begin_time'];        $end_time = $params['end_time'];        return self::select($fields)                          ->where('date','>=',$begin_time)                          ->where('date','<=',$end_time)                          ->orderBy('date','desc')                          ->groupBy('date')                          ->get();    }    static function getAllGroupbyMonth()    {        $fields = [            DB::raw("month,                     sum(pay_success_user_num) pay_success_user_num,                     sum(total_recharge_amount) total_recharge_amount,                     sum(unpaid_num) unpaid_num,                     sum(paid_num) paid_num,                     sum(promotion_total_uv) promotion_total_uv,                     sum(promotion_total_pv) promotion_total_pv,                     sum(force_user_num) force_user_num,                     sum(ticket_recharge_user_num) ticket_recharge_user_num,                     sum(ticket_recharge_paid_num) ticket_recharge_paid_num,                     sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,                     sum(ticket_recharge_amount) ticket_recharge_amount,                     sum(year_recharge_user_num) year_recharge_user_num,                     sum(year_recharge_paid_num) year_recharge_paid_num,                     sum(year_recharge_unpaid_num) year_recharge_unpaid_num,                     sum(year_recharge_amount) year_recharge_amount,                     sum(send_order_num) send_order_num,                     sum(real_send_order_num) real_send_order_num,                     sum(register_user_num) register_user_num,                     sum(real_register_user_num) real_register_user_num,                     sum(first_recharge_user_num) first_recharge_user_num,                     sum(first_recharge_amount) first_recharge_amount                     ")        ];        return self::select($fields)->groupBy('month')->orderBy('month','desc')->orderBy('total_recharge_amount','desc')->get();    }    static function getAllGroupbyMonthChannel($params=[],$is_all)    {        $fields = [            DB::raw("month,                     distribution_channel_id,                     distribution_channel_name,                     sum(pay_success_user_num) pay_success_user_num,                     sum(total_recharge_amount) total_recharge_amount,                     sum(unpaid_num) unpaid_num,                     sum(paid_num) paid_num,                     sum(promotion_total_uv) promotion_total_uv,                     sum(promotion_total_pv) promotion_total_pv,                     sum(force_user_num) force_user_num,                     sum(ticket_recharge_user_num) ticket_recharge_user_num,                     sum(ticket_recharge_paid_num) ticket_recharge_paid_num,                     sum(ticket_recharge_unpaid_num) ticket_recharge_unpaid_num,                     sum(ticket_recharge_amount) ticket_recharge_amount,                     sum(year_recharge_user_num) year_recharge_user_num,                     sum(year_recharge_paid_num) year_recharge_paid_num,                     sum(year_recharge_unpaid_num) year_recharge_unpaid_num,                     sum(year_recharge_amount) year_recharge_amount,                     sum(send_order_num) send_order_num,                     sum(real_send_order_num) real_send_order_num,                     sum(register_user_num) register_user_num,                     sum(real_register_user_num) real_register_user_num,                     sum(first_recharge_user_num) first_recharge_user_num,                     sum(first_recharge_amount) first_recharge_amount,                     sum(fee) as fee,                     sum(charge_balance) as charge_balance,                     sum(reward_balance) as reward_balance                     ")        ];        $search_obj = self::select($fields);        if(isset($params['month']) && $params['month']) $search_obj->where('month',$params['month']);        if(isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('distribution_channel_id',$params['distribution_channel_id']);        if(isset($params['distribution_channel_name']) && $params['distribution_channel_name']) $search_obj->where('distribution_channel_name',$params['distribution_channel_name']);        $search_obj->groupBy(['month','distribution_channel_id'])->orderBy('month','desc')->orderBy('total_recharge_amount','desc');        if($is_all)        {            return $search_obj->get();        }else{            return $search_obj->paginate();        }    }    static function getOutPayData($params = [], $isAll = false) {        //渠道方通道充值总额        $not_in_pay_merchant_ids = env('not_in_pay_merchant_id');        $sqlObj = self::select('order_day_stats.distribution_channel_id',                     'order_day_stats.distribution_channel_name',                     'order_day_stats.month',                     'order_day_stats.date',                     'order_day_stats.channel_merchant_recharge_amount',                     'distribution_channels.pay_merchant_id'            )            ->leftjoin('distribution_channels','distribution_channels.id','=','order_day_stats.distribution_channel_id')            ->where('order_day_stats.channel_merchant_recharge_amount' , '>', 0)            ->orderBy('order_day_stats.date', 'desc');        if(isset($params['distribution_channel_id']) && $params['distribution_channel_id']) {            $sqlObj->where('order_day_stats.distribution_channel_id', $params['distribution_channel_id']);        }        if(isset($params['distribution_channel_name']) && $params['distribution_channel_name']) {            $sqlObj->where('order_day_stats.distribution_channel_name', 'like' , '%'.$params['distribution_channel_name'].'%');        }        if(isset($params['start_date']) && $params['start_date']) {            $sqlObj->where('order_day_stats.date', '>=', $params['start_date']);        }        if(isset($params['end_date']) && $params['end_date']) {            $sqlObj->where('order_day_stats.date', '<=', $params['end_date']);        }        if($isAll)        {            return $sqlObj->get();        }else{            return $sqlObj->paginate();        }    }    static function getRechargeByChannels($distribution_channels,$time_range) {        $obj = self::whereIn('distribution_channel_id',$distribution_channels);        if($time_range['begin_time']){            $obj->where('date','>=',$time_range['begin_time']);        }        if($time_range['end_time']){            $obj->where('date','<=',$time_range['end_time']);        }        return $obj->sum('total_recharge_amount');    }}
 |