作者 赵彬吉

update

@@ -18,4 +18,5 @@ final class Common extends Enum @@ -18,4 +18,5 @@ final class Common extends Enum
18 //端 18 //端
19 const A='a'; 19 const A='a';
20 const B='b'; 20 const B='b';
  21 + const C='c';
21 } 22 }
  1 +<?php
  2 +
  3 +namespace App\Exceptions;
  4 +
  5 +use App\Enums\Common\Code;
  6 +use Exception;
  7 +use Throwable;
  8 +
  9 +/**
  10 + * @notes: C端接口统一错误格式
  11 + * Class CsideGlobalException
  12 + * @package App\Exceptions
  13 + */
  14 +class CsideGlobalException extends Exception
  15 +{
  16 + public function __construct($code = 0, $message = "", Throwable $previous = null)
  17 + {
  18 + $this->code = $code;
  19 + $this->message = $message;
  20 + if (empty($this->message)) {
  21 + $this->message = Code::fromValue($code)->description;
  22 + }
  23 + }
  24 +}
@@ -72,6 +72,10 @@ class Handler extends ExceptionHandler @@ -72,6 +72,10 @@ class Handler extends ExceptionHandler
72 elseif($exception instanceof BsideGlobalException) { 72 elseif($exception instanceof BsideGlobalException) {
73 LogUtils::error("BsideGlobalException", [], $exceptionMessage); 73 LogUtils::error("BsideGlobalException", [], $exceptionMessage);
74 } 74 }
  75 + //C端错误
  76 + elseif($exception instanceof CsideGlobalException) {
  77 + LogUtils::error("CsideGlobalException", [], $exceptionMessage);
  78 + }
