作者 赵彬吉
<?php
namespace App\Console\Commands;
use App\Models\ProjectAssociation\ProjectAssociation;
use App\Models\File\DataFile;
use Dompdf\Dompdf;
use Dompdf\Options;
use Illuminate\Console\Command;
class ProjectFilePDF extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'project_file_pdf';
/**
* The console command description.
*
* @var string
*/
protected $description = '网站项目数据,生成PDF文件';
protected $AiccWechat;
protected $DataFile;
protected $time;
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
$this->AiccWechat = new ProjectAssociation();
$this->DataFile = new DataFile();
$this->time = date("Y-m-d");
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$data = $this->get_data();
# 详细数据
$items = $data['items'];
# 总分页
$totalPage = $data['totalPage'];
$this->dataPush($items);
if ($totalPage > 1) {
for ($page = 2; $page <= $totalPage; $page++) {
$da = $this->get_data();
$this->dataPush($da['items']);
}
}
$this->info('生成pdf完成');
return 0;
}
/**
* 数据生成并保存
* @param array $items
* @return void
*/
public function dataPush(array $items)
{
foreach ($items as $item) {
$project_id = $item->project_id;
$application_id = $item->wx_id;
$wx_user_id = $item->wx_user_id;
// todo 根据项目查询数据
$project_data = [];
$html = $this->html($project_data);
$filename = hash('md5', $this->time . '-' . $project_id . '-' . $application_id);
$file_path = $this->savePDF($html, $filename);
$this->DataFile->saveData(compact('project_id', 'application_id', 'file_path') + ['time' => $this->time]);
}
}
public function get_data($page = 1, $perPage = 20)
{
$data = $this->AiccWechat->allData($page, $perPage);
# 总条数
$total = $data['total'];
if (empty($total)) {
$this->error('暂无绑定AICC微信数据');
return 0;
}
# 详细数据
$items = $data['items'];
# 总分页
$totalPage = $data['totalPage'];
# 当前页
$currentPage = $data['currentPage'];
return compact('total', 'items', 'totalPage', 'currentPage');
}
public function savePDF($html, $filename)
{
// todo 生成中文有问题
# 实例化并使用dompdf类
$options = new Options();
$options->setDefaultFont('arial');
$dompdf = new Dompdf($options);
$dompdf->loadHtml($html);
#(可选)设置纸张大小和方向
$dompdf->setPaper('A4', 'landscape');
# 将HTML渲染为PDF
$dompdf->render();
// 获取PDF内容
$pdfContent = $dompdf->output();
// 指定保存路径和文件名
$savePath = public_path('PDF/' . $filename . '.pdf');
// 将PDF内容保存到文件
file_put_contents($savePath, $pdfContent);
// 输出保存成功消息
return $savePath;
}
/**
* 根据数据生成 Html
* @param $item
* @return string
*/
protected function html($item)
{
$html = '<html>';
$html .= '<body style="font-family:arial">';
$html .= '<h1>Hello, World!</h1>';
$html .= '<p>中文内容</p>';
$html .= '</body>';
$html .= '</html>';
return $html;
}
}
... ...
... ... @@ -80,21 +80,21 @@ class ProjectUpdate extends Command
//获取网站配置
$link_type = 0;
$url_web_config = 'https://' . $domain_arr['host'] . '/wp-content/cache/user_config.text';
$data_config = http_get($url_web_config, ['charset' => 'UTF-8']);
$data_config = curl_c($url_web_config);
if ($data_config) {
$link_type = $data_config['link_type'];
}
//获取所有语种
$language_list = [];
$url_language = 'https://' . $domain_arr['host'] . '/wp-content/plugins/proofreading/json/user_language.json';
$data_language = http_get($url_language, ['charset' => 'UTF-8']);
$data_language = curl_c($url_language);
if ($data_language) {
$language_list = array_column($data_language, 'short');
}
//获取所有页面
$page_list = [];
$url_page = 'https://' . $domain_arr['host'] . '/wp-content/cache/pages_list.json';
$data_page = http_get($url_page, ['charset' => 'UTF-8']);
$data_page = curl_c($url_page);
if ($data_page) {
$page_list = array_column($data_page, 'path');
}
... ... @@ -105,7 +105,7 @@ class ProjectUpdate extends Command
if ($api_type == 'category') {
//分类
$url = $api_url . '?' . http_build_query(['w' => 'category']);
$data = http_get($url, ['charset' => 'UTF-8']);
$data = curl_c($url);
if (isset($data['code']) && $data['code'] == 200) {
$items = $data['data'] ?? [];
$this->category_insert($project_id, $items, 0);
... ... @@ -115,14 +115,14 @@ class ProjectUpdate extends Command
} elseif ($api_type == 'tag') {
//关键词
$url = $api_url . '?' . http_build_query(['w' => 'tag', 'page' => 1, 'pagesize' => 0]);
$data = http_get($url, ['charset' => 'UTF-8']);
$data = curl_c($url);
if (isset($data['code']) && $data['code'] == 200) {
$count = $data['data']['count'] ?? 0;
$total_page = ceil($count / $page_size);
for ($page = 1; $page <= $total_page; $page++) {
$url_page = $api_url . '?' . http_build_query(['w' => 'tag', 'page' => $page, 'pagesize' => $page_size]);
$data_page = http_get($url_page, ['charset' => 'UTF-8']);
$data_page = curl_c($url_page);
if (isset($data_page['code']) && $data_page['code'] == 200) {
$items = $data_page['data']['data'] ?? [];
... ... @@ -132,6 +132,7 @@ class ProjectUpdate extends Command
$keyword = $model->read(['title' => $item['name']], 'id');
if (!$keyword) {
try {
$item['name'] = $this->special2str($item['name']);
$id = $model->addReturnId([
'project_id' => $project_id,
'title' => $item['name'],
... ... @@ -139,7 +140,7 @@ class ProjectUpdate extends Command
'seo_keywords' => $item['seo_keywords'] ?? '',
'seo_description' => $item['seo_description'] ?? '',
]);
$route = RouteMap::setRoute($item['url'] ? $this->get_url_route($item['url']) : $item['name'], RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $project_id);
$route = $this->set_map($this->get_url_route($item['url']), RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $project_id);
$model->edit(['route' => $route], ['id' => $id]);
} catch (\Exception $e) {
echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', error: ' . $e->getMessage() . PHP_EOL;
... ... @@ -160,7 +161,7 @@ class ProjectUpdate extends Command
} elseif ($api_type == 'website_info') {
//网站信息
$url = $api_url . '?' . http_build_query(['w' => 'website_info']);
$data = http_get($url, ['charset' => 'UTF-8']);
$data = curl_c($url);
if (isset($data['code']) && $data['code'] == 200) {
$phones = $data['data']['phones'] ?? '';
$emails = $data['data']['emails'] ?? '';
... ... @@ -212,14 +213,14 @@ class ProjectUpdate extends Command
} elseif ($api_type == 'post') {
//产品
$url = $api_url . '?' . http_build_query(['w' => 'post', 'page' => 1, 'pagesize' => 0]);
$data = http_get($url, ['charset' => 'UTF-8']);
$data = curl_c($url);
if (isset($data['code']) && $data['code'] == 200) {
$count = $data['data']['count'] ?? 0;
$total_page = ceil($count / $page_size);
for ($page = 1; $page <= $total_page; $page++) {
$url_page = $api_url . '?' . http_build_query(['w' => 'post', 'page' => $page, 'pagesize' => $page_size]);
$data_page = http_get($url_page, ['charset' => 'UTF-8']);
$data_page = curl_c($url_page);
if (isset($data_page['code']) && $data_page['code'] == 200) {
$items = $data_page['data']['data'] ?? [];
... ... @@ -256,6 +257,7 @@ class ProjectUpdate extends Command
}
}
try {
$item['ttile'] = $this->special2str($item['ttile']);
$id = $model->addReturnId([
'project_id' => $project_id,
'title' => $item['ttile'],
... ... @@ -271,7 +273,7 @@ class ProjectUpdate extends Command
]),
'status' => Product::STATUS_ON
]);
$route = RouteMap::setRoute($item['url'] ? $this->get_url_route($item['url']) : $item['ttile'], RouteMap::SOURCE_PRODUCT, $id, $project_id);
$route = $this->set_map($this->get_url_route($item['url']), RouteMap::SOURCE_PRODUCT, $id, $project_id);
$model->edit(['route' => $route], ['id' => $id]);
} catch (\Exception $e) {
echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', error: ' . $e->getMessage() . PHP_EOL;
... ... @@ -292,14 +294,14 @@ class ProjectUpdate extends Command
} elseif ($api_type == 'news' || $api_type == 'blog') {
//新闻或博客
$url = $api_url . '?' . http_build_query(['w' => $api_type, 'page' => 1, 'pagesize' => 0]);
$data = http_get($url, ['charset' => 'UTF-8']);
$data = curl_c($url);
if (isset($data['code']) && $data['code'] == 200) {
$count = $data['data']['count'] ?? 0;
$total_page = ceil($count / $page_size);
for ($page = 1; $page <= $total_page; $page++) {
$url_page = $api_url . '?' . http_build_query(['w' => $api_type, 'page' => $page, 'pagesize' => $page_size]);
$data_page = http_get($url_page, ['charset' => 'UTF-8']);
$data_page = curl_c($url_page);
if (isset($data_page['code']) && $data_page['code'] == 200) {
$items = $data_page['data']['data'] ?? [];
... ... @@ -315,6 +317,7 @@ class ProjectUpdate extends Command
$news = $model->read(['name' => $item['ttile']], 'id');
if (!$news) {
try {
$item['ttile'] = $this->special2str($item['ttile']);
$id = $model->addReturnId([
'project_id' => $project_id,
'name' => $item['ttile'],
... ... @@ -325,7 +328,7 @@ class ProjectUpdate extends Command
'image' => $item['images'][0] ?? '',
'status' => $api_type == 'news' ? News::STATUS_ONE : Blog::STATUS_ONE
]);
$route = RouteMap::setRoute($item['url'] ? $this->get_url_route($item['url']) : $item['ttile'], $api_type == 'news' ? RouteMap::SOURCE_NEWS : RouteMap::SOURCE_BLOG, $id, $project_id);
$route = $this->set_map($this->get_url_route($item['url']), $api_type == 'news' ? RouteMap::SOURCE_NEWS : RouteMap::SOURCE_BLOG, $id, $project_id);
$model->edit(['url' => $route], ['id' => $id]);
} catch (\Exception $e) {
echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', error: ' . $e->getMessage() . PHP_EOL;
... ... @@ -346,14 +349,14 @@ class ProjectUpdate extends Command
} else {
//单页
$url = $api_url . '?' . http_build_query(['w' => 'page', 'page' => 1, 'pagesize' => 0]);
$data = http_get($url, ['charset' => 'UTF-8']);
$data = curl_c($url);
if (isset($data['code']) && $data['code'] == 200) {
$count = $data['data']['count'] ?? 0;
$total_page = ceil($count / $page_size);
for ($page = 1; $page <= $total_page; $page++) {
$url_page = $api_url . '?' . http_build_query(['w' => 'page', 'page' => $page, 'pagesize' => $page_size]);
$data_page = http_get($url_page, ['charset' => 'UTF-8']);
$data_page = curl_c($url_page);
if (isset($data_page['code']) && $data_page['code'] == 200) {
$items = $data_page['data']['data'] ?? [];
... ... @@ -364,6 +367,7 @@ class ProjectUpdate extends Command
$custom = $model->read(['name' => $item['ttile']], 'id');
if (!$custom) {
try {
$item['ttile'] = $this->special2str($item['ttile']);
$id = $model->addReturnId([
'project_id' => $project_id,
'name' => $item['ttile'],
... ... @@ -373,7 +377,7 @@ class ProjectUpdate extends Command
'html' => $item['content'] ?? '',
'status' => 1
]);
$route = RouteMap::setRoute($item['url'] ? $this->get_url_route($item['url']) : $item['ttile'], RouteMap::SOURCE_PAGE, $id, $project_id);
$route = $this->set_map($this->get_url_route($item['url']), RouteMap::SOURCE_PAGE, $id, $project_id);
$model->edit(['url' => $route], ['id' => $id]);
} catch (\Exception $e) {
echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', error: ' . $e->getMessage() . PHP_EOL;
... ... @@ -429,8 +433,19 @@ class ProjectUpdate extends Command
//获取地址路由
protected function get_url_route($url)
{
$arr = explode('/', $url);
return $arr[count($arr) - 2];
$arr = parse_url($url);
if (empty($arr['path'])) {
return '';
}
$path = $arr['path'];
if (strpos($path, '.') !== false) {
$path = substr($path, 0, strpos($path, '.'));
}
$path_arr = explode('/', $path);
return end($path_arr) ? end($path_arr) : $path_arr[count($path_arr) - 2];
}
//多级分类入库
... ... @@ -442,6 +457,7 @@ class ProjectUpdate extends Command
$parent = $model->read(['pid' => $pid, 'title' => $item['name']], 'id');
if (!$parent) {
try {
$item['name'] = $this->special2str($item['name']);
$parent_id = $model->addReturnId([
'project_id' => $project_id,
'title' => $item['name'],
... ... @@ -449,7 +465,7 @@ class ProjectUpdate extends Command
'keywords' => $item['keywords'] ?? '',
'describe' => $item['description'] ?? ''
]);
$route = RouteMap::setRoute($item['url'] ? $this->get_url_route($item['url']) : $item['name'], RouteMap::SOURCE_PRODUCT_CATE, $parent_id, $project_id);
$route = $this->set_map($this->get_url_route($item['url']), RouteMap::SOURCE_PRODUCT_CATE, $parent_id, $project_id);
$model->edit(['route' => $route], ['id' => $parent_id]);
} catch (\Exception $e) {
echo 'date:' . date('Y-m-d H:i:s') . ', category_insert error: ' . $e->getMessage() . PHP_EOL;
... ... @@ -477,4 +493,51 @@ class ProjectUpdate extends Command
return [];
}
//特殊字符转换
protected function special2str($str)
{
if (strpos($str, ';') === false) {
return $str;
}
$list = [
'&lt;' => '<',
'&gt;' => '>',
'&amp;' => '&',
'&acute;' => '´',
'&quot;' => '“',
'&nbsp;' => ' '
];
foreach ($list as $k => $v) {
$str = str_replace($k, $v, $str);
}
return $str;
}
//路由入库
protected function set_map($route, $source, $source_id, $project_id)
{
if (empty($route)) {
return '';
}
$route_map = new RouteMap();
$route_map->project_id = $project_id;
$route_map->source = $source;
$route_map->source_id = $source_id;
$route_map->route = $route;
if ($source == RouteMap::SOURCE_NEWS) {
$route_map->path = RouteMap::SOURCE_NEWS;
} elseif ($source == RouteMap::SOURCE_BLOG) {
$route_map->path = RouteMap::SOURCE_BLOG;
}
$route_map->save();
return $route;
}
}
... ...
... ... @@ -59,11 +59,11 @@ class UpdateRoute extends Command
echo date('Y-m-d H:i:s') . ' start: 项目id为' . $v['id'] . PHP_EOL;
ProjectServer::useProject($v['id']);
$this->setProductRoute($v['id']);
$this->setProductKeywordRoute($v['id']);
$this->setBlogRoute($v['id']);
$this->setNewsRoute($v['id']);
$this->setBlogCateRoute($v['id']);
$this->setNewsCateRoute($v['id']);
// $this->setProductKeywordRoute($v['id']);
// $this->setBlogRoute($v['id']);
// $this->setNewsRoute($v['id']);
// $this->setBlogCateRoute($v['id']);
// $this->setNewsCateRoute($v['id']);
DB::disconnect('custom_mysql');
}
echo date('Y-m-d H:i:s') . ' end: 项目id为' . $v['id'] . PHP_EOL;
... ... @@ -80,16 +80,47 @@ class UpdateRoute extends Command
$productModel = new Product();
$productList = $productModel->list(['status'=>['!=',2]],'id',['id','route']);
foreach ($productList as $v){
$route = preg_replace('/-product.*/', '', $v['route']);
$route = RouteMap::setRoute($route, RouteMap::SOURCE_PRODUCT, $v['id'], $project_id);
$route = $route.'-product';
$route = preg_replace('/-2-1-product.*/', '', $v['route']);
$route = preg_replace('/-1-1-product.*/', '', $route);
$route = preg_replace('/-2-product.*/', '', $route);
$route = preg_replace('/-1-product.*/', '', $route);
$route = preg_replace('/-product.*/', '', $route);
$i = 0;
$routes = $this->productRoute($route,$v['id'],$i);
$route = RouteMap::setRoute($routes, RouteMap::SOURCE_PRODUCT, $v['id'], $project_id);
echo date('Y-m-d H:i:s') . ' 路由表返回的route:' . $route . PHP_EOL;
$productModel->edit(['route'=>$route],['id'=>$v['id']]);
RouteMap::setRoute($route, RouteMap::SOURCE_PRODUCT, $v['id'], $project_id);
}
return true;
}
/**
* @remark :产品新增单独处理路由
* @name :setProductRoute
* @author :lyh
* @method :post
* @time :2023/11/21 18:48
*/
public function productRoute($route,$id,$i){
echo date('Y-m-d H:i:s') . ' 打印$i:' . $i . PHP_EOL;
if($i == 0){
$routes = $route.'-product';
}else{
$routes = $route.'-'.$i.'-product';
}
$routeMapModel = new RouteMap();
$routeInfo = $routeMapModel->read(['route'=>$routes,'source'=>'product','source_id'=>['!=',$id]]);
if($routeInfo == false){
echo date('Y-m-d H:i:s') . ' route:' . $routes . PHP_EOL;
return $routes;
}else{
echo date('Y-m-d H:i:s') . ' 数据:' . $routeInfo['id'] . PHP_EOL;
$i = $i + 1;
return $this->productRoute($route,$id,$i);
}
}
/**
* @remark :设置路由
* @name :setRoute
* @author :lyh
... ...
<?php
namespace App\Console\Commands;
use App\Models\File\DataFile;
use Illuminate\Console\Command;
class WebsiteData extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'website_data';
/**
* The console command description.
*
* @var string
*/
protected $description = '向AICC推送数据';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$DataFile = new DataFile();
$data = $DataFile->allData();
# 详细数据
$items = $data['items'];
# 总分页
$totalPage = $data['totalPage'];
$this->post_data($items);
if ($totalPage > 1) {
for ($page = 2; $page <= $totalPage; $page++) {
$da = $DataFile->allData($page);
$this->post_data($da['items']);
}
}
$this->info('项目文件数据推送完成!');
return 0;
}
public function post_data($data)
{
$url = env('AICC_URL');
return http_post("{$url}/api/save_file_data", json_encode(compact('data')));
}
}
... ...
... ... @@ -38,6 +38,8 @@ class Kernel extends ConsoleKernel
$schedule->command('last_inquiry')->dailyAt('04:00')->withoutOverlapping(1);// 最近一次询盘信息
$schedule->command('update_progress')->everyThirtyMinutes()->withoutOverlapping(1);//监控更新
$schedule->command('update_seo_tdk_crontab')->dailyAt('00:00')->withoutOverlapping(1); //更新上线项目TDK
$schedule->command('website_data')->everyMinute()->withoutOverlapping(1); // 向AICC推送数据
$schedule->command('project_file_pdf')->everyMinute()->withoutOverlapping(1); // 网站项目数据,生成PDF文件
}
/**
... ...
... ... @@ -108,6 +108,36 @@ if (!function_exists('http_get')) {
}
}
if (!function_exists('curl_c')) {
/**
* @param $url
* @return []
* @author Akun
* @date 2023/11/22 11:33
*/
function curl_c($url){
$header = array(
'Expect:',
'Content-Type: application/json; charset=utf-8'
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246');
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSLVERSION, 'all');
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$content = curl_exec($ch);
curl_close($ch);
return json_decode($content, true);
}
}
if (!function_exists('_get_child')) {
/**
... ...
... ... @@ -25,6 +25,7 @@ class ATemplateController extends BaseController
*/
public function lists(ATemplateLogic $aTemplateLogic){
$filed = ['id','name','image','url','status','sort','deleted_status','test_model','created_at','project_id'];
$this->map['project_id'] = 0;
$lists = $aTemplateLogic->aTemplateList($this->map,$this->page,$this->row,$this->order,$filed);
if(!empty($lists) && !empty($lists['list'])){
foreach ($lists['list'] as $k => $v){
... ...
... ... @@ -300,4 +300,24 @@ class LoginController extends BaseController
return $data;
}
public function ceshi(){
$url = 'https://demo.globalso.site/';
$contextOptions = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
];
$context = stream_context_create($contextOptions);
$sourceCode = file_get_contents($url, false, $context);
$pattern = '/<style\b[^>]*>(.*?)<\/style>/s'; // 定义匹配`<style>`标签及其内容的正则表达式
$strippedContent = preg_replace($pattern, '', $sourceCode); // 删除`<style>`标签及其内容
$pattern = '/<link\b[^>]*>/'; // 定义匹配 `<link>` 标签的正则表达式
$strippedContent = preg_replace($pattern, '', $strippedContent); // 删除 `<link>` 标签
$pattern = '/>([^<]+)</'; // 定义匹配中间内容不是标签的正则表达式
$matches = array();
preg_match_all($pattern, $strippedContent, $matches);
$textContentArray = $matches[1];
var_dump($textContentArray);
}
}
... ...
<?php
namespace App\Http\Controllers\Bside\ProjectAssociation;
use App\Enums\Common\Code;
use App\Exceptions\BsideGlobalException;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Aside\ProjectAssociation\ProjectAssociationLogic;
use Illuminate\Http\Request;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
class ProjectAssociationController extends BaseController
{
private $ProjectAssociationLogic;
public function __construct(Request $request)
{
$this->ProjectAssociationLogic = new ProjectAssociationLogic();
parent::__construct($request);
}
/**
* V6与AICC数据关联
* @return void
* @throws BsideGlobalException
*/
public function saveWeChatData()
{
$project_id = (int)request()->post('project_id', 0);
if (empty($project_id)) {
$this->fail('请选择项目!', Code::USER_PARAMS_ERROE);
}
$status = (bool)request()->post('status', 1); # 1 - 正常, 0 - 禁用
$wx_user_id = (int)request()->post('user_id', 0);
if (empty($wx_user_id) && $status) {
$this->fail('请选择要绑定的AICC用户!', Code::USER_PARAMS_ERROE);
}
$wx_id = (int)request()->post('wx_id', 0);
if (empty($wx_id) && $status) {
$this->fail('请选择要绑定的AICC项目!', Code::USER_PARAMS_ERROE);
}
$wx_nickname = request()->post('nickname', '');
$wx_user_name = request()->post('user_name', '');
$wx_image = request()->post('image', '');
$data = compact('project_id', 'wx_id', 'wx_nickname', 'wx_user_id', 'wx_user_name', 'wx_image');
$this->ProjectAssociationLogic->saveWeChatData($data);
$this->response('success');
}
}
... ...
... ... @@ -51,4 +51,17 @@ class ProofreadingController extends BaseController
$list = $proofreadingLogic->countryLanguageList($this->map,$this->order);
$this->response('success',Code::SUCCESS,$list);
}
/**
* @remark :获取Url内容
* @name :getUrlRead
* @author :lyh
* @method :post
* @time :2023/11/22 10:02
*/
public function getUrlRead($url){
$sourceCode = file_get_contents($url);
$strippedContent = strip_tags($sourceCode); // 删除所有HTML标签
var_dump($strippedContent);
}
}
... ...
... ... @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Bside\Template;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\BTemplate\BTemplateModuleLogic;
use App\Models\Template\BModuleProject;
/**
* @remark :左侧模块管理
... ... @@ -25,7 +26,12 @@ class BTemplateModuleController extends BaseController
if(!isset($this->map['test_model'])){
$this->map['test_model'] = 0;
}
$data = [];
$list = $BTemplateModuleLogic->ModuleList($this->map,$this->order);
// $data['list'] = $list;
// $moduleProjectModel = new BModuleProject();
// $module_list = $moduleProjectModel->list(['project_id'=>$this->user['project_id']]);
// $data['module_list'] = $module_list;
$this->response('success',Code::SUCCESS,$list);
}
... ...
<?php
namespace App\Http\Logic\Aside\ProjectAssociation;
use App\Enums\Common\Code;
use App\Http\Logic\Logic;
use App\Models\ProjectAssociation\ProjectAssociation;
use Illuminate\Support\Facades\DB;
class ProjectAssociationLogic extends Logic
{
public function saveWeChatData($data)
{
$wx = new ProjectAssociation();
DB::beginTransaction();
try {
$status = $wx->saveData($data);
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
$e->getMessage();
errorLog('V6与AICC关联失败', $wx, $e);
$this->fail('请检查操作是否正确!', Code::SERVER_MYSQL_ERROR);
}
return $status;
}
}
... ...
... ... @@ -366,7 +366,8 @@ class ProductLogic extends BaseLogic
$info = $this->model->read(['id'=>$this->param['id']]);
$param = $this->setProductParams($info);
$save_id = $this->model->insertGetId($param);
$route = RouteMap::setRoute($param['route'], RouteMap::SOURCE_PRODUCT, $save_id, $this->user['project_id']);
$route = preg_replace('/-product.*/', '', $param['route']);
$route = RouteMap::setRoute($route, RouteMap::SOURCE_PRODUCT, $save_id, $this->user['project_id']);
$this->model->edit(['route'=>$route],['id'=>$save_id]);
//同步可视化装修数据
$this->copyTemplate($this->param['id'],$info['project_id'],$save_id);
... ...
<?php
namespace App\Models\File;
use App\Models\Base;
class DataFile extends Base
{
protected $table = 'gl_data_file';
public function saveData(array $data): bool
{
$project_id = (int)$data['project_id'] ?? 0;
$isRes = self::query()->where('project_id', $project_id)->where('created_at', 'like', $data['time'] . '%')->first();
if (!$isRes) {
$isRes = new self();
$isRes->project_id = $project_id;
}
$isRes->file_path = $data['file_path'];
$isRes->application_id = $data['application_id'];
return $isRes->save();
}
/**
* @param int $page
* @param int $perPage
* @return array
*/
public function allData(int $page = 1, int $perPage = 15)
{
$lists = self::query()->paginate($perPage, ['*'], 'page', $page);
$items = $lists->Items();
$totalPage = $lists->lastPage();
$total = $lists->total();
$currentPage = $lists->currentPage();
return compact('total', 'items', 'totalPage', 'currentPage');
}
}
... ...
<?php
namespace App\Models\ProjectAssociation;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class ProjectAssociation extends Model
{
protected $table = 'gl_project_association';
/**
* 保存|修改数据
* @param array $data
* @return bool
*/
public function saveData(array $data): bool
{
$project_id = (int)$data['project_id'] ?? 0;
$isRes = self::query()->where('project_id', $project_id)->first();
if (!$isRes) {
$isRes = new self();
$isRes->project_id = $project_id;
}
$isRes->wx_id = $data['wx_id'];
$isRes->wx_nickname = $data['wx_nickname'];
$isRes->wx_user_id = $data['wx_user_id'];
$isRes->wx_user_name = $data['wx_user_name'];
$isRes->wx_image = $data['wx_image'];
return $isRes->save();
}
/**
* 检查项目是否存在
* @param $project_id
* @return Builder|Model|object|null
*/
public function check($project_id)
{
return self::query()->where('project_id', $project_id)->first();
}
/**
* @param int $page
* @param int $perPage
* @return array
*/
public function allData(int $page = 1, int $perPage = 15)
{
$status = 1; # 1 - 正常, 0 - 禁用
$lists = self::query()->where('status', $status)
->whereNotNull('project_id')
->whereNotNull('wx_user_id')
->paginate($perPage, ['project_id', 'wx_id', 'wx_user_id'], 'page', $page);
$items = $lists->Items();
$totalPage = $lists->lastPage();
$total = $lists->total();
$currentPage = $lists->currentPage();
return compact('total', 'items', 'totalPage', 'currentPage');
}
}
... ...
... ... @@ -56,9 +56,11 @@ class RouteMap extends Base
$i=1;
$sign = generateRoute($title);
$route = $sign;
while(self::isExist($route, $source, $source_id, $project_id)){
$route = $sign .'-'.$i;
$i++;
if($source != BTemplate::SOURCE_PRODUCT){
while(self::isExist($route, $source, $source_id, $project_id)){
$route = $sign .'-'.$i;
$i++;
}
}
return $route;
}
... ... @@ -151,11 +153,11 @@ class RouteMap extends Base
* @time :2023/11/21 18:48
*/
public static function setProductRoute($route,$i = 0){
$route = $route.'-product';
$routes = $route.'-product';
$routeMapModel = new RouteMap();
$routeInfo = $routeMapModel->read(['route'=>$route]);
$routeInfo = $routeMapModel->read(['route'=>$routes]);
if($routeInfo === false){
return $route;
return $routes;
}else{
$i = $i + 1;
$route = $route.'-'.$i;
... ... @@ -171,11 +173,11 @@ class RouteMap extends Base
* @time :2023/11/21 18:48
*/
public static function setKeywordRoute($route,$i = 0){
$route = $route.'-tag';
$routes = $route.'-tag';
$routeMapModel = new RouteMap();
$routeInfo = $routeMapModel->read(['route'=>$route]);
$routeInfo = $routeMapModel->read(['route'=>$routes]);
if($routeInfo === false){
return $route;
return $routes;
}else{
$i = $i + 1;
$route = $route.'-'.$i;
... ...
... ... @@ -8,6 +8,7 @@
"bensampo/laravel-enum": "^4.2",
"beyondcode/laravel-websockets": "^1.14",
"doctrine/dbal": "^3.6",
"dompdf/dompdf": "^2.0",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"hashids/hashids": "^4.1",
... ...
... ... @@ -13,6 +13,7 @@ Route::middleware(['aloginauth'])->group(function () {
Route::any('/editPassword', [Aside\Com\IndexController::class, 'editPassword'])->name('admin.editPassword.white');
Route::get('/logout', [Aside\LoginController::class, 'logout'])->name('admin.logout.white');
Route::any('/getAccessAddress', [Aside\LoginController::class, 'getAccessAddress'])->name('admin.getAccessAddress');//获取B端地址
Route::post('/aicc/wechat', [\App\Http\Controllers\Bside\ProjectAssociation\ProjectAssociationController::class, 'saveWeChatData'])->name('admin.aicc.wechat');
//会员相关
Route::prefix('user')->group(function () {
//会员管理
... ...