作者 刘锟

Merge remote-tracking branch 'origin/master' into akun

... ... @@ -28,7 +28,7 @@ class RemainDay extends Command
* @var 按上线时间统计
*/
protected $projectId = [
1434,1812
1434,1812,276
];//需要单独处理的项目
/**
... ...
... ... @@ -232,4 +232,17 @@ class Arr extends \Illuminate\Support\Arr
}
}
}
/**
* 一行一行的转为数组
* @author zbj
* @date 2024/9/6
*/
public static function lineToArray($arr){
$arr = is_array($arr) ? $arr : [$arr];
$array = array_merge(...array_map(function($item) {
return array_map('trim', preg_split('/\r?\n/', $item));
}, $arr));
return array_values(array_unique(array_filter($array)));
}
}
... ...
... ... @@ -12,6 +12,7 @@ use App\Http\Logic\Bside\User\UserLoginLogic;
use App\Models\Domain\DomainInfo;
use App\Models\Product\Category;
use App\Models\Product\CategoryRelated;
use App\Models\Product\Keyword;
use App\Models\Product\Product;
use App\Models\Project\OnlineCheck;
use App\Models\Project\Project;
... ... @@ -151,11 +152,7 @@ class PrivateController extends BaseController
}
/**
* @remark :模拟登录返回token
* @name :getToken
* @author :lyh
* @method :post
* @time :2024/3/29 16:19
* 模拟登录返回token
*/
public function getAutoToken(){
$this->request->validate([
... ... @@ -201,4 +198,96 @@ class PrivateController extends BaseController
$product_route = Product::where(['status' => Product::STATUS_ON])->whereNotIn('id', $feature_product)->pluck('route')->toArray();
return $this->success($product_route);
}
/**
* 获取项目信息---站群服务
* @param Request $request
* @return false|string
*/
public function getProjectByDomain(Request $request)
{
$domain = trim($request->input('domain'));
if (empty($domain)) {
return $this->error('非法参数!');
}
$project = Project::getProjectByDomain($domain);
if (empty($project)) {
return $this->error('未找到当前域名对应的项目!');
}
$optimize = $project->optimize;
$keyword = $project->project_keyword;
$keywords = explode("\r\n", $keyword ? $keyword->main_keyword : []);
$result = [
'company' => $project->company,
'company_en_name' => $optimize ? $optimize->company_en_name : '',
'company_en_description' => $optimize ? $optimize->company_en_description : '',
'keywords' => $keywords
];
return $this->success($result);
}
/**
* 获取产品信息---站群服务
* @param Request $request
* @return false|string
*/
public function getProjectProduct(Request $request)
{
$domain = trim($request->input('domain'));
$page_size = intval($request->input('page_size', 20));
if (empty($domain)) {
return $this->error('非法参数!');
}
$project = Project::getProjectByDomain($domain);
if (empty($project)) {
return $this->error('未找到当前域名对应的项目!');
}
ProjectServer::useProject($project->id);
$products = Product::with('category')->where(['status' => Product::STATUS_ON])->paginate($page_size);
// $products_ids = $products->pluck('id')->toArray();
// $category_ids = CategoryRelated::whereIn('product_id', $products_ids)->pluck('cate_id')->toArray();
// $category = Category::whereIn('id', $category_ids)->pluck('title', 'id')->toArray();
$keyword_id = $products->pluck('keyword_id')->toArray();
$keyword_ids = array_reduce($keyword_id, 'array_merge', array());
$keyword = Keyword::whereIn('id', $keyword_ids)->pluck('title', 'id')->toArray();
$result = [];
foreach ($products as $product) {
$product_keyword = [];
foreach ($product->keyword_id as $k_id) {
array_push($product_keyword, $keyword[$k_id]);
}
$product_category = $product->category->pluck('title')->toArray();
$result[] = [
'title' => $product->title,
'thumb' => $product->thumb,
'gallery' => $product->gallery,
'intro' => $product->intro,
'content' => $product->content,
'category' => $product_category,
'keyword' => $product_keyword,
'route' => $product->route
];
}
return $this->success($result);
}
/**
* 获取上线项目 --- 监控服务
* @param Request $request
* @return false|string
*/
public function getProjectOnline(Request $request)
{
$page_size = intval($request->input('page_size', 20));
$projects = Project::select(['id', 'title', 'company', 'type', 'finish_remain_day', 'remain_day'])->whereIn('type', [2, 3, 4, 6])->where('delete_status', 0)->paginate($page_size);
foreach ($projects as $project) {
$project->domain = $project->domainInfo ? $project->domainInfo->domain : '';
}
return $this->success($projects);
}
}
... ...
<?php
/**
* @remark :
* @name :ExtensionModuleController.php
* @author :lyh
* @method :post
* @time :2024/8/7 16:15
*/
namespace App\Http\Controllers\Bside\ExtensionModule;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\ExtensionModule\ExtensionModuleFieldLogic;
use App\Models\ExtentModule\Extension2205ModuleValueLog;
use App\Models\ExtentModule\ExtensionModule;
use App\Models\ExtentModule\ExtensionModuleField;
use App\Models\ExtentModule\ExtensionModuleValue;
use Illuminate\Support\Facades\DB;
/**
* @remark :单独处理2205项目扩展
* @name :Extension2205ModuleController
* @author :lyh
* @method :post
* @time :2024/9/4 14:32
*/
class Extension2205ModuleController extends BaseController
{
/**
* @remark :
* @name :get2205List
* @author :lyh
* @method :post
* @time :2024/9/4 16:28
*/
public function get2205List(){
$this->request->validate([
'uuid'=>'required',
],[
'uuid.required' => 'uuid不能为空',
]);
$log2205Model = new Extension2205ModuleValueLog();
$lists = $log2205Model->list(['module_id'=>1,'uuid'=>$this->param['uuid']]);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @remark :流程控制处理(2205)
* @name :save2205Status
* @author :lyh
* @method :post
* @time :2024/9/4 14:34
*/
public function save2205Status(){
$this->request->validate([
'uuid'=>'required',
'status'=>'required',
'date'=>'required',
],[
'uuid.required' => 'uuid不能为空',
'status.required' => 'status不能为空',
'date.required' => 'status不能为空',
]);
if(empty($this->param['status']) || empty($this->param['date'])){
$this->response('success');
}
if($this->user['project_id'] != 2205){
$this->fail('当前接口为2205私有接口');
}
$this->param['module_id'] = $this->param['module_id'] ?? 1;
$filedModel = new ExtensionModuleField();
$fileInfo = $filedModel->read(['id'=>12]);//获取当前下拉框的数据
if($fileInfo === false){
$this->fail('当前字段不存在');
}
$statusData = json_decode($fileInfo['data'],true);
$data = [];
$number = 1;
foreach ($statusData as $v){
$data[$v] = $number;
$number++;
}
$log2205Model = new Extension2205ModuleValueLog();
$log2205Info = $log2205Model->read(['module_id'=>$this->param['module_id'],'uuid'=>$this->param['uuid'],'status'=>$this->param['status']]);
if($log2205Info == false){
$data = [
'module_id'=>$this->param['module_id'],
'uuid'=>$this->param['uuid'],
'status'=>$this->param['status'],
'date'=>$this->param['date'],
'remark'=>$this->param['remark'] ?? ''
];
$id = $log2205Model->addReturnId($data);
}else{
$id = $log2205Info['id'];
$data = [
'date'=>$this->param['date'],
'remark'=>$this->param['remark'] ?? ''
];
$log2205Model->edit($data,['id'=>$log2205Info['id']]);
}
$this->response('success',Code::SUCCESS,['id'=>$id]);
}
}
... ...
... ... @@ -184,6 +184,13 @@ class ExtensionModuleController extends BaseController
foreach ($data as $k => $v){
$info = $moduleValueModel->read(['uuid'=>$this->param['uuid'],'field_id'=>$v['field_id'],'module_id'=>$this->param['module_id']]);
if($info === false){
if($this->user['project_id'] == 2205 && $this->param['module_id'] == 1){
if($v['field_id'] == 12 && !empty($v['value'])){//下拉框数据
if($v['value'] != 'Ordered'){
$this->fail('请从第一个流程开始选择。');
}
}
}
$data = [
'uuid'=>$this->param['uuid'],
'module_id'=>$this->param['module_id'],
... ... @@ -192,12 +199,29 @@ class ExtensionModuleController extends BaseController
];
$moduleValueModel->addReturnId($data);
}else{
if($this->user['project_id'] == 2205 && $this->param['module_id'] == 1){
if($v['field_id'] == 12 && (!empty($v['value']) && !empty($info['value']))){//下拉框数据
$filedModel = new ExtensionModuleField();
$fileInfo = $filedModel->read(['id'=>12]);//获取当前下拉框的数据
$statusData = json_decode($fileInfo['data'],true);
$status_data = [];
$number = 1;
foreach ($statusData as $value){
$status_data[$value] = $number;
$number++;
}
if($status_data[$info['value']] > $status_data[$v['value']]){
$this->fail('流程控制不能回滚');
}
}
}
$moduleValueModel->edit(['value'=>$v['value'] ?? ''],['id'=>$info['id']]);
}
}
$this->response('success',Code::SUCCESS,['uuid'=>$this->param['uuid']]);
}
/**
* @remark :新增數據
* @name :addModuleValue
... ... @@ -222,6 +246,13 @@ class ExtensionModuleController extends BaseController
$data = $this->param['data'];
$moduleValueModel = new ExtensionModuleValue();
foreach ($data as $k => $v){
if($this->user['project_id'] == 2205 && $this->param['module_id'] == 1){
if($v['field_id'] == 12 && !empty($v['value'])){//下拉框数据
if($v['value'] != 'Ordered'){
$this->fail('请重第一个流程开始选择');
}
}
}
$data = [
'uuid'=>$uuid,
'module_id'=>$this->param['module_id'],
... ...
... ... @@ -7,6 +7,7 @@ use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Inquiry\InquiryLogic;
use App\Models\Inquiry\InquiryForm;
use App\Models\Inquiry\PhoneData;
use App\Rules\Ids;
use App\Services\BatchExportService;
use Illuminate\Http\Request;
... ... @@ -45,6 +46,35 @@ class InquiryController extends BaseController
}else{
$data = $logic->getApiList();
}
if(!empty($data) && !empty($data['list'])){
foreach ($data['list'] as $k => &$v){
if(isset($v['phone']) && !empty($v['phone'])){
$phoneInfo = (new PhoneData())->read(['phone'=>$v['phone']]);
if($phoneInfo === false){
$v['phone_data'] = [];
}else{
$v['phone_data'] = json_decode($phoneInfo['data']);
}
}
}
}
$this->response('success',Code::SUCCESS,$data);
}
/**
* @remark :发送请求(获取手机号码对应信息)
* @name :sendMobileVerifyData
* @author :lyh
* @method :post
* @time :2024/9/5 17:44
*/
public function sendMobileVerifyData(InquiryLogic $logic){
$this->request->validate([
'phone' => 'required',
],[
'phone.required' => 'phone不能为空'
]);
$data = $logic->sendMobileVerifyData($this->param['phone']);
$this->response('success',Code::SUCCESS,$data);
}
... ...
... ... @@ -29,6 +29,9 @@ class EmailController extends BaseController
public function list(Email $emailModel)
{
if(!empty($this->param['email'])){
$this->map['email'] = ['like','%'.$this->param['email'].'%'];
}
$lists = $emailModel->lists($this->map, $this->page, $this->row);
$this->response('success', Code::SUCCESS, $lists);
}
... ...
... ... @@ -489,13 +489,13 @@ class ProjectLogic extends BaseLogic
*/
public function saveInquiryFilterConfig($config){
$config['filter_countries'] = Arr::a2s(!empty($config['filter_countries']) ? $config['filter_countries'] : []);
$config['filter_contents'] = Arr::a2s(!empty($config['filter_contents']) ? $config['filter_contents'] : []);
$config['filter_referers'] = Arr::a2s(!empty($config['filter_referers']) ? $config['filter_referers'] : []);
$config['filter_emails'] = Arr::a2s(!empty($config['filter_emails']) ? $config['filter_emails'] : []);
$config['filter_mobiles'] = Arr::a2s(!empty($config['filter_mobiles']) ? $config['filter_mobiles'] : []);
$config['filter_names'] = Arr::a2s(!empty($config['filter_names']) ? $config['filter_names'] : []);
$config['black_ips'] = $config['black_ips'] ?? '';
$config['filter_countries'] = !empty($config['filter_countries']) ? Arr::lineToArray($config['filter_countries']) : [];
$config['filter_contents'] = !empty($config['filter_contents']) ? Arr::lineToArray($config['filter_contents']) : [];
$config['filter_referers'] = !empty($config['filter_referers']) ? Arr::lineToArray($config['filter_referers']) : [];
$config['filter_emails'] = !empty($config['filter_emails']) ? Arr::lineToArray($config['filter_emails']) : [];
$config['filter_mobiles'] = !empty($config['filter_mobiles']) ? Arr::lineToArray($config['filter_mobiles']) : [];
$config['filter_names'] = !empty($config['filter_names']) ? Arr::lineToArray($config['filter_names']) : [];
$config['black_ips'] = !empty($config['black_ips']) ? Arr::lineToArray($config['black_ips']) : [];
$model = InquiryFilterConfig::where('project_id', $config['project_id'])->first();
if(!$model){
... ...
... ... @@ -11,6 +11,7 @@ use App\Models\Domain\DomainInfo;
use App\Models\Inquiry\InquiryForm;
use App\Models\Inquiry\InquiryFormData;
use App\Models\Inquiry\InquiryOther;
use App\Models\Inquiry\PhoneData;
use Illuminate\Support\Facades\DB;
/**
... ... @@ -175,6 +176,28 @@ class InquiryLogic extends BaseLogic
return $this->success();
}
/**
* @remark :获取手机号码下是否拥有wa
* @name :sendMobileVerifyData
* @author :lyh
* @method :post
* @time :2024/9/5 17:40
*/
public function sendMobileVerifyData($phone){
$phoneDataModel = new PhoneData();
$info = $phoneDataModel->read(['phone'=>$phone]);
if($info === false){
$url = 'https://fob.ai.cc/api/mobile_verify_data/'.$phone;
$data = http_get($url);
$param = [
'phone'=>$phone,
'data'=>json_encode($data,true)
];
(new PhoneData())->addReturnId($param);
}else{
$data = json_decode($info['data']);
}
return $this->success(['data'=>$data]);
}
}
... ...
... ... @@ -45,8 +45,8 @@ class NewsCategoryLogic extends BaseLogic
public function newsCategorySave(){
//验证名称是否存在
$this->verifyParamName($this->param['name']);
// DB::beginTransaction();
// try {
DB::beginTransaction();
try {
if(isset($this->param['id']) && !empty($this->param['id'])){
$id = $this->param['id'];
$this->param['alias'] = RouteMap::setRoute($this->param['alias'], RouteMap::SOURCE_NEWS_CATE, $id, $this->user['project_id']);
... ... @@ -62,11 +62,11 @@ class NewsCategoryLogic extends BaseLogic
$route = RouteMap::setRoute($this->param['alias'], RouteMap::SOURCE_NEWS_CATE, $id, $this->user['project_id']);
$this->model->edit(['alias'=>$route],['id'=>$id]);
}
// DB::commit();
// }catch (\Exception $e){
// DB::rollBack();
// $this->fail('系统错误,请联系管理员');
// }
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('系统错误,请联系管理员');
}
$this->addUpdateNotify(RouteMap::SOURCE_NEWS_CATE,$route);
$this->curlDelRoute(['new_route'=>$route]);
return $this->success(['id'=>$id]);
... ...
... ... @@ -794,7 +794,6 @@ class RankDataLogic extends BaseLogic
if (!$rank_week) {
$rank_week = new RankWeekModel();
}
$rank_week->project_id = $project_id;
$rank_week->data = $res['data'][$api_no] ?? [];
$rank_week->date = $res['date'];
... ...
<?php
/**
* @remark :
* @name :ExtensionModuleValue.php
* @author :lyh
* @method :post
* @time :2024/8/7 16:10
*/
namespace App\Models\ExtentModule;
use App\Models\Base;
/**
* @remark :2205单独的类
* @name :Extension2205ModuleValueLog
* @author :lyh
* @method :post
* @time :2024/9/4 14:50
*/
class Extension2205ModuleValueLog extends Base
{
protected $table = 'gl_extension_module_value_log';
//连接数据库
protected $connection = 'custom_mysql';
}
... ...
... ... @@ -72,9 +72,13 @@ class InquiryForm extends Base
unset($data['globalso-domain']);
unset($data['globalso-edition']);
unset($data['globalso-date']);
foreach ($data as $k => $v){
if(in_array($k, ['name', 'email', 'message']) && empty($v)){
//特殊处理1986的表单
if($k == 'message' && $data['project_id'] == 1986){
continue;
}
unset($data[$k]);
}
}
... ...
<?php
/**
* @remark :
* @name :PhoneData.php
* @author :lyh
* @method :post
* @time :2024/9/5 15:08
*/
namespace App\Models\Inquiry;
use App\Models\Base;
class PhoneData extends Base
{
protected $connection = "custom_mysql";
protected $table = 'gl_phone_data';
}
... ...
... ... @@ -24,6 +24,7 @@ class InquiryFilterConfig extends Base
'filter_emails' => 'array',
'filter_mobiles' => 'array',
'filter_names' => 'array',
'black_ips' => 'array',
];
/**
... ...
... ... @@ -271,7 +271,7 @@ class SyncSubmitTaskService
}
//过滤ip
if($config['black_ips']){
$black_ips = explode("\r\n", $config['black_ips']);
$black_ips = $config['black_ips'];
//后端获取的ip
if(in_array($data['ip'], $black_ips)){
throw new InquiryFilterException( '过滤黑名单IP:' . $data['ip']);
... ...
... ... @@ -39,6 +39,15 @@ Route::any('getAutoToken', [\App\Http\Controllers\Api\PrivateController::class,
// 特殊项目 有效产品路由
Route::any('valid_product_route', [\App\Http\Controllers\Api\PrivateController::class, 'getProductRoute'])->name('api.valid_product_route');
// --------------------- 站群服务 ------------------------------------------
// 获取项目信息
Route::any('get_project_detail', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectByDomain'])->name('api.project_detail');
// 获取项目产品信息
Route::any('get_project_product', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectProduct'])->name('api.project_product');
// --------------------- 站群服务 ------------------------------------------
// --------------------- 监控服务 ------------------------------------------
Route::any('get_project_online', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectOnline'])->name('api.get_project_online');
//自建站接口转接
Route::post('selfSiteApi', [\App\Http\Controllers\Api\SelfSiteController::class, 'selfSiteApi']);
Route::post('selfSiteNotify', [\App\Http\Controllers\Api\SelfSiteController::class, 'selfSiteNotify']);
... ...
... ... @@ -341,6 +341,7 @@ Route::middleware(['bloginauth'])->group(function () {
Route::any('/info', [\App\Http\Controllers\Bside\Inquiry\InquiryController::class, 'info'])->name('inquiry_info');
Route::any('/delete', [\App\Http\Controllers\Bside\Inquiry\InquiryController::class, 'delete'])->name('inquiry_delete');
Route::any('/export', [\App\Http\Controllers\Bside\Inquiry\InquiryController::class, 'export'])->name('inquiry_export');
Route::any('/send', [\App\Http\Controllers\Bside\Inquiry\InquiryController::class, 'sendMobileVerifyData'])->name('inquiry_sendMobileVerifyData');
});
//生成路由
... ... @@ -593,6 +594,9 @@ Route::middleware(['bloginauth'])->group(function () {
Route::any('/setSort', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'setSort'])->name('extension_module_setSort');
Route::any('/setSearchParam', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'setSearchParam'])->name('extension_module_setSearchParam');
Route::any('/delExtensionValue', [\App\Http\Controllers\Bside\ExtensionModule\ExtensionModuleController::class, 'delExtensionValue'])->name('extension_module_delExtensionValue');
//2205项目单独处理
Route::any('2205/get2205List', [\App\Http\Controllers\Bside\ExtensionModule\Extension2205ModuleController::class, 'get2205List'])->name('extension_module_get2205List');
Route::any('2205/save2205Status', [\App\Http\Controllers\Bside\ExtensionModule\Extension2205ModuleController::class, 'save2205Status'])->name('extension_module_save2205Status');
});
//自定义小语种文本信息
... ...