作者 赵彬吉

Merge branch 'dev' of http://47.244.231.31:8099/zhl/globalso-v6 into dev

<?php
namespace App\Console\Commands\AyrShare;
use App\Helper\AyrShare as AyrShareHelper;
use App\Models\AyrShare\AyrShare as AyrShareModel;
use Illuminate\Console\Command;
class ShareConfig extends Command
{
public $error = 0;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'share_config';
/**
* The console command description.
*
* @var string
*/
protected $description = '更新用户Ayr_share配置';
/**
* @name :(定时执行更新用户配置)handle
* @author :lyh
* @method :post
* @time :2023/5/12 14:48
*/
public function handle()
{
$ayrShareModel = new AyrShareModel();
//更新用户配置
$lists = $ayrShareModel->lists($this->map,$this->page,$this->row,'id',['id','profile_key','bind_plat_from']);
foreach ($lists['list'] as $k => $v){
if(empty($v['profile_key'])){
continue;
}
//获取当前用户配置
$ayrShareHelper = new AyrShareHelper();
$share_info = $ayrShareHelper->get_profiles_users($v['profile_key']);
if(!isset($share_info['activeSocialAccounts'])){
continue;
}
$str = json_encode($share_info['activeSocialAccounts']);
if($str != $v['bind_plat_from']){
$rs = $ayrShareModel->edit(['bind_plat_from'=>$str],['id'=>$v['id']]);
if($rs === false){
$this->error++;
}
}
}
echo $this->error;
}
}
... ...
<?php
namespace App\Console\Commands\AyrShare;
use App\Helper\AyrShare as AyrShareHelper;
use App\Models\AyrShare\AyrRelease as AyrReleaseModel;
use Carbon\Carbon;
use App\Models\AyrShare\AyrShare as AyrShareModel;
use Illuminate\Console\Command;
class ShareUser extends Command
{
public $error = 0;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'share_user';
/**
* The console command description.
*
* @var string
*/
protected $description = '用户一周内无记录清除Ayr_share';
/**
* @name :(定时执行)handle
* @author :lyh
* @method :post
* @time :2023/5/12 14:48
*/
public function handle()
{
$this->user_operator_record();
}
/**
* @name : 检测用户是否无操作记录
* @author :lyh
* @method :post
* @time :2023/5/12 14:55
*/
protected function user_operator_record(){
//获取所有ayr_share用户
$ayr_share_model = new AyrShareModel();
$ayr_share_list = $ayr_share_model->list();
foreach ($ayr_share_list as $k => $v){
//查询当前用户是否有未推送的博文
$ayr_release = new AyrReleaseModel();
$release_info = $ayr_release->read(['idempotency_key'=>['>',date('Y-m-d H:i:s',time())],'share_id'=>$v['id']]);
//有推文时,直接跳出循环
if($release_info !== false){
continue;
}
//查看用户是否在一周内有发送博客
$start_at = Carbon::now()->modify('-7 days')->toDateString();
$end_at = Carbon::now()->toDateString();
$release_info = $ayr_release->read(['created_at'=>['between',[$start_at,$end_at]]]);
//有发送博文,则跳出循环
if($release_info == false){
continue;
}
//删除用户第三方配置
$ayr_share_helper = new AyrShareHelper();
$res = $ayr_share_helper->deleted_profiles();
if($res['status'] == 'fail'){
$this->error++;
continue;
}
//更新数据库
$data = [
'title'=>null,
'bind_plat_from'=>null,
'profile_key'=>null,
'ref_id'=>null,
];
$res = $ayr_share_model->edit($data,['id'=>$v['id']]);
if($res == false){
$this->error++;
}
}
return $this->error;
}
}
... ...
... ... @@ -22,6 +22,7 @@ class Kernel extends ConsoleKernel
$schedule->command('rank_data_indexed_pages')->weeklyOn(1, '01:00')->withoutOverlapping(1); // 排名数据-页面收录,每周一凌晨执行一次
$schedule->command('rank_data_recomm_domain')->weeklyOn(1, '01:00')->withoutOverlapping(1); // 排名数据-引荐域名,每周一凌晨执行一次
$schedule->command('rank_data_week')->weeklyOn(1, '01:00')->withoutOverlapping(1); // 排名数据,每周一凌晨执行一次
$schedule->command('share_user')->dailyAt('01:00')->withoutOverlapping(1); // 清除用户ayr_share数据,每天凌晨1点执行一次
}
/**
... ...
... ... @@ -68,7 +68,7 @@ zFePUMXy1bFghAfzNKlrc5XgH4ixeeMh3cDtU97K
public function deleted_profiles($data){
$param = [
'title'=>$data['title'],
// 'profileKey'=>$this->profile_key,
'profileKey'=>$data['profileKey'],
];
$url = $this->path.'/api/profiles/profile';
return $this->http_click('delete',$url,$param);
... ...
... ... @@ -4,8 +4,6 @@ namespace App\Http\Controllers\Aside;
use App\Enums\Common\Code;
use App\Http\Controllers\Controller;
use App\Http\Requests\Aside\Template\TemplateRequest;
use App\Http\Requests\Scene;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Exceptions\HttpResponseException;
... ... @@ -159,17 +157,6 @@ class BaseController extends Controller
}
/**
* 验证
* @param $c
* @param $scene
* @return array
* @author:dc
* @time 2023/5/11 14:56
*/
protected final function verify($c,$scene=null){
return app($c)->setScene($scene?:Scene::$CREATE)->validated();
}
... ...
... ... @@ -5,7 +5,6 @@ namespace App\Http\Controllers\Aside;
use App\Enums\Common\Code;
use App\Http\Logic\Aside\Template\TemplateLogic;
use App\Http\Requests\Aside\Template\TemplateRequest;
use App\Http\Requests\Scene;
use App\Models\Template\ATemplate;
use App\Models\Template\ATemplateHtml;
use Illuminate\Validation\Rule;
... ... @@ -39,8 +38,8 @@ class TemplateController extends BaseController
* @author:dc
* @time 2023/5/4 16:19
*/
public function edit(){
$this->save(Scene::$UPDATE);
public function edit(TemplateRequest $request){
$this->save($request->validated());
}
/**
... ... @@ -48,8 +47,8 @@ class TemplateController extends BaseController
* @author:dc
* @time 2023/5/5 9:30
*/
public function insert(){
$this->save(Scene::$CREATE);
public function insert(TemplateRequest $request){
$this->save($request->validated());
}
... ... @@ -62,11 +61,7 @@ class TemplateController extends BaseController
* @author:dc
* @time 2023/5/11 10:13
*/
private function save($scene){
$data = $this->verify(TemplateRequest::class,$scene);
private function save($data){
TemplateLogic::instance()->save($data);
... ...
... ... @@ -22,10 +22,22 @@ class AyrShareController extends BaseController
* @method :post
* @time :2023/5/5 16:06
*/
public function lists(AyrShareModel $ayrShareModel){
public function lists(AyrShareModel $ayrShareModel,AyrShareLogic $ayrShareLogic){
//授权配置列表
$share_list = $ayrShareModel->platforms;
$lists = $ayrShareModel->lists($this->map,$this->page,$this->row,'id',['id','name','bind_plat_from','operator_id','created_at','updated_at']);
$lists = $ayrShareModel->lists($this->map,$this->page,$this->row,'id',['id','name','title','profile_key','bind_plat_from','operator_id','created_at','updated_at']);
foreach ($lists['list'] as $k => $v){
if(!empty($v['profile_key'])){
$ayrShareHelper = new AyrShareHelper();
$share_info = $ayrShareHelper->get_profiles_users($v['profile_key']);
if(isset($share_info['activeSocialAccounts'])){
$str = json_encode($share_info['activeSocialAccounts']);
if($str != $v['bind_plat_from']){
$ayrShareLogic->ayr_share_edit(['bind_plat_from'=>$str]);
}
}
}
}
$lists['share_list'] = $share_list;
$this->response('列表',Code::SUCCESS,$lists);
}
... ...
... ... @@ -70,7 +70,7 @@ class BaseController extends Controller
$this->map['status'] = $v;
break;
case "category_id":
$this->map['category_id'] = $v;
$this->map['category_id'] = ['like','%,'.$v.',%'];;
break;
case "name":
$this->map['name'] = ['like','%'.$v.'%'];
... ... @@ -85,7 +85,7 @@ class BaseController extends Controller
case "end_at":
if(!empty($v)){
$this->_btw[1] = $v;
$this->map['updated_at'] = ['between', $this->_btw];
$this->map['created_at'] = ['between', $this->_btw];
}
break;
default:
... ...
... ... @@ -120,9 +120,10 @@ class BlogController extends BaseController
*/
public function status(BlogLogic $blogLogic){
$this->request->validate([
'id'=>['required'],
'id'=>['required','array'],
],[
'id.required' => 'ID不能为空',
'id.array' => 'ID为数组',
]);
$blogLogic->blog_status();
//TODO::写入日志
... ...
... ... @@ -4,6 +4,8 @@ namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\Nav\NavLogic;
use App\Http\Requests\Bside\Nav\NavRequest;
use App\Models\BNav;
/**
... ... @@ -16,42 +18,6 @@ use App\Models\BNav;
class NavController extends BaseController
{
/**
* 验证规则
* @var array[]
*/
private $verify = [
'role' => [
'pid' => ['required','integer','gte:0'],
'name' => ['required','max:100'],
'location' => ['required','in:header,footer'],
'url' => ['required','max:200'],
'status' => ['required','in:0,1'],
'target' => ['required','in:0,1'],
'sort' => ['required','integer','gte:0']
],
'message' => [
'pid.required' => '上级选择错误',
'pid.gte' => '上级选择错误',
'pid.integer' => '上级选择错误',
'name.required' => '名称必须',
'name.max' => '名称不能超过100个字符',
'location.required' => '位置选择错误',
'location.in' => '位置选择错误',
'url.required' => '链接必须',
'url.max' => '链接不能超过200个字符',
'status.required' => '状态选择错误',
'status.in' => '状态必须是显示/隐藏',
'target.required' => '打开方式必须',
'target.in' => '打开方式选择错误',
'sort.required' => '排序必须',
'sort.integer' => '排序必须是一个数字',
'sort.gte' => '排序必须大于等于0',
],
'attr' => [
]
];
/**
* 列表数据
... ... @@ -62,46 +28,13 @@ class NavController extends BaseController
*/
public function index(){
$isTree = $this->param['tree']??false;
// 显示位置
$location = $this->param['location']??'';
$lists = BNav::_all($this->user['project_id'],$location)->toArray();
if($isTree){
$lists = list_to_tree($lists);
}
return $this->success($lists);
return $this->success(NavLogic::instance()->list());
}
/**
* 创建导航栏
* @author:dc
* @time 2023/5/8 16:39
*/
public function create(){
return $this->save();
}
/**
* 修改
* @return \Illuminate\Http\JsonResponse
* @throws \Illuminate\Validation\ValidationException
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
* @author:dc
* @time 2023/5/8 17:06
*/
public function update(){
$this->verify['role']['id'] = ['required','integer','gt:0'];
$this->verify['message']['id.gt'] = $this->verify['message']['id.integer'] = $this->verify['message']['id.required'] = '编辑导航数据不存在';
return $this->save();
}
/**
* 新增修改
... ... @@ -112,33 +45,11 @@ class NavController extends BaseController
* @author:dc
* @time 2023/5/8 17:06
*/
private function save(){
$data = $this->validate(request() ,$this->verify['role'],$this->verify['message']);
if($data['pid']){
// 验证是否存在上级
$all = BNav::_all($this->user['project_id'],$data['location']);
if(!$all->where('id',$data['pid'])->count()){
return $this->response('上级栏目不存在',Code::SYSTEM_ERROR);
}
// 上级不允许是自己的下级
if(!empty($data['id'])){
$all = list_to_tree($all->toArray(),$data['id']);
$all = tree_to_list($all);
if(in_array($data['pid'],array_column($all,'id'))){
return $this->response('上级栏目不允许为本身的下级',Code::SYSTEM_ERROR);
}
}
}
// 保存
$id = BNav::_save($this->user['project_id'],$data,$data['id']??0);
if($id===-1){
return $this->response('导航菜单不存在',Code::SYSTEM_ERROR);
}
return $this->success(BNav::_find($this->user['project_id'],$id,true));
public function save(NavRequest $request){
$data = $request->validated();
return $this->success(NavLogic::instance()->save($data));
}
... ... @@ -148,23 +59,14 @@ class NavController extends BaseController
* @author:dc
* @time 2023/5/9 9:20
*/
public function delete(){
$id = $this->param['id']??0;
$data = BNav::_find($this->user['project_id'],$id);
if(empty($data)){
return $this->response('导航菜单不存在',Code::SYSTEM_ERROR);
}
public function delete(NavRequest $request){
if(BNav::isChild($data['id'],$this->user['project_id'])){
return $this->response('存在下级无法删除',Code::SYSTEM_ERROR);
}
$id = $request->validated()['id'];
NavLogic::instance()->delete($id);
if($data->delete()){
return $this->response('删除成功',Code::SUCCESS);
}
return $this->response('删除成功');
}
... ...
... ... @@ -10,6 +10,7 @@ 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:新闻管理
... ... @@ -118,9 +119,10 @@ class NewsController extends BaseController
*/
public function status(NewsLogic $newsLogic){
$this->request->validate([
'id'=>['required'],
'id'=>['required','array'],
],[
'id.required' => 'ID不能为空',
'id.array' => 'ID为数组',
]);
$newsLogic->news_status();
//TODO::写入日志
... ...
... ... @@ -83,7 +83,6 @@ class FileController
header('Status: 206 Partial Content');
header('Accept-Ranges: bytes');
header('Content-Range: bytes ' . $start . '-' . $end . '/' . $size);
// 读取部分内容并发送响应
$file = fopen($path, 'rb');
fseek($file, $start);
... ...
<?php
namespace App\Http\Logic\Bside;
namespace App\Http\Logic\Bside\Nav;
use App\Helper\Arr;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\BNav;
use App\Models\Inquiry;
/**
* @author:dc
... ... @@ -21,6 +23,52 @@ class NavLogic extends BaseLogic
$this->model = new BNav();
}
/**
* @return array
* @author:dc
* @time 2023/5/12 9:23
*/
public function list(){
$where = [];
if(!empty($this->param['location'])){
$where[] = ['location','=',$this->param['location']];
}
$lists = $this->getList($where,['sort'=>'asc'],['*'],false);
$isTree = $this->param['tree']??false;
if($isTree){
$lists = list_to_tree($lists);
}
return $lists;
}
public function save($data)
{
if($data['pid']){
// 验证是否存在上级
$all = BNav::_all($this->user['project_id'],$data['location']);
if(!$all->where('id',$data['pid'])->count()){
$this->fail('上级栏目不存在');
}
// 上级不允许是自己的下级
if(!empty($data['id'])){
$all = list_to_tree($all->toArray(),$data['id']);
$all = tree_to_list($all);
if(in_array($data['pid'],array_column($all,'id'))){
$this->fail('上级栏目不允许为本身的下级');
}
}
}
// 保存
$id = parent::save($data);
return $this->getInfo($id['id']);
}
/**
* @param $ids
... ... @@ -33,7 +81,7 @@ class NavLogic extends BaseLogic
public function delete($ids,$map = [])
{
if(BNav::isChild($ids,$this->user['project_id'])){
$this->fail('存在下级无法删除','B_NAV_DELETE_CHILD');
$this->fail('存在下级无法删除');
}
return parent::delete($ids,$map); // TODO: Change the autogenerated stub
... ...
... ... @@ -2,7 +2,6 @@
namespace App\Http\Requests\Aside\Template;
use App\Http\Requests\Scene;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
... ... @@ -14,7 +13,6 @@ use Illuminate\Validation\Rule;
*/
class TemplateRequest extends FormRequest
{
// use Scene;
/**
* Determine if the user is authorized to make this request.
... ... @@ -44,9 +42,9 @@ class TemplateRequest extends FormRequest
];
// 更新场景
// if(!$this->isScene(Scene::$CREATE)){
// unset($rule['id']);
// }
if(!$this->is('a/template/insert')){
unset($rule['id']);
}
return $rule;
}
... ...
... ... @@ -2,7 +2,6 @@
namespace App\Http\Requests\Bside\Nav;
use App\Http\Requests\Scene;
use Illuminate\Foundation\Http\FormRequest;
/**
... ... @@ -14,7 +13,6 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class NavRequest extends FormRequest
{
use Scene;
/**
* Determine if the user is authorized to make this request.
... ... @@ -44,12 +42,12 @@ class NavRequest extends FormRequest
];
// 修改
if($this->isScene(static::$UPDATE)){
if($this->is('b/nav/update')){
$rule['id'] = ['required','integer'];
}
// 删除
if($this->isScene(static::$DELETE)){
if($this->is('b/nav/delete')){
$rule = ['id' => ['required','integer']];
}
... ... @@ -59,8 +57,8 @@ class NavRequest extends FormRequest
public function messages()
{
return [
'id.required' => '编辑导航数据不存在',
'id.integer' => '编辑导航数据不存在',
'id.required' => '数据不存在',
'id.integer' => '数据不存在',
'pid.required' => '上级选择错误',
'pid.gte' => '上级选择错误',
'pid.integer' => '上级选择错误',
... ...
<?php
namespace App\Http\Requests;
/**
* @author:dc
* @time 2023/5/11 14:49
* Class Scene
* @package App\Http\Requests
*/
trait Scene {
/**
* 更新场景
*/
static $UPDATE = 1;
/**
* 创建场景
*/
static $CREATE = 0;
/**
* 删除场景
*/
static $DELETE = -1;
private $scene;
/**
* @param $scene
* @return $this
* @author:dc
* @time 2023/5/11 17:14
*/
public function setScene($scene){
var_dump($scene);
$this->scene = $scene;
return $this;
}
/**
* @return mixed
*/
public function getScene()
{
return $this->scene;
}
/**
* @param $scene
* @return bool
* @author:dc
* @time 2023/5/11 17:14
*/
public function isScene($scene){
return $this->scene === $scene;
}
}
... ... @@ -194,6 +194,7 @@ class Base extends Model
case 'between':
// in查询 ['id'=>['between',[create1,create2]]]
$query->whereBetween($k, $v[1]);
break;
case 'not between':
// not between查询 ['created_at'=>['not between',['xxx', 'xxx]]]
$query->whereNotBetween($k, $v[1]);
... ...
... ... @@ -225,9 +225,6 @@ Route::middleware(['bloginauth'])->group(function () {
});
});
// 模板
Route::prefix('template')->group(function () {
Route::get('/', [\App\Http\Controllers\Bside\TemplateController::class, 'index'])->name('bside_template');
... ... @@ -248,8 +245,8 @@ Route::middleware(['bloginauth'])->group(function () {
// 导航栏编辑
Route::prefix('nav')->group(function () {
Route::get('/', [\App\Http\Controllers\Bside\NavController::class, 'index'])->name('bside_nav');
Route::post('/create', [\App\Http\Controllers\Bside\NavController::class, 'create'])->name('bside_nav_create');
Route::post('/update', [\App\Http\Controllers\Bside\NavController::class, 'update'])->name('bside_nav_update');
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');
});
... ... @@ -261,7 +258,6 @@ Route::middleware(['bloginauth'])->group(function () {
});
//无需登录验证的路由组
Route::group([], function () {
Route::any('/login', [\App\Http\Controllers\Bside\ComController::class, 'login'])->name('login');
... ...