|
@@ -0,0 +1,163 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Service;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+use App\Model\OperationLog;
|
|
|
+use App\Model\OperationLogDetail;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
+
|
|
|
+class OperationLogService extends Service
|
|
|
+{
|
|
|
+ protected static $instance;
|
|
|
+ public static function getInstance(): self
|
|
|
+ {
|
|
|
+ if (self::$instance == null) {
|
|
|
+ self::$instance = new OperationLogService();
|
|
|
+ }
|
|
|
+ return self::$instance;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public function insertOperationLog($insert){
|
|
|
+ try {
|
|
|
+ DB::beginTransaction();
|
|
|
+ $menu_id = $insert['menu_id'];
|
|
|
+ $user_id = $insert['user_id'];
|
|
|
+ $ip = $insert['ip'];
|
|
|
+ $parent_id = $insert['parent_id'];
|
|
|
+ $type = $insert['type']??2;
|
|
|
+ $logModel = new OperationLog();
|
|
|
+ $logModel->user_id = $user_id;
|
|
|
+ $logModel->ip = $ip;
|
|
|
+ $logModel->menu_id = $menu_id;
|
|
|
+ $logModel->type = $type;
|
|
|
+ $logModel->parent_id = $parent_id;
|
|
|
+ $logModel->save();
|
|
|
+ $LogParent_id = $logModel->id;
|
|
|
+ if($type == 2){
|
|
|
+ $sub_datas = [];
|
|
|
+ $relationship_datas = [];
|
|
|
+ $table_Data = $insert['table_data'];
|
|
|
+ $sub_table_data = $insert['sub_table_data'] ?? [];
|
|
|
+ $relationship_table_data = $insert['relationship_table_data'] ?? [];
|
|
|
+ $table_Data = $this->findTableDatas($table_Data);
|
|
|
+ if(!empty($sub_table_data)) {
|
|
|
+
|
|
|
+ foreach ($sub_table_data as $v){
|
|
|
+ $sub_data = $this->findTableData($v);
|
|
|
+ $sub_datas = array_merge($sub_datas,$sub_data);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if(!empty($relationship_table_data)) {
|
|
|
+ foreach ($sub_table_data as $v){
|
|
|
+ $relationship_data = $this->findTableData($relationship_table_data);
|
|
|
+ $relationship_datas = array_merge($relationship_datas,$relationship_data);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ $insert_detail_data = array_merge($table_Data,$sub_datas,$relationship_datas);
|
|
|
+ $table_Data = $this->dealOperationLogDetail($insert_detail_data,$LogParent_id);
|
|
|
+ OperationLogDetail::insert($table_Data);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ DB::commit();
|
|
|
+ return [true,''];
|
|
|
+ }catch (\Exception $e){
|
|
|
+ DB::rollBack();
|
|
|
+ return [false,$e->getLine().':'.$e->getMessage()];
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public function dealOperationLogDetail($data,$log_id){
|
|
|
+ foreach ($data as $k=>$v){
|
|
|
+ $data[$k]['log_id'] = $log_id;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function findTableData($data){
|
|
|
+ $table = $data['table'];
|
|
|
+ $param = $data['param'];
|
|
|
+ $parent_id = $data['parent_id'];
|
|
|
+ $parent_key = $data['parent_key']??'id';
|
|
|
+ $model = DB::table($table)->where($parent_key,$parent_id);
|
|
|
+ $select_list = [];
|
|
|
+ $new_data_list = [];
|
|
|
+ foreach ($param as $v){
|
|
|
+ $select_list[] = $v['key'];
|
|
|
+ $new_data_list[$v['key']] = [
|
|
|
+ 'new_data' => $v['value'],
|
|
|
+ 'parent_id' => $parent_id,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ $detail = $model->select($select_list)->first()->toArray();
|
|
|
+ foreach ($new_data_list as $k=>$v){
|
|
|
+ $new_data_list[$k]['old_data'] = $detail[$k];
|
|
|
+ }
|
|
|
+ sort($new_data_list);
|
|
|
+ return $new_data_list;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function findTableDatas($data){
|
|
|
+ $table = $data['table'];
|
|
|
+ $parent_id = $data['parent_id'];
|
|
|
+ $parent_key = $data['parent_key']??'id';
|
|
|
+ $key = $data['key'];
|
|
|
+ $value = $data['value'];
|
|
|
+ $model = DB::table($table)->where($parent_key,$parent_id);
|
|
|
+
|
|
|
+ $old_data = implode(',',$model->where($parent_key,$parent_id)->pluck($key)->toArray());
|
|
|
+ return [['old_data'=>$old_data,'new_data'=>implode(',',$value),'parent_id'=>$parent_id]];
|
|
|
+ }
|
|
|
+
|
|
|
+ public function setParam()
|
|
|
+ {
|
|
|
+ //3种格式类型,1:单张表数据更新,只需要数组种有key,value;2.子表更新,也是单条数据更新只需要数组种有key,value;3.子表更新,但是是删除数据更新,则传old data 和 new data
|
|
|
+ $insert = [
|
|
|
+ 'menu_id'=>1,
|
|
|
+ 'user_id'=>'1',
|
|
|
+ 'ip'=>'1',
|
|
|
+ 'parent_id'=>'1',
|
|
|
+ 'table_data'=>[
|
|
|
+ 'table'=>'table',
|
|
|
+ 'parent_id'=>'1',
|
|
|
+ 'param'=>[
|
|
|
+ [
|
|
|
+ 'key' => 'd',
|
|
|
+ 'value' => 'd',
|
|
|
+ ]
|
|
|
+ ]
|
|
|
+ ],
|
|
|
+ 'sub_table_data'=>[
|
|
|
+ [
|
|
|
+ 'table'=>'table',
|
|
|
+ 'parent_id'=>'1',
|
|
|
+ 'parent_key'=>'1',
|
|
|
+ 'param'=>[
|
|
|
+ [
|
|
|
+ 'key' => 'd',
|
|
|
+ 'value' => 'd',
|
|
|
+ ]
|
|
|
+ ],
|
|
|
+ ]
|
|
|
+ ],
|
|
|
+ 'relationship_table_data'=>[
|
|
|
+ [
|
|
|
+ 'table'=>'table',
|
|
|
+ 'parent_id'=>'table',
|
|
|
+ 'parent_key'=>'table',
|
|
|
+ 'key'=>'title',
|
|
|
+ 'value'=>[1,2,3,4,5],
|
|
|
+ ]
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ }
|
|
|
+}
|