75 //验证错误(非手动抛出) 79 //验证错误(非手动抛出)
76 elseif ($exception instanceof ValidationException) { 80 elseif ($exception instanceof ValidationException) {
77 LogUtils::error("参数验证失败", [], $exceptionMessage); 81 LogUtils::error("参数验证失败", [], $exceptionMessage);
@@ -110,6 +114,8 @@ class Handler extends ExceptionHandler @@ -110,6 +114,8 @@ class Handler extends ExceptionHandler
110 $code = $exception->getCode(); 114 $code = $exception->getCode();
111 }elseif ($exception instanceof BsideGlobalException) { 115 }elseif ($exception instanceof BsideGlobalException) {
112 $code = $exception->getCode(); 116 $code = $exception->getCode();
  117 + }elseif ($exception instanceof CsideGlobalException) {
  118 + $code = $exception->getCode();
113 } elseif ($exception instanceof ValidationException) { 119 } elseif ($exception instanceof ValidationException) {
114 $code = Code::USER_PARAMS_ERROE(); 120 $code = Code::USER_PARAMS_ERROE();
115 $message = $code->description = Arr::first(Arr::first($exception->errors())); 121 $message = $code->description = Arr::first(Arr::first($exception->errors()));
  1 +<?php
  2 +
  3 +namespace App\Http\Controllers\Cside;
  4 +
  5 +use App\Enums\Common\Code;
  6 +use App\Http\Controllers\Controller;
  7 +use Illuminate\Http\JsonResponse;
  8 +use Illuminate\Http\Request;
  9 +use Illuminate\Http\Exceptions\HttpResponseException;
  10 +use Illuminate\Support\Facades\Cache;
  11 +use Illuminate\Support\Facades\Session;
  12 +
  13 +class BaseController extends Controller
  14 +{
  15 + protected $param = [];//所有请求参数
  16 + protected $token = ''; //token
  17 + protected $request = [];//助手函数
  18 + protected $project = [];//当前登录用户详情
  19 + /**
  20 + * 获取所有参数
  21 + */
  22 + public function __construct(Request $request)
  23 + {
  24 + $this->request = $request;
  25 + $this->param = $this->request->all();
  26 + $this->token = $this->request->header('token');
  27 + if(!empty($this->token) && !empty(Cache::get($this->token))){
  28 + $info = Cache::get($this->token);
  29 + $this->user = $info;
  30 + $this->uid = $info['id'];
  31 + }
  32 +
  33 + }
  34 +
  35 +
  36 + /**
  37 + * 成功返回
  38 + * @param array $data
  39 + * @param string $code
  40 + * @param bool $objectData
  41 + * @return JsonResponse
  42 + * @throws \Psr\Container\ContainerExceptionInterface
  43 + * @throws \Psr\Container\NotFoundExceptionInterface
  44 + */
  45 + function success(array $data = [], string $code = Code::SUCCESS, bool $objectData = false): JsonResponse
  46 + {
  47 + if ($objectData) {
  48 + $data = (object)$data;
  49 + }
  50 + $code = Code::fromValue($code);
  51 + $response = [
  52 + 'code' => $code->value,
  53 + 'data' => $data,
  54 + 'msg' => $code->description,
  55 + ];
  56 + return response()->json($response,200);
  57 + }
  58 +}
  1 +<?php
  2 +
  3 +namespace App\Http\Controllers\Cside;
  4 +
  5 +use App\Http\Logic\Cside\InquiryLogic;
  6 +use App\Http\Requests\Cside\InquiryRequest;
  7 +
  8 +/**
  9 + * 精准询盘
  10 + * Class InquiryController
  11 + * @package App\Http\Controllers\Bside
  12 + * @author zbj
  13 + * @date 2023/5/4
  14 + */
  15 +class InquiryController extends BaseController
  16 +{
  17 +
  18 + public function save(InquiryRequest $request, InquiryLogic $logic)
  19 + {
  20 + $data = $logic->save($this->param);
  21 + return $this->success($data);
  22 + }
  23 +}
@@ -2,13 +2,11 @@ @@ -2,13 +2,11 @@
2 2
3 namespace App\Http\Logic\Bside; 3 namespace App\Http\Logic\Bside;
4 4
5 -use App\Enums\Common\Code; 5 +
  6 +use App\Enums\Common\Common;
6 use App\Exceptions\BsideGlobalException; 7 use App\Exceptions\BsideGlobalException;
7 -use App\Helper\Common;  
8 use App\Http\Controllers\ImageController; 8 use App\Http\Controllers\ImageController;
9 use App\Http\Logic\Logic; 9 use App\Http\Logic\Logic;
10 -use App\Models\Image as ImageModel;  
11 -use Illuminate\Http\Request;  
12 use Illuminate\Support\Facades\Cache; 10 use Illuminate\Support\Facades\Cache;
13 11
14 /** 12 /**
@@ -25,6 +23,8 @@ class BaseLogic extends Logic @@ -25,6 +23,8 @@ class BaseLogic extends Logic
25 23
26 protected $user; 24 protected $user;
27 25
  26 + protected $side = Common::B;
  27 +
28 public function __construct() 28 public function __construct()
29 { 29 {
30 $this->request = request(); 30 $this->request = request();
  1 +<?php
  2 +
  3 +namespace App\Http\Logic\Cside;
  4 +
  5 +
  6 +use App\Enums\Common\Common;
  7 +use App\Exceptions\BsideGlobalException;
  8 +use App\Http\Logic\Logic;
  9 +
  10 +/**
  11 + * @notes: 逻辑层基类 控制器调用 统一返回 统一抛出异常
  12 + */
  13 +class BaseLogic extends Logic
  14 +{
  15 +
  16 + protected $requestAll;
  17 +
  18 + protected $param;
  19 +
  20 + protected $request;
  21 +
  22 + protected $project;
  23 +
  24 + protected $side = Common::C;
  25 +
  26 + public function __construct()
  27 + {
  28 + $this->request = request();
  29 + $this->requestAll = request()->all();
  30 + $this->project = $this->request->get('project');
  31 + }
  32 +
  33 +
  34 + /**
  35 + * 列表
  36 + * @param array $map
  37 + * @param array $sort
  38 + * @param array $columns
  39 + * @param int $limit
  40 + * @return array
  41 + * @author zbj
  42 + * @date 2023/4/13
  43 + */
  44 + public function getList(array $map = [], array $sort = ['id' => 'desc'], array $columns = ['*'], int $limit = 20)
  45 + {
  46 + $map[] = ['project_id' => $this->project['id']];
  47 + return parent::getList($map, $sort, $columns, $limit);
  48 + }
  49 +
  50 + /**
  51 + * @param $id
  52 + * @return mixed
  53 + * @author zbj
  54 + * @date 2023/4/15
  55 + */
  56 + public function getCacheInfo($id)
  57 + {
  58 + $info = parent::getCacheInfo($id);
  59 + if ($info && $info['project_id'] != $this->project['id']) {
  60 + $info = null;
  61 + }
  62 + return $info;
  63 + }
  64 +
  65 + /**
  66 + * 保存
  67 + * @param $param
  68 + * @return array
  69 + * @throws BsideGlobalException
  70 + * @author zbj
  71 + * @date 2023/4/13
  72 + */
  73 + public function save($param)
  74 + {
  75 + $param['project_id'] = $this->project['id'];
  76 + return parent::save($param);
  77 + }
  78 +
  79 + /**
  80 + * 批量删除
  81 + * @param $ids
  82 + * @param array $map
  83 + * @return array
  84 + * @author zbj
  85 + * @date 2023/4/13
  86 + */
  87 + public function delete($ids, $map = [])
  88 + {
  89 + $map[] = ['project_id' => $this->project['id']];
  90 + return parent::delete($ids, $map);
  91 + }
  92 +
  93 +}
  1 +<?php
  2 +
  3 +namespace App\Http\Logic\Cside;
  4 +
  5 +use App\Helper\Arr;
  6 +use App\Models\Inquiry;
  7 +
  8 +/**
  9 + * Class InquiryLogic
  10 + * @package App\Http\Logic\Bside
  11 + * @author zbj
  12 + * @date 2023/5/4
  13 + */
  14 +class InquiryLogic extends BaseLogic
  15 +{
  16 + public function __construct()
  17 + {
  18 + parent::__construct();
  19 +
  20 + $this->model = new Inquiry();
  21 + }
  22 +
  23 + public function save($param)
  24 + {
  25 + $param['ip_info'] = Arr::s2a($param['ip_info']);
  26 + $param['ip'] = $param['ip_info']['ip'] ?? '';
  27 + $param['ip_country'] = $param['ip_info']['country'] ?? '';
  28 + return parent::save($param);
  29 + }
  30 +
  31 +}
@@ -4,6 +4,7 @@ namespace App\Http\Logic; @@ -4,6 +4,7 @@ namespace App\Http\Logic;
4 4
5 use App\Enums\Common\Code; 5 use App\Enums\Common\Code;
6 use App\Enums\Common\Common; 6 use App\Enums\Common\Common;
  7 +use App\Exceptions\CsideGlobalException;
7 use \App\Helper\Common as CommonHelper; 8 use \App\Helper\Common as CommonHelper;
8 use App\Exceptions\AsideGlobalException; 9 use App\Exceptions\AsideGlobalException;
9 use App\Exceptions\BsideGlobalException; 10 use App\Exceptions\BsideGlobalException;
@@ -45,6 +46,9 @@ class Logic @@ -45,6 +46,9 @@ class Logic
45 if((request()->path()[0]) == Common::B){ 46 if((request()->path()[0]) == Common::B){
46 throw new BsideGlobalException($code, $message); 47 throw new BsideGlobalException($code, $message);
47 } 48 }
  49 + if((request()->path()[0]) == Common::C){
  50 + throw new CsideGlobalException($code, $message);
  51 + }
48 throw new AsideGlobalException($code, $message); 52 throw new AsideGlobalException($code, $message);
49 } 53 }
50 54
  1 +<?php
  2 +
  3 +namespace App\Http\Middleware\Cside;
  4 +
  5 +use App\Enums\Common\Code;
  6 +use App\Models\Project\Project;
  7 +use App\Services\ProjectServer;
  8 +use Closure;
  9 +use Illuminate\Http\Request;
  10 +
  11 +class ParamMiddleware
  12 +{
  13 + protected $param = [];
  14 +
  15 + protected $project = [];
  16 +
  17 + /**
  18 + * Handle an incoming request.
  19 + *
  20 + * @param \Illuminate\Http\Request $request
  21 + * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
  22 + * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
  23 + */
  24 + public function handle(Request $request, Closure $next)
  25 + {
  26 + $this->param = $request->all();
  27 + $domain = $request->header('domain');
  28 + if(!isset($domain) || empty($domain)){
  29 + return response(['code'=>Code::USER_ERROR,'msg'=>'非法请求']);
  30 + }
  31 + $project = Project::getProjectByDomain($domain);
  32 + if(empty($project)){
  33 + return response(['code'=>Code::USER_ERROR,'msg'=>'非法请求']);
  34 + }
  35 + // 设置数据信息
  36 +// $project = ProjectServer::useProject($project['id']);
  37 +// if($project){
  38 +// return response(['code'=>Code::USER_ERROR,'msg'=>'数据库未配置']);
  39 +// }
  40 + $request->attributes->add(['project' => $project]);
  41 + return $next($request);
  42 + }
  43 +}
  1 +<?php
  2 +
  3 +namespace App\Http\Requests\Cside;
  4 +
  5 +use Illuminate\Foundation\Http\FormRequest;
  6 +
  7 +/**
  8 + * Class InquiryRequest
  9 + * @package App\Http\Requests\Cside
  10 + * @author zbj
  11 + * @date 2023/5/4
  12 + */
  13 +class InquiryRequest extends FormRequest
  14 +{
  15 + /**
  16 + * Determine if the user is authorized to make this request.
  17 + *
  18 + * @return bool
  19 + */
  20 + public function authorize()
  21 + {
  22 + return true;
  23 + }
  24 +
  25 + /**
  26 + * Get the validation rules that apply to the request.
  27 + *
  28 + * @return array
  29 + */
  30 + public function rules()
  31 + {
  32 + return [
  33 + 'name' => 'required|max:200',
  34 + 'email' => 'required|email|max:200',
  35 + 'phone' => 'max:200',
  36 + 'content' => 'required',
  37 + ];
  38 + }
  39 +
  40 + public function messages()
  41 + {
  42 + return [];
  43 + }
  44 +
  45 +}
