cqpCow 1 年間 前
コミット
9bd43e3804

+ 1 - 1
app/Http/Middleware/CheckLogin.php

@@ -48,7 +48,7 @@ class CheckLogin
         $data['depart_map'] = $return[2] ?? [];
         //权限范围内的部门
         $data['depart_range'] = $return[3] ?? [];
-        //是否有所有的部门 (为了拉 部门列表和人员列表数据
+        //是否有所有的部门 (就是 是否总公司
         $data['is_all_depart'] = $return[4] ?? 0;
 
         //写入user信息

+ 2 - 0
app/Model/Construction.php

@@ -35,11 +35,13 @@ class Construction extends Model
     public static $user = [];
     public static $search = [];
     public static $is_search = false;
+    const range_function = 'constructionRange';
 
     public function __construct(array $attributes = [])
     {
         if(! empty($attributes['userData'])) {
             self::$user = $attributes['userData'];
+            self::$user['range_function'] = self::range_function;
             self::$search = $attributes['search'] ?? [];
             self::$is_search = true;
         }

+ 2 - 0
app/Model/Product.php

@@ -25,11 +25,13 @@ class Product extends Model
     public static $user = [];
     public static $search = [];
     public static $is_search = false;
+    const range_function = 'productRange';
 
     public function __construct(array $attributes = [])
     {
         if(! empty($attributes['userData'])) {
             self::$user = $attributes['userData'];
+            self::$user['range_function'] = self::range_function;
             self::$search = $attributes['search'] ?? [];
             self::$is_search = true;
         }

+ 2 - 0
app/Model/ReturnExchangeOrder.php

@@ -39,11 +39,13 @@ class ReturnExchangeOrder extends Model
     public static $user = [];
     public static $search = [];
     public static $is_search = false;
+    const range_function = 'returnExchangeOrderRange';
 
     public function __construct(array $attributes = [])
     {
         if(! empty($attributes['userData'])) {
             self::$user = $attributes['userData'];
+            self::$user['range_function'] = self::range_function;
             self::$search = $attributes['search'];
             self::$is_search = true;
         }

+ 2 - 0
app/Model/SalesOrder.php

@@ -61,11 +61,13 @@ class SalesOrder extends Model
     public static $user = [];
     public static $search = [];
     public static $is_search = false;
+    const range_function = 'salesOrderRange';
 
     public function __construct(array $attributes = [])
     {
         if(! empty($attributes['userData'])) {
             self::$user = $attributes['userData'];
+            self::$user['range_function'] = self::range_function;
             self::$search = $attributes['search'] ?? [];
             self::$is_search = true;
         }

+ 29 - 3
app/Scopes/DepartmentScope.php

@@ -1,6 +1,8 @@
 <?php
 namespace App\Scopes;
 
+use App\Service\EmployeeService;
+use App\Service\RangeService;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Scope;
@@ -19,15 +21,39 @@ class DepartmentScope implements Scope
 
     public function apply(Builder $builder, Model $model)
     {
-        if(empty($this->search['top_depart_id'])){
+        //权限范围内的部门
+        $depart_range = $this->user['depart_range'] ?? [];
+
+        //可见范围方法
+        $range_function = $this->user['range_function'] ?? "";
+        $is_function_range = $this->hasMethod(new RangeService(),$range_function);
+
+        //确认顶级部门
+        $search_depart_id = $this->search['top_depart_id'] ?? 0; //顶级公司
+        if(empty($search_depart_id)){
             //默认进来 只显示自己公司下的 自己权限范围下的部门数据
             $top_depart_id = $this->user['depart_top'][0] ?? [];
             $top_depart_id = $top_depart_id['depart_id'] ?? 0;
         }else{
             //查询给的公司下的 自己权限范围下的部门数据
-            $top_depart_id = $this->search['top_depart_id'];
+            $top_depart_id = $search_depart_id;
         }
+        //确认顶级部门 结束  =》   $top_depart_id
+
+        //顶级部门下 权限部门内所有数据
         $builder->where('top_depart_id', $top_depart_id)
-            ->whereIn('depart_id', $this->user['depart_range']);
+            ->whereIn('depart_id', $depart_range);
+
+        $is_see = $this->search['is_see'] ?? 0; //我可见的
+        //可见范围 部门 人 过滤后返回的数据id
+        $id = [];
+        if($is_see && $is_function_range) $id = RangeService::$range_function($this->user);
+        $builder->orWhereIn('id', $id);
+    }
+
+    function hasMethod($class, $methodName)
+    {
+        $reflection = new \ReflectionClass($class);
+        return $reflection->hasMethod($methodName);
     }
 }

+ 0 - 12
app/Service/ConstructionService.php

@@ -354,18 +354,6 @@ class ConstructionService extends Service
             ->select('title','id','model_type','order_number','customer_id','customer_contact_id','install_method','install_position','sales_order_id','construction_fee','construction_time','handover_time','urgency','crt_id','crt_time','mark','state','address1','address2','introduction','service_price','storehouse_id')
             ->orderby('id', 'desc');
 
-        if($user['id'] != Employee::SPECIAL_ADMIN && empty($data['top_depart_id'])){
-            //单据中选择的签订负责协同人
-            $construction_id = ConstructionInfo::where('del_time',0)
-                ->where('employee_id',$user['id'])
-                ->select('construction_id')
-                ->get()->toArray();
-            $construction_id = array_unique(array_column($construction_id,'construction_id'));
-            //可见范围
-            $model->when(! empty($sales_order_id), function ($query) use ($construction_id) {
-                return $query->orWhereIn('id', $construction_id);
-            });
-        }
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
         if(! empty($data['model_type'])) $model->where('model_type',$data['model_type']);
         $list = $this->limit($model,'',$data);

+ 1 - 2
app/Service/EmployeeService.php

@@ -655,10 +655,9 @@ class EmployeeService extends Service
             ->whereIn('id', array_unique(array_column($list,'basic_type_id')))
             ->pluck('title','id')->toArray();
 
-        $is_main = EmployeeService::isMain($user['id']);
         foreach ($list as $key => $value){
             $list[$key]['basic_type_title'] = $basic[$value['basic_type_id']] ?? '';
-            $list[$key]['is_show_basic_type'] = $is_main;
+            $list[$key]['is_show_basic_type'] = $user['is_all_depart'];
         }
 
         return $list;

+ 16 - 30
app/Service/ProductService.php

@@ -471,17 +471,14 @@ class ProductService extends Service
             ->pluck('title','id')
             ->toArray();
         //是否总公司
-        $is_main = EmployeeService::isMain($user['id']);
+        $is_main = $user['is_all_depart'];
+        $top_depart = $user['depart_top'][0] ?? [];
+        $customer['is_edit'] = $customer['top_depart_id'] == $top_depart['depart_id'] ? 1 : 0;
         $customer['product_price'] = [];
         //展示金额
         foreach ($detail as $value){
-            if(! $is_main){
-                $top_depart = $user['depart_top'][0] ?? [];
-                if($top_depart['basic_type_id'] != $value['basic_type_id']){
-                    $is_show = 0;
-                }else{
-                    $is_show = 1;
-                }
+            if(! $is_main && ($top_depart['basic_type_id'] != $value['basic_type_id'])) {
+                $is_show = 0;
             }else{
                 $is_show = 1;
             }
@@ -557,21 +554,6 @@ class ProductService extends Service
             ->select('title','id','product_category_id','code','size','unit','bar_code','retail_price','cost','state','crt_id','crt_time','mark','depart_id','top_depart_id')
             ->orderby('id', 'desc');
 
-        if($user['id'] != Employee::SPECIAL_ADMIN ) {
-            $user_id = $user['id'];
-            $depart_id = $user['depart_range'];
-            $product_id = ProductRange::where('del_time',0)
-                ->where(function ($query) use($user_id, $depart_id) {
-                    $query->where('employee_id',$user_id)
-                        ->orWhereIn('depart_id', $depart_id);
-                })->select('product_id')->get()
-                ->toArray();
-            $product_id = array_unique(array_column($product_id,'product_id'));
-            //可见范围
-            $model->when(! empty($sales_order_id), function ($query) use ($product_id) {
-                return $query->orWhereIn('id', $product_id);
-            });
-        }
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
         if(isset($data['state'])) $model->where('state', $data['state']);
 
@@ -641,23 +623,27 @@ class ProductService extends Service
             ->toArray();
         $detail_map = [];
         foreach ($detail as $value){
-            $detail_map[$value['product_id']] = $value;
+            $detail_map[$value['product_id']][] = $value;
         }
 
         //是否总公司
-        $is_main = EmployeeService::isMain($user['id']);
+        $is_main = $user['is_all_depart'];
         $top_depart = $user['depart_top'][0] ?? [];
         foreach ($data['data'] as $key => $value){
             $tmp = [];
             if(isset($detail_map[$value['id']])){
                 $d = $detail_map[$value['id']];
                 foreach ($d as $v){
-                    //不是总公司 不是公司设置的金额 就不展示
-                    if(! $is_main && ($top_depart['basic_type_id'] != $v['basic_type_id'])) continue;
+                    if(! $is_main && ($top_depart['basic_type_id'] != $v['basic_type_id'])) {
+                        $is_show = 0;
+                    }else{
+                        $is_show = 1;
+                    }
                     $tmp[] = [
-                        'basic_type_id' => $value['basic_type_id'],
-                        'basic_type_title' => $basic_map[$value['basic_type_id']] ?? '',
-                        'price' => $value['price'],
+                        'basic_type_id' => $v['basic_type_id'],
+                        'basic_type_title' => $basic_map[$v['basic_type_id']] ?? '',
+                        'price' => $v['price'],
+                        'is_show' => $is_show
                     ];
                 }
             }

+ 68 - 0
app/Service/RangeService.php

@@ -0,0 +1,68 @@
+<?php
+
+namespace App\Service;
+
+use App\Model\ConstructionInfo;
+use App\Model\ProductRange;
+use App\Model\ReturnExchangeOrderRange;
+use App\Model\SalesOrderInfo;
+use App\Model\SalesOrderRange;
+
+class RangeService extends Service
+{
+    //获取产品可见数据
+    public static function productRange($user){
+        $user_id = $user['id'];
+        $depart_id = $user['depart_range'];
+        $product_id = ProductRange::where('del_time',0)
+            ->where(function ($query) use($user_id, $depart_id) {
+                $query->where('employee_id',$user_id)
+                    ->orWhereIn('depart_id', $depart_id);
+            })->select('product_id')->get()
+            ->toArray();
+        return array_unique(array_column($product_id,'product_id'));
+    }
+
+    //获取合同可见数据
+    public static function salesOrderRange($user){
+        //单据中选择的签订负责协同人
+        $sales_order_id = SalesOrderInfo::where('del_time',0)
+            ->where('employee_id',$user['id'])
+            ->select('sales_order_id')
+            ->get()->toArray();
+        $sales_order_id = array_unique(array_column($sales_order_id,'sales_order_id'));
+        //指派后
+        $user_id = $user['id'];
+        $depart_id = $user['depart_range'];
+        $sales_order_id2 = SalesOrderRange::where('del_time',0)
+            ->where(function ($query) use($user_id, $depart_id) {
+                $query->where('employee_id',$user_id)
+                    ->orWhereIn('depart_id', $depart_id);
+            })->select('sales_order_id')->get()
+            ->toArray();
+        return array_unique(array_merge_recursive($sales_order_id,array_column($sales_order_id2,'sales_order_id')));
+    }
+
+    //获取施工单可见数据
+    public static function constructionRange($user){
+        //单据中选择的签订负责协同人
+        $construction_id = ConstructionInfo::where('del_time',0)
+            ->where('employee_id',$user['id'])
+            ->select('construction_id')
+            ->get()->toArray();
+        return array_unique(array_column($construction_id,'construction_id'));
+    }
+
+    //获取退换货单可见数据
+    public static function returnExchangeOrderRange($user){
+        $user_id = $user['id'];
+        $depart_id = $user['depart_range'];
+        $return_exchange_id = ReturnExchangeOrderRange::where('del_time',0)
+            ->where(function ($query) use($user_id, $depart_id) {
+                $query->where('employee_id',$user_id)
+                    ->orWhereIn('depart_id', $depart_id);
+            })->select('return_exchange_id')->get()
+            ->toArray();
+        return array_unique(array_column($return_exchange_id,'return_exchange_id'));
+    }
+}

+ 0 - 13
app/Service/ReturnExchangeOrderService.php

@@ -318,19 +318,6 @@ class ReturnExchangeOrderService extends Service
             ->select('id','order_number','sales_order_id','difference_amount','state','crt_time','crt_id','mark','model_type','storehouse_id')
             ->orderby('id', 'desc');
 
-        //getALL传入后无视设置范围
-        if(empty($data['getAll']) && $user['id'] != Employee::SPECIAL_ADMIN) {
-            $user_id = $user['id'];
-            $depart_id = $user['depart_range'];
-            $return_exchange_id = ReturnExchangeOrderRange::where('del_time',0)
-                ->where(function ($query) use($user_id, $depart_id) {
-                    $query->where('employee_id',$user_id)
-                        ->orWhereIn('depart_id', $depart_id);
-                })->select('return_exchange_id')->get()
-                ->toArray();
-            $model->whereIn('id',array_unique(array_column($return_exchange_id,'return_exchange_id')));
-        }
-
         if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
         if(isset($data['state'])) $model->where('state',$data['state']);
         if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {

+ 0 - 23
app/Service/SalesOrderService.php

@@ -435,29 +435,6 @@ class SalesOrderService extends Service
             ->select('title','id','sales_order_type','model_type','order_number','selling_price','vin_no','car_type','order_type','deal_type','customer_id','sign_time','contract_state','crt_id','crt_time','mark','product_total','rate','construction_time','handover_time','expire_time','other_fee','discount_fee','contract_fee','contract_type','pay_way','send_state','logistics_company','logistics_number','car_type','year','mileage','color','original_set','processing','state')
             ->orderby('id', 'desc');
 
-        if($user['id'] != Employee::SPECIAL_ADMIN && empty($data['top_depart_id'])){
-            //单据中选择的签订负责协同人
-            $sales_order_id = SalesOrderInfo::where('del_time',0)
-                ->where('employee_id',$user['id'])
-                ->select('sales_order_id')
-                ->get()->toArray();
-            $sales_order_id = array_unique(array_column($sales_order_id,'sales_order_id'));
-            //指派后
-            $user_id = $user['id'];
-            $depart_id = $user['depart_range'];
-            $sales_order_id2 = SalesOrderRange::where('del_time',0)
-                ->where(function ($query) use($user_id, $depart_id) {
-                    $query->where('employee_id',$user_id)
-                        ->orWhereIn('depart_id', $depart_id);
-                })->select('sales_order_id')->get()
-                ->toArray();
-            $sales_order_id = array_unique(array_merge_recursive($sales_order_id,array_column($sales_order_id2,'sales_order_id')));
-            //可见范围
-            $model->when(! empty($sales_order_id), function ($query) use ($sales_order_id) {
-                return $query->orWhereIn('id', $sales_order_id);
-            });
-        }
-
         if(! empty($data['sales_order_type'])) $model->where('sales_order_type',$data['sales_order_type']);
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
         if(! empty($data['model_type'])) $model->where('model_type',$data['model_type']);