作者 赵彬吉

update

  1 +<?php
  2 +
  3 +namespace App\Console\Commands;
  4 +
  5 +use App\Helper\OaGlobalsoApi;
  6 +use App\Http\Logic\Aside\Project\ProjectLogic;
  7 +use App\Models\NoticeLog;
  8 +use App\Models\Project\Project;
  9 +use App\Utils\LogUtils;
  10 +use Illuminate\Console\Command;
  11 +use Illuminate\Support\Facades\Cache;
  12 +
  13 +/**
  14 + * 同步项目信息
  15 + * Class ChannelInfo
  16 + * @package App\Console\Commands
  17 + * @author zbj
  18 + * @date 2023/6/27
  19 + */
  20 +class SyncProject extends Command
  21 +{
  22 + /**
  23 + * The name and signature of the console command.
  24 + *
  25 + * @var string
  26 + */
  27 + protected $signature = 'sync_project';
  28 +
  29 + /**
  30 + * The console command description.
  31 + *
  32 + * @var string
  33 + */
  34 + protected $description = '同步项目信息';
  35 +
  36 + /**
  37 + * Create a new command instance.
  38 + *
  39 + * @return void
  40 + */
  41 + public function __construct()
  42 + {
  43 + parent::__construct();
  44 + }
  45 +
  46 + /**
  47 + * @return bool
  48 + */
  49 + public function handle()
  50 + {
  51 + $list = NoticeLog::where('type', NoticeLog::TYPE_PROJECT)->where('status', NoticeLog::STATUS_PENDING)->get();
  52 + foreach ($list as $item){
  53 + try {
  54 + $api = new OaGlobalsoApi();
  55 + $data = $api->order_info($item['data']['order_id']);
  56 + if(!$data || empty($data['data'])){
  57 + LogUtils::error('OaGlobalsoApi order_info error', $data);
  58 + $this->retry($item);
  59 + }
  60 + if($data['data']['order_type'] == '首次'){
  61 + $data['data']['type'] = 1; //建站进程中
  62 + }
  63 + if($data['data']['order_type'] == '续费'){
  64 + $data['data']['type'] = 4; //续费记录单
  65 + }
  66 + ProjectLogic::instance()->sync($data['data']);
  67 +
  68 + $item->status = NoticeLog::STATUS_SUCCESS;
  69 + $item->save();
  70 + }catch (\Exception $e){
  71 + errorLog('项目同步失败', $item, $e);
  72 + $this->retry($item);
  73 + }
  74 + }
  75 + }
  76 +
  77 + /**
  78 + * @param NoticeLog $log
  79 + */
  80 + public function retry($log){
  81 + if($log->retry >= 3){
  82 + $log->status = NoticeLog::STATUS_FAIL;
  83 + }else{
  84 + $log->retry = $log->retry + 1;
  85 + }
  86 + $log->save();
  87 + }
  88 +
  89 +
  90 +}
@@ -28,6 +28,7 @@ class Kernel extends ConsoleKernel @@ -28,6 +28,7 @@ class Kernel extends ConsoleKernel
28 $schedule->command('web_traffic 2')->cron('*/18 * * * *'); // 引流 4-8个月的项目,18分钟一次 28 $schedule->command('web_traffic 2')->cron('*/18 * * * *'); // 引流 4-8个月的项目,18分钟一次
29 $schedule->command('web_traffic 3')->cron('*/12 * * * *'); // 引流 大于9个月的项目,12分钟一次 29 $schedule->command('web_traffic 3')->cron('*/12 * * * *'); // 引流 大于9个月的项目,12分钟一次
30 $schedule->command('sync_channel')->dailyAt('06:00')->withoutOverlapping(1); // 渠道信息,每周执行一次 30 $schedule->command('sync_channel')->dailyAt('06:00')->withoutOverlapping(1); // 渠道信息,每周执行一次
  31 + $schedule->command('sync_project')->everyMinute()->withoutOverlapping(1); //同步项目
31 // // 更新域名|证书结束时间,每天凌晨1点执行一次 32 // // 更新域名|证书结束时间,每天凌晨1点执行一次
32 // $schedule->command('domain_time')->dailyAt('01:00')->withoutOverlapping(1); 33 // $schedule->command('domain_time')->dailyAt('01:00')->withoutOverlapping(1);
33 // // B站 - 网站数据统计 34 // // B站 - 网站数据统计
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 namespace App\Http\Controllers\Aside; 3 namespace App\Http\Controllers\Aside;
4 4
5 use App\Http\Logic\Aside\Project\ProjectLogic; 5 use App\Http\Logic\Aside\Project\ProjectLogic;
  6 +use App\Models\NoticeLog;