@@ -4,6 +4,7 @@ namespace App\Models\Project; @@ -4,6 +4,7 @@ namespace App\Models\Project;
4 4
5 use App\Helper\Arr; 5 use App\Helper\Arr;
6 use App\Models\Base; 6 use App\Models\Base;
  7 +use Illuminate\Support\Facades\Cache;
7 8
8 class DeployBuild extends Base 9 class DeployBuild extends Base
9 { 10 {
@@ -19,4 +20,8 @@ class DeployBuild extends Base @@ -19,4 +20,8 @@ class DeployBuild extends Base
19 return Arr::setToArr($value); 20 return Arr::setToArr($value);
20 } 21 }
21 22
  23 + public static function clearCache($row){
  24 + $cache_key = 'project_' . $row->original['test_domain'];
  25 + Cache::forget($cache_key);
  26 + }
22 } 27 }
@@ -4,6 +4,7 @@ namespace App\Models\Project; @@ -4,6 +4,7 @@ namespace App\Models\Project;
4 4
5 use App\Helper\Arr; 5 use App\Helper\Arr;
6 use App\Models\Base; 6 use App\Models\Base;
  7 +use Illuminate\Support\Facades\Cache;
7 8
8 class DeployOptimize extends Base 9 class DeployOptimize extends Base
9 { 10 {
@@ -19,4 +20,9 @@ class DeployOptimize extends Base @@ -19,4 +20,9 @@ class DeployOptimize extends Base
19 return Arr::s2a($value); 20 return Arr::s2a($value);
20 } 21 }
21 22
  23 + public static function clearCache($row){
  24 + $cache_key = 'project_' . $row->original['domain'];
  25 + Cache::forget($cache_key);
  26 + }
  27 +
