cqpCow 1 жил өмнө
parent
commit
fa050661c4

+ 4 - 3
app/Http/Controllers/Api/BasicTypeController.php

@@ -11,7 +11,7 @@ class BasicTypeController extends BaseController
     {
         $service = new BasicTypeService();
         $userData = $request->userData->toArray();
-        list($status,$data) = $service->basicTypeAdd($request->all());
+        list($status,$data) = $service->basicTypeAdd($request->all(),$userData);
 
         if($status){
             return $this->json_return(200,'',$data);
@@ -24,7 +24,7 @@ class BasicTypeController extends BaseController
     {
         $service = new BasicTypeService();
         $userData = $request->userData->toArray();
-        list($status,$data) = $service->basicTypeEdit($request->all());
+        list($status,$data) = $service->basicTypeEdit($request->all(),$userData);
 
         if($status){
             return $this->json_return(200,'',$data);
@@ -49,7 +49,8 @@ class BasicTypeController extends BaseController
     public function basicTypeList(Request $request)
     {
         $service = new BasicTypeService();
-        list($status,$data) = $service->basicTypeList($request->all());
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->basicTypeList($request->all(),$userData);
 
         if($status){
             return $this->json_return(200,'',$data);

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

@@ -64,7 +64,7 @@ class EmployeeController extends BaseController
     {
         $service = new EmployeeService();
         $user = $request->userData->toArray();
-        list($status,$data) = $service->roleEdit($request->all());
+        list($status,$data) = $service->roleEdit($request->all(),$user);
 
         if($status){
             return $this->json_return(200,'',$data);
@@ -105,7 +105,7 @@ class EmployeeController extends BaseController
     {
         $service = new EmployeeService();
         $user = $request->userData->toArray();
-        list($status,$data) = $service->roleList($request->all());
+        list($status,$data) = $service->roleList($request->all(),$user);
 
         if($status){
             return $this->json_return(200,'',$data);

+ 23 - 0
app/Model/BasicType.php

@@ -2,10 +2,12 @@
 
 namespace App\Model;
 
+use App\Scopes\DepartmentScope;
 use Illuminate\Database\Eloquent\Model;
 
 class BasicType extends Model
 {
+    protected $guarded = [];
     protected $table = "basic_type"; //指定表
     const CREATED_AT = 'crt_time';
     const UPDATED_AT = 'upd_time';
@@ -35,4 +37,25 @@ class BasicType extends Model
         21 => '跟进方式',
         22 => '产品价格'
     ];
+
+    public static $user = [];
+    public static $search = [];
+    public static $is_search = false;
+
+    public function __construct(array $attributes = [])
+    {
+        if(! empty($attributes['userData'])) {
+            self::$user = $attributes['userData'];
+            self::$search = $attributes['search'] ?? [];
+            self::$is_search = true;
+        }
+        parent::__construct($attributes);
+    }
+
+    protected static function boot(){
+        parent::boot();
+        if(self::$is_search){
+            static::addGlobalScope(new DepartmentScope(self::$user, self::$search));
+        }
+    }
 }

+ 23 - 0
app/Model/ProductCategory.php

@@ -2,12 +2,35 @@
 
 namespace App\Model;
 
+use App\Scopes\DepartmentScope;
 use Illuminate\Database\Eloquent\Model;
 
 class ProductCategory extends Model
 {
+    protected $guarded = [];
     protected $table = "product_category"; //指定表
     const CREATED_AT = 'crt_time';
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
+
+    public static $user = [];
+    public static $search = [];
+    public static $is_search = false;
+
+    public function __construct(array $attributes = [])
+    {
+        if(! empty($attributes['userData'])) {
+            self::$user = $attributes['userData'];
+            self::$search = $attributes['search'] ?? [];
+            self::$is_search = true;
+        }
+        parent::__construct($attributes);
+    }
+
+    protected static function boot(){
+        parent::boot();
+        if(self::$is_search){
+            static::addGlobalScope(new DepartmentScope(self::$user, self::$search));
+        }
+    }
 }

+ 21 - 0
app/Model/Role.php

@@ -2,6 +2,7 @@
 
 namespace App\Model;
 
+use App\Scopes\DepartmentScope;
 use Illuminate\Database\Eloquent\Model;
 
 /**
@@ -11,9 +12,29 @@ use Illuminate\Database\Eloquent\Model;
  */
 class Role extends Model
 {
+    protected $guarded = [];
     protected $table = "role"; //指定表
     const CREATED_AT = 'crt_time';
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
+    public static $user = [];
+    public static $search = [];
+    public static $is_search = false;
 
+    public function __construct(array $attributes = [])
+    {
+        if(! empty($attributes['userData'])) {
+            self::$user = $attributes['userData'];
+            self::$search = $attributes['search'] ?? [];
+            self::$is_search = true;
+        }
+        parent::__construct($attributes);
+    }
+
+    protected static function boot(){
+        parent::boot();
+        if(self::$is_search){
+            static::addGlobalScope(new DepartmentScope(self::$user, self::$search));
+        }
+    }
 }

+ 16 - 7
app/Service/BasicTypeService.php

@@ -14,8 +14,8 @@ class BasicTypeService extends Service
      * @param $data
      * @return array
      */
-    public function basicTypeEdit($data){
-        list($status,$msg) = $this->basicTypeRule($data,false);
+    public function basicTypeEdit($data, $user){
+        list($status,$msg) = $this->basicTypeRule($data,$user,false);
         if(!$status) return [$status,$msg];
 
         $update = $msg['data'][0];
@@ -29,8 +29,8 @@ class BasicTypeService extends Service
      * @param $data
      * @return array
      */
-    public function basicTypeAdd($data){
-        list($status,$msg) = $this->basicTypeRule($data);
+    public function basicTypeAdd($data,$user){
+        list($status,$msg) = $this->basicTypeRule($data, $user);
         if(!$status) return [$status,$msg];
 
         BasicType::insert($msg['data']);
@@ -58,8 +58,9 @@ class BasicTypeService extends Service
      * @param $data
      * @return array
      */
-    public function basicTypeList($data){
-        $model = BasicType::where('del_time',0)
+    public function basicTypeList($data, $user){
+        $model = new BasicType(['userData' => $user, 'search' => $data]);
+        $model = $model->where('del_time',0)
             ->select('title','id','type')
             ->orderby('id', 'asc');
 
@@ -78,9 +79,13 @@ class BasicTypeService extends Service
      * @param $is_check
      * @return array
      */
-    public function basicTypeRule($data,$is_check = true){
+    public function basicTypeRule($data,$user, $is_check = true){
         if($this->isEmpty($data,'data')) return [false,'数据不能为空!'];
 
+        //所属部门 以及  顶级部门
+        if(empty($data['depart_id'])) $data['depart_id'] = $this->getDepart($user);
+        $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
+
         $type = array_column($data['data'],'type');
         $type = array_map(function($val) {
             return $val !== null ? $val : 0;
@@ -116,13 +121,17 @@ class BasicTypeService extends Service
             $data['data'][$key]['upd_time'] = time();
             if($is_check){
                 $bool = BasicType::where('title',$value['title'])
+                    ->where('top_depart_id',$data['top_depart_id'])
                     ->where('type',$value['type'])
                     ->where('del_time',0)
                     ->exists();
                 $data['data'][$key]['crt_time'] = time();
+                $data['data'][$key]['depart_id'] = $data['depart_id'];
+                $data['data'][$key]['top_depart_id'] = $data['top_depart_id'];
             }else{
                 if($this->isEmpty($data,'id')) return [false,'id不能为空!'];
                 $bool = BasicType::where('title',$value['title'])
+                    ->where('top_depart_id',$data['top_depart_id'])
                     ->where('type',$value['type'])
                     ->where('id','<>',$data['id'])
                     ->where('del_time',0)

+ 82 - 25
app/Service/EmployeeService.php

@@ -4,7 +4,6 @@ namespace App\Service;
 
 use App\Model\BasicType;
 use App\Model\Depart;
-use App\Model\DepartPriceName;
 use App\Model\Employee;
 use App\Model\EmployeeDepartPermission;
 use App\Model\EmployeeManagerDepart;
@@ -47,6 +46,7 @@ class EmployeeService extends Service
             $model->mobile = $data['mobile'] ?? '';
             $model->leave_time = $data['leave_time'] ?? '';
             $model->entry_time = $data['entry_time'] ?? '';
+            $model->state = empty($data['leave_time']) ? Employee::USE : Employee::NOT_USE;
             $model->is_admin = $data['is_admin'];
             if($model->is_admin == 1){
                 $model->account = $data['number'];
@@ -112,13 +112,13 @@ class EmployeeService extends Service
             $model->mobile = $data['mobile'] ?? '';
             $model->leave_time = $data['leave_time'] ?? '';
             $model->entry_time = $data['entry_time'] ?? '';
-            $model->state = 1;
+            $model->state = empty($data['leave_time']) ? Employee::USE : Employee::NOT_USE;
             $model->crt_id = $user['id'];
             $model->is_admin = $data['is_admin'];
             if($model->is_admin == 1){
                 $model->account = $data['number'];
                 if($data['password'] !== '********'){
-                    $model->password   = Hash::make($data['password']);
+                    $model->password = Hash::make($data['password']);
                 }
             }
             $model->save();
@@ -209,6 +209,8 @@ class EmployeeService extends Service
                 ->select('employee_id')->get()->toArray();
             $model->whereIn('id',array_column($emp,'employee_id'));
         }
+        if(! $user['is_all_depart']) $model->where('is_manager',0);
+
         $list = $this->limit($model,'',$data);
 
         //组织数据
@@ -277,16 +279,24 @@ class EmployeeService extends Service
         if($this->isEmpty($data,'number')) return [false,'工号不存在!'];
         if($this->isEmpty($data,'emp_name')) return [false,'姓名不存在!'];
 
+        $mobile = $data['mobile'] ?? "";
+        $number = $data['number'] ?? "";
         if(! $is_add){
             if($this->isEmpty($data,'id')) return [false,'ID不能为空!'];
-            $bool = Employee::where('number',$data['number'])
+            $bool = Employee::where('del_time',0)
                 ->where('id','<>',$data['id'])
-                ->where('del_time',0)->exists();
+                ->where(function ($query) use ($mobile, $number){
+                    $query->where('mobile', $mobile)
+                        ->orWhere('number', $number);
+                })->exists();
         }else{
-            $bool = Employee::where('number',$data['number'])
-                ->where('del_time',0)->exists();
+            $bool = Employee::where('del_time',0)
+                ->where(function ($query) use ($mobile, $number){
+                    $query->where('mobile', $mobile)
+                        ->orWhere('number', $number);
+                })->exists();
         }
-        if($bool) return [false,'工号已存在!'];
+        if($bool) return [false,'工号或手机号码已存在!'];
 
         return [true,''];
     }
@@ -296,8 +306,8 @@ class EmployeeService extends Service
      * @param $data
      * @return array
      */
-    public function roleEdit($data){
-        list($status,$msg) = $this->roleRule($data, false);
+    public function roleEdit($data,$user){
+        list($status,$msg) = $this->roleRule($data,$user, false);
         if(!$status) return [$status,$msg];
 
         $model = new Role();
@@ -315,11 +325,13 @@ class EmployeeService extends Service
      * @return array
      */
     public function roleAdd($data,$user){
-        list($status,$msg) = $this->roleRule($data);
+        list($status,$msg) = $this->roleRule($data,$user);
         if(!$status) return [$status,$msg];
 
         $model = new Role();
         $model->title = $data['title'] ;
+        $model->depart_id = $data['depart_id'] ?? 0;
+        $model->top_depart_id = $data['top_depart_id'] ?? 0;
         $model->save();
 
         return [true,'保存成功!'];
@@ -350,13 +362,14 @@ class EmployeeService extends Service
      * @param $data
      * @return array
      */
-    public function roleList($data){
-        $list = Role::where('del_time',0)
+    public function roleList($data,$user){
+        $model = new Role(['userData' => $user, 'search' => $data]);
+        $model = $model->where('del_time',0)
             ->select('title','crt_time','id','upd_time')
             ->orderBy('id','desc');
-        if(! empty($data['title'])) $list->where('title', 'LIKE', '%' . $data['title'] . '%');
+        if(! empty($data['title'])) $model->where('title', 'LIKE', '%' . $data['title'] . '%');
 
-        $list = $this->limit($list,'',$data);
+        $list = $this->limit($model,'',$data);
 
         return [200,$list];
     }
@@ -367,17 +380,23 @@ class EmployeeService extends Service
      * @param $is_check
      * @return array
      */
-    public function roleRule($data,$is_check = true){
+    public function roleRule(&$data,$user, $is_check = true){
         if($this->isEmpty($data,'title')) return [false,'名称不能为空!'];
 
+        //所属部门 以及  顶级部门
+        if(empty($data['depart_id'])) $data['depart_id'] = $this->getDepart($user);
+        $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
+
         if($is_check){
             $bool = Role::where('title',$data['title'])
+                ->where('top_depart_id',$data['top_depart_id'])
                 ->where('del_time',0)
                 ->exists();
             if($bool) return [false,'角色名称已存在!'];
         }else{
             if($this->isEmpty($data,'id')) return [false,'ID不能为空!'];
             $bool = Role::where('title',$data['title'])
+                ->where('top_depart_id',$data['top_depart_id'])
                 ->where('id','<>',$data['id'])
                 ->where('del_time',0)
                 ->exists();
@@ -442,7 +461,7 @@ class EmployeeService extends Service
 
         $role = Role::where('id',$data['role_id'])
             ->where('del_time',0)
-            ->select('id','code','title')
+            ->select('id','title')
             ->first();
         if(empty($role)) return [false,'角色不存在或已被删除'];
         $role = $role->toArray();
@@ -498,14 +517,50 @@ class EmployeeService extends Service
                 $model->is_main = $value['is_main'];
                 $model->basic_type_id = $value['basic_type_id'] ?? 0;
                 $model->save();
+                $depart_id = $model->id;
+                if(empty($depart_id)) {
+                    DB::rollBack();
+                    return [false,'部门新建失败'];
+                }
 
                 if(empty($value['parent_id'])){
                     $m = new Storehouse();
                     $m->title = $value['title'];
-                    $m->depart_id = $model->id;
-                    $m->top_depart_id = $model->id;
+                    $m->depart_id = $depart_id;
+                    $m->top_depart_id = $depart_id;
                     $m->crt_id = $user['id'];
                     $m->save();
+                    if(empty($m->id)) {
+                        DB::rollBack();
+                        return [false,'仓库生成失败'];
+                    }
+
+                    $employee = new Employee();
+                    $number = "admin" . $value['code'];
+                    $employee->number = $number;
+                    $employee->emp_name = $value['title'] . "管理员账号";
+                    $employee->entry_time = date('Y-m-d');
+                    $employee->state = 1;
+                    $employee->crt_id = $user['id'];
+                    $employee->is_admin = 1;
+                    $employee->account = $number;
+                    $employee->password = Hash::make("password");
+                    $employee->is_manager = 1;
+                    $employee->save();
+                    if(empty($employee->id)) {
+                        DB::rollBack();
+                        return [false,'管理员账号生成失败'];
+                    }
+
+                    $depart = new EmployeeDepartPermission();
+                    $depart->employee_id = $employee->id;
+                    $depart->depart_id = $depart_id;
+                    $depart->save();
+
+                    if(empty($depart->id)) {
+                        DB::rollBack();
+                        return [false,'管理员账号部门关联生成失败'];
+                    }
                 }
             }
 
@@ -569,7 +624,7 @@ class EmployeeService extends Service
         if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%');
 
         $list = $model->get()->toArray();
-        $list = $this->fillDepartList($list);
+        $list = $this->fillDepartList($list, $user);
         $list_tree = $list;
         if(! empty($list_tree)) {
             $list_tree = $this->makeTree(0,$list_tree);
@@ -579,15 +634,17 @@ class EmployeeService extends Service
         return [200,['data' => $list,'tree' => $list_tree]];
     }
 
-    public function fillDepartList($list){
+    public function fillDepartList($list,$user){
         if(empty($list)) return $list;
 
         $basic = BasicType::where('del_time',0)
             ->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;
         }
 
         return $list;
@@ -1009,10 +1066,10 @@ class EmployeeService extends Service
     /**
      * 获取登录账号的角色的菜单
      * @param $role_id
-     * @param $user_id
+     * @param $user
      * @return array
      */
-    public function getMenuByRole($role_id,$user_id){
+    public function getMenuByRole($role_id,$user){
         $menu = SysMenu::where('del_time',0)->select('id')->get()->toArray();
         $button = SysMenuButton::where('del_time',0)->select('id','menu_id')->get()->toArray();
         $button_map = [];
@@ -1020,7 +1077,7 @@ class EmployeeService extends Service
             $button_map[$value['menu_id']][] = $value['id'];
         }
         $object = [];//返回的模型
-        if($user_id == Employee::SPECIAL_ADMIN){
+        if($user['id'] == Employee::SPECIAL_ADMIN || $user['is_manager']){
             //超级管理员
             foreach ($menu as $value){
                 $object[] = [
@@ -1141,7 +1198,7 @@ class EmployeeService extends Service
                         'title' => $value['title'],
                     ];
                     $map[$value['depart_id']] = $value['depart_id'];
-                    if(! empty($tmp['is_main']) && ! $is_all_depart) $is_all_depart = 1;
+                    if(! empty($value['is_main']) && ! $is_all_depart) $is_all_depart = 1;
                 }else{
                     $t = self::getTopParentId($value['depart_id'],$list);
                     if($t && isset($depart_map[$t])) {

+ 13 - 4
app/Service/ProductService.php

@@ -26,7 +26,7 @@ class ProductService extends Service
      * @return array
      */
     public function productCategoryEdit($data,$user){
-        list($status,$msg) = $this->productCategoryRule($data,false);
+        list($status,$msg) = $this->productCategoryRule($data,$user,false);
         if(!$status) return [$status,$msg];
 
         $update = $msg['data'][0];
@@ -44,7 +44,7 @@ class ProductService extends Service
      * @return array
      */
     public function productCategoryAdd($data,$user){
-        list($status,$msg) = $this->productCategoryRule($data);
+        list($status,$msg) = $this->productCategoryRule($data,$user);
         if(!$status) return [$status,$msg];
 
         ProductCategory::insert($msg['data']);
@@ -88,7 +88,8 @@ class ProductService extends Service
      * @return array
      */
     public function productCategoryList($data,$user){
-        $model = ProductCategory::where('del_time',0)
+        $model = new ProductCategory(['userData' => $user, 'search' => $data]);
+        $model = $model->where('del_time',0)
             ->select('title','id','parent_id')
             ->orderby('id','desc');
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
@@ -104,9 +105,13 @@ class ProductService extends Service
      * @param $is_add
      * @return array
      */
-    public function productCategoryRule($data, $is_add = true){
+    public function productCategoryRule($data,$user, $is_add = true){
         if($this->isEmpty($data,'data')) return [false,'数据不能为空!'];
 
+        //所属部门 以及  顶级部门
+        if(empty($data['depart_id'])) $data['depart_id'] = $this->getDepart($user);
+        $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
+
         $title = array_column($data['data'],'title');
         $title = array_map(function($val) {
             return $val !== null ? $val : 0;
@@ -135,14 +140,18 @@ class ProductService extends Service
 
                 $data['data'][$key]['parent_id'] = $parent_id;
                 $data['data'][$key]['crt_time'] = time();
+                $data['data'][$key]['depart_id'] = $data['depart_id'];
+                $data['data'][$key]['top_depart_id'] = $data['top_depart_id'];
 
                 $bool = ProductCategory::where('title',$value['title'])
+                    ->where('top_depart_id',$data['top_depart_id'])
                     ->where('del_time',0)
                     ->exists();
             }else{
                 if($this->isEmpty($data,'id')) return [false,'id不能为空!'];
 
                 $bool = ProductCategory::where('title',$value['title'])
+                    ->where('top_depart_id',$data['top_depart_id'])
                     ->where('id','<>',$data['id'])
                     ->where('del_time',0)
                     ->exists();

+ 1 - 1
app/Service/SysMenuService.php

@@ -137,7 +137,7 @@ class SysMenuService extends Service
             if($user['id'] != Employee::SPECIAL_ADMIN){
                 $emp = new EmployeeService();
                 $role = $emp->getPersonRole($user['id']);
-                $menu = $emp->getMenuByRole($role,$user['id']);
+                $menu = $emp->getMenuByRole($role,$user);
                 $list->whereIn('id',array_column($menu,'menu_id'));
             }
             $list = $list->get()->toArray();