Forráskód Böngészése

[智价云] 增加多部门查询&显示

tangyuanwang 1 napja
szülő
commit
be9af3ec68

+ 49 - 46
app/Http/Controllers/Manager/Personnel/Employee.php

@@ -9,6 +9,7 @@ use App\Models\Manager\Personnel\Department as DepartmentModel;
 use App\Models\Manager\Personnel\Roles as RolesModel;
 use App\Models\Manager\Citys as CitysModel;
 use App\Models\Manager\Personnel\EmployeeArea as EmployeeAreaModel;
+use App\Models\Manager\Personnel\EmployeeDepartment as EmployeeDepartmentModel;
 
 /**
  * 人员信息管理-员工管理
@@ -25,7 +26,7 @@ class Employee extends Controller
      * @date      2025-12-04
      * 
      */
-    public function list(Request $request, EmployeeModel $EmployeeModel,DepartmentModel $DepartmentModel,RolesModel $RolesModel,CitysModel $CitysModel,EmployeeAreaModel $EmployeeAreaModel)
+    public function list(Request $request, EmployeeModel $EmployeeModel, DepartmentModel $DepartmentModel, RolesModel $RolesModel, CitysModel $CitysModel, EmployeeAreaModel $EmployeeAreaModel, EmployeeDepartmentModel $EmployeeDepartmentModel)
     {
         $request->scene('list')->validate();
         // 查询条件
@@ -36,16 +37,14 @@ class Employee extends Controller
         $end_time = request('end_time', '');
         $name = request('name', '');
         $mobile = request('mobile', '');
-        $department_id = request('department_id', '');
         $role_id = request('role_id', '');
         $open_notice = request('open_notice', '');
         $employee_code = request('employee_code', '');
         $role_name = request('role_name', '');
-        $role_ids =[];
-        $department_name = request('department_name', '');
-        $department_ids =[];
+        $role_ids = [];
         $city_id = request('city_id', '');
         $city_ids = request('city_ids', '');
+        $department_ids = request('city_ids', '');
         // 时间条件
         if ($start_time) $map[] = ['insert_time', '>=', strtotime($start_time)];
         if ($end_time) $map[]   = ['insert_time', '<=', strtotime($end_time)];
@@ -53,54 +52,55 @@ class Employee extends Controller
         if (is_numeric($status)) $map[] = ['status', '=', $status];
         if ($name) $map[] = ['name', 'like', "%$name%"];
         if ($mobile) $map[] = ['mobile', 'like', "%$mobile%"];
-        if ($department_id) $map[] = ['department_id', '=', $department_id];
         if ($role_id) $map[] = ['role_id', '=', $role_id];
         if (is_numeric($open_notice)) $map[] = ['open_notice', '=', $open_notice];
         if ($employee_code) $map[] = ['employee_code', 'like', "%$employee_code%"];
         if ($city_id) $map[] = ['city_ids', 'like', "%,$city_id,%"];
-        if ($department_name){
-            $department_ids= $DepartmentModel->where('name','like',"%$department_name%")->pluck('id')->toarray();
-        }
-        if ($role_name){
-            $role_ids= $RolesModel->where('name','like',"%$role_name%")->pluck('id')->toarray();
+        if ($role_name) {
+            $role_ids = $RolesModel->where('name', 'like', "%$role_name%")->pluck('id')->toarray();
         }
-        $field = ['id','employee_code', 'name','mobile', 'department_id', 'role_id', 'city_ids', 'open_notice','insert_time','update_time','status'];
+        $field = ['id', 'employee_code', 'name', 'mobile', 'department_ids', 'role_id', 'city_ids', 'open_notice', 'insert_time', 'update_time', 'status'];
         // 查询数据
-        $result_model = $EmployeeModel->query();
-        if ($department_name) {
-            $result_model = $result_model->whereIn('department_id', $department_ids);
-        }
         if ($role_name) {
-            $result_model = $result_model->whereIn('role_id', $role_ids);
+            $EmployeeModel = $EmployeeModel->whereIn('role_id', $role_ids);
         }
         //多选查询地区
         if ($city_ids && is_string($city_ids)) {
             $city_ids = explode(',', $city_ids);
             $subQuery = $EmployeeAreaModel->whereIn('city_id', $city_ids)->distinct('employee_id')->select('employee_id');
-            $result_model = $result_model->whereIn('id', function ($query1) use ($subQuery) {
+            $EmployeeModel = $EmployeeModel->whereIn('id', function ($query1) use ($subQuery) {
                 $query1->select('employee_id')->fromSub($subQuery, 'sub1');
             });
         }
-        $result =$result_model
+        //多选部门查询
+        if ($department_ids && is_string($department_ids)) {
+            $department_ids =  explode(',', $department_ids);
+            $subQuery = $EmployeeDepartmentModel->whereIn('department_id', $department_ids)->distinct('employee_id')->select('employee_id');
+            $EmployeeModel = $EmployeeModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('employee_id')->fromSub($subQuery, 'sub1');
+            });
+        }
+        $result = $EmployeeModel
             ->where($map)
             ->select($field)
             ->orderByDesc('id')
             ->paginate($limit)->toarray();
         // 分配数据
         if (!$result)  return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => []]);
