diff --git a/app/Filters/LogFilter.php b/app/Filters/LogFilter.php index 79de929..ca5cb9f 100644 --- a/app/Filters/LogFilter.php +++ b/app/Filters/LogFilter.php @@ -4,9 +4,9 @@ namespace App\Filters; class LogFilter extends Filters { - protected function moudule($value) + protected function module($value) { - return $this->builder->where('moudule', '=', $value); + return $this->builder->where('module', '=', $value); } protected function action($value) diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index cf36884..7ba4564 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -17,6 +17,8 @@ class Controller extends BaseController 'errorMessage' => '', ]; + protected $log; + protected function setValidatorFailResponse($errorMessage) { return $this->res = [ @@ -25,4 +27,23 @@ class Controller extends BaseController 'errorMessage' => $errorMessage, ]; } + + protected function setBeforeUpdate($data) + { + $this->log->before_update = is_array($data) ? json_encode($data, 256) : $data; + } + + protected function setAfterUpdate($data) + { + $this->log->after_update = is_array($data) ? json_encode($data, 256) : $data; + } + + protected function addLog($targetId = 0, $targetField = '', $targetType = '') + { + if ($targetType) { + $this->log->target_type = $targetType; + } + + return $this->log->add($targetId, $targetField); + } } diff --git a/app/Http/Controllers/Goods/GoodsBrandsController.php b/app/Http/Controllers/Goods/GoodsBrandsController.php index de9751c..6e54c9e 100644 --- a/app/Http/Controllers/Goods/GoodsBrandsController.php +++ b/app/Http/Controllers/Goods/GoodsBrandsController.php @@ -5,12 +5,22 @@ namespace App\Http\Controllers\Goods; use App\Http\Controllers\Controller; use App\Http\Resources\GoodsBrandResource; use App\Models\GoodsBrand; +use App\Models\Log as LogModel; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; class GoodsBrandsController extends Controller { + public function __construct(Request $request) + { + $this->log = new LogModel([ + 'module' => 'goods', + 'action' => $request->getMethod(), + 'target_type' => 'goods_brand', + ]); + } + public function index() { $goodsBrands = GoodsBrand::query()->paginate(); @@ -41,6 +51,8 @@ class GoodsBrandsController extends Controller 'errorMessage' => '批量添加失败', ]; } + $this->setAfterUpdate($goodsBrands); + $this->addLog(0, 'add'); return response($this->res, $this->res['httpCode']); } @@ -66,8 +78,11 @@ class GoodsBrandsController extends Controller return response($this->res, $this->res['httpCode']); } $goodsBrand = GoodsBrand::query()->find($id); + $this->setBeforeUpdate($goodsBrand->name); $goodsBrand->name = request('name'); $goodsBrand->save(); + $this->setAfterUpdate($goodsBrand->name); + $this->addLog($id, 'name'); return new GoodsBrandResource($goodsBrand); } @@ -77,6 +92,7 @@ class GoodsBrandsController extends Controller $goodsBrand = GoodsBrand::query()->find($id); try { $goodsBrand->delete(); + $this->addLog($id, 'status'); } catch (\Exception $e) { $this->res = [ 'httpCode' => 500, diff --git a/app/Http/Controllers/Goods/GoodsController.php b/app/Http/Controllers/Goods/GoodsController.php index 0ef697c..4498091 100644 --- a/app/Http/Controllers/Goods/GoodsController.php +++ b/app/Http/Controllers/Goods/GoodsController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Goods; use App\Http\Controllers\Controller; use App\Http\Resources\GoodsSkuResource; +use App\Models\Log as LogModel; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Validator; @@ -13,6 +14,15 @@ use App\Models\GoodsSku; class GoodsController extends Controller { + public function __construct(Request $request) + { + $this->log = new LogModel([ + 'module' => 'goods', + 'action' => $request->getMethod(), + 'target_type' => 'goods_sku', + ]); + } + public function index(Request $request) { $goods = Goods::query()->filter()->get()->toArray(); @@ -67,8 +77,10 @@ class GoodsController extends Controller $item['goods_id'] = $goods->id; $goodsSkus[] = $item; } - $goods->skus()->createMany($goodsSkus); + $collection = $goods->skus()->createMany($goodsSkus); DB::commit(); + $this->setAfterUpdate($collection->toArray()); + $this->addLog(0, 'add'); } catch (\Exception $exception) { DB::rollBack(); $this->res = [ diff --git a/app/Http/Controllers/Goods/GoodsSkusController.php b/app/Http/Controllers/Goods/GoodsSkusController.php index d445c6c..edf81ce 100644 --- a/app/Http/Controllers/Goods/GoodsSkusController.php +++ b/app/Http/Controllers/Goods/GoodsSkusController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Goods; use App\Http\Controllers\Controller; +use App\Models\Log as LogModel; use Illuminate\Http\Request; use App\Models\GoodsSku; use App\Http\Resources\GoodsSkuResource; @@ -12,9 +13,14 @@ use Maatwebsite\Excel\Facades\Excel; class GoodsSkusController extends Controller { - public function __construct() + public function __construct(Request $request) { - $this->middleware(['role:super-admin','permission:publish articles|edit articles']); +// $this->middleware(['role:super-admin','permission:publish articles|edit articles']); + $this->log = new LogModel([ + 'module' => 'goods', + 'action' => $request->getMethod(), + 'target_type' => 'goods_sku', + ]); } public function index(Request $request) @@ -42,7 +48,9 @@ class GoodsSkusController extends Controller ]; } try { - Excel::import(new GoodsSkusImport(), $request->file('goodsSkus')); + $collection = Excel::import(new GoodsSkusImport(), $request->file('goodsSkus')); + $this->setAfterUpdate($collection->toArray()); + $this->addLog(0, 'import'); } catch (ValidationException $exception) { $this->setValidatorFailResponse($exception->validator->getMessageBag()->getMessages()); } diff --git a/app/Http/Controllers/Goods/GoodsTypesController.php b/app/Http/Controllers/Goods/GoodsTypesController.php index 299c1a0..9a7611c 100644 --- a/app/Http/Controllers/Goods/GoodsTypesController.php +++ b/app/Http/Controllers/Goods/GoodsTypesController.php @@ -5,12 +5,22 @@ namespace App\Http\Controllers\Goods; use App\Http\Controllers\Controller; use App\Http\Resources\GoodsTypeResource; use App\Models\GoodsType; +use App\Models\Log as LogModel; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; class GoodsTypesController extends Controller { + public function __construct(Request $request) + { + $this->log = new LogModel([ + 'module' => 'goods', + 'action' => $request->getMethod(), + 'target_type' => 'goods_type', + ]); + } + public function index() { $goodsTypes = GoodsType::query()->paginate(); @@ -41,6 +51,8 @@ class GoodsTypesController extends Controller 'errorMessage' => '批量添加失败', ]; } + $this->setAfterUpdate($goodsTypes); + $this->addLog(0, 'add'); return response($this->res, $this->res['httpCode']); } @@ -66,8 +78,11 @@ class GoodsTypesController extends Controller return response($this->res, $this->res['httpCode']); } $goodsType = GoodsType::query()->find($id); + $this->setBeforeUpdate($goodsType->name); $goodsType->name = request('name'); $goodsType->save(); + $this->setAfterUpdate($goodsType->name); + $this->addLog($id, 'name'); return new GoodsTypeResource($goodsType); } @@ -76,6 +91,7 @@ class GoodsTypesController extends Controller { $goodsType = GoodsType::query()->find($id); $goodsType->delete(); + $this->addLog($id, 'status'); return response($this->res, $this->res['httpCode']); } diff --git a/app/Http/Controllers/Permission/PermissionsController.php b/app/Http/Controllers/Permission/PermissionsController.php index ac3cbf9..629013d 100644 --- a/app/Http/Controllers/Permission/PermissionsController.php +++ b/app/Http/Controllers/Permission/PermissionsController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Permission; use App\Http\Controllers\Controller; +use App\Models\Log as LogModel; use Spatie\Permission\Models\Permission; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; @@ -11,6 +12,15 @@ use App\Http\Resources\PermissionsResource; class PermissionsController extends Controller { + public function __construct(Request $request) + { + $this->log = new LogModel([ + 'module' => 'permission', + 'action' => $request->getMethod(), + 'target_type' => 'permission', + ]); + } + public function index() { $permissions = Permission::query()->get(); @@ -51,8 +61,11 @@ class PermissionsController extends Controller return response($this->res, $this->res['httpCode']); } $permission = Permission::query()->find($id); + $this->setBeforeUpdate($permission->name); $permission->name = $request->name; $permission->save(); + $this->setAfterUpdate($permission->name); + $this->addLog($id, 'name'); return new PermissionsResource($permission); } diff --git a/app/Http/Controllers/Role/RolesController.php b/app/Http/Controllers/Role/RolesController.php index bec6d97..caca780 100644 --- a/app/Http/Controllers/Role/RolesController.php +++ b/app/Http/Controllers/Role/RolesController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Role; use App\Http\Controllers\Controller; +use App\Models\Log as LogModel; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; @@ -12,6 +13,15 @@ use App\Http\Resources\RolesResource; class RolesController extends Controller { + public function __construct(Request $request) + { + $this->log = new LogModel([ + 'module' => 'role', + 'action' => $request->getMethod(), + 'target_type' => 'role', + ]); + } + public function index() { $roles = Role::query()->get(); @@ -32,6 +42,8 @@ class RolesController extends Controller $role = new Role(); $role->name = $request->name; $role->save(); + $this->setAfterUpdate($role->name); + $this->addLog($role->id, 'add'); return response($this->res, $this->res['httpCode']); } @@ -41,6 +53,8 @@ class RolesController extends Controller $role = Role::query()->findOrFail($id); $permissions = Permission::query()->findOrFail($request->permissionIds); $role->syncPermissions($permissions); + $this->setAfterUpdate($permissions->toArray()); + $this->addLog($id, 'set', 'permission'); return response($this->res, $this->res['httpCode']); } @@ -61,8 +75,11 @@ class RolesController extends Controller return response($this->res, $this->res['httpCode']); } $role = Role::query()->find($id); + $this->setBeforeUpdate($role->name); $role->name = $request->name; $role->save(); + $this->setAfterUpdate($role->name); + $this->addLog($id, 'name'); return new RolesResource($role); } diff --git a/app/Http/Controllers/User/UsersController.php b/app/Http/Controllers/User/UsersController.php index f7e17e7..f2f4f30 100644 --- a/app/Http/Controllers/User/UsersController.php +++ b/app/Http/Controllers/User/UsersController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\User; use App\Http\Controllers\Controller; +use App\Models\Log as LogModel; use App\Models\User; use Illuminate\Http\Request; use Faker\Generator as Faker; @@ -12,6 +13,15 @@ use App\Http\Resources\UsersResource; class UsersController extends Controller { + public function __construct(Request $request) + { + $this->log = new LogModel([ + 'module' => 'user', + 'action' => $request->getMethod(), + 'target_type' => 'user', + ]); + } + public function index() { $users = User::query()->where('id', '<>', 1)->paginate(); @@ -37,6 +47,8 @@ class UsersController extends Controller $user->password = $request->password; $user->api_token = Str::random(60); $user->save(); + $this->setAfterUpdate($user->toArray()); + $this->addLog($user->id, 'add'); return new UsersResource($user); } diff --git a/app/Imports/GoodsSkusImport.php b/app/Imports/GoodsSkusImport.php index 76a302d..6ca3402 100644 --- a/app/Imports/GoodsSkusImport.php +++ b/app/Imports/GoodsSkusImport.php @@ -9,11 +9,12 @@ use App\Models\GoodsType; use Illuminate\Support\Collection; use Illuminate\Validation\Rule; use Illuminate\Validation\ValidationException; +use Maatwebsite\Excel\Concerns\SkipsEmptyRows; use Maatwebsite\Excel\Concerns\ToCollection; use Illuminate\Support\Facades\Validator; use App\Utils\ArrayUtils; -class GoodsSkusImport implements ToCollection +class GoodsSkusImport implements ToCollection, SkipsEmptyRows { private $statusMap = [ '下架' => 0, @@ -21,7 +22,6 @@ class GoodsSkusImport implements ToCollection '预警' => 2, ]; - /** * @throws ValidationException */ diff --git a/app/Models/Log.php b/app/Models/Log.php index 61b95c5..80338d9 100644 --- a/app/Models/Log.php +++ b/app/Models/Log.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Models\traits\Filter; +use Illuminate\Support\Facades\Auth; class Log extends Model { @@ -10,7 +11,7 @@ class Log extends Model //查询字段 public $fieldSearchable = [ - 'moudule', + 'module', 'action', 'target_type', 'target_id', @@ -18,4 +19,28 @@ class Log extends Model 'user_id', 'created_at', ]; + + public $fillable = [ + 'module', + 'action', + 'target_type', + 'target_id', + 'target_field', + 'before_update', + 'after_update', + ]; + + public function setUserIdAttribute($value) + { + $this->attributes['user_id'] = Auth::id(); + } + + public function add($targetId = 0, $targetField = '') + { + $this->attributes['user_id'] = Auth::id(); + $this->attributes['target_id'] = $targetId; + $this->attributes['target_field'] = $targetField; + + return $this->save(); + } } diff --git a/database/migrations/2022_07_26_105818_create_logs_table.php b/database/migrations/2022_07_26_105818_create_logs_table.php index 6f0820c..1ca6436 100644 --- a/database/migrations/2022_07_26_105818_create_logs_table.php +++ b/database/migrations/2022_07_26_105818_create_logs_table.php @@ -17,11 +17,11 @@ class CreateLogsTable extends Migration $table->bigIncrements('id'); $table->string('module')->comment('模块'); $table->string('action')->comment('操作'); - $table->string('target_type')->comment('目标类型'); - $table->bigInteger('target_id')->comment('目标id'); - $table->string('target_field')->comment('目标字段'); - $table->text('before_update')->comment('更新前数据'); - $table->text('after_update')->comment('更新后数据'); + $table->string('target_type')->nullable()->comment('目标类型'); + $table->bigInteger('target_id')->nullable()->default(0)->comment('目标id'); + $table->string('target_field')->nullable()->comment('目标字段'); + $table->text('before_update')->nullable()->comment('更新前数据'); + $table->text('after_update')->nullable()->comment('更新后数据'); $table->bigInteger('user_id')->comment('操作人id'); $table->timestamps(); });