作者 zhl

u

正在显示 65 个修改的文件 包含 3365 行增加802 行删除

要显示太多修改。

为保证性能只显示 65 of 65+ 个文件。

APP_NAME=Laravel
APP_ENV=test
APP_KEY=base64:+ouoKlz2sFDOisnROMRpxT/u9xkZJVrXlzP4cfTqPow=
APP_DEBUG=false
APP_URL=http://localhost
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=globalso
DB_USERNAME=debian-sys-maint
DB_PASSWORD=WtujxV73XIclQet0
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DRIVER=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
... ... @@ -15,3 +15,4 @@ yarn-error.log
/.vscode
composer.lock
app/Console/Commands/Test/Demo.php
/public/upload
... ...
<?php
/**
* Created by PhpStorm.
* User: zhl
* Date: 2023/4/19
* Time: 15:04
*/
namespace App\Console\Commands;
use App\Models\Project;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
/**
* Class ProjectDatabaseUpdate
* @package App\Console\Commands
*/
class ProjectDatabaseUpdate extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'project:database_update';
/**
* The console command description.
*
* @var string
*/
protected $description = '项目数据库更新';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* @return bool
*/
public function handle()
{
#TODO 未处理更新 更新对象(base, project) 更新内容
return true;
}
/**
* 主库内容更新
* @param $sql
* @return array
*/
public function baseUpdate($sql)
{
return DB::select($sql);
}
/**
* 客户数据表更新
* @param $sql
* @return bool
*/
public function projectDatabaseUpdate($sql)
{
$project = Project::get();
foreach ($project as $val) {
ProjectServer::useProject($val->id);
DB::connection('custom_mysql')->select($sql);
}
return true;
}
/**
* 指定项目数据库更新
* @param $project_id
* @param $sql
*/
public function appointProjectUpdate($project_id, $sql)
{
ProjectServer::useProject($project_id);
DB::connection('custom_mysql')->select($sql);
}
}
\ No newline at end of file
... ...
... ... @@ -113,7 +113,7 @@ class Handler extends ExceptionHandler
$code = $exception->getCode();
} elseif ($exception instanceof ValidationException) {
$code = Code::USER_PARAMS_ERROE();
$message = Arr::first(Arr::first($exception->errors()));
$message = $code->description = Arr::first(Arr::first($exception->errors()));
} elseif ($exception instanceof NotFoundHttpException || $exception instanceof MethodNotAllowedHttpException) {
return response('404 Not Found', 404);
} else {
... ...
<?php
namespace App\Files;
use Illuminate\Http\Request;
class Image
{
protected $request = [];
public function __construct(Request $request)
{
$this->request = $request;
}
/**
* @name :上传图片
* @return void
* @author :liyuhang
* @method
*/
public function uploads(){
$url = './uploads/images/';
$param = $this->request->post();
if($this->request->hasFile('image') && $this->request->file('image')->isValid()){
$filename = date('ymdHis').rand(10000,99999).$this->request->file('image');
$this->request->file('image')->move('./uploads/images/',$filename);
}else{
return false;
}
return $url.$filename;
}
}
... ... @@ -125,4 +125,64 @@ class Arr extends \Illuminate\Support\Arr
return $signle ? $rows[0] : $rows;
}
/**
* 数组转字符串
* @param $arr
* @return string
* @author zbj
* @date 2023/4/17
*/
public static function a2s($arr): string
{
return json_encode($arr, JSON_UNESCAPED_UNICODE);
}
/**
* 字符串转数组
* @param $str
* @return array|mixed
* @author zbj
* @date 2023/4/17
*/
public static function s2a($str)
{
if (is_array($str)) {
return $str;
}
return is_object($str) ? (array)$str : json_decode($str, true);
}
/**
* 数组转set形式字符串
* @param $arr
* @param string $format
* @return string
* @author zbj
* @date 2023/4/17
*/
public static function arrToSet($arr, string $format = 'intval'): string
{
$arr = array_unique(array_filter(Arr::splitFilterToArray($arr, $format, ',')));
return $arr ? implode(',', $arr) : '';
}
/**
* set形式字符串转数组
* @param $str
* @param string $format
* @return array
* @author zbj
* @date 2023/4/17
*/
public static function setToArr($str, string $format = 'intval')
{
if (is_string($str)) {
return Arr::splitFilterToArray($str, $format, ',');
}
return $str ?: [];
}
}
... ...
<?php
namespace App\Helper;
/**
* 计算文件hash
*
* 七牛云的计算规则
*/
class FileEtag
{
const BLOCK_SIZE = 4194304; //4*1024*1024 分块上传块大小,该参数为接口规格,不能修改
private static function packArray($v, $a)
{
return call_user_func_array('pack', array_merge(array($v), (array)$a));
}
private static function blockCount($fsize)
{
return intval(($fsize + (self::BLOCK_SIZE - 1)) / self::BLOCK_SIZE);
}
private static function calcSha1($data)
{
$sha1Str = sha1($data, true);
$err = error_get_last();
if ($err !== null) {
return array(null, $err);
}
$byteArray = unpack('C*', $sha1Str);
return array($byteArray, null);
}
private static function base64_urlSafeEncode($data)
{
$find = array('+', '/');
$replace = array('-', '_');
return str_replace($find, $replace, base64_encode($data));
}
public static function sum($filename)
{
$fhandler = fopen($filename, 'r');
$err = error_get_last();
if ($err !== null) {
return array(null, $err);
}
$fstat = fstat($fhandler);
$fsize = $fstat['size'];
if ((int)$fsize === 0) {
fclose($fhandler);
return array('Fto5o-5ea0sNMlW_75VgGJCv2AcJ', null);
}
$blockCnt = self::blockCount($fsize);
$sha1Buf = array();
if ($blockCnt <= 1) {
array_push($sha1Buf, 0x16);
$fdata = fread($fhandler, self::BLOCK_SIZE);
if ($err !== null) {
fclose($fhandler);
return array(null, $err);
}
list($sha1Code,) = self::calcSha1($fdata);
$sha1Buf = array_merge($sha1Buf, $sha1Code);
} else {
array_push($sha1Buf, 0x96);
$sha1BlockBuf = array();
for ($i = 0; $i < $blockCnt; $i++) {
$fdata = fread($fhandler, self::BLOCK_SIZE);
list($sha1Code, $err) = self::calcSha1($fdata);
if ($err !== null) {
fclose($fhandler);
return array(null, $err);
}
$sha1BlockBuf = array_merge($sha1BlockBuf, $sha1Code);
}
$tmpData = self::packArray('C*', $sha1BlockBuf);
list($sha1Final,) = self::calcSha1($tmpData);
$sha1Buf = array_merge($sha1Buf, $sha1Final);
}
$etag = self::base64_urlSafeEncode(self::packArray('C*', $sha1Buf));
return array($etag, null);
}
}
... ...
<?php
define('HTTP_OPENAI_URL','http://openai.waimaoq.com/');
/**
* 生成路由标识
* @param $string
... ... @@ -10,3 +10,81 @@
function generateRoute($string){
return trim(strtolower(preg_replace( '/[\W]+/', '-', trim($string))), '-');
}
if(!function_exists('http_post')){
/**
* 发送http post请求
* @param type $url
* @param type $post_data
*/
function http_post($url, $post_data)
{
$header = array(
"Accept: application/json",
"Content-Type:application/json;charset=utf-8",
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
if (curl_errno($ch)) {
Log::write(print_r(curl_errno($ch),1),'debug---1');
}
curl_close($ch);
return json_decode($res, true);
}
}
if(!function_exists('http_get')){
/**
* 发送http get请求
* @param type $url
* @return type
*/
function http_get($url)
{
$header[] = "content-type: application/x-www-form-urlencoded;
charset = UTF-8";
$ch1 = curl_init();
$timeout = 5;
curl_setopt($ch1, CURLOPT_URL, $url);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);
$access_txt = curl_exec($ch1);
curl_close($ch1);
return json_decode($access_txt, true);
}
}
if(!function_exists('_get_child')){
/**
* 菜单权限->得到子级数组
* @param int
* @return array
*/
function _get_child($my_id, $arr)
{
$new_arr = array();
foreach ($arr as $k => $v) {
$v = (array)$v;
if ($v['pid'] == $my_id) {
$v['sub'] = _get_child($v['id'],$arr);
$new_arr[] = $v;
}
}
return $new_arr ? $new_arr : false;
}
}
... ...
<?php
namespace App\Http\Controllers\Aside;
use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Models\AiCommand as AiCommandModel;
use function App\Helper\send_openai_msg;
class AiCommandController extends BaseController
{
/**
* @name :指令列表
* @return void
* @author :liyuhang
* @method
*/
public function lists(AiCommandModel $aiCommandModel){
$lists = $aiCommandModel->lists($this->map);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name
* @return void
* @author :liyuhang
* @method
*/
public function add(){
}
/**
* @name
* @return void
* @author :liyuhang
* @method
*/
public function edit(){
}
/**
* @name
* @return void
* @author :liyuhang
* @method
*/
public function del(){
}
}
... ...
... ... @@ -4,19 +4,18 @@ namespace App\Http\Controllers\Aside;
use App\Enums\Common\Code;
use App\Http\Controllers\Controller;
use App\Utils\EncryptUtils;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Session;
class BaseController extends Controller
{
protected $param = [];//所有请求参数
protected $token = ''; //token
protected $request = [];//助手函数
protected $p = 1;//当前页
protected $page = 1;//当前页
protected $row = 20;//每页条数
protected $header = [];//设置请求头参数
protected $order = 'id';
... ... @@ -31,23 +30,27 @@ class BaseController extends Controller
$this->request = $request;
$this->param = $this->request->all();
$this->token = $this->request->header('token');
if(!empty($this->token) && !empty(Cache::get($this->token))){
$info = Cache::get($this->token);
$this->user = $info;
$this->uid = $info['id'];
}else{
return response(['code'=>Code::USER_ERROR,'msg'=>'当前用户未登录']);
}
$this->get_param();
$this->auth_token();
}
/**
* @name
* @return void
* @author :liyuhang
* @method
* admin端用渲染 不走接口
* @return mixed
* @author zbj
* @date 2023/4/19
*/
public function auth_token(){
$info = Cache::get($this->token);
if(isset($info) && !empty($info)){
$this->user = $info;
$this->uid = $info['id'];
}
public function manage(){
return Session::get('manage');
}
/**
* 成功返回
* @param array $data
... ... @@ -68,16 +71,9 @@ class BaseController extends Controller
'data' => $data,
'msg' => $code->description,
];
//加密-返回数据
if (config('app.params_encrypt')) {
$k = config('app.params_encrypt_key');
$i = config('app.params_encrypt_iv');
$response = [
'p' => (new EncryptUtils())->openssl_en($response, $k, $i)];
}
$this->header['token'] = $this->token;
return response()->json($response,200,$this->header);
}
/**
* @name 参数过滤
* @return void
... ... @@ -94,20 +90,23 @@ class BaseController extends Controller
case "order":
$this->order = $v;
break;
case 'p':
$this->p = $v;
case 'page':
$this->page = $v;
break;
case 'row':
$this->row = $v;
break;
case "created_at":
case "name":
$this->map['name'] = ['like','%'.$v.'%'];
break;
case "start_at":
$this->_btw[0] = $v;
$this->_btw[1] = date('Y-m-d H:i:s',time());
$this->map['create_at'] = ['between', $this->_btw];
$this->map['created_at'] = ['between', $this->_btw];
break;
case "updated_at":
case "end_at":
$this->_btw[1] = $v;
$this->map['update_at'] = ['between', $this->_btw];
$this->map['updated_at'] = ['between', $this->_btw];
break;
default:
if (!empty($v)) {
... ... @@ -116,20 +115,20 @@ class BaseController extends Controller
break;
}
}
}
/**
* @name 统一返回参数
* @return void
* @return JsonResponse
* @author :liyuhang
* @method
*/
public function response($msg,$code = 200,$data = [],$result_code = null,$type = 'application/json'){
$result_code === null && $result_code = $code;
public function response($msg = null,string $code = Code::SUCCESS,$data = [],$result_code = 200,$type = 'application/json'): JsonResponse
{
$code = Code::fromValue($code);
$result = [
'msg' =>$msg,
'code'=>$result_code,
'data'=>$data
'msg' => $msg == ' ' ? $code->description : $msg,
'code' => $code->value,
'data' => $this->_extents($data),
];
$this->header['Content-Type'] = $type;
$this->header['token'] = $this->token;
... ... @@ -137,25 +136,45 @@ class BaseController extends Controller
throw new HttpResponseException($response);
}
/**
* @name :上传图片
* @return void
* @author :liyuhang
* @method
* 菜单权限->得到子级数组
* @param int
* @return array
*/
public function uploads(){
$files = $this->request->file('file');
if(empty($files)){
return $this->response('没有上传文件',Code::USER_ERROR);
}
$url = './uploads/images/';
$param = $this->request->post();
if($this->request->hasFile('image') && $files->isValid()){
$filename = date('ymdHis').rand(10000,99999).$this->request->file('image');
$this->request->file('image')->move('./uploads/images/',$filename);
}else{
return false;
public function _get_child($my_id, $arr)
{
$new_arr = array();
foreach ($arr as $k => $v) {
$v = (array)$v;
if ($v['pid'] == $my_id) {
$v['sub'] = $this->_get_child($v['id'],$arr);
$new_arr[] = $v;
}
}
return $new_arr ? $new_arr : false;
}
protected function _extents($data) {
if (empty($data) || !is_array($data)) {
return empty($data) ? is_array($data) ? [] : '' : $data;
}
foreach ($data as $k => $v) {
if (is_array($v)) {
$data[$k] = $this->_extents($v);
} else {
if (is_null($v)) {
$data[$k] = '';
continue;
}
switch ((string) $k) {
case 'image':
$v['image_link'] = file_get_contents($v);
break;
}
}
}
return $url.$filename;
return $data;
}
}
... ...
<?php
namespace App\Http\Controllers\Aside;
use App\Http\Logic\Aside\DemoLogic;
use App\Http\Requests\Aside\DemoRequest;
class DemoController extends BaseController
{
/**
* Deom控制器
* @param DemoRequest $request
* @param DemoLogic $logic
* @return \Illuminate\Http\JsonResponse
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
*/
public function test(DemoRequest $request,DemoLogic $logic)
{
$request->validated();
$data=$logic->testLogic();
return $this->success($data);
}
}
<?php
namespace App\Http\Controllers\Aside;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
/**
* Class IndexController
* @package App\Http\Controllers\Aside
* @author zbj
* @date 2023/4/19
*/
class IndexController extends Controller
{
/**
* 首页
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function index(Request $request)
{
}
}
... ...
<?php
namespace App\Http\Controllers\Aside;
use App\Http\Logic\Aside\LoginLogic;
use App\Rules\Mobile;
use Illuminate\Http\Request;
/**
* Class LoginController
* @package App\Http\Controllers\Aside
* @author zbj
* @date 2023/4/19
*/
class LoginController extends BaseController
{
function login(Request $request, LoginLogic $logic)
{
if ($request->isMethod('POST')) {
$request->validate([
'mobile' => ['required', new Mobile()],
'password' => 'required',
], [
'mobile.required' => '请输入手机号',
'password.required' => '请输入密码',
]);
$logic->login();
return $this->success();
}
return view('admin.login');
}
public function logout(LoginLogic $logic)
{
return $logic->logout();
}
}
... ...
<?php
namespace App\Http\Controllers\Aside\Manage;
use App\Helper\Arr;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\DeptLogic;
use App\Http\Requests\Aside\DeptRequest;
use App\Rules\Ids;
use Illuminate\Http\Request;
/**
* Class DeptController
* @package App\Http\Controllers\Aside
* @author zbj
* @date 2023/4/20
*/
class DeptController extends BaseController
{
public function list(DeptLogic $logic)
{
$map = [];
if(!empty($this->param['search'])){
$map[] = ['title', 'like', "%{$this->param['search']}%"];
}
$sort = ['id' => 'desc'];
$data = $logic->getList($map, $sort, ['id', 'pid', 'title'],0);
return view("admin.dept", ["list" => Arr::listToTree($data)]);
}
public function info(Request $request, DeptLogic $logic){
$request->validate([
'id'=>'required'
],[
'id.required' => 'ID不能为空'
]);
$data = $logic->getInfo($this->param['id']);
return $this->success(Arr::twoKeepKeys($data, ['id', 'pid', 'title', 'manager_uids', 'remark']));
}
public function save(DeptRequest $request, DeptLogic $logic)
{
$data = $logic->save($this->param);
return $this->success($data);
}
public function delete(Request $request, DeptLogic $logic)
{
$request->validate([
'ids'=>['required', new Ids()]
],[
'ids.required' => 'ID不能为空'
]);
$data = $logic->delete($this->param['ids']);
return $this->success($data);
}
}
... ...
<?php
namespace App\Http\Controllers\Aside\Manage;
use App\Helper\Arr;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\GroupLogic;
use App\Http\Requests\Aside\GroupRequest;
use App\Rules\Ids;
use Illuminate\Http\Request;
/**
* 用户组
* Class Group
* @package App\Http\Controllers\Aside
* @author zbj
* @date 2023/4/19
*/
class GroupController extends BaseController
{
public function list(Request $request, GroupLogic $logic)
{
$list = $logic->getList();
return view("admin.group", ["list" => $list]);
}
public function info(Request $request, GroupLogic $logic){
$request->validate([
'id'=>'required'
],[
'id.required' => 'ID不能为空'
]);
$data = $logic->getInfo($this->param['id']);
return $this->success($data);
}
public function save(GroupRequest $request, GroupLogic $logic){
$data = $logic->save($this->param);
return $this->success($data);
}
public function delete(Request $request, GroupLogic $logic){
$request->validate([
'ids'=>['required', new Ids()]
],[
'ids.required' => 'ID不能为空'
]);
$data = $logic->delete($this->param['ids']);
return $this->success($data);
}
}
... ...
<?php
namespace App\Http\Controllers\Aside\Manage;
use App\Helper\Arr;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\ManageLogic;
use App\Http\Requests\Aside\ManageRequest;
use App\Rules\Ids;
use Illuminate\Http\Request;
/**
* 后台用户
* Class ManageController
* @package App\Http\Controllers\Aside
* @author zbj
* @date 2023/4/20
*/
class ManageController extends BaseController
{
public function list(Request $request, ManageLogic $logic)
{
$list = $logic->getList();
return view("admin.manage", ["list" => $list]);
}
public function info(Request $request, ManageLogic $logic){
$request->validate([
'id'=>'required'
],[
'id.required' => 'ID不能为空'
]);
$data = $logic->getInfo($this->param['id']);
return $this->success($data);
}
public function save(ManageRequest $request, ManageLogic $logic){
$data = $logic->save($this->param);
return $this->success($data);
}
public function delete(Request $request, ManageLogic $logic){
$request->validate([
'ids'=>['required', new Ids()]
],[
'ids.required' => 'ID不能为空'
]);
$data = $logic->delete($this->param['ids']);
return $this->success($data);
}
}
... ...
<?php
namespace App\Http\Controllers\Aside\Manage;
use App\Helper\Arr;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\MenuLogic;
use App\Http\Requests\Aside\MenuRequest;
use App\Rules\Ids;
use Illuminate\Http\Request;
/**
* 后台菜单
* Class MenuController
* @package App\Http\Controllers\Aside
* @author zbj
* @date 2023/4/19
*/
class MenuController extends BaseController
{
public function list(Request $request, MenuLogic $logic)
{
$map = [];
$sort = ['id' => 'desc'];
$list = $logic->getList($map, $sort, ['*'],0);
return view("admin.menu", ["list" => Arr::listToTree($list)]);
}
public function info(Request $request, MenuLogic $logic){
$request->validate([
'id'=>'required'
],[
'id.required' => 'ID不能为空'
]);
$data = $logic->getInfo($this->param['id']);
return $this->success($data);
}
public function save(MenuRequest $request, MenuLogic $logic){
$data = $logic->save($this->param);
return $this->success($data);
}
public function delete(Request $request, MenuLogic $logic){
$request->validate([
'ids'=>['required', new Ids()]
],[
'ids.required' => 'ID不能为空'
]);
$data = $logic->delete($this->param['ids']);
return $this->success($data);
}
}
... ...
... ... @@ -2,6 +2,7 @@
namespace App\Http\Controllers\Aside;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Models\Project as ProjectModel;
... ... @@ -20,6 +21,16 @@ class ProjectController extends BaseController
public function lists(){
$projectModel = new ProjectModel();
$lists = $projectModel->lists($this->map,$this->p,$this->row,$this->order);
$this->result($lists);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name :添加项目
* @return void
* @author :liyuhang
* @method
*/
public function add(){
$projectModel = new ProjectModel();
}
}
... ...
<?php
namespace App\Http\Controllers\Aside;
class ProjectMenuController extends BaseController
{
/**
* @name :用户菜单列表
* @return void
* @author :liyuhang
* @method
*/
public function lists(){
}
}
... ...
<?php
namespace App\Http\Controllers\Aside;
class ProjectRoleController extends BaseController
{
/**
* @name :列表
* @return void
* @author :liyuhang
* @method
*/
public function lists (){
}
}
... ...
<?php
namespace App\Http\Controllers\Aside;
class ProjectUserController extends BaseController
{
/**
* @name :用户列表
* @return void
* @author :liyuhang
* @method
*/
public function lists(){
}
}
... ...
<?php
namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use Illuminate\Http\Request;
class AiCommandController extends BaseController
{
public $chat_url = 'v2/openai_chat';
/**
* @name :ai生成
* @return void
* @author :liyuhang
* @method
*/
public function ai_http_post(Request $request){
$request->validate([
'keywords'=>['required'],
'key'=>['required']
],[
'keywords.required' => '关键字不能为空',
'key.required' => '场景不能为空',
]);
#TODO 通过key获取到ai指令对象
$data = $this->send_openai_msg($this->chat_url);
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
... ... @@ -4,7 +4,7 @@ namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Http\Controllers\Controller;
use App\Utils\EncryptUtils;
use App\Models\AiCommand as AiCommandModel;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Exceptions\HttpResponseException;
... ... @@ -15,8 +15,7 @@ class BaseController extends Controller
protected $param = [];//所有请求参数
protected $token = ''; //token
protected $request = [];//助手函数
protected $allCount = 0;//总条数
protected $p = 1;//当前页
protected $page = 1;//当前页
protected $row = 20;//每页条数
protected $header = [];//设置请求头参数
protected $order = 'id';
... ... @@ -35,7 +34,6 @@ class BaseController extends Controller
$info = Cache::get($this->token);
$this->user = $info;
$this->uid = $info['id'];
$this->param['project_id'] = $this->user['project_id'];
}else{
return response(['code'=>Code::USER_ERROR,'msg'=>'当前用户未登录']);
}
... ... @@ -80,20 +78,23 @@ class BaseController extends Controller
case "order":
$this->order = $v;
break;
case 'p':
$this->p = $v;
case 'page':
$this->page = $v;
break;
case 'row':
$this->row = $v;
break;
case "created_at":
case "name":
$this->map['name'] = ['like','%'.$v.'%'];
break;
case "start_at":
$this->_btw[0] = $v;
$this->_btw[1] = date('Y-m-d H:i:s',time());
$this->map['create_at'] = ['between', $this->_btw];
$this->map['created_at'] = ['between', $this->_btw];
break;
case "updated_at":
case "end_at":
$this->_btw[1] = $v;
$this->map['update_at'] = ['between', $this->_btw];
$this->map['updated_at'] = ['between', $this->_btw];
break;
default:
if (!empty($v)) {
... ... @@ -102,7 +103,6 @@ class BaseController extends Controller
break;
}
}
}
/**
* @name 统一返回参数
... ... @@ -116,7 +116,7 @@ class BaseController extends Controller
$result = [
'msg' => $msg == ' ' ? $code->description : $msg,
'code' => $code->value,
'data' => $data,
'data' => $this->_extents($data),
];
$this->header['Content-Type'] = $type;
$this->header['token'] = $this->token;
... ... @@ -143,25 +143,51 @@ class BaseController extends Controller
return $new_arr ? $new_arr : false;
}
protected function _extents($data) {
if (empty($data) || !is_array($data)) {
return empty($data) ? is_array($data) ? [] : '' : $data;
}
foreach ($data as $k => $v) {
if (is_array($v)) {
$data[$k] = $this->_extents($v);
} else {
if (is_null($v)) {
$data[$k] = '';
continue;
}
switch ((string) $k) {
case 'image':
$v['image_link'] = url('/image/' . $v);
break;
}
}
}
return $data;
}
/**
* @name :上传图片
* @return void
* @name :ai自动生成
* @return mixed
* @author :liyuhang
* @method
*/
public function uploads(){
$files = $this->request->file('file');
if(empty($files)){
return $this->response('没有上传文件',Code::USER_ERROR);
}
$url = './uploads/images/';
$param = $this->request->post();
if($this->request->hasFile('image') && $files->isValid()){
$filename = date('ymdHis').rand(10000,99999).$this->request->file('image');
$this->request->file('image')->move('./uploads/images/',$filename);
}else{
return false;
}
return $url.$filename;
public function send_openai_msg($url){
$url = HTTP_OPENAI_URL.$url;
$aiCommandModel = New AiCommandModel();
//指定库获取指令
$info = $aiCommandModel->read(['key'=>$this->param['key']]);
if($info === false){
$this->response('指令不存在',Code::USER_ERROR);
}
//替换关键字
$content = str_replace('$keyword$', $this->param['keywords'], $info['ai']);
$data = [
'messages'=>[
['role'=>'system','content'=>$info['scene']],
['role'=>'assistant','content'=>$content],
]
];
return http_post($url,json_encode($data));
}
}
... ...
<?php
namespace App\Http\Controllers\Bside\Blog;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Blog\BlogCategoryLogic;
use App\Http\Requests\Bside\Blog\BlogCategoryRequest;
use App\Models\Blog\Blog as BlogModel;
use App\Models\Blog\BlogCategory as BlogCategoryModel;
use Illuminate\Http\Request;
class BlogCategoryController extends BaseController
{
/**
* @name :博客分类列表
* @return json
* @author :liyuhang
* @method
*/
public function lists(BlogCategoryModel $blogCategoryModel){
//搜索条件
$this->map['project_id'] = $this->user['project_id'];
$lists = $blogCategoryModel->lists($this->map,$this->page,$this->row);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name :获取当前分类详情
* @return void
* @author :liyuhang
* @method
*/
public function info(Request $request,BlogCategoryLogic $blogCategoryLogic){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$info = $blogCategoryLogic->info_blog_category();
$this->response('success',Code::SUCCESS,$info);
}
/**
* @name :添加分类
* @return json
* @author :liyuhang
* @method
*/
public function add(BlogCategoryRequest $request,BlogCategoryLogic $blogCategoryLogic){
$request->validated();
//添加时,验证分类上级分类是否有,有则更新到当前分类中,没有时直接添加
$blogCategoryLogic->add_blog_category();
$this->response('success');
}
/**
* @name :编辑分类
* @return void
* @author :liyuhang
* @method
*/
public function edit(BlogCategoryRequest $request,BlogCategoryLogic $blogCategoryLogic){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$blogCategoryLogic->edit_blog_category();
//TODO::写入日志
$this->response('success');
}
/**
* @name :编辑状态/与排序
* @return void
* @author :liyuhang
* @method
*/
public function status(Request $request,BlogCategoryLogic $blogCategoryLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$blogCategoryLogic->status_blog_category();
$this->response('success');
}
/**
* @name :删除分类
* @return void
* @author :liyuhang
* @method
*/
public function del(Request $request,BlogCategoryLogic $blogCategoryLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$blogCategoryLogic->del_blog_category();
//TODO::写入操作日志
$this->response('success');
}
}
... ...
<?php
namespace App\Http\Controllers\Bside\Blog;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Blog\BlogLogic;
use App\Http\Requests\Bside\Blog\BlogRequest;
use App\Models\Blog\Blog as BlogModel;
use App\Models\Blog\BlogCategory as BlogCategoryModel;
use Illuminate\Http\Request;
class BlogController extends BaseController
{
/**
* @name :博客列表
* @return json
* @author :liyuhang
* @method
*/
public function lists(BlogModel $blogModel){
//搜索条件
$this->map['project_id'] = $this->user['project_id'];
$lists = $blogModel->lists($this->map,$this->page,$this->row);
if(!empty($lists['list'])){
foreach ($lists['list'] as $k => $v){
$blogCategoryModel= new BlogCategoryModel();
//获取用户已读还是未读
$category_info = $blogCategoryModel->
list(['id'=>['in',explode(',',trim($v['category_id'],','))]],'id',['name']);
$str = '';
foreach ($category_info as $v1){
$str .= $v1['name'].',';
}
$v['category_id'] = trim($str,',');
$lists['list'][$k] = $v;
}
}
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name :获取分页列表
* @return void
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function get_category_list(BlogLogic $blogLogic){
$list = $blogLogic->blog_get_category_list();
$this->response('success',Code::SUCCESS,$list);
}
/**
* @name :获取当前博客详情
* @return json
* @author :liyuhang
* @method
*/
public function info(Request $request,BlogLogic $blogLogic){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$info = $blogLogic->blog_info();
$this->response('success',Code::SUCCESS,$info);
}
/**
* @name :添加博客
* @return void
* @author :liyuhang
* @method
*/
public function add(BlogRequest $request,BlogLogic $blogLogic){
$request->validated();
$blogLogic->blog_add();
//TODO::写入日志
$this->response('success');
}
/**
* @name :编辑博客
* @return void
* @author :liyuhang
* @method
*/
public function edit(BlogRequest $request,BlogLogic $blogLogic){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$blogLogic->blog_edit();
//TODO::写入日志
$this->response('success');
}
/**
* @name :编辑博客状态/排序
* @return void
* @author :liyuhang
* @method
*/
public function status(Request $request,BlogLogic $blogLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$blogLogic->blog_status();
//TODO::写入日志
$this->response('success');
}
/**
* @name :删除博客(批量逻辑删除)
* @return void
* @author :liyuhang
* @method
*/
public function del(Request $request,BlogLogic $blogLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$blogLogic->blog_del();
$this->response('success');
}
/**
* @name :ai生成
* @return void
* @author :liyuhang
* @method
*/
public function ai_blog(Request $request){
$request->validate([
'keywords'=>['required'],
'key'=>['required']
],[
'keywords.required' => '关键字不能为空',
'key.required' => '场景不能为空',
]);
#TODO 通过key获取到ai指令对象
$url = 'v2/openai_chat';
$data = $this->send_openai_msg($url);
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
<?php
namespace App\Http\Controllers\Bside\Blog;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Blog\BlogLabelLogic;
use App\Http\Requests\Bside\Blog\BlogLabelRequest;
use App\Models\Blog\BlogLabel as BlogLabelModel;
use Illuminate\Http\Request;
class BlogLabelController extends BaseController
{
/**
* @name :博客标签列表
* @return json
* @author :liyuhang
* @method
*/
public function lists(BlogLabelModel $blogLabelModel){
$this->map['project_id'] = $this->user['project_id'];
$lists = $blogLabelModel->lists($this->map,$this->page,$this->row,$this->order,['id','name','created_at','updated_at']);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name :添加标签
* @return void
* @author :liyuhang
* @method
*/
public function add(BlogLabelRequest $request,BlogLabelLogic $blogLabelLogic){
$request->validated();
$blogLabelLogic->add_blog_label();
//TODO::写入日志
$this->response('success');
}
/**
* @name :编辑标签
* @return void
* @author :liyuhang
* @method
*/
public function edit(BlogLabelRequest $request,BlogLabelLogic $blogLabelLogic){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$blogLabelLogic->edit_blog_label();
//TODO::写入日志
$this->response('success');
}
/**
* @name :编辑标签状态/排序
* @return void
* @author :liyuhang
* @method
*/
public function status(Request $request,BlogLabelLogic $blogLabelLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$blogLabelLogic->edit_blog_label();
//TODO::写入日志
$this->response('success');
}
/**
* @name :删除标签(批量删除)
* @return void
* @author :liyuhang
* @method
*/
public function del(Request $request,BlogLabelLogic $blogLabelLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$blogLabelLogic->del_blog_label();
$this->response('success');
}
}
... ...
... ... @@ -3,15 +3,13 @@
namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Models\Project;
use App\Models\Project as ProjectModel;
use App\Models\ProjectMenu as ProjectMenuModel;
use App\Models\ProjectRole as ProjectRoleModel;
use App\Models\User as UserModel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
/***
* 当前为公共类 所有方法均不需要验证登录token
*/
... ... @@ -25,8 +23,8 @@ class ComController extends BaseController
*/
public function login(Request $request){
$request->validate([
'mobile'=>['required,string,max:12'],
'password'=>['required,string'],
'mobile'=>['required'],
'password'=>['required'],
],[
'mobile.required'=>'标题必须填写',
'mobile.string'=>'标题中含有非法文字',
... ... @@ -73,8 +71,7 @@ class ComController extends BaseController
* @author :liyuhang
* @method
*/
public function get_project(){
$projectModel = new ProjectModel();
public function get_project(ProjectModel $projectModel){
$info = $projectModel->read(['id'=>$this->user['project_id']]);
if(empty($info)){
$this->response('error',Code::USER_ERROR);
... ... @@ -90,14 +87,11 @@ class ComController extends BaseController
*/
public function edit_info(Request $request){
$request->validate([
'password'=>['required,string,min:5'],
'name'=>['required,max:20'],
'password'=>['required'],
'name'=>['required'],
],[
'password.required'=>'密码必须填写',
'password.string'=>'密码中含有非法文字',
'password.min' => '密码不小于5字符.',
'name.required'=>'名称必须填写',
'name.min' => '名称不小于5字符.',
]);
$userModel = new UserModel();
$this->param['id'] = $this->uid;
... ... @@ -121,4 +115,5 @@ class ComController extends BaseController
}
$this->response('success');
}
}
... ...
<?php
namespace App\Http\Controllers\Bside;
use App\Helper\Arr;
use App\Http\Logic\Bside\DeptLogic;
use App\Http\Requests\Bside\DeptRequest;
use App\Rules\Ids;
use Illuminate\Http\Request;
/**
* Class DeptController
* @package App\Http\Controllers\Bside
* @author zbj
* @date 2023/4/18
*/
class DeptController extends BaseController
{
public function index(DeptLogic $logic)
{
$map = [];
if(!empty($this->param['search'])){
$map[] = ['title', 'like', "%{$this->param['search']}%"];
}
$sort = ['id' => 'desc'];
$data = $logic->getList($map, $sort, ['id', 'pid', 'title'],0);
return $this->success(Arr::listToTree($data));
}
public function info(Request $request, DeptLogic $logic){
$request->validate([
'id'=>'required'
],[
'id.required' => 'ID不能为空'
]);
$data = $logic->getInfo($this->param['id']);
return $this->success(Arr::twoKeepKeys($data, ['id', 'pid', 'title', 'manager_uids', 'remark']));
}
public function save(DeptRequest $request, DeptLogic $logic)
{
$data = $logic->save($this->param);
return $this->success($data);
}
public function delete(Request $request, DeptLogic $logic)
{
$request->validate([
'ids'=>['required', new Ids()]
],[
'ids.required' => 'ID不能为空'
]);
$data = $logic->delete($this->param['ids']);
return $this->success($data);
}
}
... ...
<?php
namespace App\Http\Controllers\Bside;
use App\Services\Facades\Upload;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class FileController extends BaseController
{
/**
* 上传
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
* @author zbj
* @date 2023/4/20
*/
public function upload(Request $request){
// 上传文件
$files = Upload::puts('files', $this->param['config']);
foreach ($files as &$file){
$file = Upload::path2url($file);
}
return $this->success($files);
}
/**
* 下载
* @param Request $request
* @return \Symfony\Component\HttpFoundation\StreamedResponse
* @author zbj
* @date 2023/4/20
*/
public function download(Request $request){
$path = Upload::url2path($this->param['url']);
return Storage::disk('upload')->download($path);
}
}
... ...
<?php
namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\MailLogic;
use App\Models\Mail as MailModel;
use App\Models\MailUser as MailUserModel;
use Illuminate\Http\Request;
class MailController extends BaseController
{
const STATUS_ZERO = 0; //状态为未读状态
const STATUS_ONE = 1; //状态为已读状态
/**
* @name :当前用户站内信列表
* @return void
* @author :liyuhang
* @method
*/
public function lists(){
$mailModel = new MailModel();
//获取当前用户下的所有站内信
$this->map['user_list'] = ['like','%,'.$this->uid.',%'];
$this->map['status'] = $this::STATUS_ZERO;
$lists = $mailModel->lists($this->map,$this->page,$this->row);
if(!empty($lists['list'])){
foreach ($lists['list'] as $k => $v){
$mailUserModel = new MailUserModel();
//获取用户已读还是未读
$info = $mailUserModel->read(['mail_id'=>$v['id'],'user_id'=>$this->uid]);
if($info !== false){
$v['read_status'] = $this::STATUS_ONE;//
}else{
$v['read_status'] = $this::STATUS_ZERO;
}
$lists['list'][$k] = $v;
}
}
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name :获取站内信详情
* @return void
* @author :liyuhang
* @method
*/
public function info(Request $request,MailLogic $mailLogic){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$info = $mailLogic->mail_info();
$this->response('success',Code::SUCCESS,$info);
}
}
... ...
<?php
namespace App\Http\Controllers\Bside\News;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\News\NewsCategoryLogic;
use App\Http\Requests\Bside\News\NewsCategoryRequest;
use App\Models\News\NewsCategory as NewsCategoryModel;
use Illuminate\Http\Request;
class NewsCategoryController extends BaseController
{
/**
* @name :新闻分类列表
* @return json
* @author :liyuhang
* @method
*/
public function lists(NewsCategoryModel $newsCategory){
//搜索条件
$this->map['project_id'] = $this->user['project_id'];
$lists = $newsCategory->lists($this->map,$this->page,$this->row,'sort');
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name :获取当前分类详情
* @return void
* @author :liyuhang
* @method
*/
public function info(Request $request,NewsCategoryLogic $newsCategoryLogic){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$info = $newsCategoryLogic->info_news_category();
$this->response('success',Code::SUCCESS,$info);
}
/**
* @name :添加分类
* @return json
* @author :liyuhang
* @method
*/
public function add(NewsCategoryRequest $request,NewsCategoryLogic $newsCategoryLogic){
$request->validated();
//添加时,验证分类上级分类是否有,有则更新到当前分类中,没有时直接添加
$newsCategoryLogic->add_news_category();
//TODO::写入日志
$this->response('success',Code::SUCCESS,[]);
}
/**
* @name :编辑分类
* @return void
* @author :liyuhang
* @method
*/
public function edit(NewsCategoryRequest $request,NewsCategoryLogic $newsCategoryLogic){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$newsCategoryLogic->edit_news_category();
//TODO::写入日志
$this->response('success');
}
/**
* @name :编辑状态/排序
* @return void
* @author :liyuhang
* @method
*/
public function status(Request $request,NewsCategoryLogic $newsCategoryLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$newsCategoryLogic->status_news_category();
$this->response('success');
}
/**
* @name :删除分类
* @return void
* @author :liyuhang
* @method
*/
public function del(Request $request,NewsCategoryLogic $newsCategoryLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$newsCategoryLogic->del_news_category();
$this->response('success');
}
}
... ...
<?php
namespace App\Http\Controllers\Bside\News;
use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\News\NewsLogic;
use App\Http\Requests\Bside\News\NewsRequest;
use App\Models\News\News as NewsModel;
use App\Models\News\NewsCategory as NewsCategoryModel;
use Illuminate\Http\Request;
/**
* @name:新闻管理
*/
class NewsController extends BaseController
{
/**
* @name :获取新闻列表
* @return json
* @author :liyuhang
* @method
*/
public function lists(NewsModel $news){
$this->map['project_id'] = $this->user['project_id'];
$lists = $news->lists($this->map,$this->page,$this->row,$this->order);
if(!empty($lists['list'])){
foreach ($lists['list'] as $k => $v){
$newsCategoryModel= new NewsCategoryModel();
//获取用户已读还是未读
$category_info = $newsCategoryModel->
list(['id'=>['in',explode(',',trim($v['category_id'],','))]],'id',['name']);
$str = '';
foreach ($category_info as $v1){
$str .= $v1['name'].',';
}
$v['category_id'] = trim($str,',');
$lists['list'][$k] = $v;
}
}
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name :添加新闻时获取分类列表
* @return void
* @author :liyuhang
* @method
*/
public function get_category_list(NewsLogic $newsLogic){
$list = $newsLogic->news_get_category_list();
$this->response('success',Code::SUCCESS,$list);
}
/**
* @name :获取详情
* @return void
* @author :liyuhang
* @method
*/
public function info(Request $request,NewsLogic $newsLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$info = $newsLogic->news_info();
//TODO::清空相关资源
$this->response('success',Code::SUCCESS,$info);
}
/**
* @name :添加新闻
* @return json
* @author :liyuhang
* @method
*/
public function add(NewsRequest $newsRequest,NewsLogic $newsLogic){
$newsRequest->validated();
$newsLogic->news_add();
//TODO::写入日志
$this->response('success');
}
/**
* @name :编辑
* @return void
* @author :liyuhang
* @method
*/
public function edit(NewsRequest $newsRequest,NewsLogic $newsLogic){
$newsRequest->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$newsLogic->news_edit();
//TODO::写入日志
$this->response('success',Code::SUCCESS);
}
/**
* @name :编辑状态/与排序
* @return void
* @author :liyuhang
* @method
*/
public function status(Request $request,NewsLogic $newsLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$newsLogic->news_status();
//TODO::写入日志
$this->response('success');
}
/**
* @name :删除新闻(逻辑删除)
* @return void
* @author :liyuhang
* @method
*/
public function del(Request $request,NewsLogic $newsLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$newsLogic->news_del();
//TODO::清空相关资源/写入日志
$this->response('success');
}
/**
* @name :ai生成
* @return void
* @author :liyuhang
* @method
*/
public function ai_news(Request $request){
# id, key, scene, ai
$request->validate([
'keywords'=>['required'],
'key'=>['required']
],[
'keywords.required' => '关键字不能为空',
'key.required' => '场景不能为空',
]);
#TODO 通过key获取到ai指令对象
$url = 'v2/openai_chat';
$data = $this->send_openai_msg($url);
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
... ... @@ -56,6 +56,4 @@ class CategoryController extends BaseController
$data = $logic->delete($this->param['ids']);
return $this->success($data);
}
//todo Ai生成 关键词和描述
}
... ...
... ... @@ -2,6 +2,8 @@
namespace App\Http\Controllers\Bside\Product;
use App\Enums\Common\Code;
use App\Exceptions\BsideGlobalException;
use App\Helper\Arr;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Product\ProductLogic;
... ... @@ -13,7 +15,7 @@ use Illuminate\Http\Request;
* Class ProductController
* @package App\Http\Controllers\Bside
* @author zbj
* @date 2023/4/12
* @date 2023/4/17
*/
class ProductController extends BaseController
{
... ... @@ -24,9 +26,12 @@ class ProductController extends BaseController
if(!empty($this->param['search'])){
$map[] = ['title', 'like', "%{$this->param['search']}%"];
}
if(!empty($this->param['created_at'])){
$map[] = ['created_at', 'between', $this->param['created_at']];
}
$sort = ['id' => 'desc'];
$data = $logic->getList($map, $sort, ['id', 'pid', 'title', 'image', 'keywords', 'describe', 'status','created_at'],0);
return $this->success(Arr::listToTree($data));
$data = $logic->getList($map, $sort, ['id', 'title', 'thumb', 'category_id', 'keywords', 'status', 'created_at', 'updated_at']);
return $this->success($data);
}
public function info(Request $request, ProductLogic $logic){
... ... @@ -36,11 +41,15 @@ class ProductController extends BaseController
'id.required' => 'ID不能为空'
]);
$data = $logic->getInfo($this->param['id']);
return $this->success(Arr::twoKeepKeys($data, ['id', 'pid', 'title', 'image', 'keywords', 'describe', 'status']));
return $this->success(Arr::twoKeepKeys($data, ['id', 'title', 'gallery', 'attrs', 'category_id', 'keywords', 'intro', 'content',
'describe', 'seo_mate', 'related_product_id', 'status']));
}
public function save(ProductRequest $request, ProductLogic $logic)
{
//封面取第一个图片
$this->param['thumb'] = $this->param['gallery'][0] ?? '';
$data = $logic->save($this->param);
return $this->success($data);
}
... ... @@ -57,5 +66,4 @@ class ProductController extends BaseController
return $this->success($data);
}
//todo Ai生成 关键词和描述
}
... ...
<?php
namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Models\Product as ProductModel;
use App\Models\ProductClassify as ProductClassifyModel;
use Illuminate\Support\Facades\Validator;
/**
* @name:产品表
*/
class ProductController extends BaseController
{
/**
* @name : 产品列表
* @return void
* @author :liyuhang
* @method
*/
public function lists(){
//获取当前登录用户下的产品列表
$this->map['project_id'] = $this->user['project_id'];
$productModel = new ProductModel();
$lists = $productModel->lists($this->map,$this->p,$this->row,$this->order);
$this->allCount = $productModel->allCount;
$this->response('success',Code::SUCCESS, $lists);
}
/**
* @name :添加产品
* @return void
* @author :liyuhang
* @method
*/
public function add(){
//参数验证
$rules = [
'name'=>'required|max:11',
'image'=>'required',
'describe'=>'required',
'keywords'=>'required|max:50',
];
//验证的提示信息
$message = [
'name.required'=>'名称必须填写',
'name.max' => '名称不大于16字符.',
'image.required'=>'图片必须上传',
'describe.required'=>'描述必须填写',
'keywords.required'=>'关键字必须填写',
];
$validate = Validator::make($this->param, $rules, $message);
if($validate->fails()){
return $this->response($validate->errors()->first(),Code::USER_PARAMS_ERROE,$this->param);
}
//TODO::关联项目
$this->param['project_id'] = $this->user['project_id'];
$productModel = new ProductModel();
$this->param['image'] = $this->uploads();
$rs = $productModel->add($this->param);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success',Code::SUCCESS);
}
public function edit(){
//参数验证
$rules = [
'name'=>'required|max:11',
'image'=>'required',
'describe'=>'required',
'keywords'=>'required|max:50',
];
//验证的提示信息
$message = [
'name.required'=>'名称必须填写',
'name.max' => '名称不大于16字符.',
'image.required'=>'图片必须上传',
'describe.required'=>'描述必须填写',
'keywords.required'=>'关键字必须填写',
];
$validate = Validator::make($this->param, $rules, $message);
if($validate->fails()){
return $this->response($validate->errors()->first(),Code::USER_PARAMS_ERROE,$this->param);
}
if(isset($this->param['image'])){
//TODO::删除上一次的图片
$this->param['image'] = $this->uploads();
}
$productModel = new ProductModel();
$rs = $productModel->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success',Code::SUCCESS);
}
/**
* @name :修改产品状态
* @return void
* @author :liyuhang
* @method
*/
public function status(){
//参数验证
$rules = [
'id'=>'required',
'status'=>'required',
];
//验证的提示信息
$message = [
'id.required'=>'主键必须填写',
'status.required'=>'状态必须填写',
];
$validate = Validator::make($this->param, $rules, $message);
if($validate->fails()){
return $this->response($validate->errors()->first(),Code::USER_PARAMS_ERROE,$this->param);
}
$productModel = new ProductModel();
$rs = $productModel->edit(['status'=>$this->param['status']],['id'=>$this->param['id']]);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success',Code::SUCCESS);
}
/**
* @name :删除产品
* @return void
* @author :liyuhang
* @method
*/
public function del(){
//参数验证
$rules = [
'id'=>'required',
];
//验证的提示信息
$message = [
'id.required'=>'主键必须填写',
];
$validate = Validator::make($this->param, $rules, $message);
if($validate->fails()){
return $this->response($validate->errors()->first(),Code::USER_PARAMS_ERROE,$this->param);
}
$productModel = new ProductModel();
$info = $productModel->read(['id'=>$this->param['id']],['image']);
//TODO::删除添加的图片
shell_exec('rm -rf '.request()->path().'../../'.$info['image']);
$rs = $productModel->del(['id'=>$this->param['id']]);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success',Code::SUCCESS);
}
}
... ... @@ -2,8 +2,13 @@
namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\ProjectGroupLogic;
use App\Http\Requests\Bside\ProjectGroupRequest;
use App\Models\ProjectGroup as ProjectGroupModel;
use App\Models\User as UserModel;
use Illuminate\Http\Request;
/**
* @name:用户组相关
... ... @@ -16,12 +21,43 @@ class ProjectGroupController extends BaseController
* @author :liyuhang
* @method
*/
public function lists()
public function lists(ProjectGroupModel $projectGroupModel)
{
$lists = $projectGroupModel->lists($this->map,$this->page,$this->row);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name :详情
* @return json
* @author :liyuhang
* @method
*/
public function info(Request $request,ProjectGroupModel $projectGroupModel){
$request->validate([
'id'=>['required', new Ids()],
],[
'id.required' => 'ID不能为空',
]);
$rs = $projectGroupModel->read($this->param);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success');
}
/**
* @name:添加用户组获取用户列表
* @return void
* @author :liyuhang
* @method
*/
public function get_user_lists(UserModel $userModel){
$this->map['project_id'] = $this->user['project_id'];
//获取当前项目下的所有用户
$lists = $userModel->list($this->map);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @param ProjectGroupRequest $request
* @param ProjectGroupLogic $logic
* @name : 添加用户组
... ... @@ -29,8 +65,18 @@ class ProjectGroupController extends BaseController
* @author :liyuhang
* @method
*/
public function add(ProjectGroupRequest $request){
public function add(ProjectGroupRequest $request,ProjectGroupModel $projectGroupModel){
$request->validated();
$this->param['project_id'] = $this->user['project_id'];
//TODO::成员列表:user_list
if(!isset($this->param['user_list']) || empty($this->param['user_list'])){
$this->param['user_list'] = $this->uid;
}
$this->param['admin_id'] = $this->uid;
$rs = $projectGroupModel->add($this->param);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success');
}
... ... @@ -42,8 +88,16 @@ class ProjectGroupController extends BaseController
* @author :liyuhang
* @method
*/
public function edit(ProjectGroupRequest $request){
$request->validated();
public function edit(ProjectGroupRequest $request,ProjectGroupModel $projectGroupModel){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$rs = $projectGroupModel->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success');
}
... ... @@ -53,7 +107,16 @@ class ProjectGroupController extends BaseController
* @author :liyuhang
* @method
*/
public function del(){
public function del(Request $request,ProjectGroupModel $projectGroupModel){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$rs = $projectGroupModel->del($this->param);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$this->response('success');
}
}
... ...
... ... @@ -3,18 +3,17 @@
namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\RoleLogic;
use App\Http\Requests\Bside\ProjectRoleRequest;
use App\Models\ProjectMenu as ProjectMenuModel;
use App\Models\ProjectRole as ProjectRoleModel;
use App\Models\User as UserModel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class ProjectRoleController extends BaseController
{
/**
* @name :用户角色列表()
* @return void
* @return json
* @author :liyuhang
* @method
*/
... ... @@ -24,32 +23,44 @@ class ProjectRoleController extends BaseController
$this->map['status'] = 0;
$this->map['project_id'] = $this->user['project_id'];
//获取当前登录用户自己的菜单栏
$lists = $projectRoleModel->lists($this->map,$this->p,$this->row,$this->order);
$lists = $projectRoleModel->lists($this->map,$this->page,$this->row,$this->order);
$this->response('success',Code::SUCCESS,$lists);
}
/**
* @name :添加/编辑角色时获取菜单列表
* @name :根据角色获取会员列表
* @return void
* @author :liyuhang
* @method
*/
public function get_role_menu(){
//根据当前登录用户角色返回用户菜单列表
$projectRoleModel = new ProjectRoleModel();
$info = $projectRoleModel->read(['id'=>$this->user['role_id']]);
$projectMenuModel = new ProjectMenuModel();
$info['role_menu'] = trim($info['role_menu'],',');
$lists = $projectMenuModel->where(['status'=>0])->whereIn('id',explode(',',$info['role_menu']))->get();
$lists = $lists->toArray();
$menu = array();
foreach ($lists as $k => $v){
$v = (array)$v;
if ($v['pid'] == 0) {
$v['sub'] = $this->_get_child($v['id'], $lists);
$menu[] = $v;
public function get_user_list(){
$userModel = new UserModel();
$list = $userModel->list(['role_id'=>$this->param['id']],'id',['id','name','mobile']);
$this->response('success',Code::SUCCESS,$list);
}
/**
* @name :详情
* @return json
* @author :liyuhang
* @method
*/
public function info(Request $request,RoleLogic $roleLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$info = $roleLogic->role_info();
$this->response('success',Code::SUCCESS,$info);
}
/**
* @name :添加/编辑角色时获取菜单列表
* @return void
* @author :liyuhang
* @method
*/
public function get_role_menu(RoleLogic $roleLogic){
$menu = $roleLogic->role_get_menu();
$this->response('当前用户菜单列表',Code::SUCCESS,$menu);
}
/**
... ... @@ -58,20 +69,9 @@ class ProjectRoleController extends BaseController
* @author :liyuhang
* @method
*/
public function add(ProjectRoleRequest $request){
public function add(ProjectRoleRequest $request,RoleLogic $roleLogic){
$request->validated();
$this->param['project_id'] = $this->user['project_id'];
//获取当前项目下的角色超级管理员
$projectRoleModel = new ProjectRoleModel();
//验证当前角色是否存在
$info = $projectRoleModel->read(['name'=>$this->param['name']]);
if(!empty($info)){
$this->response('当前添加的角色已存在',Code::USER_PARAMS_ERROE);
}
$rs = $projectRoleModel->add($this->param);
if($rs === false){
$this->response('添加失败',Code::USER_PARAMS_ERROE);
}
$roleLogic->role_add();
$this->response('添加成功');
}
... ... @@ -81,24 +81,14 @@ class ProjectRoleController extends BaseController
* @author :liyuhang
* @method
*/
public function edit(ProjectRoleRequest $request){
public function edit(ProjectRoleRequest $request,RoleLogic $roleLogic){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$projectRoleModel = new ProjectRoleModel();
//TODO::查询当前名称是否重复
$info = $projectRoleModel->where('id','<>',$this->param['id'])
->where(['name'=>$this->param['name'],'project_id'=>$this->user['project_id']])->first();
if(!empty($info)){
$this->response('当前添加的角色已存在',Code::USER_PARAMS_ERROE);
}
$rs = $projectRoleModel->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->response('编辑失败',Code::USER_PARAMS_ERROE);
}
$this->response('编辑成功',Code::SUCCESS);
$roleLogic->role_edit();
$this->response('编辑成功');
}
/**
... ... @@ -107,20 +97,14 @@ class ProjectRoleController extends BaseController
* @author :liyuhang
* @method
*/
public function status(Request $request){
public function status(Request $request,RoleLogic $roleLogic){
$request->validate([
'id'=>['required'],
'status'=>['required'],
],[
'id.required' => 'ID不能为空',
'status.required' => 'status不能为空'
]);
$projectRoleModel = new ProjectRoleModel();
$rs = $projectRoleModel->edit(['status'=>$this->param['status']],['id'=>$this->param['id']]);
if($rs === false){
$this->response('编辑失败',Code::USER_PARAMS_ERROE);
}
$this->response($this->param['status'] == 0 ? '启用成功' : '禁用成功',Code::SUCCESS);
$roleLogic->role_status();
$this->response($this->param['status'] == 0 ? '启用成功' : '禁用成功');
}
/**
... ... @@ -129,23 +113,13 @@ class ProjectRoleController extends BaseController
* @author :liyuhang
* @method
*/
public function del(Request $request){
public function del(Request $request,RoleLogic $roleLogic){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$projectRoleModel = new ProjectRoleModel();
//查询当前角色下是否有用户
$userModel = new UserModel();
$user_info = $userModel->read(['role_id'=>$this->param['id']]);
if(!empty($user_info)){
$this->response('当前角色下有用户存在,不允许删除',Code::USER_ERROR);
}
$rs = $projectRoleModel->del(['id'=>$this->param['id']]);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$roleLogic->role_del();
$this->response('success');
}
}
... ...
... ... @@ -3,9 +3,9 @@
namespace App\Http\Controllers\Bside;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\UserLogic;
use App\Http\Requests\Bside\UserRequest;
use App\Models\User as UserModel;
use App\Rules\Ids;
use Illuminate\Http\Request;
class UserController extends BaseController
... ... @@ -16,15 +16,14 @@ class UserController extends BaseController
* @author :liyuhang
* @method
*/
public function lists(){
public function lists(UserModel $userModel){
//TODO::搜索参数处理
$userModel = new UserModel();
$this->map['project_id'] = $this->user['project_id'];
$lists = $userModel->lists($this->map,$this->p,$this->row,$this->order,['id','name','mobile','created_at']);
$lists = $userModel->lists($this->map,$this->page,$this->row,$this->order,['id','name','mobile','created_at']);
if(empty($lists)){
$this->response('请求失败',Code::USER_ERROR,[]);
$this->response('error',Code::USER_ERROR,[]);
}
$this->response('列表',Code::SUCCESS,$lists);
$this->response('success',Code::SUCCESS,$lists);
}
/**
... ... @@ -33,15 +32,10 @@ class UserController extends BaseController
* @author :liyuhang
* @method
*/
public function add(UserRequest $request){
public function add(UserRequest $request,UserLogic $userLogic){
$request->validated();
$userModel = new UserModel();
$this->param['project_id'] = $this->user['project_id'];
$rs = $userModel->adds($this->param);
if($rs === false){
$this->response('当前添加用户已存在或参数错误,添加失败',Code::USER_REGISTER_ERROE,[]);
}
$this->response('添加成功',Code::SUCCESS,[]);
$userLogic->user_add();
$this->response('success');
}
/**
... ... @@ -50,23 +44,14 @@ class UserController extends BaseController
* @author :liyuhang
* @method
*/
public function edit(UserRequest $request){
public function edit(UserRequest $request,UserLogic $userLogic){
$request->validate([
'id'=>['required']
],[
'id.required' => 'ID不能为空'
]);
$userModel = new UserModel();
$info = $userModel->where('id','<>',$this->param['id'])
->where(['mobile'=>$this->param['mobile']])->first();
if(!empty($info)){
$this->response('当前编辑的手机号码已存在',Code::USER_PARAMS_ERROE);
}
$rs = $userModel->edits($this->param);
if($rs === false){
$this->response('参数错误或其他服务器原因,编辑失败',Code::USER_ERROR,[]);
}
$this->response('编辑成功',Code::SUCCESS,[]);
$userLogic->user_edit();
$this->response('success');
}
/**
... ... @@ -75,38 +60,44 @@ class UserController extends BaseController
* @author :liyuhang
* @method
*/
public function status(Request $request){
public function status(Request $request,UserLogic $userLogic){
$request->validate([
'id'=>['required'],
'status'=>['required'],
],[
'id.required' => 'ID不能为空',
'status.required' => 'status不能为空'
]);
$userLogic = new UserModel();
$rs = $userLogic->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
$userLogic->user_status();
$this->response($this->param['status'] == 0 ? '启用成功' : '禁用成功');
}
/**
* @name :删除管理员
* @return void
* @name :详情
* @return json
* @author :liyuhang
* @method
*/
public function del(Request $request){
public function info(Request $request,UserLogic $userLogic){
$request->validate([
'id'=>['required', new Ids()],
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$userModel = new UserModel();
$rs = $userModel->del($this->param);
if($rs === false){
$this->response('删除失败',Code::USER_ERROR);
$userLogic->user_info();
$this->response('success');
}
$this->response('删除成功');
/**
* @name :删除管理员
* @return json
* @author :liyuhang
* @method
*/
public function del(Request $request,UserLogic $userLogic){
$request->validate([
'id'=>['required'],
],[
'id.required' => 'ID不能为空',
]);
$userLogic->user_del();
$this->response('success');
}
}
... ...
<?php
namespace App\Http\Controllers;
use App\Enums\Common\Code;
use App\Models\Image as ImageModel;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Intervention\Image\Facades\Image;
class ImageController
{
public $upload_img = [
//验证
'rule' => [
'size' => 3 * 1024 * 1024, //大小限制
'ext' => 'jpeg,jpg,png,gif', //文件类型限制
],
//生成文件规则
'savename' => 'uniqid',
//设置静态缓存参数(304)
'header' => [
'Cache-Control' => 'max-age=2592000',
'Pragma' => 'cache',
'Expires' => "%Expires%", // cache 1 month
'etag' => "%etag%",
'Last-Modified' => "%Last-Modified%",
'Content-Description' => 'File Transfer',
],
//图片保存根路径
'path' => './uploads/images/',
//图片上传变量名
'name' => 'image',
];
public $request = '';
public function __construct(Request $request)
{
$this->request = $request;
}
public function index($hash = '', $w = 0 ,$h = 0){
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
header("HTTP/1.1 304 Not Modified");
exit;
}
$imageModel = new ImageModel();
$info = $imageModel->read(['hash'=>$hash]);
if ($info === false) {
$this->response('指定图片不存在!', 404);
}
//查看缩略图是否存在
$filename = './../uploads/images/cache_'. $info['hash'] . $w . '_' . $h;
if(is_file($filename)){
$last_modified_time = gmdate(time() + ((30 * 60 * 60 * 24))) . " GMT";
$header = str_replace(['%Expires%', "%etag%", '%Last-Modified%'],
[$last_modified_time, $hash . ':' . $w . '_' . $h . '_' . 2, $last_modified_time], $this->upload_img['header']);
$content = file_get_contents($filename);
$header['Content-Length'] = $info['size'];
return response($content, 200, $header);
}
$path = './../'.$info['path'];
if (!is_file($path)) {
$this->response('指定图片已被系统删除!', 404);
}
$content = '';
$last_modified_time = gmdate(time() + ((30 * 60 * 60 * 24))) . " GMT";
$header = str_replace(['%Expires%', "%etag%", '%Last-Modified%'],
[$last_modified_time, $hash . ':' . $w . '_' . $h . '_' . 2, $last_modified_time], $this->upload_img['header']);
if ($w > 0 && $h > 0) {
$path = $this->cacheImage($info, $w, $h);
$content = file_get_contents($path);
$header['Content-Length'] = strlen($content);
} else {
$content = file_get_contents($path);
$header['Content-Length'] = $info['size'];
}
$img_type = $info['type'];
$content = base64_encode($content);
$img_base64 = 'data:image/' . $img_type . ';base64,' . $content;
return response($img_base64, 200, $header);
}
/**
* 图片上传
*/
public function upload() {
$this->request->validate([
'image'=>['required'],
],[
'image.required'=>'图片必须填写',
]);
$files = $this->request->file('image');
if (empty($files)) {
$this->response('没有上传的文件!', 400);
}
$type = $this->request->post('type', 'single');
if ($type == 'multi') {
return $this->multi($files);
} else {
return $this->single($files);
}
}
/**
* @name :上传图片
* @return void
* @author :liyuhang
* @method
*/
public function single($files){
if (is_array($files)) {
$file = current($files);
}
$url = './../uploads/images/';
$filename = date('ymdHis').rand(10000,99999);
$res = $files->move($url,$filename);
if ($res === false) {
return $this->fail($files->getError(), 400);
}
$data = [
'path' => $url.$filename,
'created_at' => date('Y-m-d H:i:s',time()),
'size' => $res->getSize(),
'hash' => $files->hashName(),
'mime'=>$files->extension()
];
$imageModel = new ImageModel();
$imageModel->add($data);
return $data['hash'];
}
/**
* 生成缩略图缓存
* @param type $info
* @param type $w
* @param type $h
* @return string
*/
private function cacheImage($info, $w, $h) {
$path = './../'.$info['path'];
$filename = './../uploads/images/cache_'. $info['hash'] . $w . '_' . $h;
Image::make($path)->resize($w, $h)->save($filename);
return $filename;
}
/**
* @name 统一返回参数
* @return JsonResponse
* @author :liyuhang
* @method
*/
public function response($msg = null,string $code = Code::SUCCESS,$data = [],$result_code = 200,$type = 'application/json'): JsonResponse
{
$code = Code::fromValue($code);
$result = [
'msg' => $msg == ' ' ? $code->description : $msg,
'code' => $code->value,
'data' => $this->_extents($data),
];
$this->header['Content-Type'] = $type;
$this->header['token'] = $this->token;
$response = response($result,$result_code,$this->header);;
throw new HttpResponseException($response);
}
}
... ...
... ... @@ -2,15 +2,16 @@
namespace App\Http\Logic\Aside;
class DemoLogic extends BaseLogic
use App\Http\Logic\Aside\BaseLogic;
use App\Models\AiCommand as AiCommandModel;
class AiCommandLogic extends BaseLogic
{
protected $requestAll;
public function __construct()
{
$this->requestAll=request()->all();
}
public function testLogic():array
{
return $this->success($this->requestAll);
parent::__construct();
$this->model = new AiCommandModel();
}
}
... ...
... ... @@ -2,35 +2,24 @@
namespace App\Http\Logic\Aside;
use App\Enums\Common\Code;
use App\Exceptions\AsideGlobalException;
use App\Enums\Common\Common;
use App\Http\Logic\Logic;
/**
* @notes: 逻辑层基类 控制器调用 统一返回 统一抛出异常
* Class BaseLogic
* @package App\Http\Logic\Aside
*/
class BaseLogic
class BaseLogic extends Logic
{
protected $requestAll;
public function __construct()
{
$this->requestAll=request()->all();
}
/**
* @notes: 统一格式化分页返回
* @return array
*/
function getPageData($pagninate): array
{
$p = $pagninate->toArray();
$result['list'] = $p ['data'];
$result['pager']['total'] = $p ['total'];
$result['pager']['page'] = $p ['current_page'];
$result['pager']['pagesize'] = $p ['per_page'];
protected $side = Common::A;
return $result;
public function __construct()
{
$this->requestAll = request()->all();
}
}
... ...
<?php
namespace App\Http\Logic\Aside;
use App\Helper\Arr;
use App\Models\Manage\Dept;
use Illuminate\Database\Eloquent\Model;
/**
* Class DeptLogic
* @package App\Http\Logic\Aside\dept
* @author zbj
* @date 2023/4/20
*/
class DeptLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Dept();
}
public function save($param){
if(!empty($param['pid'])){
if(!empty($param['id']) && $param['pid'] == $param['id']){
$this->fail('上级部门不能是本部门');
}
$p_cate = $this->getCacheInfo($param['pid']);
if(!$p_cate){
$this->fail('上级部门不存在');
}
}
return parent::save($param);
}
public function delete($ids, $map = []){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//是否有子部门
if(Dept::where('pid', $id)->count()){
$this->fail("部门{$info['title']}存在下级部门,不能删除");
}
}
return parent::delete($ids);
}
}
... ...
<?php
namespace App\Http\Logic\Aside;
use App\Helper\Arr;
use App\Models\Manage\Group;
/**
* Class GroupLogic
* @package App\Http\Logic\Aside
* @author zbj
* @date 2023/4/19
*/
class GroupLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Group();
}
}
... ...
<?php
namespace App\Http\Logic\Aside;
use App\Models\Manage\Manage;
use App\Models\Manage\LoginLog;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Session;
/**
* Class LoginLogic
* @package App\Http\Logic\Aside
* @author zbj
* @date 2023/4/19
*/
class LoginLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Manage();
}
public function login()
{
$manage = $this->model->where('mobile', $this->requestAll['mobile'])->first();
if (!$manage){
$this->fail('登录用户名不存在');
}
if (Manage::STATUS_DISABLE == $manage->status) {
$this->fail('帐号已被禁用');
}
if (!Hash::check($this->requestAll['password'], $manage->password)) {
$this->fail('登录密码不正确');
}
Session::put('manage', $manage->toArray());
LoginLog::addLog($manage->id);
return $this->success();
}
public function logout(){
Session::forget('manage');
return redirect(route('admin.login'));
}
}
... ...
<?php
namespace App\Http\Logic\Aside;
use App\Helper\Arr;
use App\Models\Manage\Manage;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Hash;
/**
* Class ManageLogic
* @package App\Http\Logic\Aside\Manage
* @author zbj
* @date 2023/4/20
*/
class ManageLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Manage();
}
public function save($param){
if(!empty($param['password'])){
$param['password'] = Hash::make($param['password']);
}
return parent::save($param);
}
}
... ...
<?php
namespace App\Http\Logic\Aside;
use App\Helper\Arr;
use App\Models\Manage\Menu;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Str;
/**
* Class MenuLogic
* @package App\Http\Logic\Aside
* @author zbj
* @date 2023/4/19
*/
class MenuLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Menu();
}
public function getInfo($id)
{
$info = parent::getInfo($id);
//已绑定菜单的路由
$menu_route = array_filter(Menu::pluck('route_name')->toArray());
//路由
$info['route'] = [];
$routes = Route::getRoutes()->getRoutesByName();
foreach ($routes as $name => $route) {
if(Str::startsWith($name, 'admin.') && !Str::endsWith($name, '.white') && !in_array($name, $menu_route)){
$info['route'][] = $name;
}
}
return $this->success($info);
}
public function save($param){
if(!empty($param['pid'])){
if(!empty($param['id']) && $param['pid'] == $param['id']){
$this->fail('上级菜单不能是本菜单');
}
$p_menu = $this->getCacheInfo($param['pid']);
if(!$p_menu){
$this->fail('上级菜单不存在');
}
}
return parent::save($param);
}
public function delete($ids, $map = []){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//是否有子菜单
if(Menu::where('pid', $id)->count()){
$this->fail("菜单{$info['title']}存在子菜单,不能删除");
}
}
return parent::delete($ids);
}
}
... ...
<?php
namespace App\Http\Logic\Aside;
use App\Models\Project;
class ProjectLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Project();
$this->param = $this->requestAll;
}
}
... ...
<?php
namespace App\Http\Logic\Aside;
use App\Models\ProjectRole;
class ProjectRoleLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new ProjectRole();
$this->param = $this->requestAll;
}
}
... ...
<?php
namespace App\Http\Logic\Aside;
use App\Models\User;
class UserLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new User();
$this->param = $this->requestAll;
}
}
... ...
... ... @@ -4,44 +4,28 @@ namespace App\Http\Logic\Bside;
use App\Enums\Common\Code;
use App\Exceptions\BsideGlobalException;
use App\Helper\Arr;
use App\Http\Logic\Logic;
use App\Models\Image as ImageModel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
/**
* @notes: 逻辑层基类 控制器调用 统一返回 统一抛出异常
*/
class BaseLogic
class BaseLogic extends Logic
{
protected $model;
protected $requestAll;
protected $is_cache = true; //是否缓存数据
protected $param;
protected $user;
public function __construct()
{
$this->requestAll = request()->all();
}
/**
* @notes: 请简要描述方法功能
* @param array $data
* @return array
*/
public function success(array $data = [])
{
return $data;
}
/**
* @notes: 错误抛出
* @param string $code
* @param string $message
* @throws BsideGlobalException
*/
public function fail(string $message = "", string $code = Code::SYSTEM_ERROR)
{
throw new BsideGlobalException($code, $message);
$this->user = Cache::get(request()->header('token'));
}
... ... @@ -57,41 +41,8 @@ class BaseLogic
*/
public function getList(array $map = [], array $sort = ['id' => 'desc'], array $columns = ['*'], int $limit = 20)
{
// 闭包查询条件格式化
$query = $this->formatQuery($map);
// 排序(支持多重排序)
$query = $query->when($sort, function ($query, $sort) {
foreach ($sort as $k=>$v) {
$query->orderBy($k, $v);
}
});
// 数据分页设置
if ($limit) {
$result = $query->select($columns)->paginate($limit);
}else{
$result = $query->select($columns)->get();
}
return $this->success($result ? $result->toArray() : []);
}
/**
* 详情
* @param $id
* @return array
* @author zbj
* @date 2023/4/13
*/
public function getInfo($id)
{
$info = $this->getCacheInfo($id);
if(!$info){
$this->fail('数据不存在或者已经删除');
}
return $this->success($info->toArray());
$map[] = ['project_id' => $this->user['project_id']];
return parent::getList($map, $sort, $columns, $limit);
}
/**
... ... @@ -100,17 +51,11 @@ class BaseLogic
* @author zbj
* @date 2023/4/15
*/
public function getCacheInfo($id){
if($this->is_cache){
$info = Cache::get($this->getInfoCacheKey($id));
if (!$info) {
$info = $this->model->find($id);
if($info){
Cache::put($this->getInfoCacheKey($id), $info);
}
}
}else{
$info = $this->model->find($id);
public function getCacheInfo($id)
{
$info = parent::getCacheInfo($id);
if ($info && $info['project_id'] != $this->user['project_id']) {
$info = null;
}
return $info;
}
... ... @@ -123,175 +68,53 @@ class BaseLogic
* @author zbj
* @date 2023/4/13
*/
public function save($param){
if(!empty($param['id'])){
$this->model = $this->getCacheInfo($param['id']);
if(!$this->model){
$this->fail('数据不存在或者已经删除');
}
}
foreach ($param as $name => $value){
$this->model[$name] = $value;
}
$res = $this->model->save();
if($res){
//清缓存
if($this->is_cache && !empty($param['id'])){
Cache::forget($this->getInfoCacheKey($param['id']));
}
return $this->success(['id' => $this->model->id]); //返回保存的数据id
}else{
$this->fail('保存失败');
}
public function save($param)
{
$param['project_id'] = $this->user['project_id'];
return parent::save($param);
}
/**
* 批量删除
* @param $ids
* @param array $map
* @return array
* @throws BsideGlobalException
* @author zbj
* @date 2023/4/13
*/
public function delete($ids){
$ids = array_filter(Arr::splitFilterToArray($ids), 'intval');
if(!$ids){
$this->fail('ID不能为空');
}
$map[] = ['id', 'in', $ids];
$res = $this->formatQuery($map)->delete();
if($res){
if($this->is_cache){
foreach ($ids as $id){
Cache::forget($this->getInfoCacheKey($id));
}
}
return $this->success();
}else{
$this->fail('删除失败');
}
}
/**
* @param $id
* @return string
* @author zbj
* @date 2023/4/13
*/
public function getInfoCacheKey($id){
return $this->model->getTable() . '_info_' . $id;
public function delete($ids, $map = [])
{
$map[] = ['project_id' => $this->user['project_id']];
return parent::delete($ids, $map);
}
/**
* 格式化查询条件
* @param $map
* @param $query
* @return mixed
* @author zbj
* @date 2023/4/13
* @name :上传图片
* @return void
* @author :liyuhang
* @method
*/
public function formatQuery($map, $query = '')
{
$model = $query ?: $this->model;
$query = $model->where(function ($query) use ($map) {
foreach ($map as $v) {
if ($v instanceof \Closure) {
$query = $query->where($v);
continue;
}
// 判断是否是键值对类型
if (key($v) !== 0) {
$key = key($v);
$val = $v[$key];
$v = [$key, is_array($val) ? 'in' : '=', $val];
}
switch ($v[1]) {
case 'like':
// like查询 ['name|title', 'like', '%a%']
if (strpos($v[0], '|') !== false) {
$query->where(function ($query) use ($v) {
$item = explode('|', $v[0]);
foreach ($item as $vo) {
$query->orWhere($vo, $v[1], $v[2]);
}
});
} else {
$query->where($v[0], $v[1], $v[2]);
}
break;
case 'in':
// in查询 ['id', 'in', [1,2,3]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereIn($v[0], $v[2]);
break;
case 'not in':
// not in查询 ['id', 'not in', [1,2,3]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereNotIn($v[0], $v[2]);
break;
case 'between':
// between查询 ['created_at', 'between', ['xxx', 'xxx]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereBetween($v[0], $v[2]);
break;
case 'not between':
// not between查询 ['created_at', 'not between', ['xxx', 'xxx]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereNotBetween($v[0], $v[2]);
break;
case 'null':
// null查询 ['deleted_at', 'null']
$query->whereNull($v[0]);
break;
case "not null":
// not null查询 ['deleted_at', 'not null']
$query->whereNotNull($v[0]);
break;
case "or":
// or查询 [[['status'=>1],['status'=>2]], 'or'];
//格式:or (status=1 and status=2)
$where = $v[0];
$query->orWhere(function ($query) use ($where) {
// 递归解析查询条件
$this->formatQuery($where, $query);
});
break;
case 'xor':
// xor查询 [[['status'=>1],['status'=>2]], 'xor'];
// 格式:and (status=1 or status=2)
$where = $v[0];
$query->where(function ($query) use ($where) {
foreach ($where as $w) {
$query->orWhere(function ($query) use ($w) {
// 递归解析查询条件
$this->formatQuery([$w], $query);
});
}
});
break;
default:
// 常规查询
if (count($v) == 2) {
$query->where($v[0], '=', $v[1]);
} else {
$query->where($v[0], $v[1], $v[2]);
}
break;
}
}
});
return $query;
public function upload(Request $request,ImageModel $imageModel){
$image = $request->file('image');
if(empty($image)){
return $this->fail('没有上传图片',Code::USER_ERROR);
}
$url = './../uploads/images/';
$filename = date('ymdHis').rand(10000,99999);
$res = $request->file('image')->move($url,$filename);
if ($res === false) {
return $this->fail($image->getError(), Code::USER_ERROR);
}
$data = [
'path' => $url.$filename,
'created_at' => date('Y-m-d H:i:s',time()),
'size' => $res->getSize(),
'hash' => $image->hashName(),
'mime'=>$image->extension()
];
$rs = $imageModel->add($data);
if ($rs === false) {
return $this->fail('添加失败', Code::USER_ERROR);
}
return $data['hash'];
}
}
... ...
<?php
namespace App\Http\Logic\Bside\Blog;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Blog\BlogCategory as BlogCategoryModel;
use App\Models\Blog\Blog as BlogModel;
use App\Models\News\NewsCategory as NewsCategoryModel;
use Illuminate\Support\Facades\DB;
class BlogCategoryLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new BlogCategoryModel();
$this->param = $this->requestAll;
}
/**
* @name :添加时验证上级分类是否有商品,有则替换带当前分类下
* @return void
* @author :liyuhang
* @method
*/
public function add_blog_category(){
DB::beginTransaction();
$this->param['project_id'] = $this->user['project_id'];
$this->param['operator_id'] = $this->user['id'];
$this->param['create_id'] = $this->user['id'];
$this->param['created_at'] = date('Y-m-d H:i:s');
$this->param['updated_at'] = date('Y-m-d H:i:s');
$cate_id = $this->model->insertGetId($this->param);
if($cate_id === false){
DB::rollBack();
$this->fail('error',Code::USER_ERROR);
}
//判断为子分类时
if(isset($this->param['pid']) && !empty($this->param['pid'])) {
//查看当前上级分类下是否有其他分类
$cate_info = $this->model->read(['pid' => $this->param['pid'], 'id' => ['!=', $cate_id]]);
if ($cate_info === false) {
//查看当前上一级分类下是否有新闻
$blogModel = new BlogModel();
$news_info = $blogModel->read(['category_id' => ['like', ',' . $this->param['pid'] . ',']]);
if ($news_info !== false) {
$replacement = ',' . $cate_id . ',';
$old = ',' . $this->param['pid'] . ',';
//更新所有商品到当前分类
$rs = DB::table('gl_Blog')->where('category_id', 'like', '%' . $old . '%')
->update(['category_id' => DB::raw("REPLACE(category_id, '$old', '$replacement')")]);
if ($rs === false) {
DB::rollBack();
$this->fail('error', Code::USER_ERROR);
}
}
}
}
DB::commit();
return $this->success();
}
/**
* @name :编辑分类
* @return void
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function edit_blog_category(){
$this->param['operator_id'] = $this->user['id'];
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
/**
* @name :详情
* @return array
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function info_blog_category(){
$info = $this->model->read($this->param);
if($info === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success($info);
}
/**
* @name :编辑状态与排序
* @return void
* @author :liyuhang
* @method
*/
public function status_blog_category(){
$this->param['operator_id'] = $this->user['id'];
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
/**
* @name :删除博客分类
* @return void
* @author :liyuhang
* @method
*/
public function del_blog_category(){
$this->param = $this->requestAll;
foreach ($this->param['id'] as $v){
//查询是否有子分类
$rs = $this->model->read(['pid'=>$v],['id']);
if($rs !== false){
$this->response('当前分类拥有子分类不允许删除',Code::USER_ERROR);
}
//查看当前分内下是否有博客
$blogModel = new BlogModel();
$rs = $blogModel->read(['category_id'=>$v],['id']);
if($rs !== false){
$this->response('当前分类拥有博客',Code::USER_ERROR);
}
}
$this->param['id'] = ['in',$this->param['id']];
$rs = $this->model->del($this->param);
if($rs === false){
$this->response('error',Code::USER_ERROR);
}
return $this->success();
}
}
... ...
<?php
namespace App\Http\Logic\Bside\Blog;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Blog\BlogLabel as BlogLabelModel;
class BlogLabelLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new BlogLabelModel();
$this->param = $this->requestAll;
}
/**
* @name :新增标签
* @return void
* @author :liyuhang
* @method
*/
public function add_blog_label(){
$this->param['create_id'] = $this->user['id'];
$this->param['Operator_id'] = $this->user['id'];
$this->param['project_id'] = $this->user['project_id'];
$rs = $this->model->add($this->param);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
/**
* @name :编辑标签
* @return void
* @author :liyuhang
* @method
*/
public function edit_blog_label(){
$this->param['operator_id'] = $this->user['id'];
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
//TODO::路由映射
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
/**
* @name :删除标签
* @return array
* @author :liyuhang
* @method
*/
public function del_blog_label(){
$this->param['id'] = ['in',$this->param['id']];
$rs = $this->model->del($this->param);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
}
... ...
<?php
namespace App\Http\Logic\Bside\Blog;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Blog\Blog;
use App\Models\Blog\BlogCategory as BlogCategoryModel;
use App\Models\RouteMap;
use Illuminate\Support\Facades\DB;
class BlogLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Blog();
$this->param = $this->requestAll;
}
/**
* @name :获取分类列表
* @return array
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function blog_get_category_list(){
$this->map['status'] = 0;
$this->map['project_id'] = $this->user['project_id'];
$blogCategoryModel = new BlogCategoryModel();
$cate_list = $blogCategoryModel->list($this->map,'sort');
if($cate_list === false){
$this->fail('error',Code::USER_ERROR);
}
$list = [];
foreach ($cate_list as $v){
$v = (array)$v;
if ($v['pid'] == 0) {
$v['sub'] = _get_child($v['id'], $cate_list);
$list[] = $v;
}
}
return $this->success($list);
}
/**
* @name :添加博客
* @return void
* @author :liyuhang
* @method
*/
public function blog_add(){
$this->param['create_id'] = $this->uid;
$this->param['operator_id'] = $this->uid;
$this->param['project_id'] = $this->user['project_id'];
DB::beginTransaction();
try {
$rs = $this->model->insertGetId($this->param);
RouteMap::setRoute($this->param['url'], RouteMap::SOURCE_BLOG, $rs, $this->user['project_id']);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('error',Code::USER_ERROR);
}
//TODO::写入日志
$this->success();
}
/**
* @name : 编辑用户
* @return void
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function blog_edit(){
$this->param['operator_id'] = $this->uid;
DB::beginTransaction();
try {
$this->model->edit($this->param,['id'=>$this->param['id']]);
RouteMap::setRoute($this->param['url'], RouteMap::SOURCE_BLOG, $this->param['id'], $this->user['project_id']);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('error',Code::USER_ERROR);
}
}
/**
* @name :获取数据详情
* @return array
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function blog_info(){
$info = $this->model->read($this->param);
//获取分类名称
$info['category_id'] = explode(',',trim($info['category_id'],','));
$blogCategoryModel = new BlogCategoryModel();
$category_list = $blogCategoryModel->list(['id'=>['in',$info['category_id']]],'id',['name']);
$str = '';
foreach ($category_list as $v){
$str .= $v['name'].',';
}
$info['category_id'] = trim($str,',');
if($info === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success($info);
}
/**
* @name :修改状态
* @return array
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function blog_status(){
$this->param['operator_id'] = $this->user['id'];
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
/**
* @name :逻辑删除
* @return void
* @author :liyuhang
* @method
*/
public function blog_del(){
$this->param['id'] = ['in',$this->param['id']];
$rs = $this->model->edit(['status'=>2],$this->param);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
}
... ...
<?php
namespace App\Http\Logic\Bside;
use App\Helper\Arr;
use App\Models\ProjectDept;
/**
* Class DeptLogic
* @package App\Http\Logic\Bside\dept
* @author zbj
* @date 2023/4/18
*/
class DeptLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new ProjectDept();
}
public function save($param){
if(!empty($param['pid'])){
if(!empty($param['id']) && $param['pid'] == $param['id']){
$this->fail('上级部门不能是本部门');
}
$p_cate = $this->getCacheInfo($param['pid']);
if(!$p_cate){
$this->fail('上级部门不存在');
}
}
return parent::save($param);
}
public function delete($ids, $map =[]){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//是否有子部门
if(ProjectDept::where('project_id', $this->user['project_id'])->where('pid', $id)->count()){
$this->fail("部门{$info['title']}存在下级部门,不能删除");
}
}
return parent::delete($ids);
}
}
... ...
<?php
namespace App\Http\Logic\Bside;
use App\Models\ProjectGroup;
class GroupLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new ProjectGroup();
$this->param = $this->requestAll;
}
}
... ...
<?php
namespace App\Http\Logic\Bside;
use App\Enums\Common\Code;
use App\Models\Mail as MailModel;
use App\Models\MailUser as MailUserModel;
class MailLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new MailModel();
$this->param = $this->requestAll;
}
/**
* @name :详情
* @author :liyuhang
*/
public function mail_info(){
$info = $this->model->read($this->param);
if($info === false){
$this->fail('当前数据不存在',Code::USER_ERROR);
}
//生成一条阅读记录
$mailUserModel = new MailUserModel();
$data = [
'user_id'=>$info['id'],
'mail_id'=>$this->user['id'],
];
//查询当前记录是否存在
$read_info = $mailUserModel->read($data);
if($read_info === false){
$rs = $mailUserModel->add($data);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
}
return $this->success($info);
}
}
... ...
<?php
namespace App\Http\Logic\Bside\News;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\News\News as NewsModel;
use App\Models\News\NewsCategory as NewsCategoryModel;
use Illuminate\Support\Facades\DB;
class NewsCategoryLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new NewsCategoryModel();
$this->param = $this->requestAll;
}
/**
* @name :详情
* @return array
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function info_news_category(){
$info = $this->model->read($this->param);
if($info === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success($info);
}
/**
* @name :添加时验证上级分类是否有商品,有则替换带当前分类下
* @return void
* @author :liyuhang
* @method
*/
public function add_news_category(){
DB::beginTransaction();
$this->param['project_id'] = $this->user['project_id'];
$this->param['operator_id'] = $this->user['id'];
$this->param['create_id'] = $this->user['id'];
$this->param['created_at'] = date('Y-m-d H:i:s');
$this->param['updated_at'] = date('Y-m-d H:i:s');
$cate_id = $this->model->insertGetId($this->param);
if($cate_id === false){
DB::rollBack();
$this->fail('error',Code::USER_ERROR);
}
//判断为子分类时
if(isset($this->param['pid']) && !empty($this->param['pid'])) {
//查看当前上级分类下是否有其他分类
$cate_info = $this->model->read(['pid' => $this->param['pid'], 'id' => ['!=', $cate_id]]);
if ($cate_info === false) {
//查看当前上一级分类下是否有新闻
$newsModel = new NewsModel();
$news_info = $newsModel->read(['category_id' => ['like', ',' . $this->param['pid'] . ',']]);
if ($news_info !== false) {
$replacement = ',' . $cate_id . ',';
$old = ',' . $this->param['pid'] . ',';
//更新所有商品到当前分类
$rs = DB::table('gl_news')->where('category_id', 'like', '%' . $old . '%')
->update(['category_id' => DB::raw("REPLACE(category_id, '$old', '$replacement')")]);
if ($rs === false) {
DB::rollBack();
$this->fail('error', Code::USER_ERROR);
}
}
}
}
DB::commit();
return $this->success();
}
/**
* @name :编辑分类
* @return void
* @author :liyuhang
* @method
*/
public function edit_news_category(){
$this->param['operator_id'] = $this->user['id'];
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
/**
* @name :修改状态
* @return array
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function status_news_category(){
$this->param['operator_id'] = $this->user['id'];
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
/**
* @name :删除新闻分类
* @return array
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function del_news_category(){
$this->param = $this->requestAll;
foreach ($this->param['id'] as $v){
//查询是否有子分类
$rs = $this->model->read(['pid'=>$v],['id']);
if($rs !== false){
$this->fail('当前分类拥有子分类不允许删除',Code::USER_ERROR);
}
//查看当前分内下是否有商品
$newsModel = new NewsModel();
$rs = $newsModel->read(['category_id'=>$v],['id']);
if($rs !== false){
$this->fail('当前分类拥有商品',Code::USER_ERROR);
}
}
$this->param['id'] = ['in',$this->param['id']];
$rs = $this->model->del($this->param);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
}
... ...
<?php
namespace App\Http\Logic\Bside\News;
use App\Enums\Common\Code;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\News\News;
use App\Models\News\NewsCategory as NewsCategoryModel;
use App\Models\RouteMap;
use Illuminate\Support\Facades\DB;
class NewsLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new News();
$this->param = $this->requestAll;
}
/**
* @name :获取分类列表
* @return array
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function news_get_category_list(){
$this->map['status'] = 0;
$this->map['project_id'] = $this->user['project_id'];
$newsCategoryModel = new NewsCategoryModel();
$cate_list = $newsCategoryModel->list($this->map,'sort');
if($cate_list === false){
$this->fail('error',Code::USER_ERROR);
}
$list = [];
foreach ($cate_list as $v){
$v = (array)$v;
if ($v['pid'] == 0) {
$v['sub'] = _get_child($v['id'], $cate_list);
$list[] = $v;
}
}
return $this->success($list);
}
/**
* @name :添加博客
* @return void
* @author :liyuhang
* @method
*/
public function news_add(){
$this->param['create_id'] = $this->uid;
$this->param['operator_id'] = $this->uid;
$this->param['project_id'] = $this->user['project_id'];
DB::beginTransaction();
try {
if(isset($this->param['image'])){
$data = $this->upload();
$this->param['image'] = $data['path'];
}
$rs = $this->model->insertGetId($this->param);
RouteMap::setRoute($this->param['url'], RouteMap::SOURCE_NEWS, $rs, $this->user['project_id']);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('error',Code::USER_ERROR);
}
//TODO::写入日志
$this->success();
}
/**
* @name :编辑
* @return void
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function news_edit(){
$this->param['operator_id'] = $this->user['id'];
//多个分类按逗号隔开
$this->param['category_id'] = ','.$this->param['category_id'].',';
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
//TODO::写入日志
$this->success();
}
/**
* @name :修改状态
* @return void
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function news_status(){
$this->param['operator_id'] = $this->user['id'];
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
//TODO::写入日志
$this->success();
}
/**
* @name :获取详情
* @return array
* @throws \App\Exceptions\BsideGlobalException
* @author :liyuhang
* @method
*/
public function news_info(){
$this->param = $this->requestAll;
$info = $this->model->read($this->param);
//获取分类名称
$info['category_id'] = explode(',',trim($info['category_id'],','));
$newsCategoryModel = new NewsCategoryModel();
$category_list = $newsCategoryModel->list(['id'=>['in',$info['category_id']]],'id',['name']);
$str = '';
foreach ($category_list as $v){
$str .= $v['name'].',';
}
$info['category_id'] = trim($str,',');
if($info === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success($info);
}
/**
* @name :逻辑删除
* @return void
* @author :liyuhang
* @method
*/
public function news_del(){
$this->param['id'] = ['in',$this->param['id']];
$rs = $this->model->edit(['status'=>2,'operator_id'=>$this->user['id']],$this->param);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
}
... ...
... ... @@ -2,7 +2,6 @@
namespace App\Http\Logic\Bside\Product;
use App\Helper\Arr;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Product\Attr;
use App\Models\Product\AttrValue;
... ... @@ -25,6 +24,9 @@ class AttrLogic extends BaseLogic
public function getInfo($id){
$info = parent::getCacheInfo($id);
if(!$info){
$this->fail('数据不存在或者已经删除');
}
$info->values;
return $this->success($info->toArray());
}
... ... @@ -62,17 +64,4 @@ class AttrLogic extends BaseLogic
}
return $this->success();
}
public function delete($ids){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//todo 是否有关联商品
}
return parent::delete($ids);
}
}
... ...
... ... @@ -5,6 +5,7 @@ namespace App\Http\Logic\Bside\Product;
use App\Helper\Arr;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Product\Category;
use App\Models\Product\Product;
/**
* Class CategoryLogic
... ... @@ -26,7 +27,7 @@ class CategoryLogic extends BaseLogic
if(!empty($param['id']) && $param['pid'] == $param['id']){
$this->fail('上级分类不能是本分类');
}
$p_cate = Category::find($param['pid']);
$p_cate = $this->getCacheInfo($param['pid']);
if(!$p_cate){
$this->fail('上级分类不存在');
}
... ... @@ -34,7 +35,7 @@ class CategoryLogic extends BaseLogic
return parent::save($param);
}
public function delete($ids){
public function delete($ids, $map = []){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
... ... @@ -42,11 +43,13 @@ class CategoryLogic extends BaseLogic
continue;
}
//是否有子分类
if(Category::where('pid', $id)->count()){
if(Category::where('project_id', $this->user['project_id'])->where('pid', $id)->count()){
$this->fail("分类{$info['title']}存在子分类,不能删除");
}
//todo 是否有对应商品
//是否有对应商品
if(Product::whereRaw("FIND_IN_SET({$id},`category_id`)")->count()){
$this->fail("分类{$info['title']}存在产品,不能删除");
}
}
return parent::delete($ids);
}
... ...
... ... @@ -20,18 +20,4 @@ class DescribeLogic extends BaseLogic
$this->model = new Describe();
}
public function delete($ids){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//todo 是否有关联商品
}
return parent::delete($ids);
}
}
... ...
... ... @@ -4,6 +4,7 @@ namespace App\Http\Logic\Bside\Product;
use App\Helper\Arr;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Product\Product;
use App\Models\RouteMap;
use App\Models\Product\Keyword;
use Illuminate\Support\Facades\DB;
... ... @@ -28,7 +29,7 @@ class KeywordLogic extends BaseLogic
try {
$res = parent::save($param);
//路由映射
RouteMap::setRoute($param['title'], RouteMap::SOURCE_PRODUCT_KEYWORD, $res['id'], $param['project_id'], true);
RouteMap::setRoute($param['title'], RouteMap::SOURCE_PRODUCT_KEYWORD, $res['id'], $this->user['project_id']);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
... ... @@ -37,19 +38,24 @@ class KeywordLogic extends BaseLogic
return $this->success();
}
public function delete($ids){
public function delete($ids, $map = []){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//todo 是否有关联商品
DB::beginTransaction();
try {
parent::delete($ids);
//todo 删除路由映射 事务
foreach ($ids as $id){
//删除路由映射
RouteMap::delRoute(RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $this->user['project_id']);
}
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('删除失败');
}
return parent::delete($ids);
return $this->success();
}
}
... ...
... ... @@ -5,6 +5,8 @@ namespace App\Http\Logic\Bside\Product;
use App\Helper\Arr;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Product\Product;
use App\Models\RouteMap;
use Illuminate\Support\Facades\DB;
/**
* Class ProductLogic
... ... @@ -22,32 +24,39 @@ class ProductLogic extends BaseLogic
}
public function save($param){
if(!empty($param['pid'])){
if(!empty($param['id']) && $param['pid'] == $param['id']){
$this->fail('上级分类不能是本分类');
}
$p_cate = Product::find($param['pid']);
if(!$p_cate){
$this->fail('上级分类不存在');
}
}
return parent::save($param);
DB::beginTransaction();
try {
$data = $param;
unset($data['route']);
$res = parent::save($data);
//路由映射
RouteMap::setRoute($param['route'], RouteMap::SOURCE_PRODUCT, $res['id'], $this->user['project_id']);
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('保存失败');
}
return $this->success();
}
public function delete($ids){
public function delete($ids, $map =[]){
$ids= array_filter(Arr::splitFilterToArray($ids), 'intval');
DB::beginTransaction();
try {
parent::delete($ids);
foreach ($ids as $id){
$info = $this->getCacheInfo($id);
if(!$info){
continue;
}
//是否有子分类
if(Product::where('pid', $id)->count()){
$this->fail("分类{$info['title']}存在子分类,不能删除");
//删除路由映射
RouteMap::delRoute(RouteMap::SOURCE_PRODUCT, $id, $this->user['project_id']);
}
//todo 是否有对应商品
DB::commit();
}catch (\Exception $e){
DB::rollBack();
$this->fail('删除失败');
}
return parent::delete($ids);
return $this->success();
}
}
... ...
<?php
namespace App\Http\Logic\Bside;
use App\Enums\Common\Code;
use App\Models\ProjectMenu as ProjectMenuModel;
use App\Models\ProjectRole as ProjectRoleModel;
use App\Models\User;
use App\Models\User as UserModel;
class RoleLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new ProjectRoleModel();
$this->param = $this->requestAll;
}
/**
* @name :添加角色
* @return void
* @author :liyuhang
* @method
*/
public function role_add(){
$this->param['create_id'] = $this->user['id'];
$this->param['operator_id'] = $this->user['id'];
$this->param['project_id'] = $this->user['project_id'];
//验证当前角色是否存在
$info = $this->model->read(['name'=>$this->param['name']]);
if($info !== false){
$this->fail('当前添加的角色已存在',Code::USER_ERROR);
}
$rs = $this->model->add($this->param);
if($rs === false){
$this->fail('添加失败',Code::USER_PARAMS_ERROE);
}
return $this->success();
}
/**
* @name :编辑角色
* @return void
* @author :liyuhang
* @method
*/
public function role_edit(){
//TODO::查询当前名称是否重复
$condition = [
'id'=>['!=',$this->param['id']],
'name'=>$this->param['name'],
'project_id'=>$this->user['project_id'],
];
$info = $this->model->read($condition);
if($info !== false){
$this->fail('当前添加的角色已存在',Code::USER_PARAMS_ERROE);
}
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->fail('编辑失败',Code::USER_PARAMS_ERROE);
}
return $this->success();
}
/**
* @name :修改状态/排序
* @return void
* @author :liyuhang
* @method
*/
public function role_status(){
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->fail('error',Code::USER_PARAMS_ERROE);
}
return $this->success();
}
/**
* @name :删除角色
* @return void
* @author :liyuhang
*/
public function role_del(){
//查询当前角色下是否有用户
$userModel = new UserModel();
//批量删除
foreach ($this->param['id'] as $v){
$user_info = $userModel->read(['role_id'=>$v]);
if(!empty($user_info)){
$this->fail('当前角色下有用户存在,不允许删除',Code::USER_ERROR);
}
}
$this->param['id'] = ['in',$this->param['id']];
$rs = $this->model->del($this->param);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
/**
* @name :获取角色详情
* @return void
* @author :liyuhang
* @method
*/
public function role_info(){
$info = $this->model->read($this->param);
if($info === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success($info);
}
/**
* @name :获取菜单列表
* @return array
* @author :liyuhang
* @method
*/
public function role_get_menu(){
//根据当前登录用户角色返回用户菜单列表
$info = $this->model->read(['id'=>$this->user['role_id']]);
$info['role_menu'] = trim($info['role_menu'],',');
$menuModel = new ProjectMenuModel();
$lists = $menuModel->where(['status'=>0])->whereIn('id',explode(',',$info['role_menu']))->get();
$lists = $lists->toArray();
$menu = array();
foreach ($lists as $k => $v){
$v = (array)$v;
if ($v['pid'] == 0) {
$v['sub'] = _get_child($v['id'], $lists);
$menu[] = $v;
}
}
return $this->success($menu);
}
}
... ...
<?php
namespace App\Http\Logic\Bside;
use App\Enums\Common\Code;
use App\Models\User;
use Illuminate\Support\Facades\DB;
class UserLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new User();
$this->param = $this->requestAll;
}
/**
* @name :添加会员
* @author :liyuhang
*/
public function user_add(){
$this->param['create_id'] = $this->user['id'];
$this->param['operator_id'] = $this->user['id'];
$this->param['project_id'] = $this->user['project_id'];
//验证当前用户是否存在
$info = $this->model->read(['mobile'=>$this->param['mobile']]);
if($info !== false){
$this->fail('error',Code::USER_ERROR);
}
//上传图片
if(isset($this->param['image'])){
$this->param['image'] = $this->upload();
}
//密码加密
$this->param['password'] = base64_encode(md5($this->param['password']));
$rs = $this->model->add($this->param);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
/**
* @name :编辑用户
* @author :liyuhang
*/
public function user_edit(){
$condition = [
'id'=>['!=',$this->param['id']],
'mobile'=>$this->param['mobile']
];
$info = $this->model->read($condition);
if($info !== false){
$this->fail('当前编辑的手机号码已存在',Code::USER_PARAMS_ERROE);
}
$this->param['operator_id'] = $this->user['id'];
//上传图片
if(isset($this->param['image'])){
//查看当前用户是否已有头像
$info = $this->model->read(['id'=>$this->param['id']],'hash');
if($info !== false){
DB::table('gl_image')->where(['hash'=>$info['hash']])->first();
}
$this->param['image'] = $this->upload();
}
$rs = $this->model->edits($this->param);
if($rs === false){
$this->fail('参数错误或其他服务器原因,编辑失败',Code::USER_ERROR,[]);
}
return $this->success();
}
/**
* @name :编辑状态/排序
* @author :liyuhang
*/
public function user_status(){
$this->param['operator_id'] = $this->user['id'];
$rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
/**
* @name :用户详情
* @return void
* @author :liyuhang
* @method
*/
public function user_info(){
$info = $this->model->read($this->param);
if($info === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success($info);
}
/**
* @name :删除用户(逻辑删除)
* @return void
* @author :liyuhang
* @method
*/
public function user_del(){
$this->param['operator_id'] = $this->user['id'];
$rs = $this->model->edit(['status'=>2],['id'=>['in',$this->param['id']]]);
if($rs === false){
$this->fail('error',Code::USER_ERROR);
}
return $this->success();
}
}
... ...