作者 李美松

Merge branch 'develop' into lms

# Conflicts:
#	app/Helper/helper.php
正在显示 35 个修改的文件 包含 540 行增加168 行删除
... ... @@ -45,6 +45,11 @@ class ShareUser extends Command
$ayr_share_model = new AyrShareModel();
$ayr_share_list = $ayr_share_model->list();
foreach ($ayr_share_list as $k => $v){
$time = Carbon::now()->modify('-7 days')->toDateString();
//创建时间小于7天前的当前时间
if($v['created_at'] > $time){
continue;
}
//查询当前用户是否有未推送的博文
$ayr_release = new AyrReleaseModel();
$release_info = $ayr_release->read(['schedule_date'=>['>',date('Y-m-d H:i:s',time())],'share_id'=>$v['id']]);
... ... @@ -57,10 +62,11 @@ class ShareUser extends Command
$end_at = Carbon::now()->toDateString();
$release_info = $ayr_release->read(['created_at'=>['between',[$start_at,$end_at]]]);
//有发送博文,则跳出循环
if($release_info == false){
if($release_info !== false){
continue;
}
//删除用户第三方配置
if(!empty($v['profile_key'])){
$ayr_share_helper = new AyrShareHelper();
$data_profiles = [
'title'=>$v['title'],
... ... @@ -71,12 +77,13 @@ class ShareUser extends Command
$this->error++;
continue;
}
}
//更新数据库
$data = [
'title'=>null,
'bind_plat_from'=>null,
'profile_key'=>null,
'ref_id'=>null,
'title'=>'',
'bind_platforms'=>'',
'profile_key'=>'',
'ref_id'=>'',
];
$res = $ayr_share_model->edit($data,['id'=>$v['id']]);
if($res == false){
... ...
... ... @@ -41,8 +41,8 @@ class Yesterday extends Command
$yesterday = Carbon::yesterday()->toDateString();
foreach ($list as $v){
$arr = [];
$arr['yesterday_pv_num'] = DB::table('gl_customer_visit_item')->whereDate('date', $yesterday)->where('domain',$v['test_domain'])->count();
$arr['yesterday_ip_num'] = DB::table('gl_customer_visit')->whereDate('date', $yesterday)->where('domain',$v['test_domain'])->count();
$arr['pv_num'] = DB::table('gl_customer_visit_item')->whereDate('updated_date', $yesterday)->where('domain',$v['test_domain'])->count();
$arr['ip_num'] = DB::table('gl_customer_visit')->whereDate('updated_date', $yesterday)->where('domain',$v['test_domain'])->count();
$inquiry_list = (new FormGlobalsoApi())->getInquiryList($v['test_domain']);
if($inquiry_list['status'] == self::STATUS_ERROR){
$arr['inquiry_num'] = 0;
... ... @@ -62,6 +62,7 @@ class Yesterday extends Command
$arr['updated_at'] = date('Y-m-d H:i:s');
$data[] = $arr;
}
//判断数据是否存在
DB::table('gl_count')->insert($data);
echo $this->error;
}
... ...
<?php
namespace App\Helper;
class AliSms
{
private $_msg = array( //状态对照
1 => "发送成功",
0 => "其他系统错误",
-1 => "短信余额不足",
-2 => "资金账户被锁定",
-3 => "用户被锁定",
-4 => "号码在黑名单内",
-5 => "用户名或密码不正确",
-6 => "号码不正确",
-7 => "接口连接失败",
-8 => "号码格式错误",
-9 => "通道编号错误",
-10 => "定时发送时间不正确",
-11 => "没有输入短信内容",
-12 => "短信内容超出长度限制",
-15 => "内容含非法关键字",
-16 => "超出发送时间范围",
-17 => "通道被关闭",
-18 => "短信内容没有签名",
-30 => "手机未认证",
-31 => "身份未认证",
-32 => "请勿重复发送",
-33 => "验证码已过期,请重新获取",
-34 => "手机号码格式不正确",
-35 => "验证码不正确",
);
// 保存错误信息
public $error;
public $_code = "";
public $_name = "";
public $_key_str = ""; // cache full name.
protected $_expire = 600; // 验证码过期时间(s)
public $_key = [
];
// Access Key ID
private $accessKeyId = '';
// Access Key Secret
private $accessKeySecret = '';
// 签名
private $signName = '';
// 模版ID
public $templateCode = '';
public function __construct($config = array())
{
$config = array(
'accessKeyId' => config('aliyunsms.access_key'),
'accessKeySecret' => config('aliyunsms.access_secret'),
'signName' => config('aliyunsms.sign_name'),
'templateCode' => config('aliyunsms.login_sms_temp'),
);
// 配置参数
$this->accessKeyId = $config['accessKeyId'];
$this->accessKeySecret = $config['accessKeySecret'];
$this->signName = $config['signName'];
$this->templateCode = $config['templateCode'];
}
/**
* 规范化字符串以符合阿里云短信接口
* @param $string
* @return mixed|string
*/
private function percentEncode($string)
{
$string = urlencode($string);
$string = preg_replace('/\+/', '%20', $string);
$string = preg_replace('/\*/', '%2A', $string);
$string = preg_replace('/%7E/', '~', $string);
return $string;
}
/**
* 签名
*
* @param unknown $parameters
* @param unknown $accessKeySecret
* @return string
*/
private function computeSignature($parameters, $accessKeySecret)
{
ksort($parameters);
$canonicalizedQueryString = '';
foreach ($parameters as $key => $value) {
$canonicalizedQueryString .= '&' . $this->percentEncode($key) . '=' . $this->percentEncode($value);
}
$stringToSign = 'GET&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1));
$signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
return $signature;
}
/**
* 发送验证码 https://help.aliyun.com/document_detail/44364.html?spm=5176.doc44368.6.126.gSngXV
*
* @param unknown $mobile
* @param unknown $verify_code
*
*/
public function send_sms($mobile, $paramstring)
{
$params = array(
// 公共参数
'SignName' => $this->signName,
'Format' => 'JSON',
'Version' => '2016-09-27',
'AccessKeyId' => $this->accessKeyId,
'SignatureVersion' => '1.0',
'SignatureMethod' => 'HMAC-SHA1',
'SignatureNonce' => uniqid(),
'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'),
// 接口参数
'Action' => 'SingleSendSms',
'TemplateCode' => $this->templateCode,
'RecNum' => $mobile,
'ParamString' => $paramstring,
);
// 计算签名并把签名结果加入请求参数
$params['Signature'] = $this->computeSignature($params, $this->accessKeySecret);
// 发送请求
$url = 'https://sms.aliyuncs.com/?' . http_build_query($params);
$result = http_get($url); //TODO:上线前打开
if (isset($result['Code'])) {
$this->error = $this->getErrorMessage($result['Code']);
return false;
}
return true;
}
/**
* 发送验证码 https://help.aliyun.com/document_detail/44364.html?spm=5176.doc44368.6.126.gSngXV
*
* @param unknown $mobile
* @param unknown $verify_code
*
*/
public function send_verify($mobile)
{
if ($this->checkMobile($mobile) === false) {
$this->error = $this->_msg[-34];
return -34;
}
$session = cache($this->_key_str . $mobile);
if ($session && time() - $session['time'] < 60) {
if ($session['code'] == null) {
return true;
} else {
$this->error = $this->_msg[-32];
return -32;
}
}
$this->_code = rand(1000, 9999);
$params = array(
// 公共参数
'SignName' => $this->signName,
'Format' => 'JSON',
'Version' => '2016-09-27',
'AccessKeyId' => $this->accessKeyId,
'SignatureVersion' => '1.0',
'SignatureMethod' => 'HMAC-SHA1',
'SignatureNonce' => uniqid(),
'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'),
// 接口参数
'Action' => 'SingleSendSms',
'TemplateCode' => $this->templateCode,
'RecNum' => $mobile,
'ParamString' => '{"msgcode":"' . $this->_code . '"}',
);
// 计算签名并把签名结果加入请求参数
$params['Signature'] = $this->computeSignature($params, $this->accessKeySecret);
// 发送请求
$url = 'https://sms.aliyuncs.com/?' . http_build_query($params);
$result = http_get($url); //TODO:上线前打开
// $result =1;
if ($result) {
$session = array();
$session['code'] = $this->_code; // 把校验码保存到session
$session['time'] = time(); // 验证码创建时间
cache($this->_key_str . $mobile, $session, $this->_expire);
} else {
return $this->error = $this->_msg[0];
}
if (isset($result['Code'])) {
$this->error = $this->getErrorMessage($result['Code']);
return false;
}
return true;
}
/**
* 验证手机号码
*/
public function checkMobile($tel)
{
if (preg_match("/^1[3,4,6,5,8,7,9][0-9]{1}[0-9]{8}$/", $tel)) {
//验证通过
return true;
} else {
$this->error = $this->_msg[-34];
//手机号码格式不对
return false;
}
}
/**
* 验证码是否正确
* @param string $key 手机号码
* @param int|string $code 验证码
* @param int|string $type 类型 reg-注册时获取 sms-快速登录时 pwd-修改密码时 bind-绑定手机时 unbind-解绑时
* @return boolean 验证短信验证码是否正确
*/
public function check($key, $code, $type = 'reg')
{
$this->_key_str = $type . '_' . $key;
$session = cache($this->_key_str);
if (empty($code) || empty($session)) {
$this->error = $this->_msg[-33] . $this->_key_str;
return false;
}
if (time() - $session['time'] > $this->_expire) {
cache($this->_key_str, null);
$this->error = $this->_msg[-33] . $this->_key_str;
return false;
}
if ($code == $session['code']) {
return true;
}
$this->error = $this->_msg[-35] . $this->_key_str;
return false;
}
/**
* 验证成功后调用清空验证码
*/
public function afterCheck()
{
cache($this->_key_str, null);
}
/**
* 获取详细错误信息
*
* @param unknown $status
*/
public function getErrorMessage($status)
{
$message = array(
'InvalidDayuStatus.Malformed' => '账户短信开通状态不正确',
'InvalidSignName.Malformed' => '短信签名不正确或签名状态不正确',
'InvalidTemplateCode.MalFormed' => '短信模板Code不正确或者模板状态不正确',
'InvalidRecNum.Malformed' => '目标手机号不正确,单次发送数量不能超过100',
'InvalidParamString.MalFormed' => '短信模板中变量不是json格式',
'InvalidParamStringTemplate.Malformed' => '短信模板中变量与模板内容不匹配',
'InvalidSendSms' => '1小时只能请求7次,谢谢',
'InvalidDayu.Malformed' => '变量不能是url,可以将变量固化在模板中',
);
if (isset($message[$status])) {
return $message[$status];
}
return $status;
}
private function _addlog($name, $title)
{
$this->_keys["code"] = $this->_code;
// addlog($this->_keys, $title, 1, $this->_url);
}
}
... ...
... ... @@ -85,7 +85,7 @@ zFePUMXy1bFghAfzNKlrc5XgH4ixeeMh3cDtU97K
'domain'=>$domain,
'privateKey'=>$this->private_key,
'profileKey'=>$data['profileKey'],
// 'logout'=>true
'logout'=>true
];
$url = $this->path.'/api/profiles/generateJWT';
return $this->http_click('post',$url,$param);
... ...
... ... @@ -67,7 +67,7 @@ if (!function_exists('http_post')) {
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
if (curl_errno($ch)) {
\Illuminate\Support\Facades\Log::write(print_r(curl_errno($ch), 1), 'debug---1');
\Illuminate\Support\Facades\Log::info(print_r(curl_errno($ch),1),'debug---1');
}
curl_close($ch);
return json_decode($res, true);
... ... @@ -95,6 +95,7 @@ if (!function_exists('http_get')) {
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);
$access_txt = curl_exec($ch1);
\Illuminate\Support\Facades\Log::info($access_txt);
curl_close($ch1);
return json_decode($access_txt, true);
}
... ...
... ... @@ -14,7 +14,6 @@ class AiCommandController extends BaseController
public $chat_url = 'v2/openai_chat';
/**
* @name :ai生成
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -38,8 +37,7 @@ class AiCommandController extends BaseController
}
/**
* @name :写入日志
* @return void
* @name :写入日志
* @author :liyuhang
* @method
*/
... ...
... ... @@ -24,7 +24,7 @@ class AyrShareController extends BaseController
*/
public function lists(AyrShareModel $ayrShareModel,AyrShareLogic $ayrShareLogic){
//授权配置列表
$share_list = $ayrShareModel->platforms;
$share_list = $ayrShareModel->iconImage();
$lists = $ayrShareModel->lists($this->map,$this->page,$this->row,'id',['id','name','title','profile_key','bind_platforms','operator_id','created_at','updated_at']);
foreach ($lists['list'] as $k => $v){
if(!empty($v['profile_key'])){
... ... @@ -68,8 +68,11 @@ class AyrShareController extends BaseController
$res = false;
}
}else{
if(!empty($info['bind_platforms'])){
$ayrShareLogic->ayr_share_edit(['bind_platforms'=>''],$this->param['id']);
$res = true;
return true;
}
$res = false;
}
$this->response('success',Code::SUCCESS,['is_true'=>$res]);
}
... ... @@ -81,6 +84,8 @@ class AyrShareController extends BaseController
*/
public function create_account(AyrShareRequest $ayrShareRequest,AyrShareLogic $ayrShareLogic){
$ayrShareRequest->validated();
//验证参数及
$ayrShareLogic->AyrVerify();
$param = [
'title'=>self::TITLE . ':' . $this->user['project_id'] . '-' . $this->param['name'],
];
... ... @@ -91,7 +96,7 @@ class AyrShareController extends BaseController
$this->response('同步绑定失败');
}
//执行数据库操作
$ayrShareLogic->ayr_share_add($res);
$ayrShareLogic->ayr_share_save($res);
$this->response('success');
}
... ... @@ -108,6 +113,7 @@ class AyrShareController extends BaseController
'id.required' => 'ID不能为空'
]);
$info = $ayrShareLogic->ayr_share_info();
if(!empty($info['title'])){
$data = [
// 'title'=>$info['title'],
'profileKey'=>$info['profile_key']
... ... @@ -118,6 +124,7 @@ class AyrShareController extends BaseController
if($res['status'] == 'fail'){
$this->response('同步删除失败');
}
}
$ayrShareLogic->ayr_share_del();
$this->response('success');
}
... ...
... ... @@ -7,6 +7,8 @@ use App\Helper\Common;
use App\Http\Controllers\Controller;
use App\Http\Requests\Bside\Nav\NavRequest;
use App\Http\Requests\Scene;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\User\User as UserModel;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
... ... @@ -45,8 +47,7 @@ class BaseController extends Controller
}
}
/**
* @name 参数过滤
* @return void
* @name :参数过滤
* @author :liyuhang
* @method
*/
... ... @@ -209,5 +210,16 @@ class BaseController extends Controller
return \Illuminate\Support\Facades\Request::isMethod('post');
}
/**
* @name :(获取当前登录用户域名并通知更新)projectUrl
* @author :lyh
* @method :post
* @time :2023/6/6 14:09
*/
public function projectUrlNotify($param){
$deployBuildModel = new DeployBuild();
$info = $deployBuildModel->read(['project_id'=>1]);
$url = $info['test_domain'].'api/updateHtmlNotify?model='.$param;
return http_get($url);
}
}
... ...
... ... @@ -13,7 +13,6 @@ class BlogCategoryController extends BaseController
{
/**
* @name :博客分类列表
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -34,7 +33,6 @@ class BlogCategoryController extends BaseController
/**
* @name :获取当前分类详情
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -49,7 +47,6 @@ class BlogCategoryController extends BaseController
}
/**
* @name :添加分类
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -62,7 +59,6 @@ class BlogCategoryController extends BaseController
/**
* @name :编辑分类
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -79,7 +75,6 @@ class BlogCategoryController extends BaseController
/**
* @name :编辑状态/与排序
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -95,7 +90,6 @@ class BlogCategoryController extends BaseController
/**
* @name :删除分类
* @return void
* @author :liyuhang
* @method
*/
... ...
... ... @@ -12,9 +12,10 @@ use App\Models\Blog\Blog as BlogModel;
class BlogController extends BaseController
{
//通知别名
public $updateModelView = 'blog';
/**
* @name :博客列表
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -37,7 +38,6 @@ class BlogController extends BaseController
/**
* @name :获取分页列表
* @return void
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
... ... @@ -48,7 +48,6 @@ class BlogController extends BaseController
}
/**
* @name :获取当前博客详情
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -63,20 +62,19 @@ class BlogController extends BaseController
}
/**
* @name :添加博客
* @return void
* @author :liyuhang
* @method
*/
public function add(BlogRequest $request,BlogLogic $blogLogic){
$request->validated();
$blogLogic->blog_add();
//TODO::写入日志
//TODO::通知网站更新
$this->projectUrlNotify($this->updateModelView);
$this->response('success');
}
/**
* @name :编辑博客
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -87,13 +85,13 @@ class BlogController extends BaseController
'id.required' => 'ID不能为空'
]);
$blogLogic->blog_edit();
//TODO::写入日志
//TODO::通知网站更新
$this->projectUrlNotify($this->updateModelView);
$this->response('success');
}
/**
* @name :编辑新闻seo
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -114,7 +112,6 @@ class BlogController extends BaseController
}
/**
* @name :编辑博客状态/排序
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -132,7 +129,6 @@ class BlogController extends BaseController
/**
* @name :删除博客(批量逻辑删除)
* @return void
* @author :liyuhang
* @method
*/
... ...
... ... @@ -13,7 +13,6 @@ class BlogLabelController extends BaseController
{
/**
* @name :博客标签列表
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -38,7 +37,6 @@ class BlogLabelController extends BaseController
/**
* @name :编辑标签
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -55,7 +53,6 @@ class BlogLabelController extends BaseController
/**
* @name :编辑标签状态/排序
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -72,7 +69,6 @@ class BlogLabelController extends BaseController
/**
* @name :删除标签(批量删除)
* @return void
* @author :liyuhang
* @method
*/
... ...
... ... @@ -4,19 +4,22 @@ namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Helper\AyrShare as AyrShareHelper;
use App\Helper\Country;
use App\Helper\Common;
use App\Helper\FormGlobalsoApi;
use App\Models\AyrShare\AyrRelease as AyrReleaseModel;
use App\Models\AyrShare\AyrShare as AyrShareModel;
use App\Models\Project\DeployBuild;
use App\Models\Project\Project;
use App\Models\Project\Project as ProjectModel;
use App\Models\SmsLog;
use App\Models\User\ProjectMenu as ProjectMenuModel;
use App\Models\User\ProjectRole as ProjectRoleModel;
use App\Models\User\User as UserModel;
use App\Models\User\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Mrgoon\AliSms\AliSms;
/***
* 当前为公共类 所有方法均不需要验证登录token
... ... @@ -25,7 +28,6 @@ class ComController extends BaseController
{
/**
* @name :管理员登录
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -48,7 +50,6 @@ class ComController extends BaseController
/**
* @name :获取当前用户权限菜单列表
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -73,7 +74,6 @@ class ComController extends BaseController
/**
* @name :获取当前项目详情
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -87,7 +87,6 @@ class ComController extends BaseController
/**
* @name :登录用户编辑资料/修改密码
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -136,7 +135,7 @@ class ComController extends BaseController
'mobile.regex' => '请输入正确的手机号码',
]);
$mobile = $request->input('mobile');
$user = User::where(['mobile' => $mobile])->first();
$user = UserModel::where(['mobile' => $mobile])->first();
if (empty($user)) {
return $this->response('请输入正确的手机号码!', Code::USER_LOGIN_ERROE);
}
... ... @@ -144,7 +143,7 @@ class ComController extends BaseController
if ($last_sms && $last_sms->use = SmsLog::USE_USABLE && time() - strtotime($last_sms->created_at) < 60) {
return $this->response('请不要重复发送短信!', Code::USER_LOGIN_ERROE);
}
$template = config('alisms.login_sms_temp');
$template = config('aliyunsms.login_sms_temp');
$code['code'] = rand(100000,999999);
$ali_sms = new AliSms();
$send = $ali_sms->sendSms(strval($mobile), $template, $code);
... ... @@ -155,4 +154,22 @@ class ComController extends BaseController
return $this->response('success');
}
public function ceshi(){
$data = [];
for ($i = 30;$i >= 1 ;$i--){
$start_time = Carbon::now()->modify('-'.$i.' days')->toDateString();
$data[] = [
'project_id'=>1,
'pv_num'=>$i*(rand(10,1000)),
'ip_num'=>$i*(rand(10,1000)),
'inquiry_num'=>$i*(rand(10,1000)),
'date'=>$start_time,
'compliance_day'=>2351,
'service_day'=>1233,
'created_at'=>$start_time.' 00:00:00',
'updated_at'=>$start_time.' 00:00:00',
];
}
DB::table('gl_count')->insert($data);
}
}
... ...
... ... @@ -30,9 +30,14 @@ class CustomController extends BaseController
// 每页数量
$limit = intval($this->param['limit']??20);
$name = request()->get('name');
$map = [];
if($name){
$map[] = ['name','like','%'.htmlspecialchars($name).'%'];
}
$lists = CustomLogic::instance()->getList(
[],
$map,
[],
['id','name','title','status','url','keywords','description','created_at','updated_at'],
$limit
... ...
... ... @@ -14,7 +14,6 @@ class MailController extends BaseController
const STATUS_ONE = 1; //状态为已读状态
/**
* @name :当前用户站内信列表
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -42,7 +41,6 @@ class MailController extends BaseController
/**
* @name :获取站内信详情
* @return void
* @author :liyuhang
* @method
*/
... ...
... ... @@ -83,16 +83,24 @@ class NavController extends BaseController
'name' => '首页'
],
[
'url' => '/list',
'name' => '列表'
'url' => '/news',
'name' => '新闻'
],
[
'url' => '/page',
'name' => '单页'
'url' => '/products',
'name' => '产品'
],
[
'url' => '/goods',
'name' => '商品'
'url' => '/search',
'name' => '搜索页'
],
[
'url' => '/blog',
'name' => '博客'
],
[
'url' => '',
'name' => '自定义'
],
]);
}
... ...
... ... @@ -13,7 +13,6 @@ class NewsCategoryController extends BaseController
{
/**
* @name :新闻分类列表
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -34,7 +33,6 @@ class NewsCategoryController extends BaseController
/**
* @name :获取当前分类详情
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -49,7 +47,6 @@ class NewsCategoryController extends BaseController
}
/**
* @name :添加分类
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -62,7 +59,6 @@ class NewsCategoryController extends BaseController
/**
* @name :编辑分类
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -78,7 +74,6 @@ class NewsCategoryController extends BaseController
/**
* @name :编辑状态/排序
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -94,7 +89,6 @@ class NewsCategoryController extends BaseController
/**
* @name :删除分类
* @return void
* @author :liyuhang
* @method
*/
... ...
... ... @@ -3,23 +3,21 @@
namespace App\Http\Controllers\Bside\News;
use App\Enums\Common\Code;
use App\Helper\Common;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\News\NewsCategoryLogic;
use App\Http\Logic\Bside\News\NewsLogic;
use App\Http\Requests\Bside\News\NewsRequest;
use App\Models\News\News as NewsModel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
/**
* @name:新闻管理
*/
class NewsController extends BaseController
{
public $updateModelView = 'news';
/**
* @name :获取新闻列表
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -38,7 +36,6 @@ class NewsController extends BaseController
/**
* @name :添加新闻时获取分类列表
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -48,7 +45,6 @@ class NewsController extends BaseController
}
/**
* @name :获取详情
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -70,12 +66,13 @@ class NewsController extends BaseController
public function add(NewsRequest $newsRequest,NewsLogic $newsLogic){
$newsRequest->validated();
$newsLogic->news_add();
$this->response('success');
//TODO::通知网站更新
$res = $this->projectUrlNotify($this->updateModelView);
$this->response('success',Code::SUCCESS,$res);
}
/**
* @name :编辑
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -86,12 +83,13 @@ class NewsController extends BaseController
'id.required' => 'ID不能为空',
]);
$newsLogic->news_edit();
$this->response('success');
//TODO::通知网站更新
$res = $this->projectUrlNotify($this->updateModelView);
$this->response('success',Code::SUCCESS,$res);
}
/**
* @name :编辑新闻seo
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -113,7 +111,6 @@ class NewsController extends BaseController
/**
* @name :编辑状态/与排序
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -130,7 +127,6 @@ class NewsController extends BaseController
}
/**
* @name :删除新闻(逻辑删除)
* @return void
* @author :liyuhang
* @method
*/
... ...
... ... @@ -73,6 +73,8 @@ class ProductController extends BaseController
public function save(ProductRequest $request, ProductLogic $logic)
{
$data = $logic->save($this->param);
//通知更新界面
$this->projectUrlNotify('product');
return $this->success($data);
}
... ...
... ... @@ -123,7 +123,8 @@ class TemplateController extends BaseController
$data = TemplateLogic::instance()->first($source,$source_id);
$res = [
'html' => $data['html']??'',
'name' => 'example'
'section_list_id' => $data['section_list_id']??'',
'name' => 'example',
];
return $this->response('',Code::SUCCESS,$res);
... ... @@ -139,10 +140,6 @@ class TemplateController extends BaseController
$data = $request->validated();
$data['data_source'] = $data['source'];
$data['data_source_id'] = $data['source_id'];
unset($data['source']);
unset($data['source_id']);
TemplateLogic::instance()->save($data);
return $this->response('保存成功');
// 不需要数据id
if(in_array($data['data_source'],['index'])){
... ...
... ... @@ -11,7 +11,6 @@ class DeptUserController extends BaseController
{
/**
* @name :name
* @return void
* @author :liyuhang
* @method
*/
... ...
... ... @@ -14,7 +14,6 @@ class ProjectRoleController extends BaseController
{
/**
* @name :用户角色列表()
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -30,7 +29,6 @@ class ProjectRoleController extends BaseController
/**
* @name :根据角色获取会员列表
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -41,7 +39,6 @@ class ProjectRoleController extends BaseController
}
/**
* @name :详情
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -56,7 +53,6 @@ class ProjectRoleController extends BaseController
}
/**
* @name :添加/编辑角色时获取菜单列表
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -66,7 +62,6 @@ class ProjectRoleController extends BaseController
}
/**
* @name :添加角色
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -78,7 +73,6 @@ class ProjectRoleController extends BaseController
/**
* @name :编辑角色
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -94,7 +88,6 @@ class ProjectRoleController extends BaseController
/**
* @name :修改用户状态
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -110,7 +103,6 @@ class ProjectRoleController extends BaseController
/**
* @name :删除角色
* @return void
* @author :liyuhang
* @method
*/
... ...
... ... @@ -17,7 +17,6 @@ class UserController extends BaseController
{
/**
* @name :name
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -41,7 +40,6 @@ class UserController extends BaseController
/**
* @name :添加管理员
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -53,7 +51,6 @@ class UserController extends BaseController
/**
* @name : 编辑管理员
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -69,7 +66,6 @@ class UserController extends BaseController
/**
* @name :修改当前用户状态
* @return void
* @author :liyuhang
* @method
*/
... ... @@ -85,7 +81,6 @@ class UserController extends BaseController
/**
* @name :详情
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -100,7 +95,6 @@ class UserController extends BaseController
}
/**
* @name :删除管理员
* @return json
* @author :liyuhang
* @method
*/
... ...
... ... @@ -30,7 +30,9 @@ class AyrShareLogic extends BaseLogic
'reddit'=>1,
'pinterest'=>1,
'telegram'=>1,
'Twitter'=>1,
'twitter'=>1,
'tiktok'=>1,
'youtube'=>1,
];
public function __construct()
... ... @@ -41,12 +43,33 @@ class AyrShareLogic extends BaseLogic
}
/**
* @name :AyrVerify(验证参数)
* @author :lyh
* @method :post
* @time :2023/6/7 11:52
*/
public function AyrVerify(){
if(isset($this->param['id'])){
$info = $this->model->read(['name'=>$this->param['name'],'id'=>['!=',$this->param['id']]]);
if($info !== false){
$this->fail('当前名称已存在');
}
}else{
$count = $this->model->where(['project_id'=>$this->user['project_id']])->count();
if($count > $this->model::COUNT){
$this->fail('当前账户只允许添加3个账号');
}
}
return $this->success();
}
/**
* @name :(创建账号并绑定写入数据库)ayr_add
* @author :lyh
* @method :post
* @time :2023/5/6 9:19
*/
public function ayr_share_add($res){
public function ayr_share_save($res){
//插入数据库
$param = [
'title'=>$res['title'],
... ... @@ -56,7 +79,11 @@ class AyrShareLogic extends BaseLogic
'project_id'=>$this->user['project_id'],
'name'=>$this->param['name'],
];
if(isset($this->param['id'])){
$rs = $this->model->edit($param,['id'=>$this->param['id']]);
}else{
$rs = $this->model->add($param);
}
if($rs === false){
$this->fail('error');
}
... ... @@ -107,36 +134,6 @@ class AyrShareLogic extends BaseLogic
return $this->success();
}
/**
* @name :(根据hash获取图片详情)save_info_info
* @author :lyh
* @method :post
* @time :2023/5/10 15:01
*/
public function save_img_info($hash){
$imageModel = new ImageModel();
$info = $imageModel->read(['hash'=>$hash]);
if($info === false){
$this->fail('error');
}
return $this->success($info);
}
/**
* @name :(根据hash视频详情)save_info_info
* @author :lyh
* @method :post
* @time :2023/5/10 15:01
*/
public function save_file_info($hash){
$fileModel = new FileModel();
$info = $fileModel->read(['hash'=>$hash]);
if($info === false){
$this->fail('error');
}
return $this->success($info);
}
/**
* @name :(更新图片库)save_img
* @author :lyh
* @method :post
... ... @@ -209,21 +206,27 @@ class AyrShareLogic extends BaseLogic
if(!in_array($v,json_decode($info['bind_platforms']))){
$this->fail('未绑定平台');
}
if($v == 'reddit' && isset($this->param['video'])){
$this->fail('不支持视频');
switch ($v){
case 'tiktok':
if(isset($this->param['images']) && !empty($this->param['images'])){
$this->fail($v.'不支持发布图片');
}
break;
case 'reddit':
if(isset($this->param['video']) && !empty($this->param['video'])){
$this->fail($v.'不支持视频');
}
break;
}
//验证图片数
if(isset($this->param['images']) && !empty($this->param['images'])){
if(isset($this->send_num[$v])){
$img_num = count($this->param['images']);
if($img_num > $this->send_num[$v]){
$this->fail('发布图片数量超过最大限制,'.$v.'只允许'.$this->send_num[$v].'张图');
}
}
//验证图片数
// $img_num = count($this->param['video']);
// if($img_num > 1){
// $this->fail('发布视频数量超过最大限制,'.$v.'只允许'.$this->send_num[$v].'个视频');
// }
}
}
return $this->success();
}
... ...
... ... @@ -118,7 +118,7 @@ class CountLogic extends BaseLogic
'date' => ['between',[now()->subDays(30)->startOfDay()->toDateString(),now()->startOfDay()->toDateString()]],
'project_id' => $this->user['project_id']
];
$data = $this->model->list($param,'id',['id','pv_num','ip_num','date']);
$data = $this->model->list($param,'date',['id','pv_num','ip_num','date']);
return $this->success($data);
}
... ... @@ -131,7 +131,7 @@ class CountLogic extends BaseLogic
public function inquiry_country_count(){
$data = DB::table('gl_inquiry_record')
->select('ip_area', DB::raw('COUNT(ip_area) as count'))
->groupBy('ip_area')->orderBy('count','desc')->limit(20)->get()->toArray();
->groupBy('ip_area')->orderBy('count','desc')->limit(10)->get()->toArray();
$data = object_to_array($data);
$total = DB::table('gl_inquiry_record')->count();
foreach ($data as $k=>$v){
... ...
... ... @@ -23,17 +23,17 @@ class LoginAuthMiddleware
{
$token = $request->header('token');
if(!isset($token) || empty($token)){
return response(['code'=>Code::USER_ERROR,'msg'=>'当前用户未登录']);
return response(['code'=>Code::USER_LOGIN_ERROE,'msg'=>'当前用户未登录']);
}
$info = Cache::get($token);
if(empty($info)){
return response(['code'=>Code::USER_ERROR,'msg'=>'当前用户未登录']);
return response(['code'=>Code::USER_LOGIN_ERROE,'msg'=>'当前用户未登录']);
}
// 设置数据信息
// $project = ProjectServer::useProject($info['project_id']);
// if(empty($project)){
// return response(['code'=>Code::USER_ERROR,'msg'=>'数据库未配置']);
// }
$project = ProjectServer::useProject($info['project_id']);
if(empty($project)){
return response(['code'=>Code::USER_LOGIN_ERROE,'msg'=>'数据库未配置']);
}
//操作权限设置
$projectRoleModel = new ProjectRoleModel();
$role_info = $projectRoleModel->read(['id'=>$info['role_id']]);
... ... @@ -44,7 +44,7 @@ class LoginAuthMiddleware
$menu_id = $projectMenuModel->read(['action'=>$action['as']],['id']);
if($menu_id !== false){
if(strpos($role_info['role_menu'], $menu_id['id']) < 0){
return response(['code'=>Code::USER_ERROR,'msg'=>'当前用户没有权限']);
return response(['code'=>Code::USER_LOGIN_ERROE,'msg'=>'当前用户没有权限']);
}
}
return $next($request);
... ...
... ... @@ -23,7 +23,7 @@ class AyrShareRequest extends FormRequest
public function rules()
{
return [
'name'=>'required|unique:gl_ayr_share,name',
'name'=>'required',
];
}
... ...
... ... @@ -27,7 +27,7 @@ class BlogRequest extends FormRequest
'name'=>'required|max:100',
'url'=>'required',
'label_id'=>'required',
'remark'=>'required|max:100',
'remark'=>'required|max:255',
'text'=>'required|min:10',
'url'=>'required',
];
... ...
... ... @@ -32,9 +32,9 @@ class CustomRequest extends FormRequest
{
$rule = [
'name' => ['required','max:100'],
'title' => ['required','max:200'],
'keywords' => ['required','max:200'],
'description' => ['required','max:250'],
'title' => [],//'required','max:200'
'keywords' => [],//'required','max:200'
'description' => [],//'required','max:250'
// 'html' => ['required'],
'url' => ['required','max:200','url'],
'status' => ['required','in:0,1'],
... ...
... ... @@ -39,7 +39,7 @@ class NewsRequest extends FormRequest
'text.required'=>'内容不能为空',
'name.max'=>'名称最大100字',
'remark.max'=>'简介最大100字',
'text.max'=>'内容最小100字',
'text.mix'=>'内容最小10字',
'category_id.required'=>'分类不能为空',
];
}
... ...
... ... @@ -38,7 +38,8 @@ class TemplateRequest extends FormRequest
'html' => ['required'],
'source' => ['required',Rule::in(array_column(ATemplateHtml::$sourceMap,'template'))],
'source_id' => ['required','integer','gte:0'],
'status' => ['required',Rule::in([0,1])]
'status' => ['required',Rule::in([0,1])],
'section_list_id' => ['required']
];
... ... @@ -69,6 +70,8 @@ class TemplateRequest extends FormRequest
'status.required' => '状态错误',
'status.in' => '状态错误',
// 'section_list_id.required' => '必须填写',
];
}
... ...
<?php
namespace App\Listeners;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Database\Events\QueryExecuted;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
/**
* 监听数据库sql执行事件
*/
class QueryListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param QueryExecuted $event
* @return void
*/
public function handle(QueryExecuted $event)
{
try{
if (env('APP_DEBUG') == true) {
$sql = str_replace("?", "'%s'", $event->sql);
foreach ($event->bindings as $i => $binding) {
if ($binding instanceof \DateTime) {
$event->bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
} else {
if (is_string($binding)) {
$event->bindings[$i] = "$binding";
}
}
}
$log = vsprintf($sql, $event->bindings);
$log = $log.' [ RunTime:'.$event->time.'ms ] ';
Log::debug($log);
}
}catch (\Exception $exception){
Log::error('log sql error:'.$exception->getMessage());
}
}
}
... ...
... ... @@ -8,33 +8,49 @@ class AyrShare extends Base
{
protected $table = 'gl_ayr_share';
const TYPE_FACEBOOK = 1;
const TYPE_TWITTER = 2;
const TYPE_LINKEDIN = 3;
const TYPE_INSTAGRAM = 4;
const TYPE_YOUTUBE = 5;
const TYPE_REDDIT = 6;
const TYPE_TELEGRAM = 7;
const TYPE_GMB = 8;
const TYPE_PINTEREST = 9;
const TYPE_TIKTOK = 10;
const COUNT = 3;
const TYPE_FACEBOOK = 'facebook';
const TYPE_TWITTER = 'twitter';
const TYPE_LINKEDIN = 'linkedin';
const TYPE_INSTAGRAM = 'instagram';
const TYPE_YOUTUBE = 'youtube';
const TYPE_REDDIT = 'reddit';
const TYPE_TELEGRAM = 'telegram';
const TYPE_GMB = 'google';
const TYPE_PINTEREST = 'pinterest';
const TYPE_TIKTOK = 'tiktok';
/**
* @var :授权列表
*/
public $platforms = [
self::TYPE_FACEBOOK => 'Facebook',
self::TYPE_TWITTER => 'Twitter',
self::TYPE_LINKEDIN => 'LinkedIn',
self::TYPE_INSTAGRAM => 'Instagram',
self::TYPE_YOUTUBE => 'YouTube',
self::TYPE_REDDIT => 'Reddit',
self::TYPE_TELEGRAM => 'Telegram',
self::TYPE_GMB => 'Google',
self::TYPE_PINTEREST => 'Pinterest',
self::TYPE_TIKTOK => 'TikTok',
self::TYPE_FACEBOOK => 'facebook.png',
self::TYPE_TWITTER => 'twitter.jpg',
self::TYPE_LINKEDIN => 'linkin.png',
self::TYPE_INSTAGRAM => 'ins.png',
self::TYPE_YOUTUBE => 'youtube.jpg',
self::TYPE_REDDIT => 'reddit.png',
self::TYPE_TELEGRAM => 'tel.png',
self::TYPE_GMB => 'google.png',
self::TYPE_PINTEREST => 'pinterest.png',
self::TYPE_TIKTOK => 'tiktok.jpg',
];
/**
* @name :(获取图标iconImage
* @author :lyh
* @method :post
* @time :2023/6/8 9:21
*/
public function iconImage(){
$image_link = [];
foreach ($this->platforms as $k => $v){
$image_link[$k] = url('upload/icon').'/'.$v;
}
return $image_link;
}
/**
* @var :发布图片数量
*/
public $image = [
... ... @@ -49,4 +65,5 @@ class AyrShare extends Base
self::TYPE_PINTEREST => 1,
self::TYPE_TIKTOK => 1,
];
}
... ...
... ... @@ -18,6 +18,10 @@ class EventServiceProvider extends ServiceProvider
Registered::class => [
SendEmailVerificationNotification::class,
],
// 监听sql查询事件
'Illuminate\Database\Events\QueryExecuted' => [
'App\Listeners\QueryListener',
],
];
/**
... ...
... ... @@ -277,6 +277,7 @@ Route::middleware(['bloginauth'])->group(function () {
Route::post('/create', [\App\Http\Controllers\Bside\NavController::class, 'save'])->name('bside_nav_create');
Route::post('/update', [\App\Http\Controllers\Bside\NavController::class, 'save'])->name('bside_nav_update');
Route::delete('/delete', [\App\Http\Controllers\Bside\NavController::class, 'delete'])->name('bside_nav_delete');
Route::get('/default-urls', [\App\Http\Controllers\Bside\NavController::class, 'urls'])->name('bside_nav_default-urls');
});
//排名数据
... ... @@ -306,6 +307,7 @@ Route::middleware(['bloginauth'])->group(function () {
//无需登录验证的路由组
Route::group([], function () {
Route::any('/login', [\App\Http\Controllers\Bside\ComController::class, 'login'])->name('login');
Route::any('/ceshi', [\App\Http\Controllers\Bside\ComController::class, 'ceshi'])->name('ceshi');
Route::any('/sendLoginSms', [\App\Http\Controllers\Bside\ComController::class, 'sendLoginSms'])->name('sendLoginSms');
Route::get('/file/download', [\App\Http\Controllers\Bside\FileController::class, 'download'])->name('file_download');
Route::any('/image/{hash}/{w?}/{h?}', [\App\Http\Controllers\File\ImageController::class, 'index'])->name('image_show');
... ...