作者 刘锟

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

... ... @@ -2,21 +2,10 @@
namespace App\Console\Commands;
use App\Helper\Arr;
use App\Helper\Common;
use App\Helper\Gpt;
use App\Helper\Translate;
use App\Http\Logic\Aside\Project\ProjectLogic;
use App\Models\Ai\AiCommand;
use App\Models\Mail\Mail;
use App\Models\Project\DeployOptimize;
use App\Models\Project\ProjectUpdateTdk;
use App\Models\User\User;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
/**
* 清除项目sdk
... ...
... ... @@ -33,7 +33,7 @@ class UpgradeProjectCount extends Command
protected $description = '升级项目统计';
public function handle(){
$project_id = 528;
$project_id = 769;
ProjectServer::useProject($project_id);
$this->count($project_id);
DB::disconnect('custom_mysql');
... ...
... ... @@ -36,7 +36,7 @@ class UpgradeProjectCount extends Command
protected $description = '升级项目统计';
public function handle(){
$project_id = 528;
$project_id = 769;
$oldModel = new UpdateOldInfo();
$info = $oldModel->read(['project_id'=>$project_id]);
$url = $info['old_domain_online'];
... ...
... ... @@ -30,7 +30,7 @@ class SyncMobile extends Command
protected $description = '同步手机号码库';
/**
* @remark :统一更新路由
* @remark :统一更新
* @name :handle
* @author :lyh
* @method :post
... ...
... ... @@ -2,21 +2,10 @@
namespace App\Console\Commands;
use App\Helper\Arr;
use App\Helper\Common;
use App\Helper\Gpt;
use App\Helper\Translate;
use App\Models\Ai\AiCommand;
use App\Models\Mail\Mail;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Project;
use App\Models\Project\ProjectUpdateTdk;
use App\Models\User\User;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
/**
* 初始化项目
... ...
... ... @@ -2,21 +2,9 @@
namespace App\Console\Commands;
use App\Helper\Arr;
use App\Helper\Common;
use App\Helper\Gpt;
use App\Helper\Translate;
use App\Models\Ai\AiCommand;
use App\Models\Mail\Mail;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Project;
use App\Models\Project\ProjectUpdateTdk;
use App\Models\User\User;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
/**
* 初始化项目
... ...
<?php
namespace App\Http\Controllers\Api;
use App\Exceptions\InquiryFilterException;
use App\Models\SyncSubmitTask\SyncSubmitTask;
use App\Services\CosService;
use Illuminate\Http\Request;
/**
* Class InquiryController
* @package App\Http\Controllers\Api
* @author zbj
* @date 2024/2/2
*/
class InquiryController extends BaseController
{
/**
* 提交询盘
* C端部署自己服务器的
* @param Request $request
* @return false|string
* @author zbj
* @date 2024/2/2
*/
public function submit(Request $request){
$data = $request->post();
@file_put_contents(storage_path('logs/form_submit_' . date('Y-m-d') . '.log'), var_export(date('Y-m-d H:i:s') . "-询盘表单提交数据:" . json_encode($data), true) . PHP_EOL, FILE_APPEND);
try {
$files = $request->allFiles()['data'] ?? [];
foreach ($files as $key => $file) {
$cos = new CosService();
$fileinfo = $cos->checkInquiryFile($file);
$fileName = uniqid().rand(10000,99999).'.'.$file->getClientOriginalExtension();
$path = $cos->uploadFile($file, '/inquiry/'. date('Ymd'), $fileName);
$data['data'][$key] = [
'path' => $path,
'original_name' => $fileinfo['name'],
];
}
}catch (InquiryFilterException $e){
return $this->error($e->getMessage());
}catch (\Exception $e){
return $this->error('File upload fail');
}
//异步处理
if(!SyncSubmitTask::addTask(SyncSubmitTask::TYPE_INQUIRY, $data)){
return $this->error();
}
return $this->success();
}
}
... ...
... ... @@ -32,14 +32,15 @@ class ProductController extends BaseController
}
try {
$gallery = Product::where('status', Product::STATUS_ON)->whereNotNull('gallery')->inRandomOrder()->value('gallery');
$gallery = array_map(function ($item) use ($project) {
return getImageUrl($item, $project['storage_type'], $project['project_location']);
}, Arr::pluck($gallery, 'url'));
$info = Product::where('status', Product::STATUS_ON)->whereNotNull('gallery')->inRandomOrder()->select(['title', 'seo_mate', 'gallery'])->first();
$info['gallery'] = array_map(function ($item) use ($project) {
$item['url'] = getImageUrl($item['url'], $project['storage_type'], $project['project_location']);
return $item;
}, $info['gallery']);
} catch (\Exception $e) {
LogUtils::error('Project Id: ' . $project_id . ' getProductImages error:' . $e->getMessage());
$gallery = [];
$info = [];
}
$this->response('success', Code::SUCCESS, $gallery);
$this->response('success', Code::SUCCESS, $info);
}
}
... ...
... ... @@ -64,7 +64,7 @@ class NavController extends BaseController
$param['image'] = getImageUrl($param['image'],$this->user['storage_type'],$this->user['project_location']);
}
if(isset($param['remark_image']) && !empty($param['remark_image'])){
$param['remark_image'] = getImageUrl($param['image'],$this->user['storage_type'],$this->user['project_location']);
$param['remark_image'] = getImageUrl($param['remark_image'],$this->user['storage_type'],$this->user['project_location']);
}
return $this->success($param);
}
... ...
<?php
/**
* @remark :
* @name :UpdateHtml.php
* @author :lyh
* @method :post
* @time :2024/2/2 10:11
*/
namespace App\Http\Controllers\Html;
use App\Http\Controllers\Controller;
use App\Models\Com\NoticeLog;
use App\Models\Project\Project;
use App\Models\RouteMap\RouteMap;
use App\Models\Service\Service as ServiceSettingModel;
use App\Models\Template\BTemplate;
use App\Services\ProjectServer;
use Illuminate\Support\Facades\DB;
class UpdateHtml extends Controller
{
protected $param;
protected $project_id;
public function __construct($data){
$this->param = $data;//Todo::传递的参数
$this->project_id = $data['project_id'];
}
/**
* @remark :更新界面
* @name :updateHtml
* @author :lyh
* @method :post
* @time :2024/2/2 10:12
*/
public function updateHtml(){
ProjectServer::useProject($this->project_id);
if(isset($this->param['route']) && $this->param['route'] == 'all'){
//TODO::更新所有界面
}else{
//TODO::更新单页
$routeMapModel = new RouteMap();
}
DB::disconnect('custom_mysql');
}
/**
* @remark :获取页面是否为 定制/非定制 页面
* @name :getPageHtmlIsCustomized
* @param :source:类型;is_list:是否为列表页 1:列表页面
* @author :lyh
* @method :post
* @time :2024/2/2 11:03
*/
public function getPageHtmlIsCustomized($source,$is_list){
$type = $this->getCustomizedType($source, $is_list);//获取定制界面类型
//查看当前页面是否定制,是否开启可视化
$page_array = (array)$this->user['is_visualization']->page_array;//获取所有定制界面
if (in_array($type, $page_array)) {//是定制界面
return BTemplate::IS_VISUALIZATION;
}
return BTemplate::IS_NO_VISUALIZATION;
}
/**
* @remark :获取头部底部公共部分代码
* @name :getTemplateCommon
* @author :lyh
* @method :post
* @time :2024/2/2 11:02
*/
public function getTemplateCommon(){
}
/**
* @remark :获取装修中间内容
* @name :getTemplateMainHtml
* @author :lyh
* @method :post
* @time :2024/2/2 11:01
*/
public function getTemplateMainHtml(){
}
/**
* @remark :获取项目详情
* @name :getProjectInfo
* @author :lyh
* @method :post
* @time :2024/2/2 10:50
*/
public function getProjectInfo($project_id){
$projectModel = new Project();
$info = $projectModel->read(['id'=>$project_id],['id','is_customized']);
return $info;
}
/**
* @remark :拼接获取公共头部底部
* @name :getHeadFooter
* @author :lyh
* @method :post
* @time :2023/7/21 17:22
*/
public function getHeadFooter($html){
//获取公共主题头部底部
$serviceSettingModel = new ServiceSettingModel();
$list = $serviceSettingModel->list(['type'=>2],'created_at');
//拼接html
foreach ($list as $v){
if($v['key'] == 'head'){
$html = $v['values'].$html;
}
if($v['key'] == 'footer'){
$html = $html.$v['values'];
}
}
return $html;
}
}
... ...
... ... @@ -55,9 +55,9 @@ class LoginLogic extends BaseLogic
$this->verifyCode($this->param['mobile'],$this->param['password']);
$type = 2;//验证码登录
}
if(!empty($manage['token'])){
Cache::pull(Common::MANAGE_TOKEN . $manage['token']);
}
// if(!empty($manage['token'])){
// Cache::pull(Common::MANAGE_TOKEN . $manage['token']);
// }
//生成新token
$token = md5(uniqid().$manage['id']);
unset($manage['password']);
... ...
... ... @@ -142,7 +142,11 @@ class BTemplateLogic extends BaseLogic
$this->fail('当前扩展模块不存在或已被删除');
}
//扩展模块定制
if($info['list_customized'] == BTemplate::IS_VISUALIZATION || $info['detail_customized'] == BTemplate::IS_VISUALIZATION){
if($is_list == BTemplate::IS_LIST && $info['list_customized'] == BTemplate::IS_VISUALIZATION){
$html = $this->customModuleCustomizeHtml($source,$is_list,$is_custom);
return $this->success(['html'=>$html,'template_id'=>$template_id]);
}
if($is_list == BTemplate::IS_DETAIL && $info['detail_customized'] == BTemplate::IS_VISUALIZATION){
$html = $this->customModuleCustomizeHtml($source,$is_list,$is_custom);
return $this->success(['html'=>$html,'template_id'=>$template_id]);
}
... ... @@ -327,7 +331,10 @@ class BTemplateLogic extends BaseLogic
if($info === false){
$this->fail('当前扩展模块不存在或已被删除');
}
if($info['list_customized'] == BTemplate::IS_VISUALIZATION || $info['detail_customized'] == BTemplate::IS_VISUALIZATION){
if($info['list_customized'] == BTemplate::IS_VISUALIZATION && $is_list == BTemplate::IS_LIST){
return $this->success($template_id);
}
if($info['detail_customized'] == BTemplate::IS_VISUALIZATION && $is_list == BTemplate::IS_DETAIL){
return $this->success($template_id);
}
}else{
... ...
... ... @@ -28,4 +28,42 @@ class SyncSubmitTask extends Model
protected $casts = [
'data' => 'array',
];
/**
* @param $type
* @param $data
* @return bool
* @author zbj
* @date 2023/11/28
*/
public static function addTask($type, $data): bool
{
if (empty($data)) {
return false;
}
try {
$data = [
'data' => $data['data'],
'domain' => !empty($data['domain']) ? $data['domain'] : request()->getHost(),
'ip' => !empty($data['ip']) ? $data['ip'] : request()->getClientIp(),
'referer' => !empty($data['referer']) ? $data['referer'] : request()->header('Referer'),
'user_agent' => !empty($data['user_agent']) ? $data['user_agent'] : request()->header('user_agent'),
];
if(empty($data['referer']) || empty($data['user_agent']) || empty($data['data'])){
return false;
}
$model = new self();
$model->type = $type;
$model->data = $data;
!empty($data['submit_time']) && $model->created_at = $data['submit_time'];
$model->save();
} catch (\Exception $e) {
Log::error('SyncSubmitTask addTask error', ['msg' => $e->getMessage(), 'data' => $data]);
return false;
}
return true;
}
}
... ...
... ... @@ -51,6 +51,8 @@ class BTemplate extends Base
const IS_CUSTOM = 1;//为扩展模块
const IS_NO_CUSTOM = 0;//为默认模块
const IS_VISUALIZATION = 1;//定制项目
const IS_NO_VISUALIZATION = 1;//定制项目
const STATUS = 0;
/**
... ...
... ... @@ -2,14 +2,11 @@
namespace App\Models\User;
//use Illuminate\Contracts\Auth\MustVerifyEmail;
use App\Models\Base;
//use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Base
{
// use HasApiTokens, HasFactory, Notifiable;
const ROLE_MANAGER = 0;//超级管理员
const TYPE_ONE = 1;
... ...
... ... @@ -2,6 +2,7 @@
namespace App\Services;
use App\Exceptions\InquiryFilterException;
use App\Utils\LogUtils;
use Qcloud\Cos\Client;
/**
... ... @@ -116,4 +117,28 @@ class CosService
}
}
/**
* @param $file
* @return array
* @throws \Exception
* @author zbj
* @date 2023/12/12
*/
public function checkInquiryFile($file){
$size = $file->getSize();
if($size/1024/1024 > 20){
throw new InquiryFilterException('Your file size exceeds the limit. Please upload a file no larger than 20MB.');
}
$extension = $file->getClientOriginalExtension();
// JPEG (JPG) PDF DWG STEP(STP)IGS word xlsx
if(!in_array(strtolower($extension), ['png','jpg','jpeg', 'pdf', 'dwg', 'step', 'stp', 'igs','doc','docx','xls','xlsx'])){
throw new InquiryFilterException('Please upload file in png, jpg, jpeg, pdf, dwg, step, stp, igs, doc, docx, xls or xlsx format.');
}
return [
'size' => $size,
'extension' => $extension,
'name' => $file->getClientOriginalName(),
'mime' => $file->getMimeType(),
];
}
}
... ...
... ... @@ -22,4 +22,5 @@ Route::any('traffic_visit', [\App\Http\Controllers\Api\NoticeController::class,
Route::get('optimize_project_list', [\App\Http\Controllers\Api\PrivateController::class, 'optimizeProjectList'])->name('api.optimize_project_list');
Route::get('get_project_route', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectRoute'])->name('api.get_project_route');
Route::any('get_product_images', [\App\Http\Controllers\Api\ProductController::class, 'getImages'])->name('api.get_product_images');
Route::post('inquiry_submit', [\App\Http\Controllers\Api\InquiryController::class, 'submit'])->name('api.inquiry_submit');
... ...