Просмотр исходного кода

[智价云] 员工地区城市设置更新

tangyuanwang 5 часов назад
Родитель
Сommit
fc1ff16882

+ 64 - 19
app/Http/Controllers/Manager/Personnel/Employee.php

@@ -10,6 +10,10 @@ 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;
+use App\Models\Manager\Personnel\EmployeeProvince as EmployeeProvinceModel;
+use App\Models\Manager\Personnel\EmployeePlatform as EmployeePlatformModel;
+use App\Models\Manager\Personnel\EmployeeOpenid as EmployeeOpenidModel;
+use Illuminate\Support\Facades\DB;
 
 /**
  * 人员信息管理-员工管理
@@ -26,7 +30,7 @@ class Employee extends Controller
      * @date      2025-12-04
      * 
      */
-    public function list(Request $request, EmployeeModel $EmployeeModel, DepartmentModel $DepartmentModel, RolesModel $RolesModel, CitysModel $CitysModel, EmployeeAreaModel $EmployeeAreaModel, EmployeeDepartmentModel $EmployeeDepartmentModel)
+    public function list(Request $request, EmployeeModel $EmployeeModel, DepartmentModel $DepartmentModel, RolesModel $RolesModel, CitysModel $CitysModel, EmployeeAreaModel $EmployeeAreaModel, EmployeeDepartmentModel $EmployeeDepartmentModel,EmployeeProvinceModel $EmployeeProvinceModel)
     {
         $request->scene('list')->validate();
         $admin_company_id = request('admin_company_id', '0');
@@ -132,10 +136,15 @@ class Employee extends Controller
                 if (count($city_ids) > 0) {
                     $city_info = $CitysModel->whereIn('id', $city_ids)->pluck('name');
                 }
+                $province_info = [];
+                if (count($city_ids) > 0) {
+                    $province_info = $EmployeeProvinceModel->where('employee_id', $value['id'])->select(['id','province_id','province_name','is_city_all'])->get()->toarray();
+                }
                 $result['data'][$key]['department_ids'] = $value['department_ids'] != '' ? substr($value['department_ids'], 1, strlen($value['department_ids']) - 2) : '';
                 $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;
+                $result['data'][$key]['province_info'] = $province_info;
             }
         }
         // 加载模板
@@ -339,9 +348,11 @@ class Employee extends Controller
             return json_send(['code' => 'error', 'msg' => '手机号码已绑定其它公司']);
         }
         //校验邮箱号码是否绑定其它公司
