date = $date; $this->table = $this->table . "_" . date('Y', strtotime($this->date)); try { $this->initStart(); }catch (\Exception $e){ return json_encode(["status"=>"error", "msg"=>$e->getMessage()], 256); } } $this->reRun(); return json_encode(["status"=>"success", "msg"=>""], 256); } // 重跑 protected function reRun(): void { $day = date('d'); $hour = date('H'); $i = date('i'); $t = date('t'); // 月末,重跑整月 if($day==$t){ if($hour==1 && $i<10){ for ($d=1; $d<=$t; $d++){ $this->date = date('Y-m-d', strtotime("-{$d} day")); $this->initStart(); } } }else{ // 重跑前3天 if($hour==8 && $i<10){ for ($d=1; $d<=3; $d++){ $this->date = date('Y-m-d', strtotime("-{$d} day")); $this->initStart(); } } } } protected function initStart(): void { // 重置数据 $this->data = []; $this->loginTotalByGame(); $this->siteAuth(); $this->replaceData(); } protected function loginTotalByGame() { $table = "sdk_active_log_" . date('Ym', strtotime($this->date)); $filed = "{$this->group}, count(distinct uid) as login_count"; $where = [ 'tdate' => $this->date, ]; $result = Db::connect('db_game_log')->table($table)->field($filed)->where($where)->group($this->group)->select(); $this->pushData($result); } protected function siteAuth(): void { $agentList = Db::connect('db_advert')->table("agent")->column("id, media_id, auth_id"); $agentListMap = array_column($agentList, null, "id"); if($this->data){ foreach ($this->data as &$item){ $item['tdate'] = $this->date; $item['auth_id'] = $agentListMap[$item['agent_id']]['auth_id'] ?? 0; // 负责人 $item['media_id'] = $agentListMap[$item['agent_id']]['media_id'] ?? 0; // 媒体 } } } protected function replaceData(): bool { // 先删除,再写入 Db::connect('db_data_report')->table($this->table)->where(['tdate' => $this->date])->delete(); return Db::connect('db_data_report')->table($this->table)->insertAll($this->data) !== false; } protected function pushData($rows): void { if ($rows) { foreach ($rows as $row) { $groupArr = explode(',', $this->group); $uniqueKey = ""; foreach ($groupArr as $groupKey){ $uniqueKey .= $row[$groupKey] . "-"; } foreach ($row as $k => $v) { $this->data[$uniqueKey][$k] = !empty($this->data[$uniqueKey][$k]) ? $this->data[$uniqueKey][$k] + $v :$v; } } } } }