22 } 28 }
@@ -5,6 +5,7 @@ namespace App\Models\Project; @@ -5,6 +5,7 @@ namespace App\Models\Project;
5 use App\Helper\Arr; 5 use App\Helper\Arr;
6 use App\Models\Base; 6 use App\Models\Base;
7 use App\Models\Devops\ServerConfig; 7 use App\Models\Devops\ServerConfig;
  8 +use Illuminate\Support\Facades\Cache;
8 9
9 class Project extends Base 10 class Project extends Base
10 { 11 {
@@ -144,4 +145,30 @@ class Project extends Base @@ -144,4 +145,30 @@ class Project extends Base
144 return Arr::s2a($value); 145 return Arr::s2a($value);
145 } 146 }
146 147
  148 + /**
  149 + * 根据域名获取项目信息
  150 + * @author zbj
  151 + * @date 2023/5/5
  152 + */
  153 + public static function getProjectByDomain($domain){
  154 + $cache_key = 'project_'.$domain;
  155 + $data = Cache::get($cache_key);
  156 + if(!$data){
  157 + //是否测试域名
  158 + $project_id = DeployBuild::where('test_domain', $domain)->value('project_id');
  159 + //是否正式域名
  160 + if(!$project_id){
  161 + $project_id = DeployOptimize::where('domain', $domain)->value('project_id');
  162 + }
  163 + if(!$project_id){
  164 + return [];
  165 + }
  166 + $data = self::find($project_id);
  167 + if($data){
  168 + Cache::put($cache_key, $data);
  169 + }
  170 + }
  171 + return $data;
  172 + }
  173 +
147 } 174 }
@@ -60,6 +60,12 @@ return [ @@ -60,6 +60,12 @@ return [
60 'via' => \App\Factory\LogFormatterFactory::class, 60 'via' => \App\Factory\LogFormatterFactory::class,
61 'prefix' => 'bside', 61 'prefix' => 'bside',
62 ], 62 ],
  63 + //自定义B端错误日志
  64 + 'cside' => [
  65 + 'driver' => 'custom',
  66 + 'via' => \App\Factory\LogFormatterFactory::class,
  67 + 'prefix' => 'cside',
  68 + ],
63 69
64 'stack' => [ 70 'stack' => [
65 'driver' => 'stack', 71 'driver' => 'stack',
  1 +<?php
  2 +/**
  3 + * C端用户路由文件
  4 + */
  5 +
  6 +use Illuminate\Support\Facades\Route;
  7 +
  8 +//必须登录验证的路由组
  9 +Route::middleware([])->group(function () {
  10 +
  11 +//添加询盘信息
  12 + Route::post('/inquiry/save', [\App\Http\Controllers\Cside\InquiryController::class, 'save'])->name('inquiry_save');
  13 +});