Quellcode durchsuchen

Merge remote-tracking branch 'origin/master'

cqpCow vor 1 Jahr
Ursprung
Commit
e883f3295c

+ 2 - 2
app/Http/Controllers/Api/OaController.php

@@ -103,8 +103,8 @@ class OaController extends BaseController
 
 
         $service = new OaService();
-        $user = $request->get('auth');
-        list($status,$data) = $service->oaEdit($request->all());
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->oaEdit($request->all(),$userData);
 
         if($status){
             return $this->json_return(200,'',$data);

+ 53 - 0
app/Http/Controllers/Api/OperationLogController.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace App\Http\Controllers\Api;
+
+
+use App\Service\OaService;
+use App\Service\OperationLogService;
+use Illuminate\Http\Request;
+
+
+class OperationLogController extends BaseController
+{
+
+
+
+
+
+    public function getOperationList(Request $request)
+    {
+
+
+        $service = new OperationLogService();
+        list($status,$data) = $service->getOperationList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+
+    }
+
+    public function setOperationList(Request $request){
+        $service = new OperationLogService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->setOperationList($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+
+
+
+
+
+
+
+
+}

+ 17 - 0
app/Model/OaSubEmployee.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ *
+ * Class Unit
+ * @package App\Models
+ */
+class OaSubEmployee extends Model
+{
+    protected $table = "oa_sub_employee"; //指定表
+    protected $dateFormat = null;
+
+}

+ 137 - 603
app/Service/OaService.php

@@ -13,6 +13,7 @@ use App\Model\OaOrder;
 use App\Model\OaOrderSub;
 use App\Model\OaOrderSubEmployee;
 use App\Model\OaSub;
+use App\Model\OaSubEmployee;
 use App\Model\OaSubRule;
 use App\Model\RollFilm;
 use App\Model\RollFilmCombine;
@@ -51,117 +52,52 @@ class OaService extends Service
     public function oaDetail($data)
     {
 
-//        $id = $data['id'];
-//
-////        if($this->isEmpty($data,'title')) return [201,'名称不存在!'];
-//        $detail = OaSub::from('oa_sub as os')
-//            ->leftJoin('employee as e', 'e.id', 'os.employee_id')
-//            ->leftJoin('area as a', 'a.id', 'os.area_id')
-//            ->where('oa_id', $id)
-//            ->where('os.del_time', 0)
-//            ->select('os.sort', 'os.type', 'os.employee_id', 'os.remark', 'e.emp_name','os.type','os.area_id','a.title as area_name')
-//            ->orderBy('os.sort', 'asc')->get()->toArray();
-//        $first = Oa::from('oa as o')
-//            ->leftjoin('sys_menu as s', 's.id', 'o.menu_id')
-//            ->select('o.id', 'o.menu_id', 'o.crt_time', 's.title','o.type')
-//            ->where('o.del_time', 0)->where('o.id', $id)->first()->toArray();
-//
-//        $first['detail'] = $detail;
-
-        $detail = [
-            'id' => 1,
-            'detail' => [
-                [
-                    'id' => 2,
-                    'name' => '张三',
-                    'list' => [
-                        [
-                            'id' => 4,
-                            'name' => '张三三',
-                            'list' => [
-                                [
-                                    'id' => 5,
-                                    'name' => '张五',
-                                    'list' => [
-                                        [
-                                            'id' => 6,
-                                            'name' => '李六',
-                                            'list' => []
-                                        ]
-                                    ]
-                                ], [
-                                    'id' => 7,
-                                    'name' => '张六',
-                                    'list' => [
-                                        [
-                                            'id' => 6,
-                                            'name' => '李六',
-                                            'list' => []
-                                        ]
-                                    ]
-                                ],
-                            ],
-                        ], [
-                            'id' => 44,
-                            'name' => '张四四',
-                            'list' => [
-                                [
-                                    'id' => 55,
-                                    'name' => '张四四1',
-                                    'list' => [
-                                        [
-                                            'id' => 66,
-                                            'name' => '李六1',
-                                            'list' => [
-                                                [
-                                                    'id' => 77,
-                                                    'name' => 'li7',
-                                                    'list' => []
-                                                ]
-                                            ]
-                                        ]
-                                    ]
-                                ], [
-                                    'id' => 77,
-                                    'name' => '张四四2',
-                                    'list' => [
-                                        [
-                                            'id' => 6,
-                                            'name' => '李六',
-                                            'list' => []
-                                        ]
-                                    ]
-                                ],
-                            ],
-                        ],
-                    ]
-                ], [
-                    'id' => 3,
-                    'name' => '李四',
-                    'list' => [
-                        [
-                            'id' => 8,
-                            'name' => '李五',
-                            'list' => [
-                                [
-                                    'id' => 9,
-                                    'name' => '李六',
-                                    'list' => [
-                                        [
-                                            'id' => 6,
-                                            'name' => '李六',
-                                            'list' => []
-                                        ]
-                                    ]
-                                ]
-                            ]
-                        ]
-                    ]
-                ],
-            ],
-        ];
-
-        return [true, $detail];
+        $id = $data['id'];
+        $menu_id = Oa::where('id',$id)->value('menu_id');
+        $list = OaSub::where('oa_id',$id)->where('del_time',0)->get()->toArray();
+        $oa_sub_ids = [];
+        foreach ($list as $v){
+            $oa_sub_ids[] = $v['id'];
+        }
+        $oaRule = OaSubRule::wherein('oa_sub_id',$oa_sub_ids)->get()->toArray();
+        $oaEmployee = OaSubEmployee::wherein('oa_sub_id',$oa_sub_ids)->get()->toArray();
+        $oaRuleKey = [];
+        $oaEmployeeKey = [];
+        foreach ($oaRule as $v){
+            $oaRuleKey[$v['oa_sub_id']][] = [
+                'value' => $v['value'],
+                'key' => $v['key'],
+                'opera' => $v['formula'] == '==' ? '=' : $v['formula'] ,
+            ];
+        }
+        $employee_key_list = Employee::pluck('emp_name','id')->toArray();
+        foreach ($oaEmployee as $v){
+            $oaEmployeeKey[$v['oa_sub_id']][] = [
+                'id'=>$v['employee_id'],
+                'emp_name'=>$employee_key_list[$v['employee_id']],
+            ];
+        }
+        $return = [];
+        foreach ($list as $v){
+            $return[$v['sort']][] = [
+                'emp_id' => $oaEmployeeKey[$v['id']],
+                'index' => $v['h5_key'],
+                'set' => isset($oaRuleKey[$v['id']])?$oaRuleKey[$v['id']] : [] ,
+            ];
+        }
+        $detail = [];
+        foreach ($return as $k=>$v){
+            $children = [];
+            foreach ($v as $vv){
+                $children[] = [
+                    'set'=>$vv['set'],
+                    'emp_id'=>$vv['emp_id'],
+                    'index'=>$vv['index'],
+                ];
+            }
+            $detail[] = ['children'=>$children];
+        }
+        return [true, ['data'=>$detail,'menu_id'=>$menu_id]];
 
     }
 
@@ -230,478 +166,6 @@ class OaService extends Service
 
     public function oaAdd($data)
     {
-
-        $detail = [
-            'id' => 1,
-            'detail' => [
-                [
-                    'id' => 2,
-                    'name' => '张三',
-                    'rule' => [
-                        'detail' => [
-                            [
-                                'key' => 'area',
-                                'value' => '南区',
-                                'formula' => 'dengyu',
-                            ], [
-                                'key' => 'num',
-                                'value' => '40',
-                                'formula' => 'dayu',
-                            ], [
-                                'key' => 'brand',
-                                'value' => 'A,B,C',
-                                'formula' => 'baohan',
-                            ],
-                        ],
-                        'click' => [
-                            'area',
-                            'num',
-                            'brand',
-                        ],
-                        'string' => '(area 并且 num) 或者 num'
-                    ],
-                    'list' => [
-                        [
-                            'id' => 4,
-                            'name' => '张三三',
-                            'rule' => [
-                                'detail' => [
-                                    [
-                                        'key' => 'area',
-                                        'value' => '南区',
-                                        'formula' => 'dengyu',
-                                    ], [
-                                        'key' => 'num',
-                                        'value' => '40',
-                                        'formula' => 'dayu',
-                                    ], [
-                                        'key' => 'brand',
-                                        'value' => 'A,B,C',
-                                        'formula' => 'baohan',
-                                    ],
-                                ],
-                                'click' => [
-                                    'area',
-                                    'num',
-                                    'brand',
-                                ],
-                                'string' => '(area 并且 num) 或者 num'
-                            ],
-                            'list' => [
-                                [
-                                    'id' => 5,
-                                    'name' => '张五',
-                                    'rule' => [
-                                        'detail' => [
-                                            [
-                                                'key' => 'area',
-                                                'value' => '南区',
-                                                'formula' => 'dengyu',
-                                            ], [
-                                                'key' => 'num',
-                                                'value' => '40',
-                                                'formula' => 'dayu',
-                                            ], [
-                                                'key' => 'brand',
-                                                'value' => 'A,B,C',
-                                                'formula' => 'baohan',
-                                            ],
-                                        ],
-                                        'click' => [
-                                            'area',
-                                            'num',
-                                            'brand',
-                                        ],
-                                        'string' => '(area 并且 num) 或者 num'
-                                    ],
-                                    'list' => [
-                                        [
-                                            'id' => 6,
-                                            'name' => '李六',
-                                            'rule' => [
-                                                'detail' => [
-                                                    [
-                                                        'key' => 'area',
-                                                        'value' => '南区',
-                                                        'formula' => 'dengyu',
-                                                    ], [
-                                                        'key' => 'num',
-                                                        'value' => '40',
-                                                        'formula' => 'dayu',
-                                                    ], [
-                                                        'key' => 'brand',
-                                                        'value' => 'A,B,C',
-                                                        'formula' => 'baohan',
-                                                    ],
-                                                ],
-                                                'click' => [
-                                                    'area',
-                                                    'num',
-                                                    'brand',
-                                                ],
-                                                'string' => '(area 并且 num) 或者 num'
-                                            ],
-                                            'list' => []
-                                        ]
-                                    ]
-                                ], [
-                                    'id' => 7,
-                                    'name' => '张六',
-                                    'rule' => [
-                                        'detail' => [
-                                            [
-                                                'key' => 'area',
-                                                'value' => '南区',
-                                                'formula' => 'dengyu',
-                                            ], [
-                                                'key' => 'num',
-                                                'value' => '40',
-                                                'formula' => 'dayu',
-                                            ], [
-                                                'key' => 'brand',
-                                                'value' => 'A,B,C',
-                                                'formula' => 'baohan',
-                                            ],
-                                        ],
-                                        'click' => [
-                                            'area',
-                                            'num',
-                                            'brand',
-                                        ],
-                                        'string' => '(area 并且 num) 或者 num'
-                                    ],
-                                    'list' => [
-                                        [
-                                            'id' => 6,
-                                            'name' => '李六',
-                                            'rule' => [
-                                                'detail' => [
-                                                    [
-                                                        'key' => 'area',
-                                                        'value' => '南区',
-                                                        'formula' => 'dengyu',
-                                                    ], [
-                                                        'key' => 'num',
-                                                        'value' => '40',
-                                                        'formula' => 'dayu',
-                                                    ], [
-                                                        'key' => 'brand',
-                                                        'value' => 'A,B,C',
-                                                        'formula' => 'baohan',
-                                                    ],
-                                                ],
-                                                'click' => [
-                                                    'area',
-                                                    'num',
-                                                    'brand',
-                                                ],
-                                                'string' => '(area 并且 num) 或者 num'
-                                            ],
-                                            'list' => []
-                                        ]
-                                    ]
-                                ],
-                            ],
-                        ], [
-                            'id' => 44,
-                            'name' => '张四四',
-                            'rule' => [
-                                'detail' => [
-                                    [
-                                        'key' => 'area',
-                                        'value' => '南区',
-                                        'formula' => 'dengyu',
-                                    ], [
-                                        'key' => 'num',
-                                        'value' => '40',
-                                        'formula' => 'dayu',
-                                    ], [
-                                        'key' => 'brand',
-                                        'value' => 'A,B,C',
-                                        'formula' => 'baohan',
-                                    ],
-                                ],
-                                'click' => [
-                                    'area',
-                                    'num',
-                                    'brand',
-                                ],
-                                'string' => '(area 并且 num) 或者 num'
-                            ],
-                            'list' => [
-                                [
-                                    'id' => 55,
-                                    'name' => '张四四1',
-                                    'rule' => [
-                                        'detail' => [
-                                            [
-                                                'key' => 'area',
-                                                'value' => '南区',
-                                                'formula' => 'dengyu',
-                                            ], [
-                                                'key' => 'num',
-                                                'value' => '40',
-                                                'formula' => 'dayu',
-                                            ], [
-                                                'key' => 'brand',
-                                                'value' => 'A,B,C',
-                                                'formula' => 'baohan',
-                                            ],
-                                        ],
-                                        'click' => [
-                                            'area',
-                                            'num',
-                                            'brand',
-                                        ],
-                                        'string' => '(area 并且 num) 或者 num'
-                                    ],
-                                    'list' => [
-                                        [
-                                            'id' => 66,
-                                            'name' => '李六1',
-                                            'rule' => [
-                                                'detail' => [
-                                                    [
-                                                        'key' => 'area',
-                                                        'value' => '南区',
-                                                        'formula' => 'dengyu',
-                                                    ], [
-                                                        'key' => 'num',
-                                                        'value' => '40',
-                                                        'formula' => 'dayu',
-                                                    ], [
-                                                        'key' => 'brand',
-                                                        'value' => 'A,B,C',
-                                                        'formula' => 'baohan',
-                                                    ],
-                                                ],
-                                                'click' => [
-                                                    'area',
-                                                    'num',
-                                                    'brand',
-                                                ],
-                                                'string' => '(area 并且 num) 或者 num'
-                                            ],
-                                            'list' => [
-                                                [
-                                                    'id' => 77,
-                                                    'name' => 'li7',
-                                                    'rule' => [
-                                                        'detail' => [
-                                                            [
-                                                                'key' => 'area',
-                                                                'value' => '南区',
-                                                                'formula' => 'dengyu',
-                                                            ], [
-                                                                'key' => 'num',
-                                                                'value' => '40',
-                                                                'formula' => 'dayu',
-                                                            ], [
-                                                                'key' => 'brand',
-                                                                'value' => 'A,B,C',
-                                                                'formula' => 'baohan',
-                                                            ],
-                                                        ],
-                                                        'click' => [
-                                                            'area',
-                                                            'num',
-                                                            'brand',
-                                                        ],
-                                                        'string' => '(area 并且 num) 或者 num'
-                                                    ],
-                                                    'list' => []
-                                                ]
-                                            ]
-                                        ]
-                                    ]
-                                ], [
-                                    'id' => 77,
-                                    'name' => '张四四2',
-                                    'rule' => [
-                                        'detail' => [
-                                            [
-                                                'key' => 'area',
-                                                'value' => '南区',
-                                                'formula' => 'dengyu',
-                                            ], [
-                                                'key' => 'num',
-                                                'value' => '40',
-                                                'formula' => 'dayu',
-                                            ], [
-                                                'key' => 'brand',
-                                                'value' => 'A,B,C',
-                                                'formula' => 'baohan',
-                                            ],
-                                        ],
-                                        'click' => [
-                                            'area',
-                                            'num',
-                                            'brand',
-                                        ],
-                                        'string' => '(area 并且 num) 或者 num'
-                                    ],
-                                    'list' => [
-                                        [
-                                            'id' => 6,
-                                            'name' => '李六',
-                                            'rule' => [
-                                                'detail' => [
-                                                    [
-                                                        'key' => 'area',
-                                                        'value' => '南区',
-                                                        'formula' => 'dengyu',
-                                                    ], [
-                                                        'key' => 'num',
-                                                        'value' => '40',
-                                                        'formula' => 'dayu',
-                                                    ], [
-                                                        'key' => 'brand',
-                                                        'value' => 'A,B,C',
-                                                        'formula' => 'baohan',
-                                                    ],
-                                                ],
-                                                'click' => [
-                                                    'area',
-                                                    'num',
-                                                    'brand',
-                                                ],
-                                                'string' => '(area 并且 num) 或者 num'
-                                            ],
-                                            'list' => []
-                                        ]
-                                    ]
-                                ],
-                            ],
-                        ],
-                    ]
-                ], [
-                    'id' => 3,
-                    'name' => '李四',
-                    'rule' => [
-                        'detail' => [
-                            [
-                                'key' => 'area',
-                                'value' => '南区',
-                                'formula' => 'dengyu',
-                            ], [
-                                'key' => 'num',
-                                'value' => '40',
-                                'formula' => 'dayu',
-                            ], [
-                                'key' => 'brand',
-                                'value' => 'A,B,C',
-                                'formula' => 'baohan',
-                            ],
-                        ],
-                        'click' => [
-                            'area',
-                            'num',
-                            'brand',
-                        ],
-                        'string' => '(area 并且 num) 或者 num'
-                    ],
-                    'list' => [
-                        [
-                            'id' => 8,
-                            'name' => '李五',
-                            'rule' => [
-                                'detail' => [
-                                    [
-                                        'key' => 'area',
-                                        'value' => '南区',
-                                        'formula' => 'dengyu',
-                                    ], [
-                                        'key' => 'num',
-                                        'value' => '40',
-                                        'formula' => 'dayu',
-                                    ], [
-                                        'key' => 'brand',
-                                        'value' => 'A,B,C',
-                                        'formula' => 'baohan',
-                                    ],
-                                ],
-                                'click' => [
-                                    'area',
-                                    'num',
-                                    'brand',
-                                ],
-                                'string' => '(area 并且 num) 或者 num'
-                            ],
-                            'list' => [
-                                [
-                                    'id' => 9,
-                                    'name' => '李六',
-                                    'rule' => [
-                                        'detail' => [
-                                            [
-                                                'key' => 'area',
-                                                'value' => '南区',
-                                                'formula' => 'dengyu',
-                                            ], [
-                                                'key' => 'num',
-                                                'value' => '40',
-                                                'formula' => 'dayu',
-                                            ], [
-                                                'key' => 'brand',
-                                                'value' => 'A,B,C',
-                                                'formula' => 'baohan',
-                                            ],
-                                        ],
-                                        'click' => [
-                                            'area',
-                                            'num',
-                                            'brand',
-                                        ],
-                                        'string' => '(area 并且 num) 或者 num'
-                                    ],
-                                    'list' => [
-                                        [
-                                            'id' => 6,
-                                            'name' => '李六',
-                                            'rule' => [
-                                                'detail' => [
-                                                    [
-                                                        'key' => 'area',
-                                                        'value' => '南区',
-                                                        'formula' => 'dengyu',
-                                                    ], [
-                                                        'key' => 'num',
-                                                        'value' => '40',
-                                                        'formula' => 'dayu',
-                                                    ], [
-                                                        'key' => 'brand',
-                                                        'value' => 'A,B,C',
-                                                        'formula' => 'baohan',
-                                                    ],
-                                                ],
-                                                'click' => [
-                                                    'area',
-                                                    'num',
-                                                    'brand',
-                                                ],
-                                                'string' => '(area 并且 num) 或者 num'
-                                            ],
-                                            'list' => []
-                                        ]
-                                    ]
-                                ]
-                            ]
-                        ]
-                    ]
-                ],
-            ],
-        ];
-        file_put_contents('121.txt', json_encode($detail));
-        die;
-
-
-        Log::channel('request')->info('request', ['param' => $data]);
-
-//        $first = Oa::where('del_time', 0)->where('menu_id', $data['menu_id']);
-//        if(isset($data['type'])) $first = $first->where('type',$data['type']);
-//        $first = $first->first();
-
-//        if ($first) return [false, '该菜单oa已存在!'];
         $oa = new Oa();
 
 
@@ -739,9 +203,12 @@ class OaService extends Service
     }
 
 
-    public function oaEdit($data)
+    public function oaEdit($data,$user)
     {
-        $first = Oa::where('del_time', 0)->where('id', '<>', $data['id'])->where('menu_id', $data['menu_id']);
+
+
+        $first = Oa::where('del_time', 0)->where('menu_id', $data['menu_id']);
+        if(isset($data['id'])) $first = $first->where('id', '<>', $data['id']);
         if (isset($data['type'])) $first = $first->where('type', $data['type']);
         $first = $first->first();
 
@@ -750,39 +217,106 @@ class OaService extends Service
 
         try {
             DB::beginTransaction();
-            $oa = Oa::where('id', $data['id'])->first();
+            if(isset($data['id'])) $oa = Oa::where('id', $data['id'])->first();
+            else $oa = new Oa();
             $oa->menu_id = $data['menu_id'];
-            $oa->type = $data['type'];
+            $oa->crt_employee_id = $user['id'];
+            $oa->type = $data['type']??0;
             $oa->save();
             $id = $oa->id;
             $insert = [];
             OaSub::where('oa_id', $id)->update([
                 'del_time' => time()
             ]);
-            foreach ($data['detail'] as $v) {
-                foreach ($v['employee_list'] as $vv) {
-                    $insert[] = [
-                        'oa_id' => $id,
-                        'remark' => $v['remark'],
-                        'employee_id' => $vv['employee_id'],
-                        'sort' => $v['sort'],
-                        'type' => $v['type'],
-                        'crt_time' => time(),
-                        'upd_time' => time(),
-                        'area_id' => $vv['area_id'],
-                    ];
-                }
-            }
-            OaSub::insert($insert);
+            //处理前端数据
+            $this->dealOaData($data,$id);
             DB::commit();
         } catch (\Exception $e) {
             DB::rollBack();
-            return [false, $e->getMessage()];
+            return [false, $e->getLine().$e->getMessage()];
         }
 
         return [true, '更新成功'];
     }
 
+    public function dealOaData($data,$id){
+        $data = $data['approval'];
+        $detail = [];
+        $sort = 0;
+        foreach ($data as $v){
+            $sort++;
+            foreach ($v['children'] as $vv){
+                $detail[] = [
+                    'h5_key' => $vv['index'],
+                    'emp_id' => $vv['emp_id'],
+                    'set' => $vv['set'],
+                    'sort' => $sort,
+                ];
+            }
+        }
+        $oa_subs = [];
+        foreach ($detail as $v){
+            $oa_subs[] = [
+                'crt_time'=>time(),
+                'upd_time'=>time(),
+                'sort'=>$v['sort'],
+                'sub_id'=>-1,
+                'remark'=>'',
+                'oa_id'=>$id,
+                'type'=>1,
+                'parent_id'=>0,
+                'h5_key'=>$v['h5_key'],
+            ];
+        }
+        OaSub::insert($oa_subs);
+        $oa_sub = OaSub::where('oa_id',$id)->get()->toArray();
+        $list_key = [];
+        foreach ($oa_sub as $v){
+            $list_key[$v['h5_key']] = $v;
+        }
+        foreach ($list_key as $k=>$v){
+            if($v['sort'] == 1) continue;
+            $len = strlen($k);
+            foreach ($list_key as $kk=>$vv){
+                if(strlen($kk) == ($len-2) && substr($k,0,$len-2) == $kk){
+                    $list_key[$k]['parent_id'] = $vv['id'];
+                }
+            }
+        }
+        $employee_list = [];
+        $set_list = [];
+        foreach ($detail as $v){
+            foreach ($v['emp_id'] as $vv){
+                $employee_list[] = [
+                    'employee_id' => $vv,
+                    'oa_sub_id' => $list_key[$v['h5_key']]['id'],
+            ];
+            }
+            $n = 1;
+            foreach ($v['set'] as $vv){
+                if($vv['opera'] == '=') $v['opera'] = '==';
+                if($n > 1) $right_formula = '&&';
+                else $right_formula = '';
+                $set_list[] = [
+                    'oa_sub_id'=>$list_key[$v['h5_key']]['id'],
+                    'key'=>$vv['key'],
+                    'value'=>$vv['value'],
+                    'sort'=>$n,
+                    'formula'=>$vv['opera'],
+                    'right_formula'=>$right_formula,
+                ];
+                $n++;
+            }
+        }
+        OaSubRule::insert($set_list);
+        OaSubEmployee::insert($employee_list);
+        foreach ($list_key as $v){
+            if($v['parent_id'] > 0 ) OaSub::where('id',$v['id'])->update([
+                'parent_id' => $v['parent_id']
+            ]);
+        }
+    }
+
     public function oaDel($data)
     {
         $id = $data['id'];

+ 96 - 0
app/Service/OperationLogService.php

@@ -6,6 +6,7 @@ namespace App\Service;
 
 use App\Model\OperationLog;
 use App\Model\OperationLogDetail;
+use App\Model\SysMenu;
 use Illuminate\Support\Facades\DB;
 
 class OperationLogService extends Service
@@ -19,9 +20,104 @@ class OperationLogService extends Service
         return self::$instance;
     }
 
+
+    public function getOperationList($data){
+
+        $data = [
+            [
+                'type' => 1,
+                'user_id' => 1,
+                'user_name' => 1,
+                'crt_time' => 123456,
+                'data' => [
+                    [
+                        'key' => '金额',
+                        'old_data' => '100',
+                        'new_data' => '200',
+                    ]
+
+                ]
+            ]
+        ];
+        return [true,$data];
+    }
+
 //    public function
 
 
+    public function setOperationList($data,$user,$type=1,$menu_id=18){
+        $menu_id = $data['menu_id'];
+        $param  = isset($data['order_number']) ?  ['order_number'=>$data['order_number']]:['id'=>$data['id']];
+        $request =  request();
+        foreach ($param as $k=>$v){
+            $request->$k = $v;
+        }
+        $all = $request->all();
+        if(!isset($all['order_number']))  $request->merge($param);
+        $detail = $this->oaGetData($menu_id,$request);
+        try {
+            DB::beginTransaction();
+            $log = new OperationLog();
+            $log->user_id = $user['id'];
+            $log->menu_id = $menu_id;
+            $log->type = $type;
+            $log->save();
+            $id = $log->id;
+            $bind_data_detail = [];
+            $key_data = [];
+            //以下是对比逻辑
+            foreach ($data as $k=>$v){
+                if(isset($detail[$k])&&isset($key_data[$k])&&$detail[$k] != $v){
+                    $bind_data_detail[] = [
+                        'log_id' => $id,
+                        'parent_id' => 0,
+                        'old_data' => $v,
+                        'new_data' => $detail[$k],
+                        'title' => $key_data[$k],
+                    ];
+                }
+            }
+            OperationLogDetail::insert($bind_data_detail);
+            DB::commit();
+            return [true,''];
+        }catch (\Exception $e){
+            DB::rollBack();
+
+            return [false,$e->getLine().$e->getMessage()];
+        }
+
+
+
+
+    }
+
+    public function oaGetData($menu_id,$request)
+    {
+        $api = SysMenu::where('id',$menu_id)->value('api');
+        $path = $this->getMenu();
+        $control = '\\'.$path[$api]["controller"];
+        $act = $path[$api]["act"];
+        $new = new $control();
+        $detail = $new->$act($request);
+//        if(!isset($detail['data']['data'][0])) $detail['data']['data'][0] = $detail['data'];
+        return $detail['data']['data'][0];
+    }
+
+    public function getMenu(){
+        $app = App();
+        $routes = $app->routes->getRoutes();
+        $path = [];
+        foreach ($routes as $k => $value) {
+            if(!isset($value->action['controller'])) continue;
+            $act = explode('@',$value->action['controller']);
+            if(!isset($act[1])) continue;
+            $path[$value->uri]['act'] = $act[1];
+            $path[$value->uri]['controller'] = $act[0];
+        }
+
+        return $path;
+    }
+
     public function insertOperationLog($insert){
         try {
             DB::beginTransaction();