Browse Source

批量创建用户,其中入职时间字段未加入

langshiyeye 11 months ago
parent
commit
1b39f82e0f

+ 28 - 0
app/Http/Controllers/API/UserController.php

@@ -3,12 +3,15 @@
 namespace App\Http\Controllers\API;
 
 use App\Http\Controllers\Controller;
+use App\Http\Requests\API\User\BatchCreateRequest;
 use App\Http\Requests\API\User\CreateOrUpdateRequest;
 use App\Http\Resources\API\UserInfoResource;
+use App\Models\Enums\RequirementStatus;
 use App\Models\Role;
 use App\Models\User;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Hash;
 
 class UserController extends Controller
@@ -60,6 +63,31 @@ class UserController extends Controller
     }
 
 
+    /**
+     * batchCreate  User,为ditto时参考上一条
+     * @return \Illuminate\Http\Response
+     */
+    public function batchStore(BatchCreateRequest $request){
+        $userData = $request->all();
+        DB::transaction(function () use ($userData) {
+        foreach ($userData as $k => $data) {
+            $user = new User();
+            if ($k != 0) {
+                $userData[$k]["department_id"] = $userData[$k]["department_id"] == 'ditto' ? $userData[$k - 1]["department_id"] : $userData[$k]["department_id"];
+                $userData[$k]["role_id"] = $userData[$k]["role_id"] == 'ditto' ? $userData[$k - 1]["role_id"] : $userData[$k]["role_id"];
+            }
+            $userData[$k]['password'] = Hash::make($userData[$k]['password']);
+            $user->fill([
+                ...$userData[$k],
+                'created_by' => Auth::id(),
+            ]);
+            //        TODO:发送邮箱给目标用户
+            $user->save();
+        }
+        });
+//        TODO:发送邮箱给目标用户
+        return $this->created();
+    }
     public function destroy(string $id)
     {
 

+ 64 - 0
app/Http/Requests/API/User/BatchCreateRequest.php

@@ -0,0 +1,64 @@
+<?php
+
+namespace App\Http\Requests\API\User;
+
+use App\Http\Requests\RuleHelper;
+use App\Models\Company;
+use App\Models\Department;
+use App\Models\Role;
+use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Validation\Rule;
+
+class BatchCreateRequest extends FormRequest
+{
+    use RuleHelper;
+
+    /**
+     * Determine if the user is authorized to make this request.
+     */
+    public function authorize(): bool
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
+     */
+    public function rules(): array
+    {
+        $departmentIds=[];
+        if(Auth::user()->super_admin){ //若是超级管理员可以查看所有部门,且添加
+            $departmentIds = Department::withoutGlobalScopes()->pluck('id')->toArray();
+
+        }else{
+            $departmentIds = Department::pluck('id')->toArray();
+        }
+        $roleIds = Role::pluck('id')->toArray();
+
+        $IdsAndDitto=$departmentIds;
+        $IdsAndDitto[] = 'ditto';
+
+        $IdsAndDittoWithRole=$roleIds;
+        $IdsAndDittoWithRole[]='ditto';
+
+        return [
+            '*.name' => 'required|max:100',
+            '*.email'=> 'required|email|unique:users',
+            '*.username'=>'required|max:30|unique:users',
+//            '*.pwd_is_ditto'=>'required|in:1,0',取消密码同上
+            '*.password' => 'required|min:6|regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,}$/',//至少6位,包含大小写字母和数字,At least 6 digits, including upper and lower case letters and numbers
+            '*.gender'=>'nullable|in:1,0',
+            '*.company_id'=>'required|exists:company,id',
+            '*.department_id'=>[
+                Rule::in($IdsAndDitto),
+            ],
+            '*.role_id'=>[
+                Rule::in($IdsAndDittoWithRole),
+            ],
+        ];
+    }
+
+}

+ 2 - 2
app/Http/Requests/API/User/CreateOrUpdateRequest.php

@@ -29,8 +29,8 @@ class CreateOrUpdateRequest extends FormRequest
             'name' => 'required|max:100',
             'email'=> 'required|email|unique:users',
             'username'=>'required|max:30|unique:users',
-            'password' => 'required|min:6|regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,}$/', // 至少6位,包含大小写字母和数字
-            'confirm_password' => 'required|same:password', // 与password字段相同
+            'password' => 'required|min:6|regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,}$/', // 至少6位,包含大小写字母和数字,At least 6 digits, including upper and lower case letters and numbers
+            'confirm_password' => 'required|same:password',
             'phone'=>'nullable|regex:/^\d{10}$/',
             'gender'=>'nullable|in:1,0',
             'address'=>'nullable|max:255',

+ 2 - 0
app/Models/User.php

@@ -30,6 +30,8 @@ class User extends Authenticatable
         'company_id',
         'department_id',
         'role_id',
+        'created_by',
+        'gender',
     ];
 
     /**

+ 1 - 0
routes/api.php

@@ -84,6 +84,7 @@ Route::middleware(['auth:sanctum'])->group(function () {
         Route::get("role/{role}/permission", [API\RoleController::class, "permissions"])->name("role.permissions");
         Route::put("role/{role}/assign-permission", [API\RoleController::class, "assignPermissions"])->name("role.assign-permissions");
         Route::put("user/{user}/assign-role", [API\UserController::class, "assignRole"])->name("user.assign-role");
+        Route::post("user/user-batch-create", [API\UserController::class, "batchStore"])->name("user.assign-role");
 
         Route::get("custom-field-group", [API\CustomFieldController::class, "groups"])->name("custom-field.groups");
         Route::get("custom-field-group/naming-rule", [API\CustomFieldController::class, "nameRuleGroups"])->name("custom-field.nameRuleGroups");