-        if(isset($result['data']) && count($result['data']) > 0){
+        if (isset($result['data']) && count($result['data']) > 0) {
             foreach ($result['data'] as $key => $value) {
                 //查询部门信息
-                $department_info = $DepartmentModel->where(['id' => $value['department_id']])->first();
+                $department_ids = $value['department_ids'] !='' ? explode(',',$value['department_ids']):'';
+                $department_name = $department_ids ? $DepartmentModel->whereIn('id',$department_ids)->pluck('name')->toarray():'';
                 //查询角色信息
                 $role_info = $RolesModel->where(['id' => $value['role_id']])->first();
                 //查询城市信息
                 $city_ids = explode(',', $value['city_ids']);
                 $city_info = [];
-                if(count($city_ids) > 0){
+                if (count($city_ids) > 0) {
                     $city_info = $CitysModel->whereIn('id', $city_ids)->pluck('name');
                 }
-                $result['data'][$key]['department_name'] = isset($department_info['name']) ? $department_info['name'] : '';
+                $result['data'][$key]['department_name'] = $department_name;
                 $result['data'][$key]['role_name'] = isset($role_info['name']) ? $role_info['name'] : '';
                 $result['data'][$key]['city_info'] = $city_info;
             }
@@ -116,26 +116,25 @@ class Employee extends Controller
      * @date      2025-12-12
      * 
      */
-    public function all(Request $request, EmployeeModel $EmployeeModel,DepartmentModel $DepartmentModel,RolesModel $RolesModel,CitysModel $CitysModel,EmployeeAreaModel $EmployeeAreaModel)
+    public function all(Request $request, EmployeeModel $EmployeeModel,RolesModel $RolesModel,EmployeeAreaModel $EmployeeAreaModel, EmployeeDepartmentModel $EmployeeDepartmentModel)
     {
         $request->scene('all')->validate();
         // 查询条件
         $map  = [];
+        $limit = request('limit', config('page_num', 10));
         $status    = request('status', '0');
         $start_time = request('start_time', '');
         $end_time = request('end_time', '');
         $name = request('name', '');
         $mobile = request('mobile', '');
-        $department_id = request('department_id', '');
         $role_id = request('role_id', '');
         $open_notice = request('open_notice', '');
         $employee_code = request('employee_code', '');
         $role_name = request('role_name', '');
-        $role_ids =[];
-        $department_name = request('department_name', '');
-        $department_ids =[];
+        $role_ids = [];
         $city_id = request('city_id', '');
         $city_ids = request('city_ids', '');
+        $department_ids = request('city_ids', '');
         // 时间条件
         if ($start_time) $map[] = ['insert_time', '>=', strtotime($start_time)];
         if ($end_time) $map[]   = ['insert_time', '<=', strtotime($end_time)];
@@ -143,35 +142,35 @@ class Employee extends Controller
         if (is_numeric($status)) $map[] = ['status', '=', $status];
         if ($name) $map[] = ['name', 'like', "%$name%"];
         if ($mobile) $map[] = ['mobile', 'like', "%$mobile%"];
-        if ($department_id) $map[] = ['department_id', '=', $department_id];
         if ($role_id) $map[] = ['role_id', '=', $role_id];
         if (is_numeric($open_notice)) $map[] = ['open_notice', '=', $open_notice];
         if ($employee_code) $map[] = ['employee_code', 'like', "%$employee_code%"];
         if ($city_id) $map[] = ['city_ids', 'like', "%,$city_id,%"];
-        if ($department_name){
-            $department_ids= $DepartmentModel->where('name','like',"%$department_name%")->pluck('id')->toarray();
-        }
-        if ($role_name){
-            $role_ids= $RolesModel->where('name','like',"%$role_name%")->pluck('id')->toarray();
+        if ($role_name) {
+            $role_ids = $RolesModel->where('name', 'like', "%$role_name%")->pluck('id')->toarray();
         }
         $field = ['id','name'];
         // 查询数据
-        $result_model = $EmployeeModel->query();
-        if ($department_name) {
-            $result_model = $result_model->whereIn('department_id', $department_ids);
-        }
         if ($role_name) {
-            $result_model = $result_model->whereIn('role_id', $role_ids);
+            $EmployeeModel = $EmployeeModel->whereIn('role_id', $role_ids);
         }
         //多选查询地区
         if ($city_ids && is_string($city_ids)) {
             $city_ids = explode(',', $city_ids);
             $subQuery = $EmployeeAreaModel->whereIn('city_id', $city_ids)->distinct('employee_id')->select('employee_id');
-            $result_model = $result_model->whereIn('id', function ($query1) use ($subQuery) {
+            $EmployeeModel = $EmployeeModel->whereIn('id', function ($query1) use ($subQuery) {
+                $query1->select('employee_id')->fromSub($subQuery, 'sub1');
+            });
+        }
+        //多选部门查询
+        if ($department_ids && is_string($department_ids)) {
+            $department_ids =  explode(',', $department_ids);
+            $subQuery = $EmployeeDepartmentModel->whereIn('department_id', $department_ids)->distinct('employee_id')->select('employee_id');
+            $EmployeeModel = $EmployeeModel->whereIn('id', function ($query1) use ($subQuery) {
                 $query1->select('employee_id')->fromSub($subQuery, 'sub1');
             });
         }
-        $result =$result_model
+        $result = $EmployeeModel
             ->where($map)
             ->select($field)
             ->orderByDesc('id')
@@ -188,13 +187,13 @@ class Employee extends Controller
      * @version   1.0
      * @date      2025-12-04
      */
-    public function detail(Request $request, EmployeeModel $EmployeeModel,DepartmentModel $DepartmentModel,RolesModel $RolesModel,CitysModel $CitysModel)
+    public function detail(Request $request, EmployeeModel $EmployeeModel, DepartmentModel $DepartmentModel, RolesModel $RolesModel, CitysModel $CitysModel)
     {
         $request->scene('detail')->validate();
         // 接收参数
         $id = request('id', 0);
         $map = ['id' => $id];
-        $field = ['id','employee_code', 'name','mobile', 'department_id','duty_type','role_id', 'city_ids', 'open_notice','insert_time','update_time','status'];
+        $field = ['id', 'employee_code', 'name', 'mobile', 'department_id', 'duty_type', 'role_id', 'city_ids', 'open_notice', 'insert_time', 'update_time', 'status'];
         $data = $EmployeeModel->where($map)->select($field)->first();
         if (!$data)     return json_send(['code' => 'error', 'msg' => '记录不存在']);
         // 查询部门信息
@@ -204,7 +203,7 @@ class Employee extends Controller
         // 查询城市信息
         $city_ids = explode(',', $data['city_ids']);
         $city_info = [];
-        if(count($city_ids) > 0){
+        if (count($city_ids) > 0) {
             $city_info = $CitysModel->whereIn('id', $city_ids)->pluck('name');
         }
         $data['department_name'] = isset($department_info['name']) ? $department_info['name'] : '';
@@ -228,7 +227,9 @@ class Employee extends Controller
         $all_data = request()->all();
         //查询是否存在
         $map = ['name' => $all_data['name']];
-        $city_ids =  request('city_ids','');
+        $department_ids =  request('department_id', '');
+        $all_data['department_ids'] = $department_ids;
+        $city_ids =  request('city_ids', '');
         $all_data['city_ids'] = $city_ids;
         $data = $EmployeeModel->where($map)->first();
         if ($data)     return json_send(['code' => 'error', 'msg' => '员工姓名记录已存在']);
@@ -257,7 +258,9 @@ class Employee extends Controller
         $id         = request('id', 0);
         // 接收数据
         $all_data = request()->all();
-        $city_ids =  request('city_ids','');
+        $department_ids =  request('department_id', '');
+        $all_data['department_ids'] = $department_ids;
+        $city_ids =  request('city_ids', '');
         $all_data['city_ids'] = $city_ids;
         $all_data['password'] = request('password', '');
         //查询是否存在

+ 61 - 33
app/Models/Manager/Personnel/Employee.php

@@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\DB;
 use App\Models\Manager\Personnel\EmployeeArea as EmployeeAreaModel;
+use App\Models\Manager\Personnel\EmployeeDepartment as EmployeeDepartmentModel;
 
 /**
  * 员工模型
@@ -38,15 +39,15 @@ class Employee extends Model
             'mobile'    => $data['mobile'],
             'password'  => md5($data['password']),
             'role_id'     => $data['role_id'],
-            'province_ids'    => isset($data['province_ids'])? $data['province_ids'] : '',
-            'city_ids'    => isset($data['city_ids'])? ','.$data['city_ids'].',' : '',
+            'province_ids'    => isset($data['province_ids']) ? $data['province_ids'] : '',
+            'city_ids'    => isset($data['city_ids']) ? ',' . $data['city_ids'] . ',' : '',
             'department_id' => $data['department_id'],
             'open_notice' => $data['open_notice'],
-            'duty_type' => isset($data['duty_type'])? $data['duty_type'] :'',
+            'duty_type' => isset($data['duty_type']) ? $data['duty_type'] : '',
             'insert_time' => time(),
         ];
         $Employee_id = $this->insertGetId($insert_data);
-        if($Employee_id){
+        if ($Employee_id) {
             $this->where('id', $Employee_id)->update(['employee_code' => $this->employee_idToCode($Employee_id)]);
         }
         return $Employee_id;
@@ -92,6 +93,7 @@ class Employee extends Model
         DB::beginTransaction();
         try {
             $EmployeeAreaModel = new EmployeeAreaModel();
+            $EmployeeDepartmentModel = new EmployeeDepartmentModel();
             $insert_data = [
                 'name' => $data['name'],
                 'mobile'    => $data['mobile'],
@@ -99,7 +101,7 @@ class Employee extends Model
                 'role_id'     => $data['role_id'],
                 'province_ids'    => isset($data['province_ids']) ? $data['province_ids'] : '',
                 'city_ids'    => isset($data['city_ids']) ? ',' . $data['city_ids'] . ',' : '',
-                'department_id' => $data['department_id'],
+                'department_ids' => isset($data['department_ids']) ? ',' . $data['department_ids'] . ',' : '',
                 'open_notice' => $data['open_notice'],
                 'duty_type' => isset($data['duty_type']) ? $data['duty_type'] : '',
                 'insert_time' => time(),
@@ -119,6 +121,17 @@ class Employee extends Model
                 }
                 $EmployeeAreaModel->insert($insert_city_data);
             }
+            if ($data['department_ids']) {
+                $insert_department_data = [];
+                $department_ids = explode(',', $data['department_ids']);
+                foreach ($department_ids as $department_id) {
+                    $insert_department_data[] = [
+                        'employee_id' => $Employee_id,
+                        'department_id' => $department_id,
+                    ];
+                }
+                $EmployeeDepartmentModel->insert($insert_department_data);
+            }
             DB::commit();
             return true;
             // 成功处理...
@@ -139,6 +152,35 @@ class Employee extends Model
      * @return bool
      */
     public function editEmployee_content($where, $data)
+    {
+        $Employee = $this->where($where)->first();
+        if (!$Employee) {
+            return false;
+        }
+        $Employee->name = $data['name'];
+        $Employee->mobile = $data['mobile'];
+        if (isset($data['password']) && $data['password'] != '') $Employee->password = md5($data['password']);
+        $Employee->role_id = $data['role_id'];
+        $Employee->city_ids = isset($data['city_ids']) ? ',' . $data['city_ids'] . ',' : '';
+        $Employee->department_ids = isset($data['department_ids']) ? ',' . $data['department_ids'] . ',' : '';
+        $Employee->open_notice = $data['open_notice'];
+        $Employee->duty_type = isset($data['duty_type']) ? $data['duty_type'] : '';
+        $Employee->update_time = time();
+        $Employee->save();
+        return true;
+    }
+
+
+
+    /**
+     * 更新数据
+     * @author 唐远望
+     * @version 1.0
+     * @date 2025-12-04
+     * @param $data
+     * @return bool
+     */
+    public function updateEmployee($where, $data)
     {
         $Employee = $this->where($where)->first();
         if (!$Employee) {
@@ -147,13 +189,13 @@ class Employee extends Model
         DB::beginTransaction();
         try {
             $EmployeeAreaModel = new EmployeeAreaModel();
-
+            $EmployeeDepartmentModel = new EmployeeDepartmentModel();
             $Employee->name = $data['name'];
             $Employee->mobile = $data['mobile'];
             if (isset($data['password']) && $data['password'] != '') $Employee->password = md5($data['password']);
             $Employee->role_id = $data['role_id'];
             $Employee->city_ids = isset($data['city_ids']) ? ',' . $data['city_ids'] . ',' : '';
-            $Employee->department_id = $data['department_id'];
+            $Employee->department_ids = isset($data['department_ids']) ? ',' . $data['department_ids'] . ',' : '';
             $Employee->open_notice = $data['open_notice'];
             $Employee->duty_type = isset($data['duty_type']) ? $data['duty_type'] : '';
             $Employee->update_time = time();
@@ -171,32 +213,18 @@ class Employee extends Model
                 }
                 $EmployeeAreaModel->insert($insert_city_data);
             }
-            DB::commit();
-            return true;
-            // 成功处理...
-        } catch (\Exception $e) {
-            DB::rollBack();
-            
-            // 错误处理...
-            return false;
-        }
-    }
-
-
-
-    /**
-     * 更新数据
-     * @author 唐远望
-     * @version 1.0
-     * @date 2025-12-04
-     * @param $data
-     * @return bool
-     */
-    public function updateEmployee($where, $data)
-    {
-        DB::beginTransaction();
-        try {
-            $this->editEmployee_content($where, $data);
+            $EmployeeDepartmentModel->where('employee_id', $Employee->id)->delete();
+            if ($data['department_ids']) {
+                $insert_department_data = [];
+                $department_ids = explode(',', $data['department_ids']);
+                foreach ($department_ids as $department_id) {
+                    $insert_department_data[] = [
+                        'employee_id' => $Employee->id,
+                        'department_id' => $department_id,
+                    ];
+                }
+                $EmployeeDepartmentModel->insert($insert_department_data);
+            }
             DB::commit();
             return true;
             // 成功处理...

+ 25 - 0
app/Models/Manager/Personnel/EmployeeDepartment.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Models\Manager\Personnel;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 员工部门关系模型
+ * @author 唐远望
+ * @version 1.0
+ * @date 2025-12-18
+ */
+class EmployeeDepartment extends Model
+{
+    use HasFactory;
+    // 与模型关联的表名
+    protected $table = 'personnel_employee_department';
+    // 是否主动维护时间戳
+    public $timestamps = false;
+    // 定义时间戳字段名
+    // const CREATED_AT = 'insert_time';
+    // const UPDATED_AT = 'update_time';
+
+}