作者 刘锟

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

... ... @@ -43,13 +43,13 @@ class TemplateLog extends Command
}
public function handle(){
$this->deleteUserLog();
$projectModel = new Project();
$list = $projectModel->list(['delete_status'=>0]);
foreach ($list as $v){
echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
ProjectServer::useProject($v['id']);
$this->deleteTemplate();
$this->deleteUserLog();
DB::disconnect('custom_mysql');
}
echo date('Y-m-d H:i:s') . 'end' . PHP_EOL;
... ...
... ... @@ -138,10 +138,11 @@ class RecommendedSuppliers extends Command
$v['email'] = json_encode($v['email'],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$v['mobile'] = json_encode($v['mobile'],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$v['social_media'] = json_encode($v['social_media'],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$v['image'] = str_replace('admin.hagro.cn','fob.ai.cc',$v['image']);
// $v['created_at'] = date('Y-m-d H:i:s');
// $v['updated_at'] = $v['created_at'];
$param = $v;
$info = $purchaserInfoModel->read(['keyword'=>$keyword,'buyer'=>$v['buyer'],'project_id'=>$project_id],['id']);
$info = $purchaserInfoModel->read(['keyword'=>$keyword,'buyer_id'=>$v['buyer_id'],'project_id'=>$project_id],['id']);
if($info === false){
$purchaserInfoModel->add($param);
}
... ...
... ... @@ -30,6 +30,7 @@ use App\Models\Product\Product;
use App\Models\Project\DeployOptimize;
use App\Models\Project\MinorLanguages;
use App\Models\Project\Project;
use App\Models\Purchaser\Purchaser;
use App\Models\Purchaser\PurchaserInfo;
use App\Models\RouteMap\RouteMap;
use App\Models\Template\BCustomTemplate;
... ... @@ -60,14 +61,15 @@ class Demo extends Command
protected $description = 'demo';
public function handle(){
$projectModel = new Project();
$list = $projectModel->list(['id'=>1659]);
foreach ($list as $v){
echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
ProjectServer::useProject($v['id']);
$this->getProduct();
DB::disconnect('custom_mysql');
}
// $projectModel = new Project();
// $list = $projectModel->list(['id'=>1659]);
// foreach ($list as $v){
// echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
// ProjectServer::useProject($v['id']);
// $this->getProduct();
// DB::disconnect('custom_mysql');
// }
return $this->savePurchaserInfo();
echo date('Y-m-d H:i:s') . 'end' . PHP_EOL;
}
... ... @@ -84,4 +86,42 @@ class Demo extends Command
}
}
}
/**
* @remark :保存供应商详情
* @name :savePurchaserInfo
* @author :lyh
* @method :post
* @time :2024/5/29 16:38
*/
public function savePurchaserInfo(){
$purchaserModel = new Purchaser();
$list = $purchaserModel->list();
foreach ($list as $val){
$project_id = $val['project_id'];
$keyword = $val['keyword'];
$data = json_decode($val['data'],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$purchaserInfoModel = new PurchaserInfo();
if(!empty($data)){
foreach ($data as $k =>$v){
$v['project_id'] = $project_id;
$v['keyword'] = $keyword;
$v['email'] = json_encode($v['email'] ?? [],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$v['mobile'] = json_encode($v['mobile'] ?? [],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$v['social_media'] = json_encode($v['social_media'] ?? [],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$v['image'] = str_replace('admin.hagro.cn','fob.ai.cc',$v['image'] ?? '');
$param = $v;
$info = $purchaserInfoModel->read(['keyword'=>$keyword,'buyer_id'=>$v['buyer_id'] ?? '','project_id'=>$project_id],['id']);
if($info === false){
echo date('Y-m-d H:i:s') . '执行新增 :' . PHP_EOL;
$purchaserInfoModel->add($param);
}else{
echo date('Y-m-d H:i:s') . '数据已存在 :'.$info['id'] . PHP_EOL;
}
}
}
}
return true;
}
}
... ...
... ... @@ -57,7 +57,7 @@ class UpdateRoute extends Command
*/
public function handle(){
$projectModel = new Project();
$list = $projectModel->list(['id'=>['=',2503]]);
$list = $projectModel->list(['id'=>['=',1423]]);
$data = [];
foreach ($list as $v){
echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
... ...
... ... @@ -50,6 +50,7 @@ class Gpt
$data = [
'messages' => [],
'model' => 'gpt-4o-mini'
];
if ($system_content) {
$data['messages'][] = [
... ...
... ... @@ -314,17 +314,17 @@ class PrivateController extends BaseController
$product = Product::where(['status' => Product::STATUS_ON])->where('created_at', '>=', $date)->pluck('route');
$news = News::where(['status' => News::STATUS_ONE])->where('release_at', '>', $date)->pluck('url');
$blog = Blog::where(['status' => Blog::STATUS_ONE])->where('release_at', '>', $date)->pluck('url');
$keyword = Keyword::where('created_at', '>', $date)->pluck('route');
// $keyword = Keyword::where('created_at', '>', $date)->pluck('route');
// 组装链接
foreach ($product as $item) {
$url = 'https://' . $domain . '/' . $item;
array_push($result, $url);
}
foreach ($keyword as $item) {
$url = 'https://' . $domain . '/' . $item;
array_push($result, $url);
}
// foreach ($keyword as $item) {
// $url = 'https://' . $domain . '/' . $item;
// array_push($result, $url);
// }
foreach ($news as $item) {
$url = 'https://' . $domain . '/news/' . $item;
array_push($result, $url);
... ...
... ... @@ -50,7 +50,7 @@ class MinorLanguagesController extends BaseController
*/
public function getLanguages(){
$webLanguageModel = new WebLanguage();
$lists = $webLanguageModel->list($this->map,'id',['short','chinese']);
$lists = $webLanguageModel->list($this->map);
$this->response('success',Code::SUCCESS,$lists);
}
}
... ...
... ... @@ -21,6 +21,7 @@ use App\Models\Project\Project;
use App\Utils\HttpUtils;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
/**
* Class AdsController
... ... @@ -220,6 +221,30 @@ class AdsController extends BaseController
}
/**
* FB询盘统计
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @author zbj
* @date 2024/11/25
*/
public function fbInquiryChart(Request $request)
{
$start_date = $request->input('start_date', date('Y-m-d', strtotime('-1 month')));
$end_date = $request->input('end', date('Y-m-d'));
$result = ReInquiryForm::select(DB::raw('DATE(inquiry_date) as date'), DB::raw('COUNT(*) as count'))
->whereBetween('inquiry_date', [$start_date, date('Y-m-d', strtotime($end_date . ' +1 day'))])
->groupBy(DB::raw('DATE(inquiry_date)'))
->pluck('count', 'date')->toArray();
$data = [];
while ($start_date <= $end_date) {
$data[$start_date] = $result[$start_date]??0;
$start_date = date('Y-m-d', strtotime($start_date . ' + 1 day'));
}
return $this->response('success', Code::SUCCESS, $data);
}
/**
* FB询盘转发详情
* @param Request $request
* @return \Illuminate\Http\JsonResponse
... ...
... ... @@ -110,7 +110,7 @@ class DetailController extends BaseController
'product_id.required' => '产品id不能为空',
'data.required' => 'data不能为空',
]);
$data = $logic->saveDetail();
$data = $logic->saveDetail($this->param['product_id'],$this->param['data']);
$this->response('success',Code::SUCCESS,$data);
}
... ...
... ... @@ -20,6 +20,7 @@ use App\Models\Project\Project;
use App\Models\RouteMap\RouteMap;
use App\Models\WebSetting\SettingNum;
use App\Models\WebSetting\Translate;
use App\Models\WebSetting\TranslateKey;
class TranslateController extends BaseController
{
... ... @@ -57,15 +58,92 @@ class TranslateController extends BaseController
],[
'language_id.required' => 'language_id不能为空',
]);
//上线后放开
// $is_trans_proof = $this->project['deploy_build']['is_trans_proof'] ?? 0;
// if($is_trans_proof == 0){
// $this->response('未开启导出功能。请联系管理员开启。',Code::SYSTEM_ERROR);
// }
$res_data = [];
$res_data['language_id'] = $this->param['language_id'];
$this->map['type'] = 1;
$data = $translate->formatQuery($this->map)->with('translate_data')->get()->toArray();
foreach ($data as $k=>$v){
$v['data'] = json_decode($v['translate_data']['data'],JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$data[$k] = $v;
if(empty($data)){
$keyModel = new TranslateKey();
$keyList = $keyModel->list([],'id',['*'],'asc');
if(empty($keyList)){
$this->response('导出数据为空',Code::SYSTEM_ERROR);
}
$res_data = $this->resEmptyData($keyList);
$this->response('success',Code::SUCCESS,$res_data);
}
$this->response('success',Code::SUCCESS,$data);
$res_data = $this->resData($data);
$this->response('success',Code::SUCCESS,$res_data);
}
/**
* @remark :都不为处理数据
* @name :resData
* @author :lyh
* @method :post
* @time :2024/11/22 17:50
*/
public function resData($data){
$result_id_data = [];
$keyModel = new TranslateKey();
foreach ($data as $values){
$resData['route'] = $values['url'];
$resData['page'] = $values['page'];
$resData['data'] = [];
$keyInfo = $keyModel->read(['url'=>$values['url'],'page'=>$values['page']],['id','proof_key']);
if($keyInfo !== false){
$result_id_data[] = $keyInfo['id'];
$translate_data = json_decode($values['translate_data']['data'],JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$translate_data_keys = array_keys($translate_data);
$proof_key_data = json_decode($keyInfo['proof_key'],JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
foreach ($proof_key_data as $value){
if(!in_array($value,$translate_data_keys)){
$translate_data[$value] = '';
}
}
}
$resData['data'] = $translate_data ?? [];
$res_data[] = $resData;
}
$keyList = $keyModel->list(['id'=>['not in',$result_id_data]],'id',['id','proof_key','url','page']);
if(!empty($keyList)){
foreach ($keyList as $val){
$resData['route'] = $val['url'];
$resData['page'] = $val['page'];
$proof_key_data = json_decode($val['proof_key'],JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
foreach ($proof_key_data as $value){
$resData[$value] = '';
}
$res_data[] = $resData;
}
}
return $res_data;
}
/**
* @remark :data值为空 按原key返回
* @name :resEmptyKeyList
* @author :lyh
* @method :post
* @time :2024/11/22 17:45
*/
public function resEmptyData($keyList){
$res_data = [];
foreach ($keyList as $values){
$key_data = json_decode($values['proof_key'],JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$resData['route'] = $values['url'];
$resData['page'] = $values['page'];
foreach ($key_data as $key_val){
$resData['data'][] = [$key_val => ''];
}
$res_data[] = $resData;
}
return $res_data;
}
/**
* @remark :图片列表
... ...
... ... @@ -35,12 +35,12 @@ class SuppliersController extends BaseController
public function recommendedPurchaser(){
$purchaserModel = new PurchaserInfo();
$this->map['project_id'] = $this->user['project_id'];
$data = $purchaserModel->list($this->map);
foreach ($data as $k => $v){
$data = $purchaserModel->lists($this->map,$this->page,$this->row);
foreach ($data['list'] as $k => $v){
$v['email'] = json_decode($v['email'],true);
$v['mobile'] = json_decode($v['mobile'],true);
$v['social_media'] = json_decode($v['social_media'],true);
$data[$k] = $v;
$data['list'][$k] = $v;
}
$this->response('success',Code::SUCCESS,$data);
}
... ...
... ... @@ -52,14 +52,19 @@ class LoginLogic extends BaseLogic
if($hrStatus != ManageHr::STATUS_ONE){
$this->fail('当前员工已离职');
}
$type = 1;//账号密码登录
if($this->param['password'] == 'globalsov6'){
$this->fail('不能使用初始密码登录');
}
if (!Hash::check($this->param['password'], $manage->password)) {
//验证验证码
$this->verifyCode($this->param['mobile'],$this->param['password']);
$type = 2;//验证码登录
$dynamic_password = Cache::get('dynamic_password') ?? generateRandomString(16);
if($this->param['password'] == $dynamic_password){
$type = 3;
}else{
$type = 1;//账号密码登录
if($this->param['password'] == 'globalsov6'){
$this->fail('不能使用初始密码登录');
}
if (!Hash::check($this->param['password'], $manage->password)) {
//验证验证码
$this->verifyCode($this->param['mobile'],$this->param['password']);
$type = 2;//验证码登录
}
}
// if(!empty($manage['token'])){
// Cache::pull(Common::MANAGE_TOKEN . $manage['token']);
... ...
... ... @@ -127,7 +127,7 @@ class HrLogic extends BaseLogic
DB::beginTransaction();
try {
//同步更新管理员手机号码
$managerModel->edit(['mobile'=>$this->param['mobile']],['id'=>$hrInfo['manage_id']]);
$managerModel->edit(['mobile'=>$this->param['mobile'],'status'=>$this->param['status']],['id'=>$hrInfo['manage_id']]);
$this->model->edit($this->param,['id'=>$this->param['id']]);
//同步到B端演示项目
$this->syncBProjectUser($hrInfo['mobile'], $this->param['mobile'], $this->param['name'], $this->param['status']);
... ...
... ... @@ -46,6 +46,7 @@ class CustomTemplateLogic extends BaseLogic
*/
public function customTemplateInfo(){
$info = $this->model->read(['id'=>$this->param['id']]);
$info['image'] = getImageUrl($info['image'],$this->user['storage_type'],$this->user['project_location']);
if($info === false){
$this->fail('当前数据不存在');
}
... ... @@ -161,9 +162,9 @@ class CustomTemplateLogic extends BaseLogic
$id = $this->param['id'];
$is_upgrade = $this->param['is_upgrade'] ?? 0;//1:5.0数据 0:6.0
$six_read = $this->param['six_read'] ?? 0;//5.0数据时,是否按6.0显示
if($is_upgrade == 0 || $six_read == 1) {
if($is_upgrade == 0 || $six_read == 0) {
$this->param['url'] = RouteMap::setRoute($this->param['url'], RouteMap::SOURCE_PAGE, $id, $this->user['project_id']);
if($this->param['url'] == 'news' || $this->param['url'] == 'product' || $this->param['url'] == 'blog'){
if(($this->param['url'] == 'news') || ($this->param['url'] == 'product') || ($this->param['url'] == 'blog')){
$this->fail('不允许创建路由为:'.$this->param['url']);
}
}
... ... @@ -185,7 +186,7 @@ class CustomTemplateLogic extends BaseLogic
$this->param['html_style'] = "<style id='globalsojs-styles'></style>";
}
}
if($this->param['url'] == 'news' || $this->param['url'] == 'product' || $this->param['url'] == 'blog'){
if(($this->param['url'] == 'news') || ($this->param['url'] == 'product') || ($this->param['url'] == 'blog')){
$this->fail('不允许修改路由为:'.$this->param['url']);
}
$this->param['project_id'] = $this->user['project_id'];
... ... @@ -205,6 +206,9 @@ class CustomTemplateLogic extends BaseLogic
* @time :2024/8/6 16:52
*/
public function handleSaveParam(){
if(isset($param['image'])){
$this->param['image'] = str_replace_url($this->param['image'] ?? '');
}
$this->param['url'] = str_replace_url($this->param['url']);
$this->param['operator_id'] = $this->user['id'];
if(empty($this->project)){
... ...
... ... @@ -50,29 +50,31 @@ class DetailLogic extends BaseLogic
* @method :post
* @time :2024/11/13 9:30
*/
public function saveDetail(){
try {
foreach ($this->param['data'] as $data){
foreach ($data as $v){
$save_data = [
'sort'=>$v['sort'],
'column_id'=>$v['column_id'],
'product_id'=>$this->param['product_id'],
'text_type'=>$v['text_type'],
'title'=>$v['title'] ?? '',
'content'=>json_encode($v['content'] ?? []),
'css'=>json_encode($v['css'] ?? []),
];
if(isset($v['id']) && !empty($v['id'])){
$this->edit($save_data,['id'=>$v['id']]);
}else{
$this->model->add($save_data);
public function saveDetail($product_id,$data){
if(!empty($data)){
try {
foreach ($data as $val){
foreach ($val as $v){
$save_data = [
'sort'=>$v['sort'],
'column_id'=>$v['column_id'],
'product_id'=>$product_id,
'text_type'=>$v['text_type'],
'title'=>$v['title'] ?? '',
'content'=>json_encode($v['content'] ?? [],JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
'css'=>json_encode($v['css'] ?? [],JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
];
if(isset($v['id']) && !empty($v['id'])){
$this->edit($save_data,['id'=>$v['id']]);
}else{
$this->model->add($save_data);
}
}
}
}catch (\Exception $e){
$this->fail('保存失败,请联系管理员.错误:'.$e->getMessage());
}
}catch (\Exception $e){
$this->fail('保存失败,请联系管理员.错误:'.$e->getMessage());
}
return $this->success(['product_id'=>$this->param['product_id']]);
return $this->success(['product_id'=>$product_id]);
}
}
... ...
... ... @@ -67,6 +67,9 @@ class ProductLogic extends BaseLogic
//产品分类关联
CategoryRelated::saveRelated($id, $category_ids);
KeywordRelated::saveRelated($id,$category_ids);
//更新产品新描述
$detailLogic = new DetailLogic();
$detailLogic->saveDetail($id,$this->param['data'] ?? []);
//保存扩展字段
$this->saveExtendInfo($id,$extend);
}catch (\Exception $e){
... ...
... ... @@ -294,9 +294,7 @@ class TranslateLogic extends BaseLogic
$id = $this->model->addReturnId($param);
TranslateData::insert(['trans_id'=>$id,'data'=>json_encode($data,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)]);
}else{
if(!empty($data)){
TranslateData::where(['trans_id'=>$info['id']])->update(['data'=>json_encode($data,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)]);
}
TranslateData::where(['trans_id'=>$info['id']])->update(['data'=>json_encode($data,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)]);
}
//写日志
$userLogModel = new UserLog();
... ...
... ... @@ -2,6 +2,7 @@
namespace App\Models\Template;
use App\Helper\Arr;
use App\Models\Base;
class BCustomTemplate extends Base
... ... @@ -14,4 +15,5 @@ class BCustomTemplate extends Base
const STATUS_ACTIVE = 1;
const STATUS_DRAFT = 0;
}
... ...
<?php
/**
* @remark :
* @name :TranslateKey.php
* @author :lyh
* @method :post
* @time :2024/11/22 11:11
*/
namespace App\Models\WebSetting;
use App\Models\Base;
class TranslateKey extends Base
{
protected $table = 'gl_translate_key';
protected $connection = 'custom_mysql';
}
... ...
... ... @@ -491,6 +491,7 @@ Route::middleware(['aloginauth'])->group(function () {
Route::any('/fb_set_site', [Aside\Task\AdsController::class, 'setRelaySite'])->name('admin.fb_set_site');
Route::any('/fb_check_domain', [Aside\Task\AdsController::class, 'checkDomain'])->name('admin.fb_check_domain');
Route::any('/fb_inquiry_list', [Aside\Task\AdsController::class, 'fbInquiryList'])->name('admin.fb_ads_inquiry_list');
Route::any('/fb_inquiry_chart', [Aside\Task\AdsController::class, 'fbInquiryChart'])->name('admin.fb_ads_inquiry_chart');
Route::any('/fb_relay_detail_list', [Aside\Task\AdsController::class, 'fbRelayDetail'])->name('admin.fb_ads_relay_detail_list');
Route::any('/fb_relay_count', [Aside\Task\AdsController::class, 'fbRelayCount'])->name('admin.fb_relay_count');
});
... ...