6 use App\Utils\LogUtils; 7 use App\Utils\LogUtils;
7 8
8 /** 9 /**
@@ -25,9 +26,7 @@ class NoticeController extends BaseController @@ -25,9 +26,7 @@ class NoticeController extends BaseController
25 { 26 {
26 //首次 续费 27 //首次 续费
27 LogUtils::info('notice project', $this->param); 28 LogUtils::info('notice project', $this->param);
28 - if($this->param['order_type'] == '首次'){  
29 - $logic->sync($this->param);  
30 - } 29 + NoticeLog::createLog(NoticeLog::TYPE_PROJECT, $this->param);
31 return $this->success(); 30 return $this->success();
32 } 31 }
33 32
@@ -16,6 +16,7 @@ use App\Models\Project\DeployBuild; @@ -16,6 +16,7 @@ use App\Models\Project\DeployBuild;
16 use App\Models\Project\DeployOptimize; 16 use App\Models\Project\DeployOptimize;
17 use App\Models\Project\Payment; 17 use App\Models\Project\Payment;
18 use App\Models\Project\Project; 18 use App\Models\Project\Project;
  19 +use Illuminate\Support\Facades\Cache;
19 use Illuminate\Support\Facades\DB; 20 use Illuminate\Support\Facades\DB;
20 21
21 /** 22 /**
@@ -209,8 +210,13 @@ class ProjectLogic extends BaseLogic @@ -209,8 +210,13 @@ class ProjectLogic extends BaseLogic
209 210
210 211
211 public function sync($param){ 212 public function sync($param){
  213 + $num = Cache::get('project_' . date('Ymd'), 1);
  214 + $title = date('Ymd') . '-' . $num . '-' . $param['company_name'];
  215 + if($param['type'] == 4){
  216 + $title .= '【推广续费】';
  217 + }
212 $data = [ 218 $data = [
213 - 'title' => $param['company_name'], 219 + 'title' => $title,
214 'company' => $param['company_name'], 220 'company' => $param['company_name'],
215 'lead_name' => $param['principal_name'], 221 'lead_name' => $param['principal_name'],
216 'mobile' => $param['principal_mobile'], 222 'mobile' => $param['principal_mobile'],
@@ -241,6 +247,8 @@ class ProjectLogic extends BaseLogic @@ -241,6 +247,8 @@ class ProjectLogic extends BaseLogic
241 $this->saveDeployOptimize($data); 247 $this->saveDeployOptimize($data);
242 248
243 DB::commit(); 249 DB::commit();
  250 +
  251 + Cache::put('project_' . date('Ymd'), $num + 1, 24 * 60 * 60);
244 }catch (\Exception $e){ 252 }catch (\Exception $e){
245 DB::rollBack(); 253 DB::rollBack();
246 errorLog('项目同步失败', $data, $e); 254 errorLog('项目同步失败', $data, $e);
  1 +<?php
  2 +namespace App\Models;
  3 +
  4 +use App\Helper\Arr;
  5 +use Illuminate\Database\Eloquent\Model;
  6 +
  7 +class NoticeLog extends Model
  8 +{
  9 + //设置关联表名
  10 + protected $table = 'gl_notice_log';
  11 +
  12 + const TYPE_PROJECT = 'project';
  13 +
  14 + const STATUS_PENDING = 0;
  15 + const STATUS_SUCCESS = 1;
  16 + const STATUS_FAIL = 2;
  17 +
  18 + /**
  19 + * 创建日志
  20 + * @param $type
  21 + * @param $data
  22 + * @return mixed
  23 + */
  24 + public static function createLog($type, $data)
  25 + {
  26 + $log = new self();
  27 + $log->type = $type;
  28 + $log->data = $data;
  29 + return $log->save();
  30 + }
  31 +
  32 + public function setDataAttribute($value){
  33 + $this->attributes['data'] = Arr::a2s($value);
  34 + }
  35 +
  36 + public function getDataAttribute($value){
  37 + return Arr::s2a($value);
  38 + }
  39 +}