send_order_ids = $send_order_ids; } public function __get($name) { if (!isset($this->field[$name])) { switch ($name) { case 'todayUvPvs': $this->field[$name] = $this->getTodayUVPV(); break; case 'uvPvs': $this->field[$name] = $this->getUvAndPv(); break; case 'registers': $this->field[$name] = $this->getPromotionTotal(); break; case 'newFans': $this->field[$name] = $this->getNewFansNum(); break; case 'charges': $this->field[$name] = $this->getCharges(); break; } } return $this->field[$name]; } public function __call($name, $arguments) { $property_name = $name . 's'; $send_order_id = $arguments[0]; return $this->$property_name->where('send_order_id', $send_order_id)->first(); } /** * 获取今日PV和UV * @return \Illuminate\Support\Collection */ public function getTodayUVPV() { return collect($this->send_order_ids)->map(function ($item) { $obj = new stdClass; $obj->send_order_id = $item; $obj->today_pv = (int) Redis::hget('send_order_pv_' . $item, date('Y-m-d')); $obj->today_uv = (int) Redis::hget('send_order_uv_' . $item, date('Y-m-d')); return $obj; }); } /** * 获取uv和pv * @return \Illuminate\Support\Collection */ public function getUvAndPv() { return WapVisitStat::whereIn('key', $this->send_order_ids) ->where([ ['from_type', 'send_orders'], ['type', 3], ])->selectRaw('sum(pv) as pv,sum(uv) as uv,`key` as send_order_id') ->groupBy('key') ->get(); } /** * 获取派单直接充值数据 * @return \Illuminate\Support\Collection */ public function getCharges() { $sql = Order::whereIn('send_order_id', $this->send_order_ids) ->where('status', 'PAID') ->selectRaw('count(distinct uid) as payUserNum,sum(price) as totalChargeAmount, send_order_id') ->groupBy('send_order_id'); return $sql->get(); } /** * 获取推广用户数 * @return \Illuminate\Support\Collection */ public function getPromotionTotal() { return User::whereIn('send_order_id', $this->send_order_ids) ->selectRaw('count(*) as registerNum, send_order_id') ->groupBy('send_order_id') ->get(); } /** * 获取强关用户数 * @return \Illuminate\Support\Collection */ public function getNewFansNum() { return ForceSubscribeUsers::whereIn('send_order_id', $this->send_order_ids) ->selectRaw('count(*) as fansNum, send_order_id') ->groupBy('send_order_id') ->get(); } /** * 设置统计数据 */ protected function setStatisticData($item) { $todayUvPv = $this->todayUvPv($item->id); $uvPv = $this->uvPv($item->id); $item->clickNum += $uvPv ? $uvPv->pv + $todayUvPv->today_pv : $todayUvPv->today_pv; $item->clickNumUV += $uvPv ? $uvPv->uv + $todayUvPv->today_uv : $todayUvPv->today_uv; $charge = $this->charge($item->id); $item->payUserNum += $charge ? $charge->payUserNum : 0; $item->totalChargeAmount += $charge ? $charge->totalChargeAmount : 0; $register = $this->register($item->id); $item->registerNum += $register ? $register->registerNum : 0; $newFan = $this->newFan($item->id); $item->fansNum += $newFan ? $newFan->fansNum : 0; } /** * 初始化数据 */ protected function setInitData($item) { $item->clickNum = 0; $item->clickNumUV = 0; $item->payUserNum = 0; $item->totalChargeAmount = 0; $item->registerNum = 0; $item->fansNum = 0; } public function getDataList($datas) { foreach ($datas as $item) { $this->setInitData($item); $this->setStatisticData($item, $item->id); } return $datas; } }