cqpCow 1 年之前
父節點
當前提交
2bba1bff0a
共有 4 個文件被更改,包括 1365 次插入30 次删除
  1. 158 29
      app/Http/Controllers/Api/OaController.php
  2. 1 1
      app/Service/CheckService.php
  3. 1194 0
      app/Service/OaService.php
  4. 12 0
      routes/api.php

+ 158 - 29
app/Http/Controllers/Api/OaController.php

@@ -3,7 +3,7 @@
 namespace App\Http\Controllers\Api;
 
 
-use App\Service\Oa\ExcelService;
+use App\Service\OaService;
 use Illuminate\Http\Request;
 
 
@@ -18,7 +18,7 @@ class OaController extends BaseController
     {
 
 
-        $service = new ExcelService();
+        $service = new OaService();
         $userData = $request->userData->toArray();
         list($status,$data) = $service->oaList($request->all());
 
@@ -34,8 +34,8 @@ class OaController extends BaseController
     {
 
 
-        $service = new ExcelService();
-        $user = $request->userData->toArray();
+        $service = new OaService();
+        $user = $request->get('auth');
         list($status,$data) = $service->oaDetail($request->all());
 
         if($status){
@@ -46,12 +46,48 @@ class OaController extends BaseController
 
     }
 
+    public function oaUserDetail(Request $request){
+        $service = new OaService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->oaUserDetail($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function oaParam(Request $request){
+        $service = new OaService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->oaParam($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function oaFormula(Request $request){
+        $service = new OaService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->oaFormula($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
     public function oaAdd(Request $request)
     {
 
 
-        $service = new ExcelService();
-        $user = $request->userData->toArray();
+        $service = new OaService();
+        $user = $request->get('auth');
         list($status,$data) = $service->oaAdd($request->all());
 
         if($status){
@@ -66,8 +102,8 @@ class OaController extends BaseController
     {
 
 
-        $service = new ExcelService();
-        $user = $request->userData->toArray();
+        $service = new OaService();
+        $user = $request->get('auth');
         list($status,$data) = $service->oaEdit($request->all());
 
         if($status){
@@ -82,8 +118,8 @@ class OaController extends BaseController
     {
 
 
-        $service = new ExcelService();
-        $user = $request->userData->toArray();
+        $service = new OaService();
+        $user = $request->get('auth');
         list($status,$data) = $service->oaDel($request->all());
 
         if($status){
@@ -99,12 +135,12 @@ class OaController extends BaseController
     {
 
 
-        $service = new ExcelService();
-        $user = $request->userData->toArray();
+        $service = new OaService();
+        $user = $request->get('auth');
         list($status,$data) = $service->createOaOrder($request->all());
 
         if($status){
-            return $this->json_return($status,'',$data);
+            return $this->json_return(200,'',$data);
         }else{
             return $this->json_return(400,$data);
         }
@@ -113,13 +149,14 @@ class OaController extends BaseController
 
 
 
-    public function oaOrderList(Request $request)
+
+    public function oaOrderDetail(Request $request)
     {
 
 
-        $service = new ExcelService();
+        $service = new OaService();
         $user = $request->userData->toArray();
-        list($status,$data) = $service->oaOrderList($request->all());
+        list($status,$data) = $service->oaOrderDetail($request->all(),$user);
 
         if($status){
             return $this->json_return(200,'',$data);
@@ -128,13 +165,12 @@ class OaController extends BaseController
         }
 
     }
-    public function oaOrderDetail(Request $request)
+    public function oaCheck(Request $request)
     {
 
-
-        $service = new ExcelService();
+        $service = new OaService();
         $user = $request->userData->toArray();
-        list($status,$data) = $service->oaOrderDetail($request->all(),$user);
+        list($status,$data) = $service->oaCheck($request->all(),$user,$request);
 
         if($status){
             return $this->json_return(200,'',$data);
@@ -143,12 +179,14 @@ class OaController extends BaseController
         }
 
     }
-    public function oaCheck(Request $request)
+
+    public function oaSubType(Request $request)
     {
 
-        $service = new ExcelService();
-        $user = $request->userData->toArray();
-        list($status,$data) = $service->oaCheck($request->all(),$user);
+
+        $service = new OaService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->oaSubType($request->all());
 
         if($status){
             return $this->json_return(200,'',$data);
@@ -158,26 +196,117 @@ class OaController extends BaseController
 
     }
 
-    public function oaSubType(Request $request)
-    {
+    public function oaGetData(Request $request){
 
+        $service = new OaService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->oaGetData($request);
 
-        $service = new ExcelService();
-        $user = $request->userData->toArray();
-        list($status,$data) = $service->oaSubType($request->all());
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+
+
+    public function oaOrderState(Request $request){
+
+        $service = new OaService();
+        $user = $request->userData;
+        list($status,$data) = $service->oaOrderState($request->all(),$user);
 
         if($status){
             return $this->json_return(200,'',$data);
         }else{
             return $this->json_return(201,$data);
         }
+    }
+
+
+
 
+    public function oaOrderList(Request $request){
+
+        $service = new OaService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->oaOrderList($request);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
     }
 
 
+    public function checkAllOver(Request $request){
+
+        $service = new OaService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->checkAllOver($request);
 
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+
+
+    public function oaCheckMove(Request $request){
+
+        $service = new OaService();
+        $user = $request->userData;
+        list($status,$data) = $service->oaCheckMove($request,$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
 
 
+    public function oaSubUserDetail(Request $request){
+
+        $service = new OaService();
+        list($status,$data) = $service->oaSubUserDetail($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function oaSubRemark(Request $request){
+
+        $service = new OaService();
+        list($status,$data) = $service->oaSubRemark($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+
+    public function oaGetTeamDetail(Request $request){
+
+        $service = new OaService();
+        list($status,$data) = $service->oaGetTeamDetail($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
 
 
 

+ 1 - 1
app/Service/CheckService.php

@@ -22,7 +22,7 @@ use App\Model\SalesOrderProductInfo;
 use App\Model\SeeRange;
 use App\Model\Storehouse;
 use App\Model\Supplier;
-use App\Service\Oa\OaService;
+use App\Service\OaService;
 use Illuminate\Support\Facades\DB;
 
 class CheckService extends Service

+ 1194 - 0
app/Service/OaService.php

@@ -0,0 +1,1194 @@
+<?php
+
+namespace App\Service;
+
+
+use App\Model\BasicRollFilm;
+use App\Model\Construction;
+use App\Model\Employee;
+use App\Model\EmployeeDepartPermission;
+use App\Model\EmployeeTeamPermission;
+use App\Model\Oa;
+use App\Model\OaOrder;
+use App\Model\OaOrderSub;
+use App\Model\OaOrderSubEmployee;
+use App\Model\OaSub;
+use App\Model\OaSubRule;
+use App\Model\RollFilm;
+use App\Model\RollFilmCombine;
+use App\Model\RollFilmCompany;
+use App\Model\SysMenu;
+use App\Model\Team;
+use Illuminate\Support\Facades\App;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Route;
+
+/**
+ * bom相关
+ * @package App\Models
+ */
+class OaService extends Service
+{
+
+    public function oaList($data)
+    {
+
+        $list = 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')
+            ->where('o.del_time', 0);
+
+        $list = $this->limit($list, '', $data);
+
+
+        return [true, $list];
+
+    }
+
+
+    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];
+
+    }
+
+    public function oaUserDetail($data)
+    {
+
+        $detail = [
+            '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'
+        ];
+        return [true, $detail];
+    }
+
+    public function oaParam($data)
+    {
+        $detail = [
+            [
+                'key' => 'area',
+                'value' => '地区',
+            ], [
+                'key' => 'num',
+                'value' => '数量',
+            ], [
+                'key' => 'brand',
+                'value' => '品牌',
+            ],
+        ];
+        return [true, $detail];
+    }
+
+    public function oaFormula($data)
+    {
+        $detail = [
+            [
+                'key' => 'dengyu',
+                'value' => '等于',
+            ], [
+                'key' => 'dayu',
+                'value' => '大于',
+            ], [
+                'key' => 'baohan',
+                'value' => '包含',
+            ],
+        ];
+        return [true, $detail];
+    }
+
+    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();
+
+
+        try {
+            DB::beginTransaction();
+            $oa->menu_id = $data['menu_id'];
+            $oa->type = $data['type'];
+            $oa->save();
+            $id = $oa->id;
+            $insert = [];
+            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);
+            DB::commit();
+        } catch (\Exception $e) {
+            DB::rollBack();
+            return [false, $e->getLine() . ':' . $e->getMessage()];
+        }
+
+        return [true, '保存成功!'];
+
+    }
+
+
+    public function oaEdit($data)
+    {
+        $first = Oa::where('del_time', 0)->where('id', '<>', $data['id'])->where('menu_id', $data['menu_id']);
+        if (isset($data['type'])) $first = $first->where('type', $data['type']);
+        $first = $first->first();
+
+        if ($first) return [false, '该菜单oa已存在!'];
+
+
+        try {
+            DB::beginTransaction();
+            $oa = Oa::where('id', $data['id'])->first();
+            $oa->menu_id = $data['menu_id'];
+            $oa->type = $data['type'];
+            $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);
+            DB::commit();
+        } catch (\Exception $e) {
+            DB::rollBack();
+            return [false, $e->getMessage()];
+        }
+
+        return [true, '更新成功'];
+    }
+
+    public function oaDel($data)
+    {
+        $id = $data['id'];
+        Oa::where('id', $id)->update([
+            'del_time' => time(),
+        ]);
+
+        OaSub::where('oa_id', $id)->update([
+            'del_time' => time(),
+        ]);
+
+        return [true, '删除成功'];
+    }
+
+    public function oaSubType($data)
+    {
+        $service = new CheckService();
+        $list = $service->map;
+
+        $return = [];
+        foreach ($list as $k => $v) {
+            $return[] = [
+                'id' => $k,
+                'title' => $v,
+            ];
+        }
+
+        return [true, $return];
+    }
+
+
+    public function createOaOrder($data)
+    {
+
+//        $crt_id = request()->userData->id;
+        Log::channel('request')->info('request', ['param' => $data]);
+        if(!isset($data['order_number'])) $data['order_number'] = $data['order_no'];
+        $orderObject = $data['order_number'];
+        $menu_id = $data['menu_id'];
+        $order_no = $data['order_number'];
+        $type = isset($data['opt_case']) ? $data['opt_case'] : 0;
+//        $this->returnOa($order_no,1,$type);
+//        return [200,''];
+        $list = Oa::from('oa as o')
+            ->leftJoin('oa_sub as os', 'os.oa_id', 'o.id')
+            ->select('os.sort', 'os.type', 'os.sub_id')
+            ->where('o.menu_id', $menu_id);
+        if (!empty($type)) $list = $list->where('os.sort', 1);
+        $list = $list->orderBy('os.sort')
+            ->get()->toArray();
+        if(empty($list)) {
+            $this->returnOa($order_no,1,$type);
+            return [200,''];
+        }
+        try {
+            DB::beginTransaction();
+
+            list($employee_ids,$oa_sub_id) = $this->oaCommon($menu_id,['order_number'=>$orderObject],1);
+            if(empty($employee_ids)){
+                $this->returnOa($order_no,1,$type);
+                DB::commit();
+                return [true,'审核成功'];
+            }
+            $order = new OaOrder();
+            $order->menu_id = $menu_id;
+            $order->order_no = $order_no;
+            $order->opt_case = $type;
+            $order->save();
+            $id = $order->id;
+
+            $oa_order_sub = new OaOrderSub();
+            $oa_order_sub->oa_order_id = $id;
+            $oa_order_sub->sort = 1;
+            $oa_order_sub->remark = '';
+            $oa_order_sub->type = 1;
+            $oa_order_sub->oa_sub_id = $oa_sub_id;
+            $oa_order_sub->save();
+            $oa_order_sub_id = $oa_order_sub->id;
+
+            $insert = [];
+            foreach ($employee_ids as $employee_id){
+                $insert[] = [
+                    'oa_order_id' => $id,
+                    'oa_order_sub_id' => $oa_order_sub_id,
+                    'employee_id' => $employee_id,
+                ];
+            }
+            OaOrderSubEmployee::insert($insert);
+            DB::commit();
+            return [true, '']; //success
+        } catch (\Exception $e) {
+            DB::rollBack();
+            $this->returnOa($order_no,2,$type);
+            return [false, $e->getLine().':'.$e->getMessage()];
+        }
+
+
+    }
+
+
+    public function oaCommon($menu_id, $param, $sort = 1,$parent_id = 0)
+    {
+        $request =  request();
+        foreach ($param as $k=>$v){
+            $request->$k = $v;
+        }
+        $all = $request->all();
+        if(!isset($all['order_number']))  $request->merge($param);
+//        $request->merge($param);
+        $detail = $this->oaGetData($menu_id,$request);
+        $oa_id = Oa::where('menu_id',$menu_id)->value('id');
+        $parent_ids = [$parent_id,0];
+//        var_dump($parent_ids);
+        if($sort>2) {
+            $sorts = $sort - 1;
+            $oa_sub_ids = OaSub::where('sort','<',$sorts)->wherein('parent_id',$parent_ids)->pluck('id')->toArray();
+//            var_dump($oa_sub_ids);die;
+            $parent_ids = array_merge($parent_ids,$oa_sub_ids);
+        }
+        $list = OaSub::where('oa_id',$oa_id)->where('sort',$sort)->wherein('parent_id',$parent_ids);
+        $list = $list->select('*')->get()->toArray();
+//        dd($list);
+        if(empty($list)) return [[],''];
+        $oa_sub_ids = [];
+        $oa_sub_key = [];
+        foreach ($list as $v){
+            $oa_sub_ids[] = $v['id'];
+            $oa_sub_key[$v['id']] = $v;
+            $rule_key_list[$v['id']] = [];
+        }
+        $rule_list = OaSubRule::wherein('oa_sub_id',$oa_sub_ids)->select('*')->get()->toArray();
+
+        foreach ($rule_list as $v){
+            $rule_key_list[$v['oa_sub_id']][] = $v;
+        }
+
+        //规则开始判断
+        $employee_ids = [];
+        $oa_sub_id = 0;
+        foreach ($rule_key_list as $k=>$v){
+
+            $status = $this->formulaRule($v,$detail);
+            if($status){
+                if($oa_sub_key[$k]['type'] == 2){
+                    $employee_ids = EmployeeTeamPermission::where('team_id',$oa_sub_key[$k]['sub_id'])->pluck('employee_id')->toArray();
+                }else{
+                    $employee_ids[] = [$oa_sub_key[$k]['sub_id']];
+                }
+                $oa_sub_id = $k;
+                continue;
+            }
+        }
+        return [$employee_ids,$oa_sub_id];
+    }
+
+    public function formulaRule($params,$detail){
+        $rule = '';
+//        dd($params);
+        if(empty($params)) return true;
+        foreach ($params as $param){
+            if(!$param['key']) continue;
+            if(!empty($param['right_formula'])) $rule .= ' '.$param['right_formula'].' ';
+            $rule .= '"'.$detail[$param['key']].'"'.' '.$param['formula'] .' '.'"'.$param['value'].'"';
+
+        }
+//        dd($rule);
+        if(empty($rule)) return true;
+//        var_dump($rule);
+        if(eval("return  $rule;")) {
+//            var_dump($rule);die;
+            return true;
+        }
+        else return false;
+    }
+
+
+    public function oaCheck($data, $user)
+    {
+        $user_id = $user['id'];
+//        $user_id = '482';
+        $id = $data['id'];
+        $state = $data['state'];
+        if($state == 0) $state = 2;
+        $remark = $data['remark'];
+        $detail = OaOrderSub::from('oa_order_sub as s')
+            ->leftJoin('oa_order_sub_employee as e','e.oa_order_sub_id','s.id')
+            ->where('e.employee_id',$user_id)->where('s.state',0)
+            ->where('s.id',$id)
+            ->select('s.oa_order_id','sort','oa_sub_id')->first();
+        if(empty($detail)) return [false,'没有审核权限'];
+        $detail = $detail->toArray();
+        $oaOrder = OaOrder::where('id',$detail['oa_order_id'])->first();
+        try {
+            DB::beginTransaction();
+            switch ($state) {
+                case 1:
+                    $sort = $detail['sort'] + 1;
+                    list($employee_ids,$oa_sub_id) = $this->oaCommon($oaOrder->menu_id, ['order_number' => $oaOrder->order_no], $sort,$detail['oa_sub_id']);
+//                    var_dump($employee_ids);
+//                    var_dump($oa_sub_id);die;
+                    if (empty($employee_ids)) {
+                        $oaOrder->state = 2;
+                        $oaOrder->save();
+                        $this->returnOa($oaOrder->order_no, 1, $oaOrder->opt_case);
+                    } else {
+                        $oaOrder->state = 1;
+                        $oaOrder->save();
+                        $oa_order_sub = new OaOrderSub();
+                        $oa_order_sub->oa_order_id = $oaOrder->id;
+                        $oa_order_sub->sort = $sort;
+                        $oa_order_sub->remark = '';
+                        $oa_order_sub->type = 1;
+                        $oa_order_sub->oa_sub_id = $oa_sub_id;
+                        $oa_order_sub->save();
+                        $oa_order_sub_id = $oa_order_sub->id;
+
+                        $insert = [];
+                        foreach ($employee_ids as $employee_id) {
+                            $insert[] = [
+                                'oa_order_id' => $oaOrder->id,
+                                'oa_order_sub_id' => $oa_order_sub_id,
+                                'employee_id' => $employee_id,
+                            ];
+                        }
+                        OaOrderSubEmployee::insert($insert);
+                    }
+                    break;
+                case 2:
+
+                    if ($detail['sort'] == 1) {
+                        $oaOrder->state = 3;
+                        $oaOrder->save();
+                        $this->returnOa($oaOrder->order_no, 2, $oaOrder->opt_case);
+                    }
+                    OaOrderSub::where('sort', ($detail['sort'] - 1))->where('oa_order_id', $oaOrder->id)->update([
+                        'state' => 0,
+                        'remark' => $remark,
+                    ]);
+                    break;
+            }
+            OaOrderSub::where('id', $id)->update([
+                'state' => $state,
+                'remark' => $remark,
+            ]);
+            DB::commit();
+            return [true,'操作成功!'];
+        } catch (\Exception $e) {
+            DB::rollBack();
+            return [false, $e->getLine().':'.$e->getMessage()];
+        }
+    }
+
+
+    public function returnOa($order_no,$type,$opt_case){
+        $service = new CheckService();
+        $service->createRecordAndInventory([
+            'order_number' => $order_no,
+            'type' => $type,
+            'opt_case' => $opt_case,
+        ]);
+    }
+
+
+    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 oaOrderList($data){
+        $order_no = $data['order_no'];
+        $menu_id = $data['menu_id'];
+        $oa = OaOrder::where('order_no',$order_no)->where('menu_id',$menu_id)->first();
+        if(empty($oa)) return [false,'审核不存在'];
+        $list = OaOrderSub::where('oa_order_id',$oa->id)->orderBy('sort','asc')->select('*')->get()->toArray();
+        return [true,$list];
+    }
+
+
+    public function oaOrderState($data,$user){
+        $user_id = $user->id;
+        $order_no = $data['order_no'];
+        $menu_id = $data['menu_id'];
+        $detail = OaOrder::where('order_no',$order_no)->orderBy('id','desc')->where('menu_id',$menu_id)->first();
+        if(empty($detail)) return [false,'审核不存在'];
+        if($detail->state == 2) return [true,['state'=>0]];
+        $oa_detail = OaOrderSubEmployee::where('employee_id',$user_id)->where('oa_order_id',$detail->id)->pluck('oa_order_sub_id')->toArray();
+        if(empty($oa_detail)) return [true ,['state'=>0]];
+        $state = OaOrderSub::wherein('id',$oa_detail)->where('state','<>',2)->orderBy('sort','desc')->first();
+        if(in_array($state->state,[0,2])) return [true,['state'=> 1,'id'=>$state->id]];
+
+        return [true,['state'=> 0]];
+
+
+    }
+
+    public function checkAllOver($data){
+        $order_no = $data['order_number'];
+        $menu_id = $data['menu_id'];
+        $op_case = $data['opt_case'];
+//        $oaOrder = OaOrder::where('order_no',$order_no)->first();
+//        $id = OaOrderSub::where('oa_order_id',$oaOrder->id)->orderBy('id','desc')->value('id');
+//        OaOrderSub::where('id',$id)->update([
+//            'state' => 1
+//        ]);
+//        $oaOrder->state = 1;
+//        $oaOrder->save();
+        $this->returnOa($order_no,3,$op_case);
+        return [true,'弃审成功'];
+
+    }
+
+
+    public function oaCheckMove($data,$user_id){
+        $id = $data['id'];
+        $employee_id = $data['employee_id'];
+        if(empty($employee_id)) return [false,'用户不存在'];
+        $oaOrderSub = OaOrderSub::where('id',$id)->first();
+        OaOrderSubEmployee::where('oa_order_sub_id',$oaOrderSub->id)->delete();
+        $add = [
+            'oa_order_id' => $oaOrderSub->oa_order_id,
+            'oa_order_sub_id' => $oaOrderSub->id,
+            'employee_id' => $employee_id
+        ];
+        $oaOrder = OaOrder::where('id',$oaOrderSub->oa_order_id)->first();
+        OaOrderSubEmployee::insert($add);
+        Construction::where('order_number',$oaOrder->order_no)->update([
+            'is_transfer' => 1
+        ]);
+//        $this->returnOa($order_no,3,$op_case);
+        return [true,'转签成功'];
+
+    }
+    public function oaSubUserDetail($data){
+        $order_no = $data['order_no'];
+        $first = OaOrder::where('order_no',$order_no)->first();
+        if(empty($first)) return [true,[]];
+        $oa_order_id = $first->id;
+        $oa_order_sub_id = OaOrderSub::where('oa_order_id',$oa_order_id)->orderBy('sort','desc')->value('id');
+        $employee_list = Employee::pluck('emp_name','id')->toArray();
+        $oa_order_sub_employee_ids = OaOrderSubEmployee::where('oa_order_sub_id',$oa_order_sub_id)->pluck('employee_id')->toArray();
+        $list = [];
+        foreach ($oa_order_sub_employee_ids as $v){
+            $list[] = $employee_list[$v];
+        }
+//        $this->returnOa($order_no,3,$op_case);
+        return [true,$list];
+
+    }
+
+    public function oaGetTeamDetail($data){
+        $order_no = $data['order_no'];
+        $oa_order_id = OaOrder::where('order_no',$order_no)->pluck('id')->toArray();
+        if(empty($oa_order_id)) return [true,[]];
+//        $oa_order_id = $first->id;
+        $list = OaOrderSub::wherein('oa_order_id',$oa_order_id)->select('*')->orderBy('id','asc')->get()->toArray();
+        $team_key_list = Team::pluck('title','id')->toArray();
+        $oa_sub_ids = [];
+        foreach ($list as $v){
+            $oa_sub_ids[] = $v['oa_sub_id'];
+        }
+        $team_ids = OaSub::wherein('id',$oa_sub_ids)->pluck('sub_id','id')->toArray();
+        $return = [];
+        foreach ($list as $v){
+            $return[] = [
+                'sort' => $v['sort'],
+                'team' => $team_key_list[$team_ids[$v['oa_sub_id']]],
+                'remark' => $v['remark']?? '',
+                'state' => $v['state'],
+            ];
+        }
+//        $this->returnOa($order_no,3,$op_case);
+        return [true,$return];
+
+    }
+
+    public function oaSubRemark($data){
+        $order_no = $data['order_no'];
+        $first = OaOrder::where('del_time',0)->where('order_no',$order_no)->orderBy('id','desc')->first();
+        if(empty($first)) return [true,[]];
+        $oa_order_id = $first->id;
+        $remark = OaOrderSub::where('oa_order_id',$oa_order_id)->orderBy('sort','desc')->value('remark');
+
+//        $this->returnOa($order_no,3,$op_case);
+        return [true,$remark];
+
+    }
+}

+ 12 - 0
routes/api.php

@@ -24,6 +24,18 @@ Route::any('getHeaderWord', 'Api\HeaderWordController@getHeaderWord');
 Route::any('uploadFiles/{file_name}', 'Api\FileUploadController@getFile');
 
 Route::group(['middleware'=> ['checkLogin']],function ($route){
+    //oa
+    $route->any('oaGetData', 'Api\OaController@oaGetData');
+    $route->any('createOaOrder', 'Api\OaController@createOaOrder');
+    $route->any('oaCheck', 'Api\OaController@oaCheck');
+    $route->any('oaOrderList', 'Api\OaController@oaOrderList');
+    $route->any('oaOrderState', 'Api\OaController@oaOrderState');
+    $route->any('oaGetTeamDetail', 'Api\OaController@oaGetTeamDetail');
+    $route->any('checkAllOver', 'Api\OaController@checkAllOver');
+    $route->any('oaCheckMove', 'Api\OaController@oaCheckMove');
+    $route->any('oaSubUserDetail', 'Api\OaController@oaSubUserDetail');
+    $route->any('oaSubRemark', 'Api\OaController@oaSubRemark');
+
     $route->any('getHeaderSetting', 'Api\HeaderWordController@getHeaderSettings');
     $route->any('excelExport', 'Api\ExcelController@excelExport');
     $route->any('HeaderSettingsAdd', 'Api\HeaderWordController@add');