-        $other_company_user = $EmployeeModel->where(['email' => $all_data['email']])->first();
-        if ($other_company_user && $other_company_user->company_id != $all_data['company_id']) {
-            return json_send(['code' => 'error', 'msg' => '邮箱号码已绑定其它公司']);
+        if (isset($all_data['email']) && $all_data['email']) {
+            $other_company_user = $EmployeeModel->where(['email' => $all_data['email']])->first();
+            if ($other_company_user && $other_company_user->company_id != $all_data['company_id']) {
+                return json_send(['code' => 'error', 'msg' => '邮箱号码已绑定其它公司']);
+            }
         }
         $data = $EmployeeModel->where($map)->first();
         if ($data)     return json_send(['code' => 'error', 'msg' => '员工手机号记录已存在']);
@@ -417,10 +428,12 @@ class Employee extends Controller
         if ($other_company_user && $other_company_user->company_id != $all_data['company_id']) {
             return json_send(['code' => 'error', 'msg' => '手机号码已绑定其它公司']);
         }
-        //校验邮箱号码是否绑定其它公司
-        $other_company_user = $EmployeeModel->where(['email' => $all_data['email']])->first();
-        if ($other_company_user && $other_company_user->company_id != $all_data['company_id']) {
-            return json_send(['code' => 'error', 'msg' => '邮箱号码已绑定其它公司']);
+       //校验邮箱号码是否绑定其它公司
+        if (isset($all_data['email']) && $all_data['email']) {
+            $other_company_user = $EmployeeModel->where(['email' => $all_data['email']])->first();
+            if ($other_company_user && $other_company_user->company_id != $all_data['company_id']) {
+                return json_send(['code' => 'error', 'msg' => '邮箱号码已绑定其它公司']);
+            }
         }
         $data = $EmployeeModel->where($map)->where('id', '!=', $id)->first();
         if ($data)     return json_send(['code' => 'error', 'msg' => '员工手机号记录已存在']);
@@ -492,7 +505,7 @@ class Employee extends Controller
      * @date      2025-12-04
      * 
      */
-    public function delete(Request $request, EmployeeModel $EmployeeModel)
+    public function delete(Request $request, EmployeeModel $EmployeeModel, EmployeeAreaModel $EmployeeAreaModel, EmployeeDepartmentModel $EmployeeDepartmentModel, EmployeePlatformModel $EmployeePlatformModel, EmployeeOpenidModel $EmployeeOpenidModel, EmployeeProvinceModel $EmployeeProvinceModel)
     {
         // 验证参数
         $request->scene('delete')->validate();
@@ -516,18 +529,50 @@ class Employee extends Controller
         if (!$Employee) {
             return json_send(['code' => 'error', 'msg' => '记录不存在']);
         }
-        if ($is_admin == 1 && $admin_id == $Employee->id) {
+        if ($is_admin == 0 && $admin_id == $Employee->id) {
             return json_send(['code' => 'error', 'msg' => '不能删除自己']);
         }
-        $result = $Employee->delete();
-        // 提示删除失败
-        if (!$result)    return json_send(['code' => 'error', 'msg' => '删除失败']);
-        // 记录行为
-        $table_name = $EmployeeModel->getTable();
-        $notes_type = 3; //操作类型,1添加,2修改,3=删除
-        $this->addAdminHistory('人员信息管理-员工管理', $admin_id, $is_admin, $table_name, $notes_type, $Employee->toarray(), [], '删除了员工' . $Employee->name . '信息');
-        // 告知结果
-        return             json_send(['code' => 'success', 'msg' => '删除成功']);
+        $old_user_data = $Employee->toArray();
+        DB::beginTransaction();
+        try {
+            $result = $Employee->delete();
+            //查询用户绑定地区
+            $user_city_totle = $EmployeeAreaModel->where(['employee_id' => $id])->count();
+            if ($user_city_totle > 0) {
+                $EmployeeAreaModel->where(['employee_id' => $id])->delete();
+            }
+            //查询用户绑定省份
+            $user_province_totle = $EmployeeProvinceModel->where(['employee_id' => $id])->count();
+            if ($user_province_totle > 0) {
+                $EmployeeProvinceModel->where(['employee_id' => $id])->delete();
+            }
+            //查询用户绑定部门
+            $user_department_totle = $EmployeeDepartmentModel->where(['employee_id' => $id])->count();
+            if ($user_department_totle > 0) {
+                $EmployeeDepartmentModel->where(['employee_id' => $id])->delete();
+            }
+            //查询用户绑定平台
+            $user_platform_totle = $EmployeePlatformModel->where(['employee_id' => $id])->count();
+            if ($user_platform_totle > 0) {
+                $EmployeePlatformModel->where(['employee_id' => $id])->delete();
+            }
+            //查询用户绑定openid
+            $user_openid_totle = $EmployeeOpenidModel->where(['employee_id' => $id])->count();
+            if ($user_openid_totle > 0) {
+                $EmployeeOpenidModel->where(['employee_id' => $id])->delete();
+            }
+            // 记录行为
+            $table_name = $EmployeeModel->getTable();
+            $notes_type = 3; //操作类型,1添加,2修改,3=删除
+            $this->addAdminHistory('人员信息管理-员工管理', $admin_id, $is_admin, $table_name, $notes_type, $old_user_data, [], '删除了员工' . $old_user_data['name'] . '信息');
+            DB::commit();
+            // 告知结果
+            return             json_send(['code' => 'success', 'msg' => '删除成功']);
+        } catch (\Exception $e) {
+            DB::rollBack();
+            // 提示删除失败
+            if (!$result)    return json_send(['code' => 'error', 'msg' => '删除失败', 'data' => $e->getMessage()]);
+        }
     }
 
 

+ 58 - 2
app/Http/Requests/Manager/Personnel/Employee.php

@@ -36,6 +36,14 @@ class Employee extends BaseRequest
             'password'          => 'required',
             'open_notice'       => 'required|integer|in:0,1',
             'department_ids'    => 'required',
+            'area_data'         => 'required|array',
+            'area_data.*.zoning_name'         => 'required|string',
+            'area_data.*.province_id'         => 'required|integer|gt:0',
+            'area_data.*.province_name'         => 'required|string',
+            'area_data.*.is_city_all'         => 'required|integer|in:0,1',
+            'area_data.*.city_ids'         => 'required|array',
+            'area_data.*.city_ids.*.id'         => 'required|integer|gt:0',
+            'area_data.*.city_ids.*.name'         => 'required|string',
         ];
     }
 
@@ -44,8 +52,38 @@ class Employee extends BaseRequest
     protected   $scenes         = [
         'detail'             => ['id'],
         'list'               => ['page', 'limit'],
-        'add'                      => ['name', 'mobile','department_ids','role_id','password','open_notice'],
-        'edit'                  => ['id','name', 'mobile','department_ids','role_id','open_notice'],
+        'add'                      => [
+            'name',
+            'mobile',
+            'department_ids',
+            'role_id',
+            'password',
+            'open_notice',
+            'area_data',
+            'area_data.*.zoning_name',
+            'area_data.*.province_id',
+            'area_data.*.province_name',
+            'area_data.*.is_city_all',
+            'area_data.*.city_ids',
+            'area_data.*.city_ids.*.id',
+            'area_data.*.city_ids.*.name',
+        ],
+        'edit'                  => [
+            'id',
+            'name',
+            'mobile',
+            'department_ids',
+            'role_id',
+            'open_notice',
+            'area_data',
+            'area_data.*.zoning_name',
+            'area_data.*.province_id',
+            'area_data.*.province_name',
+            'area_data.*.is_city_all',
+            'area_data.*.city_ids',
+            'area_data.*.city_ids.*.id',
+            'area_data.*.city_ids.*.name',
+        ],
         'set_status'              => ['id', 'status'],
         'delete'                  => ['id'],
         'all'                    => [''],
@@ -88,6 +126,24 @@ class Employee extends BaseRequest
             'open_notice.integer'     => '通知格式错误',
             'open_notice.in'          => '通知格式错误',
             'department_ids.required' => '部门未知',
+            'area_data.required'      => '地区未知',
+            'area_data.*.zoning_name.required'      => '地区名称未知',
+            'area_data.*.zoning_name.string'        => '地区名称格式错误',
+            'area_data.*.province_id.required'      => '省份未知',
+            'area_data.*.province_id.integer'       => '省份格式错误',
+            'area_data.*.province_id.gt'            => '省份格式错误',
+            'area_data.*.province_name.required'      => '省份名称未知',
+            'area_data.*.province_name.string'        => '省份名称格式错误',
+            'area_data.*.is_city_all.required'      => '城市全选未知',
+            'area_data.*.is_city_all.integer'       => '城市全选格式错误',
+            'area_data.*.is_city_all.in'            => '城市全选格式错误',
+            'area_data.*.city_ids.required'      => '城市未知',
+            'area_data.*.city_ids.array'       => '城市格式错误',
+            'area_data.*.city_ids.*.id.required'      => '城市ID未知',
+            'area_data.*.city_ids.*.id.integer'       => '城市ID格式错误',
+            'area_data.*.city_ids.*.id.gt'            => '城市ID格式错误',
+            'area_data.*.city_ids.*.name.required'      => '城市名称未知',
+            'area_data.*.city_ids.*.name.string'        => '城市名称格式错误',
         ];
     }
 }

