| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 | <?php/** * Created by PhpStorm. * User: Hardy * Date: 2020/7/31 * Time: 21:37 */namespace App\Console\Commands\SendOrder;use App\Modules\Order\Services\OrderService;use App\Modules\SendOrder\Models\SendOrderByRegist;use App\Modules\SendOrder\Services\SendOrderByRegistService;use Illuminate\Console\Command;class GenerateUserRegistStat extends Command{    /**     * The name and signature of the console command.     * php artisan GenerateUserRegistStat     * @var string     */    protected $signature = 'GenerateUserRegistStat {--begin_date=} {--end_date=}';    /**     * The console command description.     *     * @var string     */    protected $description = '每日生成派单数据';    /**     * Create a new command instance.     *     * @return void     */    public function __construct()    {        parent::__construct();    }    /**     * Execute the console command.     *     * @return mixed     */    public function handle()    {        $this->start();    }    public function start()    {        $begin_date = $this->option('begin_date');        $end_date   = $this->option('end_date');        if(!isset($begin_date))        {            $begin_date=date('Y-m-d', strtotime('-1 day',strtotime(now())));            $end_date =date('Y-m-d', strtotime(now()));        }        myLog('SendOrderByRegist')->notice('【' . $begin_date . '->' . $end_date . '】-------  开始');        $endTime = $end_date;        $runDay = $begin_date;        while (strtotime($runDay) < strtotime($endTime)) {            var_dump($runDay);            $this->processOneDayNew($runDay);            $runDay = date('Y-m-d', strtotime('+1 day', strtotime($runDay)));        }        myLog('SendOrderByRegist')->notice('【' . $begin_date . '->' . $end_date . '】-------  结束');    }    public function processOneDayNew($day)    {        //清理当天的派单按日注册        myLog('SendOrderByRegist')->notice($day . '-------  开始:');        $startTime = date('Y-m-d', strtotime($day));        $endTime   = date('Y-m-d', strtotime('+1 day', strtotime($startTime)));        //查询派单        $orderService = new SendOrderByRegistService();        $sendOrderIDs = $orderService->getSendOrderIdFromOrigin($startTime, $endTime);        //dd(collect($sendOrderIDs)->implode('send_order_id', ', '));        $bitch =500;        $partIds = [];        for ($i = 1; $i <= count($sendOrderIDs); $i++) {            $partIds[] = $sendOrderIDs[$i - 1]->send_order_id;            if ($i > 1 && $i % $bitch == 0) {                $orderService->deleteRecs($partIds);                $partIds = [];            }        }        if(count($partIds)>0)        {            $orderService->deleteRecs($partIds);        }        myLog('SendOrderByRegist')->notice($day . '-------  清理历史记录完成');        myLog('SendOrderByRegist')->notice('有效派单数'.count($sendOrderIDs));        foreach ($sendOrderIDs as $item) {            myLog('SendOrderByRegist')->notice('当前派单ID'.$item->send_order_id);            self:: processSendOrderById($item->send_order_id, $endTime);        }        myLog('SendOrderByRegist')->notice($day . '-------  结束');    }    /**     * @param int $send_order_id     * @param string $endTime 不包含     */    public function processSendOrderById($send_order_id, $endTime)    {        $modelList['send_order_id'] = $send_order_id;        //查询首充数及首充金额        $orderService                  = new OrderService();        $find                          = $orderService->getSendOrderFirstPayCountAndPriceByID($send_order_id, $endTime);        $modelList['first_pay_count']  = empty($find) ? 0 : $find['first'];        $modelList['first_pay_amount'] = empty($find) ? 0 : $find['price'];        //付费人数,付费次数和充值总额        $find                             = $orderService->getSendOrderSuccessPayCountByID($send_order_id, $endTime);        $modelList['success_user_count']  = empty($find) ? 0 : $find['u_num'];        $modelList['success_order_count'] = empty($find) ? 0 : $find['num'];        $modelList['total_amount']        = empty($find) ? 0 : $find['price'];        //24小时充值充值金额        $hour                 = 24;        $find                 = $orderService->getSendOrderPayPriceByIdAndHour($send_order_id, $endTime, $hour);        $modelList['hour_24'] = empty($find) ? 0 : $find['price'];        //24小时首充用户数        $find                             = $orderService->getSendOrderPayUserCountByIdAndHour($send_order_id, $endTime, $hour, 1);        $modelList['hour_24_first_count'] = empty($find) ? 0 : $find['num'];        //24小时非首充用户数        $find                                 = $orderService->getSendOrderPayUserCountByIdAndHour($send_order_id, $endTime, $hour, 0);        $modelList['hour_24_not_first_count'] = empty($find) ? 0 : $find['num'];        //3天充值充值金额        $hour               = 24 * 3;        $find               = $orderService->getSendOrderPayPriceByIdAndHour($send_order_id, $endTime, $hour);        $modelList['day_3'] = empty($find) ? 0 : $find['price'];        //3天首充用户数        $find                           = $orderService->getSendOrderPayUserCountByIdAndHour($send_order_id, $endTime, $hour, 1);        $modelList['day_3_first_count'] = empty($find) ? 0 : $find['num'];        //3天非首充用户数        $find                               = $orderService->getSendOrderPayUserCountByIdAndHour($send_order_id, $endTime, $hour, 0);        $modelList['day_3_not_first_count'] = empty($find) ? 0 : $find['num'];        //7天充值充值金额        $hour               = 24 * 7;        $find               = $orderService->getSendOrderPayPriceByIdAndHour($send_order_id, $endTime, $hour);        $modelList['day_7'] = empty($find) ? 0 : $find['price'];        //7天首充用户数        $find                           = $orderService->getSendOrderPayUserCountByIdAndHour($send_order_id, $endTime, $hour, 1);        $modelList['day_7_first_count'] = empty($find) ? 0 : $find['num'];        //7天非首充用户数        $find                               = $orderService->getSendOrderPayUserCountByIdAndHour($send_order_id, $endTime, $hour, 0);        $modelList['day_7_not_first_count'] = empty($find) ? 0 : $find['num'];        myLog('SendOrderByRegist')->notice('【' . $send_order_id . '】-------  开始保存数据');        $helper = new SendOrderByRegistService();        $find   = $helper->search(['send_order_id' => $send_order_id], true)->first();        if (!empty($find)) {            $find->first_pay_count         += $modelList['first_pay_count'];            $find->first_pay_amount        += $modelList['first_pay_amount'];            $find->success_user_count      += $modelList['success_user_count'];            $find->success_order_count     += $modelList['success_order_count'];            $find->total_amount            += $modelList['total_amount'];            $find->hour_24                 += $modelList['hour_24'];            $find->hour_24_first_count     += $modelList['hour_24_first_count'];            $find->hour_24_not_first_count += $modelList['hour_24_not_first_count'];            $find->day_3                   += $modelList['day_3'];            $find->day_3_first_count       += $modelList['day_3_first_count'];            $find->day_3_not_first_count   += $modelList['day_3_not_first_count'];            $find->day_7                   += $modelList['day_7'];            $find->day_7_first_count       += $modelList['day_7_first_count'];            $find->day_7_not_first_count   += $modelList['day_7_not_first_count'];            $find->save();        } else {            SendOrderByRegist::insert($modelList);        }        myLog('SendOrderByRegist')->notice('【' . $send_order_id . '】-------  保存数据完成');    }}
 |