作者 赵彬吉

update

<?php
namespace App\Console\Commands;
use App\Helper\OaGlobalsoApi;
use App\Http\Logic\Aside\Project\ProjectLogic;
use App\Models\NoticeLog;
use App\Models\Project\Project;
use App\Utils\LogUtils;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
/**
* 同步项目信息
* Class ChannelInfo
* @package App\Console\Commands
* @author zbj
* @date 2023/6/27
*/
class SyncProject extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'sync_project';
/**
* The console command description.
*
* @var string
*/
protected $description = '同步项目信息';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* @return bool
*/
public function handle()
{
$list = NoticeLog::where('type', NoticeLog::TYPE_PROJECT)->where('status', NoticeLog::STATUS_PENDING)->get();
foreach ($list as $item){
try {
$api = new OaGlobalsoApi();
$data = $api->order_info($item['data']['order_id']);
if(!$data || empty($data['data'])){
LogUtils::error('OaGlobalsoApi order_info error', $data);
$this->retry($item);
}
if($data['data']['order_type'] == '首次'){
$data['data']['type'] = 1; //建站进程中
}
if($data['data']['order_type'] == '续费'){
$data['data']['type'] = 4; //续费记录单
}
ProjectLogic::instance()->sync($data['data']);
$item->status = NoticeLog::STATUS_SUCCESS;
$item->save();
}catch (\Exception $e){
errorLog('项目同步失败', $item, $e);
$this->retry($item);
}
}
}
/**
* @param NoticeLog $log
*/
public function retry($log){
if($log->retry >= 3){
$log->status = NoticeLog::STATUS_FAIL;
}else{
$log->retry = $log->retry + 1;
}
$log->save();
}
}
... ...
... ... @@ -28,6 +28,7 @@ class Kernel extends ConsoleKernel
$schedule->command('web_traffic 2')->cron('*/18 * * * *'); // 引流 4-8个月的项目,18分钟一次
$schedule->command('web_traffic 3')->cron('*/12 * * * *'); // 引流 大于9个月的项目,12分钟一次
$schedule->command('sync_channel')->dailyAt('06:00')->withoutOverlapping(1); // 渠道信息,每周执行一次
$schedule->command('sync_project')->everyMinute()->withoutOverlapping(1); //同步项目
// // 更新域名|证书结束时间,每天凌晨1点执行一次
// $schedule->command('domain_time')->dailyAt('01:00')->withoutOverlapping(1);
// // B站 - 网站数据统计
... ...
... ... @@ -3,6 +3,7 @@
namespace App\Http\Controllers\Aside;
use App\Http\Logic\Aside\Project\ProjectLogic;
use App\Models\NoticeLog;
use App\Utils\LogUtils;
/**
... ... @@ -25,9 +26,7 @@ class NoticeController extends BaseController
{
//首次 续费
LogUtils::info('notice project', $this->param);
if($this->param['order_type'] == '首次'){
$logic->sync($this->param);
}
NoticeLog::createLog(NoticeLog::TYPE_PROJECT, $this->param);
return $this->success();
}
... ...
... ... @@ -16,6 +16,7 @@ use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Payment;
use App\Models\Project\Project;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
/**
... ... @@ -209,8 +210,13 @@ class ProjectLogic extends BaseLogic
public function sync($param){
$num = Cache::get('project_' . date('Ymd'), 1);
$title = date('Ymd') . '-' . $num . '-' . $param['company_name'];
if($param['type'] == 4){
$title .= '【推广续费】';
}
$data = [
'title' => $param['company_name'],
'title' => $title,
'company' => $param['company_name'],
'lead_name' => $param['principal_name'],
'mobile' => $param['principal_mobile'],
... ... @@ -241,6 +247,8 @@ class ProjectLogic extends BaseLogic
$this->saveDeployOptimize($data);
DB::commit();
Cache::put('project_' . date('Ymd'), $num + 1, 24 * 60 * 60);
}catch (\Exception $e){
DB::rollBack();
errorLog('项目同步失败', $data, $e);
... ...
<?php
namespace App\Models;
use App\Helper\Arr;
use Illuminate\Database\Eloquent\Model;
class NoticeLog extends Model
{
//设置关联表名
protected $table = 'gl_notice_log';
const TYPE_PROJECT = 'project';
const STATUS_PENDING = 0;
const STATUS_SUCCESS = 1;
const STATUS_FAIL = 2;
/**
* 创建日志
* @param $type
* @param $data
* @return mixed
*/
public static function createLog($type, $data)
{
$log = new self();
$log->type = $type;
$log->data = $data;
return $log->save();
}
public function setDataAttribute($value){
$this->attributes['data'] = Arr::a2s($value);
}
public function getDataAttribute($value){
return Arr::s2a($value);
}
}
... ...