作者 赵彬吉
... ... @@ -36,6 +36,7 @@ class RemainDay extends Command
*/
protected $ceaseProjectId = [
354,
649,
1283
];//需要单独处理的项目
/**
... ... @@ -94,16 +95,16 @@ class RemainDay extends Command
}
}
$item->remain_day = ($remain_day > 0 ? $remain_day : 0);
if($item->remain_day == 0){
$item->extend_type = Project::TYPE_FIVE;
$item->site_status = Project::TYPE_ONE;//关闭站点
//TODO::未续费网站禁止登录及通知C端禁止网站
$domainModel = new DomainInfoModel();
$domainInfos = $domainModel->read(['project_id'=>$item->id]);
if($domainInfos !== false){
curl_get('https://'.$domainInfos['domain'].'/api/stop_or_start_website/');
}
}
// if($item->remain_day == 0){
// $item->extend_type = Project::TYPE_FIVE;
// $item->site_status = Project::TYPE_ONE;//关闭站点
// //TODO::未续费网站禁止登录及通知C端禁止网站
// $domainModel = new DomainInfoModel();
// $domainInfos = $domainModel->read(['project_id'=>$item->id]);
// if($domainInfos !== false){
// curl_get('https://'.$domainInfos['domain'].'/api/stop_or_start_website/');
// }
// }
$item->save();
}
}
... ...
<?php
/**
* @remark :
* @name :CountAllProject.php
* @author :lyh
* @method :post
* @time :2024/11/9 10:03
*/
namespace App\Console\Commands\Project;
use App\Models\Channel\Channel;
use App\Models\Domain\DomainInfo;
use App\Models\Manage\ManageHr;
use App\Models\Project\Project;
use Illuminate\Console\Command;
use App\Models\Project\CountAllProject as AllProject;
class CountAllProject extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'count_all_project';
/**
* The console command description.
*
* @var string
*/
protected $description = '统计所有项目设置';
public function handle(){
$noSixData = [];
// $noSixData = $this->NoSixProject();
$sixData = $this->sixProject();
$data = array_merge($noSixData,$sixData);
echo 'success:' .count($data) . PHP_EOL . date('Y-m-d H:i:s');
return true;
}
/**
* @remark :5.0数据
* @name :NoSixProject
* @author :lyh
* @method :post
* @time :2024/11/11 15:21
*/
public function NoSixProject(){
$res_data = [];
$i = 1;
while (true){
$url = 'https://quanqiusou.cn/extend_api/api/projects.php?page='.$i.'&pagesize=500';
$result = http_get($url);
$data = $result['data'];
if(empty($data)){
break;
}
$res_data = array_merge($res_data,$data['data']);
$i++;
}
return $res_data;
}
public function sixProject(){
$projectModel = new Project();
$manageModel = new ManageHr();
$i = 1;
while (true){
$query = $projectModel->leftJoin('gl_project_payment', 'gl_project.id', '=', 'gl_project_payment.project_id')
->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
->where('gl_project.delete_status',Project::TYPE_ZERO);
$lists = $query->paginate(500, $this->selectParam(), 'page', $i)->toArray();
if(empty($lists) || empty($lists['list'])){
break;
}
foreach ($lists['list'] as $k => $v){
$data[] = [
'project_id'=>$v['id'],
'version'=>1,//代表6.0
'is_upgrade'=>$v['is_upgrade'],
'title'=>$v['title'],
'company'=>$v['company'],
'channel'=>Channel::getChannelText($v['channel']['user_id'] ?? 0),
'join_date'=>$v['cooperate_date'],
'online_date'=>$v['uptime'],
'keywords_num'=>$v['key'],
'service_num'=>$v['day'],
'production_num'=>intval(abs(strtotime((empty($v['uptime']) ? date('Y-m-d H:i:s') : $v['uptime'])) - $v['created_at']) / 86400),
'plan'=>Project::planMap()[$v['plan']],
'status'=>$v['status'],
'test_domain'=>$v['test_domain'],
'product_domain'=>!empty($v['domain']) ? (new DomainInfo())->getDomain($v['domain']) : '',
'project_manager'=>$manageModel->getName($v['manager_mid'] ?? ''),
'project_group'=>$manageModel->getName($v['leader_mid'] ?? ''),
'project_design'=>$manageModel->getName($v['designer_mid'] ?? ''),
'project_assistant'=>$manageModel->getName($v['tech_mid'] ?? ''),
'service_manager'=>$manageModel->getName($v['optimize_manager_mid'] ??''),
'service_optimize'=>$manageModel->getName($v['optimize_optimist_mid'] ??''),
'service_assistant'=>$manageModel->getName($v['optimize_assist_mid'] ??''),
'qa'=>$manageModel->getName($v['quality_mid'] ??''),
];
}
$i++;
}
return $data;
}
/**
* 需要查询的字段
* @return array
*/
public function selectParam(){
$select = [
'gl_project.id AS id',
'gl_project.title AS title',
'gl_project.channel AS channel',
'gl_project.company AS company',
'gl_project.type AS type',
'gl_project.extend_type AS extend_type',
'gl_project.uptime AS uptime',
'gl_project.is_upgrade AS is_upgrade',
'gl_project.created_at AS created_at',
'gl_project.cooperate_date AS cooperate_date',
'gl_project.site_status AS site_status',
'gl_project_deploy_build.keyword_num AS key',
'gl_project_deploy_build.service_duration AS day',
'gl_project_deploy_build.is_comment AS is_comment',
'gl_project_deploy_build.leader_mid AS leader_mid',
'gl_project_deploy_build.manager_mid AS manager_mid',
'gl_project_deploy_build.designer_mid AS designer_mid',
'gl_project_deploy_build.tech_mid AS tech_mid',
'gl_project_deploy_build.test_domain AS test_domain',
'gl_project_deploy_build.plan AS plan',
'gl_project_deploy_optimize.dept_id AS optimize_dept_id',
'gl_project_deploy_optimize.manager_mid AS optimize_manager_mid',
'gl_project_deploy_optimize.optimist_mid AS optimize_optimist_mid',
'gl_project_deploy_optimize.assist_mid AS optimize_assist_mid',
'gl_project_deploy_optimize.tech_mid AS optimize_tech_mid',
'gl_project_deploy_optimize.tech_leader AS tech_leader',
'gl_project_deploy_optimize.domain AS domain',
'gl_project_deploy_optimize.api_no AS api_no',
];
return $select;
}
public function end_channel($channel){
$parts = explode("-", $channel);
return end($parts);
}
}
... ...
... ... @@ -56,30 +56,43 @@ class UpdateRoute extends Command
* @time :2023/11/20 15:13
*/
public function handle(){
$recordModel = new ProcessRecords();
$lists = $recordModel->list();
foreach ($lists as $k => $v){
$date = $v['record'][0]['date'];
$recordModel->edit(['date'=>$date],['id'=>$v['id']]);
}
// $projectModel = new Project();
// $list = $projectModel->list(['delete_status'=>['=',0]]);
// $data = [];
// foreach ($list as $v){
// echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
// ProjectServer::useProject($v['id']);
//// $this->getProduct();
//// $this->setProductKeyword();
//// $this->getBlog();
//// $this->setCustomRoute($v['id']);
// $this->editProductAlt();
//// $this->custom_to_blogs();
// DB::disconnect('custom_mysql');
// }
$projectModel = new Project();
$list = $projectModel->list(['id'=>['=',475]]);
$data = [];
foreach ($list as $v){
echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
ProjectServer::useProject($v['id']);
$this->updateProduct();
DB::disconnect('custom_mysql');
}
echo date('Y-m-d H:i:s') . 'end' . PHP_EOL;
}
/**
* @remark :更新产品
* @name :updateProduct
* @author :lyh
* @method :post
* @time :2024/11/11 13:59
*/
public function updateProduct(){
$productModel = new Product();
$list = $productModel->list(['created_at'=>['like','2024-11-11%']],'id',['id']);
$productModel->edit(['category_id'=>',14,'],['created_at'=>['like','2024-11-11%']]);
$data = [];
foreach ($list as $k => $v){
$data[] = [
'product_id'=>$v['id'],
'cate_id'=>14,
'created_at'=>date('Y-m-d H:i:s'),
'updated_at'=>date('Y-m-d H:i:s')
];
}
$relaModel = new CategoryRelated();
$relaModel->insert($data);
}
/**
* @remark :同步擴展模塊數據到blogs
* @name :custom_to_blogs
* @author :lyh
... ...
... ... @@ -863,6 +863,15 @@ function check_remote_url_down($url,$project_id,$domain,$is_complete=0){
$host_arr = explode('.',$host);
$path = $arr['path'] ?? '';
if(strpos($host_arr[0], 'cdn') !== false){
return $url;
}
//475项目特殊处理
if($project_id == 475 && $host == 'www.ebuyplc.com'){
$host = 'g934.goodao.net';
}
if($path && substr($path,0,1) != '/'){
$path = '/'.$path;
}
... ...
... ... @@ -371,6 +371,9 @@ class ProjectController extends BaseController
}
}
}
if(!empty($item['extend_type'])){
$item['type'] = $item['extend_type'];
}
$manageModel = new ManageHr();
$item['channel'] = Channel::getChannelText($item['channel']['user_id'] ?? 0);
$item['build_leader'] = $manageModel->getName($item['leader_mid']);
... ...
... ... @@ -11,50 +11,159 @@ namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\News\NewsLogic;
use App\Models\Channel\Channel;
use App\Models\CustomModule\CustomModuleContent;
use App\Models\Domain\DomainInfo;
use App\Models\Manage\ManageHr;
use App\Models\Project\CountAllProject as AllProject;
use App\Models\Project\Project;
use App\Models\RouteMap\RouteMap;
use App\Services\ProjectServer;
use Illuminate\Support\Facades\DB;
class TestController extends BaseController
{
/**
* @remark :非6.0拉取数据
* @name :NoSixProject
* @author :lyh
* @method :post
* @time :2024/11/11 14:51
*/
public function ceshi(){
$test = '';
$pattern = '/<img\s+[^>]*src=["\']([^"\']+)["\']/i';
$matches = [];
preg_match_all($pattern, $test, $matches);
$updatedSources = $this->saveBase64Images($matches[1]);
foreach($updatedSources as $k => $v){
$test = str_replace($v, $k, $test);
$data = $this->NoSixProject();
$this->response('success',Code::SUCCESS,$data);
}
public function NoSixProject(){
$res_data = [];
// $i = 1;
// while (true){
$url = 'https://quanqiusou.cn/extend_api/api/projects.php?page=200&pagesize=100';
$result = http_get($url);
$data = $result['data'];
// if(empty($data)){
// break;
// }
// $res_data = array_merge($res_data,$data['data']);
// $i++;
// }
return $data;
}
public function SixProject(){
$projectModel = new Project();
$query = $projectModel->leftJoin('gl_project_payment', 'gl_project.id', '=', 'gl_project_payment.project_id')
->leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
->where('gl_project.delete_status',Project::TYPE_ZERO);
$lists = $query->paginate(100000, $this->selectParam(), 'page', 1)->toArray();
$manageModel = new ManageHr();
foreach ($lists as $k => $v){
$allProjectModel = new AllProject();
$info = $allProjectModel->read(['version'=>1,'project_id'=>$v['id']],['id']);
if($info === false){
$channel = Channel::getChannelText($v['channel']['user_id'] ?? 0);
$data[] = [
'project_id'=>$v['id'],
'version'=>1,//代表6.0
'is_upgrade'=>$v['is_upgrade'],
'title'=>$v['title'],
'company'=>$v['company'],
'channel'=>$channel,
'sale'=>$this->end_channel($channel),
'join_date'=>$v['cooperate_date'],
'online_date'=>$v['uptime'],
'keywords_num'=>$v['key'],
'service_num'=>$v['day'],
'production_num'=>intval(abs(strtotime((empty($v['uptime']) ? date('Y-m-d H:i:s') : $v['uptime'])) - $v['created_at']) / 86400),
'plan'=>Project::planMap()[$v['plan']],
'status'=>$v['status'],
'test_domain'=>$v['test_domain'],
'product_domain'=>!empty($v['domain']) ? (new DomainInfo())->getDomain($v['domain']) : '',
'project_manager'=>$manageModel->getName($v['manager_mid'] ?? ''),
'project_group'=>$manageModel->getName($v['leader_mid'] ?? ''),
'project_design'=>$manageModel->getName($v['designer_mid'] ?? ''),
'project_assistant'=>$manageModel->getName($v['tech_mid'] ?? ''),
'service_manager'=>$manageModel->getName($v['optimize_manager_mid'] ??''),
'service_optimize'=>$manageModel->getName($v['optimize_optimist_mid'] ??''),
'service_assistant'=>$manageModel->getName($v['optimize_assist_mid'] ??''),
'qa'=>$manageModel->getName($v['quality_mid'] ??''),
];
$allProjectModel->add($data);
}else{
$data_edit = [
'title'=>$v['title'],
'company'=>$v['company'],
'channel'=>Channel::getChannelText($v['channel']['user_id'] ?? 0),
'sale'=>$this->end_channel($channel),
'join_date'=>$v['cooperate_date'],
'online_date'=>$v['uptime'],
'keywords_num'=>$v['key'],
'service_num'=>$v['day'],
'production_num'=>intval(abs(strtotime((empty($v['uptime']) ? date('Y-m-d H:i:s') : $v['uptime'])) - $v['created_at']) / 86400),
'plan'=>Project::planMap()[$v['plan']],
'status'=>$v['status'],
'test_domain'=>$v['test_domain'],
'product_domain'=>!empty($v['domain']) ? (new DomainInfo())->getDomain($v['domain']) : '',
'project_manager'=>$manageModel->getName($v['manager_mid'] ?? ''),
'project_group'=>$manageModel->getName($v['leader_mid'] ?? ''),
'project_design'=>$manageModel->getName($v['designer_mid'] ?? ''),
'project_assistant'=>$manageModel->getName($v['tech_mid'] ?? ''),
'service_manager'=>$manageModel->getName($v['optimize_manager_mid'] ??''),
'service_optimize'=>$manageModel->getName($v['optimize_optimist_mid'] ??''),
'service_assistant'=>$manageModel->getName($v['optimize_assist_mid'] ??''),
'qa'=>$manageModel->getName($v['quality_mid'] ??''),
];
$allProjectModel->edit($data_edit,['id'=>$info['id']]);
}
}
$this->response('success',Code::SUCCESS,$test);
}
/**
* @remark :解码图片
* @name :saveBase64Images
* @author :lyh
* @method :post
* @time :2024/11/7 16:52
* 需要查询的字段
* @return array
*/
public function saveBase64Images($imageSources) {
$updatedSources = [];
foreach ($imageSources as $src) {
// Check if src is a base64 image
if (preg_match('/^data:image\/(png|jpg|jpeg|gif);base64,/', $src, $match)) {
$imageType = $match[1]; // Image type (png, jpg, etc.)
$base64Data = preg_replace('/^data:image\/(png|jpg|jpeg|gif);base64,/', '', $src);
$decodedData = base64_decode($base64Data);
if ($decodedData === false) {
$updatedSources[] = $src; // If decoding fails, keep original src
continue;
}
$outputFile = 'images' . uniqid() . '.' . $imageType;
$imageUrl = 'http://your-domain.com/' . $outputFile;
$updatedSources[$imageUrl] = $src;
}
}
return $updatedSources;
}
public function selectParam(){
$select = [
'gl_project.id AS id',
'gl_project.title AS title',
'gl_project.channel AS channel',
'gl_project.company AS company',
'gl_project.type AS type',
'gl_project.extend_type AS extend_type',
'gl_project.uptime AS uptime',
'gl_project.is_upgrade AS is_upgrade',
'gl_project.created_at AS created_at',
'gl_project.cooperate_date AS cooperate_date',
'gl_project.site_status AS site_status',
'gl_project_deploy_build.keyword_num AS key',
'gl_project_deploy_build.service_duration AS day',
'gl_project_deploy_build.is_comment AS is_comment',
'gl_project_deploy_build.leader_mid AS leader_mid',
'gl_project_deploy_build.manager_mid AS manager_mid',
'gl_project_deploy_build.designer_mid AS designer_mid',
'gl_project_deploy_build.tech_mid AS tech_mid',
'gl_project_deploy_build.test_domain AS test_domain',
'gl_project_deploy_build.plan AS plan',
'gl_project_deploy_optimize.dept_id AS optimize_dept_id',
'gl_project_deploy_optimize.manager_mid AS optimize_manager_mid',
'gl_project_deploy_optimize.optimist_mid AS optimize_optimist_mid',
'gl_project_deploy_optimize.assist_mid AS optimize_assist_mid',
'gl_project_deploy_optimize.tech_mid AS optimize_tech_mid',
'gl_project_deploy_optimize.tech_leader AS tech_leader',
'gl_project_deploy_optimize.domain AS domain',
'gl_project_deploy_optimize.api_no AS api_no',
];
return $select;
}
public function end_channel($channel){
if(!empty($channel)){
$parts = explode("-", $channel);
return end($parts);
}
return $channel;
}
}
... ...
... ... @@ -68,6 +68,7 @@ class RenewLogic extends BaseLogic
* @time :2023/9/19 10:21
*/
public function editProjectRenew(){
if($this->param['renew_id'] != 0){
//获取续费单详情
$info = $this->model->read(['id'=>$this->param['renew_id']]);
if($info === false){
... ... @@ -76,11 +77,12 @@ class RenewLogic extends BaseLogic
if($info['project_id'] != 0){
$this->fail('当前续费单已关联项目,请重新选择');
}
}
DB::beginTransaction();
try {
$this->model->edit(['project_id'=>$this->param['id'],'operator_id'=>$this->manager['id']],['id'=>$this->param['renew_id']]);
$param = $this->param;
$param['api_no'] = $info['api_no'];
$param['api_no'] = $info['api_no'] ?? 0;
$this->saveLog($param);
$this->updateProject($this->param['id'],$this->param['type']);
$this->updateProjectBuild($this->param['id'],$this->param['service_duration'],$this->param['plan']);
... ...
<?php
/**
* @remark :
* @name :CountAllProject.php
* @author :lyh
* @method :post
* @time :2024/11/11 10:36
*/
namespace App\Models\Project;
use App\Models\Base;
class CountAllProject extends Base
{
protected $table = 'gl_count_all_project';
}
... ...