feat: #20220801 日志记录增加

This commit is contained in:
赵世界 2022-08-01 17:06:43 +08:00
parent df2acd46db
commit 1a11b83a6f
12 changed files with 154 additions and 14 deletions

View File

@ -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)

View File

@ -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);
}
}

View File

@ -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,

View File

@ -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 = [

View File

@ -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());
}

View File

@ -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']);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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
*/

View File

@ -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();
}
}

View File

@ -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();
});