作者 赵彬吉
<?php
/**
* @remark :
* @name :RecommendedSuppliers.php
* @author :lyh
* @method :post
* @time :2024/3/5 11:27
*/
namespace App\Console\Commands\Suppliers;
use App\Models\Com\Purchaser;
use App\Models\Product\Keyword;
use App\Models\Project\DeployBuild;
use App\Models\Project\Project;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class RecommendedSuppliers extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'recommended_suppliers';
/**
* 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()
{
$projectModel = new DeployBuild();
$project_list = $projectModel->list(['is_supplier'=>1]);//TODO::已开启推荐供应商
foreach ($project_list as $k => $v){
echo date('Y-m-d H:i:s') . 'project_id:'.$v['project_id'] . PHP_EOL;
ProjectServer::useProject($v['id']);
$info = Keyword::inRandomOrder()->first();
if(empty($info)){
continue;
}
$keywordInfo = $this->getPurchaser($info['title']);
if($keywordInfo !== false){
continue;
}
echo date('Y-m-d H:i:s') . '开始:'.$v['project_id'] . PHP_EOL;
$this->savePurchaser($v['id'],$info['title']);
DB::disconnect('custom_mysql');
}
return true;
}
public function getPurchaser($keyword){
$purchaserModel = new Purchaser();
return $purchaserModel->read(['keyword'=>$keyword]);
}
/**
* @remark :保存供应商
* @name :getPurchaser
* @author :lyh
* @method :post
* @time :2024/3/5 11:38
*/
public function savePurchaser($project_id,$keyword,$row = 10){
$url = 'https://admin.hagro.cn/api/company_list';
$data = [
'prod_desc'=>$keyword = 'led',
'total'=>$row ?? 10,
];
ksort($data);
$token = 'company_list+'.date('Y-m-d').'+'.http_build_query($data);
echo date('Y-m-d H:i:s') . '加密token:'.md5($token) . PHP_EOL;
$param = [
'prod_desc'=>$keyword,
'token'=>md5($token),
'total'=>$this->param['row'] ?? 10,
];
$res = http_post($url,json_encode($param));
if(!empty($res) && $res['code'] == 200){
$saveData = [
'project_id'=>$project_id,
'keyword'=>$keyword,
'data'=>json_encode($res['data'])
];
$purchaserModel = new Purchaser();
$purchaserModel->add($saveData);
}
return true;
}
}
... ...
... ... @@ -265,25 +265,26 @@ class Demo extends Command
// print_r($include);
// }
public function handle(){
$projectModel = new Project();
$list = $projectModel->list(['delete_status'=>0,'type'=>['!=',0]]);
foreach ($list as $v1){
ProjectServer::useProject($v1['id']);
echo date('Y-m-d H:i:s') . '项目id:'.$v1['id'] . PHP_EOL;
$navGroupModel = new BNavGroup();
$groupList = $navGroupModel->list(['sort_list'=>['!=','']]);
if(empty($groupList)){
continue;
}
foreach ($groupList as $k=>$v){
if(!empty($v['sort_list'])){
$sort_list = json_decode($v['sort_list']);
$sort = 0;
$this->subSort($sort_list,$sort);
}
}
DB::disconnect('custom_mysql');
}
echo '加密字符串:'.md5('company_list+2024-03-05+prod_desc=led&total=10');
// $projectModel = new Project();
// $list = $projectModel->list(['delete_status'=>0,'type'=>['!=',0]]);
// foreach ($list as $v1){
// ProjectServer::useProject($v1['id']);
// echo date('Y-m-d H:i:s') . '项目id:'.$v1['id'] . PHP_EOL;
// $navGroupModel = new BNavGroup();
// $groupList = $navGroupModel->list(['sort_list'=>['!=','']]);
// if(empty($groupList)){
// continue;
// }
// foreach ($groupList as $k=>$v){
// if(!empty($v['sort_list'])){
// $sort_list = json_decode($v['sort_list']);
// $sort = 0;
// $this->subSort($sort_list,$sort);
// }
// }
// DB::disconnect('custom_mysql');
// }
return true;
}
... ...
... ... @@ -42,6 +42,8 @@ class Kernel extends ConsoleKernel
// $schedule->command('website_data')->dailyAt('01:00')->withoutOverlapping(1); // 向AICC推送数据
// $schedule->command('project_file_pdf')->dailyAt('00:00')->withoutOverlapping(1); // 网站项目数据,生成PDF文件
$schedule->command('sync_manager')->dailyAt('01:00')->withoutOverlapping(1); //TODO::手机号码同步 每天执行一次
$schedule->command('recommended_suppliers')->dailyAt('01:00')->withoutOverlapping(1); //每天凌晨1点执行一次生成推荐商
}
/**
... ...
... ... @@ -336,14 +336,17 @@ class ComController extends BaseController
* @time :2024/3/4 10:10
*/
public function recommendedPurchaser(){
$data = [];
$purchaserModel = new Purchaser();
$info = $purchaserModel->read(['project_id'=>$this->user['project_id']]);
if($info === false){
PurchaserJob::dispatch(['keyword'=>$this->param['keyword'] ?? 'led','row'=>$this->param['row'] ?? 10,'project_id'=>$this->user['project_id']]);
}else{
$data = json_decode($info['data']);
$data = [];
$lists = $purchaserModel->list(['project_id'=>$this->user['project_id']]);
if(!empty($lists)){
foreach ($lists as $v){
$resultData = json_decode($v['data']);
foreach ($resultData as $value){
$data[] = $value;
}
$this->response('数据生成中',Code::SUCCESS,$data);
}
}
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
... ... @@ -39,12 +39,11 @@ class LoginController extends BaseController
*/
public function login(){
$this->request->validate([
'mobile'=>['required', 'regex:/^1[3-9]\d{9}$/'],
'mobile'=>['required'],
'password'=>['required'],
],[
'mobile.required'=>'电话号码必须填写',
'password.required'=>'内容必须填写',
'mobile.regex' => '请输入正确的手机号码',
]);
$userLogic = new UserLoginLogic();
$project = $userLogic->login();
... ...
... ... @@ -67,7 +67,7 @@ class MailController extends BaseController
public function unreadNum(&$mailUserModel,$total){
//已读数量
$count = $mailUserModel->where(['user_id'=>$this->uid])->count();
$num = $total - $count;
$num = ($total - $count > 0) ? $total - $count : 0;
return $num;
}
... ...
<?php
/**
* @remark :
* @name :PurchaserJob.php
* @author :lyh
* @method :post
* @time :2024/3/4 11:06
*/
namespace App\Jobs;
use App\Models\Com\Purchaser;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class PurchaserJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $tries = 3; // 可配置任务重试次数
protected $param;
/**
* Create a new job instance.
*
* @param CopyImageFile $event
* @return void
*/
public function __construct($data)
{
$this->param = $data;
}
/**
* Handle the event.
*
* @param UpdateHtml $event
* @return void
*/
public function handle()
{
$this->param['keyword'] = 'led';
$url = 'https://admin.hagro.cn/api/company_list';
$data = [
'prod_desc'=>$this->param['keyword'],
'total'=>$this->param['row'] ?? 10,
];
arsort($data);
$token = 'company_list+'.date('Y-m-d').'+'.http_build_query($data);
$param = [
'prod_desc'=>$this->param['keyword'],
'token'=>md5($token),
'total'=>$this->param['row'] ?? 10,
];
$res = http_post($url,json_encode($param));
if(!empty($res) && $res['code'] == 200){
$saveData = [
'project_id'=>$this->param['project_id'],
'keyword'=>$this->param['keyword'],
'data'=>json_encode($res['data'])
];
$purchaserModel = new Purchaser();
$purchaserModel->add($saveData);
}
return true;
}
}