| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | <?php/** * Created by PhpStorm. * User: songdb * Date: 2017/12/26 * Time: 下午5:26 */namespace App\Console\Commands\Trade;use App\Modules\Trade\Models\OrderStat;use App\Modules\Trade\Services\OrderStatService;use App\Modules\Channel\Services\ChannelService;use Log;use DB;use Illuminate\Console\Command;class GenerateOrderStat extends Command{    /**     * 执行命令   php artisan generate_order_stat     *     * The name and signature of the console command.     *     * @var string     */    protected $signature = 'generate_order_stat';    /**     * The console command description.     *     * @var string     */    protected $description = '渠道订单统计数据生成';    /**     * Execute the console command.     *     * @return mixed     */    public function handle()    {        print_r("======渠道订单统计数据生成 【任务执行开始】=====".date("y-m-d H:i:s"."\n"));        Log::info("======渠道订单统计数据生成 【任务执行开始】=====".date("y-m-d H:i:s"."\n"));        $channels = ChannelService::getAllChannels();        $date = date('Y-m-d',strtotime('-1 day'));        if(count($channels))        {            $channels->each(function($channel) use($date){                OrderStatService::add($channel->id, $date);                try{                    $this->GenerateSeasonOrderStat($channel->id, $date);                }catch (\Exception $e){                }            });        }        Log::info("======渠道订单统计数据生成 【任务执行结束】=====".date("y-m-d H:i:s"."\n"));        print_r("======渠道订单统计数据生成 【任务执行结束】=====".date("y-m-d H:i:s"."\n"));    }    public function GenerateSeasonOrderStat($distribution_channel_id,$date){        $result = OrderStat::where('distribution_channel_id',$distribution_channel_id)->first();        if(!$result) return ;        //Or        $sql_format = "SELECT `status`,count(*) as num,sum(price) as amount FROM orders WHERE distribution_channel_id = %s and  created_at >= '%s'  and  created_at <='%s' and order_type = 'QUARTER' GROUP BY `status`";        $sql = sprintf($sql_format,$distribution_channel_id,$date,$date.' 23:59:59');        $season_result = DB::select($sql);        $amount = 0;        $paid_num = 0;        $unpaid_num = 0;        if($season_result){            foreach ($season_result as $item){                if($item->status == 'PAID'){                    $paid_num = $item->num;                    $amount = $item->amount;                }                if($item->status == 'UNPAID'){                    $unpaid_num = $item->num;                }            }        }        $result->yesterday_season_recharge_amount = $amount;        $result->yesterday_season_recharge_paid_num = $paid_num;        $result->yesterday_season_recharge_unpaid_num = $unpaid_num;        if(date('d',strtotime($date)) == '01'){            $result->last_month_season_recharge_amount = $result->current_month_season_recharge_amount;            $result->last_month_season_recharge_paid_num = $result->current_month_season_recharge_paid_num;            $result->last_month_season_recharge_unpaid_num = $result->current_month_season_recharge_unpaid_mum;            $result->current_month_season_recharge_amount = $amount;            $result->current_month_season_recharge_paid_num = $paid_num;            $result->current_month_season_recharge_unpaid_num = $unpaid_num;        }else{            $result->current_month_season_recharge_amount += $amount;            $result->current_month_season_recharge_paid_num += $paid_num;            $result->current_month_season_recharge_unpaid_num += $unpaid_num;        }        $result->save();    }}
 |