123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402 |
- <?php
- namespace App\Console\Commands;
- use App\Models\Basic;
- use App\Models\Challenge;
- use App\Models\DwbsUser;
- use App\Models\Enroll;
- use App\Models\RankDays;
- use App\Models\RankTemplate;
- use App\Models\User;
- use Carbon\Carbon;
- use Illuminate\Console\Command;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- use Intervention\Image\Facades\Image;
- class MakePKListCommand extends Command
- {
- /**
- * The name and signature of the console command.
- *
- * @var string
- */
- protected $signature = 'MakePKListCommand';
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = 'Command description';
- /**
- * Create a new command instance.
- *
- * @return void
- */
- public function __construct()
- {
- parent::__construct();
- }
- /**
- * Execute the console command.
- *
- * @return mixed
- */
- public function handle()
- {
- $time=time();
- Log::error('制作排行榜开始');
- // if ($time<0){
- $season=Basic::where('keys','=','season')->value('value');
- $end_time=Basic::where('keys','=','round_end_time')->value('value');
- $start_time=Basic::where('keys','=','round_start_time')->value('value');
- // if ($time<$end_time&&$time>$start_time+3600*24){
- $uids=Enroll::where('season',$season)
- ->join('user','user.id','=','enroll.uid')
- ->where('user.level_name','批发商')
- ->where('enroll.status',0)->pluck('enroll.uid');
- $this->rank_days($season,$uids,3);
- $uids=Enroll::where('season',$season)
- ->join('user','user.id','=','enroll.uid')
- ->where('user.level_name','经销商')
- ->where('enroll.status',0)->pluck('enroll.uid');
- $this->rank_days($season,$uids,2);
- // }
- Log::error('制作排行榜结束');
- }
- public function rank_days($season,$uids=[],$level){
- $re=Challenge::whereIn('challenge_status',[1,2])->where('season',$season)->whereIn('challenge_id',$uids)
- ->select(DB::raw('if(challenge_total >=accept_total,challenge_total,accept_total) as total'),DB::raw('if(challenge_total >=accept_total,challenge_id,accept_id) as idx'),'challenge_total','accept_total','challenge_id','accept_id')
- ->with(['get_challenge_user:id,nickname,avatar,phone'])
- ->with(['get_accept_user:id,nickname,avatar,phone'])
- ->orderByDesc('total')->GroupBy('idx')->limit(10)->get()->toArray();
- if ($level==3){
- $url=RankTemplate::where('season',$season)->where('type',1)->where('level',3)->value('url');
- // $img=\Intervention\Image\Facades\Image::make(public_path().'/uploads/img/crown_pk.jpg');
- $img=Image::make($url);
- }else{
- $url=RankTemplate::where('season',$season)->where('type',1)->where('level',2)->value('url');
- $img=Image::make($url);
- // $img=\Intervention\Image\Facades\Image::make(public_path().'/uploads/img/ji_pk.jpg');
- }
- if ($level==3){
- foreach ($re as $k=>$v){
- if ($v['challenge_total']>$v['accept_total']){
- $dwuser=DwbsUser::where('mobile',$v['get_challenge_user']['phone'])->select('remark_name','headimgurl')->first();
- if ($dwuser->remark_name){
- $this->avatar($v['get_challenge_user']['avatar'],$k,$img,1,$v['challenge_total'],$dwuser->remark_name,$dwuser->headimgurl);
- }else{
- $this->avatar($v['get_challenge_user']['avatar'],$k,$img,1,$v['challenge_total'],$v['get_challenge_user']['nickname'],$dwuser->headimgurl);
- }
- $dwuser=DwbsUser::where('mobile',$v['get_accept_user']['phone'])->select('remark_name','headimgurl')->first();
- if ($dwuser->remark_name){
- $this->avatar($v['get_accept_user']['avatar'],$k,$img,2,$v['accept_total'],$dwuser->remark_name,$dwuser->headimgurl);
- }else{
- $this->avatar($v['get_accept_user']['avatar'],$k,$img,2,$v['accept_total'],$v['get_accept_user']['nickname'],$dwuser->headimgurl);
- }
- $baifenbi=$this->judge_pk($v['challenge_total'],$v['accept_total']);
- $img->insert($baifenbi,'',240,1600+250*$k);
- }else{
- $dwuser=DwbsUser::where('mobile',$v['get_accept_user']['phone'])->select('remark_name','headimgurl')->first();
- if ($dwuser->remark_name){
- $this->avatar($v['get_accept_user']['avatar'],$k,$img,1,$v['accept_total'],$dwuser->remark_name,$dwuser->headimgurl);
- }else{
- $this->avatar($v['get_accept_user']['avatar'],$k,$img,1,$v['accept_total'],$v['get_accept_user']['nickname'],$dwuser->headimgurl);
- }
- $dwuser=DwbsUser::where('mobile',$v['get_challenge_user']['phone'])->select('remark_name','headimgurl')->first();
- if ($dwuser->remark_name){
- $this->avatar($v['get_challenge_user']['avatar'],$k,$img,2,$v['challenge_total'],$dwuser->remark_name,$dwuser->headimgurl);
- }else{
- $this->avatar($v['get_challenge_user']['avatar'],$k,$img,2,$v['challenge_total'],$v['get_challenge_user']['nickname'],$dwuser->headimgurl);
- }
- // $this->avatar($v['get_accept_user']['avatar'],$k,$img,1,$v['accept_total'],$v['get_accept_user']['nickname']);
- // $this->avatar($v['get_challenge_user']['avatar'],$k,$img,2,$v['challenge_total'],$v['get_challenge_user']['nickname']);
- $baifenbi=$this->judge_pk($v['accept_total'],$v['challenge_total']);
- $img->insert($baifenbi,'',240,1600+250*$k);
- }
- }
- $img->text(date('Y年m月d日',time()-3600*24).'-'.date('m月d日',time()),220,2090*2,function ($font){
- $font->file(public_path() . '/ziti/ht.otf');
- $font->size(50);
- $font->color('F6F09C');
- $font->angle(0);
- });
- }else{
- foreach ($re as $k=>$v){
- if ($v['challenge_total']>$v['accept_total']){
- // $this->avatars($v['get_challenge_user']['avatar'],$k,$img,1,$v['challenge_total'],$v['get_challenge_user']['nickname']);
- // $this->avatars($v['get_accept_user']['avatar'],$k,$img,2,$v['accept_total'],$v['get_accept_user']['nickname']);
- $dwuser=DwbsUser::where('mobile',$v['get_challenge_user']['phone'])->select('remark_name','headimgurl')->first();
- if ($dwuser->remark_name){
- $this->avatars($v['get_challenge_user']['avatar'],$k,$img,1,$v['challenge_total'],$dwuser->remark_name,$dwuser->headimgurl);
- }else{
- $this->avatars($v['get_challenge_user']['avatar'],$k,$img,1,$v['challenge_total'],$v['get_challenge_user']['nickname'],$dwuser->headimgurl);
- }
- $dwuser=DwbsUser::where('mobile',$v['get_accept_user']['phone'])->select('remark_name','headimgurl')->first();
- if ($dwuser->remark_name){
- $this->avatars($v['get_accept_user']['avatar'],$k,$img,2,$v['accept_total'],$dwuser->remark_name,$dwuser->headimgurl);
- }else{
- $this->avatars($v['get_accept_user']['avatar'],$k,$img,2,$v['accept_total'],$v['get_accept_user']['nickname'],$dwuser->headimgurl);
- }
- $baifenbi=$this->judge_pks($v['challenge_total'],$v['accept_total']);
- $img->insert($baifenbi,'',240,1600-640+260*$k);
- }else{
- // $this->avatars($v['get_accept_user']['avatar'],$k,$img,1,$v['accept_total'],$v['get_accept_user']['nickname']);
- // $this->avatars($v['get_challenge_user']['avatar'],$k,$img,2,$v['challenge_total'],$v['get_challenge_user']['nickname']);
- $dwuser=DwbsUser::where('mobile',$v['get_accept_user']['phone'])->select('remark_name','headimgurl')->first();
- if($dwuser){
- if ($dwuser->remark_name){
- $this->avatars($v['get_accept_user']['avatar'],$k,$img,1,$v['accept_total'],$dwuser->remark_name,$dwuser->headimgurl);
- }else{
- $this->avatars($v['get_accept_user']['avatar'],$k,$img,1,$v['accept_total'],$v['get_accept_user']['nickname'],$dwuser->headimgurl);
- }
- }else{
- $dwuser=User::where('phone',$v['get_accept_user']['phone'])->select('nickname','avatar')->first();
- if ($dwuser->nickname){
- $this->avatars($v['get_accept_user']['avatar'],$k,$img,1,$v['accept_total'],$dwuser->remark_name,$dwuser->headimgurl);
- }else{
- $this->avatars($v['get_accept_user']['avatar'],$k,$img,1,$v['accept_total'],$v['get_accept_user']['nickname'],$dwuser->avatar);
- }
- }
- $dwuser=DwbsUser::where('mobile',$v['get_challenge_user']['phone'])->select('remark_name','headimgurl')->first();
- if ($dwuser->remark_name){
- $this->avatars($v['get_challenge_user']['avatar'],$k,$img,2,$v['challenge_total'],$dwuser->remark_name,$dwuser->headimgurl);
- }else{
- $this->avatars($v['get_challenge_user']['avatar'],$k,$img,2,$v['challenge_total'],$v['get_challenge_user']['nickname'],$dwuser->headimgurl);
- }
- $baifenbi=$this->judge_pks($v['accept_total'],$v['challenge_total']);
- $img->insert($baifenbi,'',240,1600-640+260*$k);
- }
- }
- $img->text(date('Y年m月d日',time()-3600*24).'-'.date('m月d日',time()),220,3750,function ($font){
- $font->file(public_path() . '/ziti/ht.otf');
- $font->size(50);
- $font->color('F6F09C');
- $font->angle(0);
- });
- }
- $folder_name = "uploads/images/PkImg/" . date("Ym/d", time());
- // 文件具体存储的物理路径,`public_path()` 获取的是 `public` 文件夹的物理路径。
- // 值如:/home/vagrant/Code/larabbs/public/uploads/images/avatars/201709/21/
- $upload_path = '/public/' . $folder_name;
- // 获取文件的后缀名,因图片从剪贴板里黏贴时后缀名为空,所以此处确保后缀一直存在
- $extension = 'png';
- // 拼接文件名,加前缀是为了增加辨析度,前缀可以是相关数据模型的 ID
- // 值如:1_1493521050_7BVc9v9ujP.png
- $filename = $level . '_' . time() . '_' . str_random(10) . '.' . $extension;
- if (!file_exists(public_path($upload_path))) {
- mkdir(public_path($upload_path), 0777, true);
- }
- // File::isDirectory(public_path().$upload_path) or File::makeDirectory(public_path().$upload_path,077,true,true);
- // 将图片移动到我们的目标存储路径中
- $img->save(public_path().$upload_path.'/'.$filename);
- $rank_path=env('APP_URL').$upload_path.'/'.$filename;
- $rank_days=new RankDays();
- $rank_days->season=$season;
- $rank_days->level=$level;
- $rank_days->img_url=$rank_path;
- $rank_days->type=1;
- $rank_days->time=Carbon::today()->toDateString();
- $rank_days->save();
- }
- public function bg_resize($img2)
- {
- $img2 = $img2->resize(153, 153);
- $r = $img2->width() / 2;
- $img3 = Image::canvas(153, 153);
- for ($x = 0; $x < $img2->width(); $x++) {
- for ($y = 0; $y < $img2->height(); $y++) {
- if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {
- $c = $img2->pickColor($x, $y, 'array');
- $img3->pixel($c, $x, $y);
- }
- }
- }
- return $img3;
- }
- public function judge_pks($total1,$total2){
- if ($total2==0){
- $name='pk_100';
- }else{
- $nums=round($total1/($total2+$total1)*100,2);
- if ($nums>95){
- $name='pk_100';
- }elseif ($nums>85&&$nums<=95){
- $name='pk_90';
- }elseif ($nums>75&&$nums<=85){
- $name='pk_80';
- }elseif ($nums>65&&$nums<=75){
- $name='pk_70';
- }elseif ($nums>55&&$nums<=65){
- $name='pk_60';
- }else{
- $name='pk_50';
- }
- }
- $baifenbi=Image::make(public_path()."/uploads/img/".$name.".png")->resize(615);
- return $baifenbi;
- }
- public function avatar($url,$k,$img,$n,$total_1=0,$nickname,$imgs){
- $len=mb_strlen($nickname);
- if ($len>4){
- $nickname=mb_substr($nickname,0,4);
- }
- try {
- $avatars = Image::make($url);
- } catch (\Exception $exception) {
- try{
- $avatars = Image::make($imgs);
- }catch (\Exception $exception){
- $avatars = Image::make(public_path() . '/logo3.png');
- }
- }
- $yuan=Image::make(public_path().'/uploads/img/yuan.png')->resize(169,169);
- $avatar=$this->bg_resize($avatars);
- if ($n==1){
- $img->insert($avatar,'',128,1500+(250)*$k);
- $img->insert($yuan,'',120,1500-8+(250)*$k);
- $img->text($total_1.'分', 310, 1600-10+250*$k, function ($font) {
- $font->file(public_path() . '/ziti/ht.otf');
- $font->size(30);
- $font->color('F6F09C');
- $font->angle(0);
- });
- $img->text($nickname, 132, 1710+250*$k, function ($font) {
- $font->file(public_path() . '/ziti/ht.otf');
- $font->size(47);
- $font->color('F6F09C');
- $font->angle(0);
- });
- }else{
- $img->insert($avatar,'',799+8,1500+250*$k);
- $img->insert($yuan,'',799,1500-8+250*$k);
- $img->text($total_1.'分', 680, 1600-10+250*$k, function ($font) {
- $font->file(public_path() . '/ziti/ht.otf');
- $font->size(30);
- $font->color('F6F09C');
- $font->angle(0);
- });
- $img->text($nickname, 812, 1710+250*$k, function ($font) {
- $font->file(public_path() . '/ziti/ht.otf');
- $font->size(47);
- $font->color('F6F09C');
- $font->angle(0);
- });
- }
- return $img;
- }
- public function judge_pk($total1,$total2){
- if ($total2==0){
- $name='pk_100';
- }else{
- $nums=round($total1/($total2+$total1)*100,2);
- if ($nums>95){
- $name='pk_100';
- }elseif ($nums>85&&$nums<=95){
- $name='pk_90';
- }elseif ($nums>75&&$nums<=85){
- $name='pk_80';
- }elseif ($nums>65&&$nums<=75){
- $name='pk_70';
- }elseif ($nums>55&&$nums<=65){
- $name='pk_60';
- }else{
- $name='pk_50';
- }
- }
- $baifenbi=Image::make(public_path()."/uploads/img/".$name.".png")->resize(615);
- return $baifenbi;
- }
- public function avatars($url,$k,$img,$n,$total_1=0,$nickname,$imgs){
- $len=mb_strlen($nickname);
- if ($len>4){
- $nickname=mb_substr($nickname,0,4);
- }
- try {
- $avatars = Image::make($url);
- } catch (\Exception $exception) {
- try{
- $avatars = Image::make($imgs);
- }catch (\Exception $exception){
- $avatars = Image::make(public_path() . '/logo3.png');
- }
- }
- $yuan=Image::make(public_path().'/uploads/img/yuan.png')->resize(169,169);
- $avatar=$this->bg_resize($avatars);
- if ($n==1){
- $img->insert($avatar,'',128,860+(260)*$k);
- $img->insert($yuan,'',120,860-8+(260)*$k);
- $img->text($total_1.'分', 310, 1600-640-10+260*$k, function ($font) {
- $font->file(public_path() . '/ziti/ht.otf');
- $font->size(30);
- $font->color('FF4104');
- $font->angle(0);
- });
- $img->text($nickname, 132, 1710-640+260*$k, function ($font) {
- $font->file(public_path() . '/ziti/ht.otf');
- $font->size(47);
- $font->color('FF4104');
- $font->angle(0);
- });
- }else{
- $len=mb_strlen($nickname);
- if ($len==4){
- $x=812-40;
- }elseif ($len==1){
- $x=812+40;
- }else{
- if ($len==2){
- $nickname=mb_substr($nickname,0,1).' '.mb_substr($nickname,1,2);
- }
- $x=812;
- }
- $img->insert($avatar,'',799+8,1500-640+260*$k);
- $img->insert($yuan,'',799,1500-640-8+260*$k);
- $img->text($total_1.'分', 680, 1600-640-10+260*$k, function ($font) {
- $font->file(public_path() . '/ziti/ht.otf');
- $font->size(30);
- $font->color('FF4104');
- $font->angle(0);
- });
- $img->text($nickname, $x, 1710-640+260*$k, function ($font) {
- $font->file(public_path() . '/ziti/ht.otf');
- $font->size(47);
- $font->color('FF4104');
- $font->angle(0);
- });
- }
- return $img;
- }
- }
|