"error", "msg"=>"日期格式不正确"], 256); } }else{ $sDate = date('Y-m'); $eDate = date('Y-m'); } for ($date = $sDate; $date <= $eDate; $date = date('Y-m', strtotime($date . '+1 month'))){ $this->month = $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'); // 重跑上个整月 if(($day==1 || $day==15) && $hour==4 && $i<10){ $this->month = date('Y-m', strtotime("-1 month")); $this->initStart(); } } protected function initStart(): void { // 重置数据 $this->data = []; $this->regPay(); $this->replaceData(['reg_month'=>$this->month]); } protected function regPay(): void { $tb = "sdk_order_success"; $sDate = "{$this->month}-01 00:00:00"; $eDate = date('Y-m-t 23:59:59', strtotime($this->month)); $filed = "game_id, agent_id, site_id, '{$this->month}' as pay_month, DATE_FORMAT(reg_date,'%Y-%m') as reg_month, sum(money) as pay_total, sum(paid_amount) as pay_amount, count(distinct uid) as pay_num"; $where = [ ['pay_date', 'between', [$sDate, $eDate]], ]; $result = Db::connect('db_game_log')->table($tb)->field($filed)->where($where)->group($this->group)->select()->toArray(); if($result){ $this->pushData($result); $regMonthList = array_unique(array_column($result, 'reg_month')); foreach ($regMonthList as $regMonth){ $res = $this->addupTotalMonth($regMonth); if($res){ $this->pushData($res); } } } } protected function addupTotalMonth($regMonth) { $tb = "sdk_order_success"; $filed = "game_id, agent_id, site_id, '{$this->month}' as pay_month,'{$regMonth}' as reg_month, sum(money) as addup_pay_total, sum(paid_amount) as addup_pay_amount, count(distinct uid) as addup_pay_num"; $srData = $regMonth."-01 00:00:00"; $erDate = date('Y-m-t 23:59:59', strtotime($srData)); $epDate = date('Y-m-t 23:59:59', strtotime($this->month)); $where = [ ['reg_date', 'between', [$srData, $erDate]], ['pay_date', 'between', [$srData, $epDate]], ]; return Db::connect('db_game_log')->table($tb)->field($filed)->where($where)->group($this->group)->select()->toArray(); } }