+ 42 - 15
app/Models/Manager/Personnel/Employee.php

@@ -9,7 +9,8 @@ use App\Models\Manager\Personnel\EmployeeArea as EmployeeAreaModel;
 use App\Models\Manager\Personnel\EmployeeDepartment as EmployeeDepartmentModel;
 use App\Facades\Servers\Encrypts\AccessToken;
 use App\Models\Manager\Personnel\EmployeePlatform as EmployeePlatformModel;
-
+use App\Models\Manager\Personnel\EmployeeProvince as EmployeeProvinceModel;
+use App\Models\Manager\Citys as CitysModel;
 /**
  * 员工模型
  * @author 唐远望
@@ -98,6 +99,7 @@ class Employee extends Model
             $EmployeeAreaModel = new EmployeeAreaModel();
             $EmployeeDepartmentModel = new EmployeeDepartmentModel();
             $EmployeePlatformModel = new EmployeePlatformModel();
+            $EmployeeProvinceModel = new EmployeeProvinceModel();
             $insert_data = [
                 'name' => $data['name'],
                 'mobile'    => $data['mobile'],
@@ -116,16 +118,27 @@ class Employee extends Model
             if ($Employee_id) {
                 $this->where('id', $Employee_id)->update(['employee_code' => $this->employee_idToCode($Employee_id)]);
             }
-            if ($data['city_ids']) {
-                $insert_city_data = [];
-                $city_ids = explode(',', $data['city_ids']);
-                foreach ($city_ids as $city_id) {
-                    $insert_city_data[] = [
+            //处理省份城市大区信息
+            if (isset($data['area_data'])) {
+                $area_data = $data['area_data'];
+                foreach ($area_data as $key => $province_data) {
+                    $insert_province_data = [
                         'employee_id' => $Employee_id,
-                        'city_id' => $city_id,
+                        'province_id' => $province_data['province_id'],
+                        'province_name' => $province_data['province_name']
                     ];
+                    if(!$insert_province_data['province_name']) continue;
+                    $EmployeeProvinceModel->insert($insert_province_data);
+                    $city_ids = $province_data['city_ids'];
+                    foreach ($city_ids as $city_info) {
+                        $insert_city_data = [
+                            'employee_id' => $Employee_id,
+                            'city_id' => $city_info['id'],
+                            'city_name' => $city_info['name']
+                        ];
+                        $EmployeeAreaModel->insert($insert_city_data);
+                    }
                 }
-                $EmployeeAreaModel->insert($insert_city_data);
             }
             if ($data['department_ids']) {
                 $insert_department_data = [];
@@ -208,6 +221,7 @@ class Employee extends Model
             $EmployeeAreaModel = new EmployeeAreaModel();
             $EmployeeDepartmentModel = new EmployeeDepartmentModel();
             $EmployeePlatformModel = new EmployeePlatformModel();
+            $EmployeeProvinceModel = new EmployeeProvinceModel();
             $Employee->name = $data['name'];
             $Employee->mobile = $data['mobile'];
             $Employee->email = $data['email'];
@@ -222,16 +236,29 @@ class Employee extends Model
             $Employee->save();
 
             $EmployeeAreaModel->where('employee_id', $Employee->id)->delete();
-            if ($data['city_ids']) {
-                $insert_city_data = [];
-                $city_ids = explode(',', $data['city_ids']);
-                foreach ($city_ids as $city_id) {
-                    $insert_city_data[] = [
+            $EmployeeProvinceModel->where('employee_id', $Employee->id)->delete();
+            //处理省份城市大区信息
+            if (isset($data['area_data'])) {
+                $area_data = $data['area_data'];
+                foreach ($area_data as $key => $province_data) {
+                    $province_id = $province_data['province_id'];
+                    $insert_province_data = [
                         'employee_id' => $Employee->id,
-                        'city_id' => $city_id,
+                        'province_id' => $province_data['province_id'],
+                        'province_name' => $province_data['province_name']
                     ];
+                    if(!$insert_province_data['province_name']) continue;
+                    $EmployeeProvinceModel->insert($insert_province_data);
+                    $city_ids = $province_data['city_ids'];
+                    foreach ($city_ids as $city_info) {
+                        $insert_city_data = [
+                            'employee_id' => $Employee->id,
+                            'city_id' => $city_info['id'],
+                            'city_name' => $city_info['name']
+                        ];
+                        $EmployeeAreaModel->insert($insert_city_data);
+                    }
                 }
-                $EmployeeAreaModel->insert($insert_city_data);
             }
             $EmployeeDepartmentModel->where('employee_id', $Employee->id)->delete();
             if ($data['department_ids']) {

+ 25 - 0
app/Models/Manager/Personnel/EmployeeProvince.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 2026-03-19
+ */
+class EmployeeProvince extends Model
+{
+    use HasFactory;
+    // 与模型关联的表名
+    protected $table = 'personnel_employee_province';
+    // 是否主动维护时间戳
+    public $timestamps = false;
+    // 定义时间戳字段名
+    // const CREATED_AT = 'insert_time';
+    // const UPDATED_AT = 'update_time';
+
+}