Ver Fonte

feat:后台-审核技师资质认证

刘学玺 há 3 meses atrás
pai
commit
07124a6e7f

+ 105 - 61
app/Admin/Controllers/CoachQualRecordController.php

@@ -4,6 +4,8 @@ namespace App\Admin\Controllers;
 
 use App\Services\CoachQualRecordService;
 use Slowlyo\OwlAdmin\Controllers\AdminController;
+use Illuminate\Http\Request;
+use Slowlyo\OwlAdmin\Admin;
 
 /**
  * 技师资质认证记录
@@ -12,68 +14,110 @@ use Slowlyo\OwlAdmin\Controllers\AdminController;
  */
 class CoachQualRecordController extends AdminController
 {
-	protected string $serviceName = CoachQualRecordService::class;
+    protected string $serviceName = CoachQualRecordService::class;
 
-	public function list()
-	{
-		$crud = $this->baseCRUD()
-			->filterTogglable(false)
-			->headerToolbar([
-				$this->createButton('dialog'),
-				...$this->baseHeaderToolBar()
-			])
-			->columns([
-				amis()->TableColumn('id', 'ID')->sortable(),
-				amis()->TableColumn('coach_id', '技师编号'),
-				amis()->TableColumn('qual_type', '资质类型'),
-				amis()->TableColumn('qual_no', '资质证书编号'),
-				amis()->TableColumn('qual_photo', '资质证书照片'),
-				amis()->TableColumn('valid_start', '有效期开始日期'),
-				amis()->TableColumn('valid_end', '有效期结束日期'),
-				amis()->TableColumn('auditor', '审核人'),
-				amis()->TableColumn('audit_time', '审核时间'),
-				amis()->TableColumn('audit_remark', '审核回执'),
-				amis()->TableColumn('state', '状态'),
-				amis()->TableColumn('created_at', admin_trans('admin.created_at'))->type('datetime')->sortable(),
-				amis()->TableColumn('updated_at', admin_trans('admin.updated_at'))->type('datetime')->sortable(),
-				$this->rowActions('dialog')
-			]);
+    public function list()
+    {
+        $crud = $this->baseCRUD()
+            ->filterTogglable(false)
+            ->headerToolbar([
+                $this->createButton('dialog'),
+                ...$this->baseHeaderToolBar()
+            ])
+            ->columns([
+                amis()->TableColumn('id', 'ID')->sortable(),
+                amis()->TableColumn('coach_id', '技师编号'),
+                amis()->TableColumn('qual_type', '资质类型'),
+                amis()->TableColumn('qual_no', '资质证书编号'),
+                amis()->TableColumn('qual_photo', '资质证书照片'),
+                amis()->TableColumn('valid_start', '有效期开始日期'),
+                amis()->TableColumn('valid_end', '有效期结束日期'),
+                amis()->TableColumn('auditor', '审核人'),
+                amis()->TableColumn('audit_time', '审核时间'),
+                amis()->TableColumn('audit_remark', '审核回执'),
+                amis()->TableColumn('state', '状态'),
+                amis()->TableColumn('created_at', admin_trans('admin.created_at'))->type('datetime')->sortable(),
+                amis()->TableColumn('updated_at', admin_trans('admin.updated_at'))->type('datetime')->sortable(),
+                $this->rowActions('dialog')
+            ]);
 
-		return $this->baseList($crud);
-	}
+        return $this->baseList($crud);
+    }
 
-	public function form($isEdit = false)
-	{
-		return $this->baseForm()->body([
-			amis()->TextControl('coach_id', '技师编号'),
-			amis()->TextControl('qual_type', '资质类型'),
-			amis()->TextControl('qual_no', '资质证书编号'),
-			amis()->TextControl('qual_photo', '资质证书照片'),
-			amis()->TextControl('valid_start', '有效期开始日期'),
-			amis()->TextControl('valid_end', '有效期结束日期'),
-			amis()->TextControl('auditor', '审核人'),
-			amis()->TextControl('audit_time', '审核时间'),
-			amis()->TextControl('audit_remark', '审核回执'),
-			amis()->TextControl('state', '状态'),
-		]);
-	}
+    public function form($isEdit = false)
+    {
+        return $this->baseForm()->body([
+            amis()->TextControl('coach_id', '技师编号'),
+            amis()->TextControl('qual_type', '资质类型'),
+            amis()->TextControl('qual_no', '资质证书编号'),
+            amis()->TextControl('qual_photo', '资质证书照片'),
+            amis()->TextControl('valid_start', '有效期开始日期'),
+            amis()->TextControl('valid_end', '有效期结束日期'),
+            amis()->TextControl('auditor', '审核人'),
+            amis()->TextControl('audit_time', '审核时间'),
+            amis()->TextControl('audit_remark', '审核回执'),
+            amis()->TextControl('state', '状态'),
+        ]);
+    }
 
-	public function detail()
-	{
-		return $this->baseDetail()->body([
-			amis()->TextControl('id', 'ID')->static(),
-			amis()->TextControl('coach_id', '技师编号')->static(),
-			amis()->TextControl('qual_type', '资质类型')->static(),
-			amis()->TextControl('qual_no', '资质证书编号')->static(),
-			amis()->TextControl('qual_photo', '资质证书照片')->static(),
-			amis()->TextControl('valid_start', '有效期开始日期')->static(),
-			amis()->TextControl('valid_end', '有效期结束日期')->static(),
-			amis()->TextControl('auditor', '审核人')->static(),
-			amis()->TextControl('audit_time', '审核时间')->static(),
-			amis()->TextControl('audit_remark', '审核回执')->static(),
-			amis()->TextControl('state', '状态')->static(),
-			amis()->TextControl('created_at', admin_trans('admin.created_at'))->static(),
-			amis()->TextControl('updated_at', admin_trans('admin.updated_at'))->static(),
-		]);
-	}
-}
+    public function detail()
+    {
+        return $this->baseDetail()->body([
+            amis()->TextControl('id', 'ID')->static(),
+            amis()->TextControl('coach_id', '技师编号')->static(),
+            amis()->TextControl('qual_type', '资质类型')->static(),
+            amis()->TextControl('qual_no', '资质证书编号')->static(),
+            amis()->TextControl('qual_photo', '资质证书照片')->static(),
+            amis()->TextControl('valid_start', '有效期开始日期')->static(),
+            amis()->TextControl('valid_end', '有效期结束日期')->static(),
+            amis()->TextControl('auditor', '审核人')->static(),
+            amis()->TextControl('audit_time', '审核时间')->static(),
+            amis()->TextControl('audit_remark', '审核回执')->static(),
+            amis()->TextControl('state', '状态')->static(),
+            amis()->TextControl('created_at', admin_trans('admin.created_at'))->static(),
+            amis()->TextControl('updated_at', admin_trans('admin.updated_at'))->static(),
+        ]);
+    }
+
+    /**
+     * [审核]审核技师资质认证
+     *
+     * @description 审核技师的资质认证记录,可通过或驳回
+     *
+     * @header x-xsrf-token required CSRF令牌 Example: your_csrf_token
+     *
+     * @bodyParam qual_record_id integer required 资质认证记录ID Example: 1
+     * @bodyParam qual_state integer required 审核状态(2:通过 3:驳回) Example: 2
+     * @bodyParam audit_remark string required 审核意见 Example: 资质证书有效,审核通过
+     *
+     * @response scenario=success {
+     *   "code": 200,
+     *   "message": "操作成功"
+     * }
+     *
+     * @response status=400 scenario="已审核" {
+     *   "message": "该认证已审核"
+     * }
+     *
+     * @response status=404 scenario="不存在" {
+     *   "message": "认证记录不存在"
+     * }
+     */
+    public function audit(Request $request)
+    {
+        $validated = $request->validate([
+            'qual_record_id' => 'required|integer|exists:coach_qual_records,id',
+            'qual_state' => 'required|integer|in:2,3', // 2:通过 3:驳回
+            'audit_remark' => 'required|string|max:255',
+        ]);
+
+        $result = $this->service->audit(
+            $validated['qual_record_id'],
+            $validated['qual_state'],
+            $validated['audit_remark'],
+            Admin::user()->id
+        );
+
+        return $this->autoResponse($result);
+    }
+}

+ 50 - 2
app/Services/CoachQualRecordService.php

@@ -4,6 +4,9 @@ namespace App\Services;
 
 use App\Models\CoachQualRecord;
 use Slowlyo\OwlAdmin\Services\AdminService;
+use Illuminate\Support\Facades\DB;
+use App\Models\CoachUser;
+use App\Enums\TechnicianAuthStatus;
 
 /**
  * 技师资质认证记录
@@ -13,5 +16,50 @@ use Slowlyo\OwlAdmin\Services\AdminService;
  */
 class CoachQualRecordService extends AdminService
 {
-	protected string $modelName = CoachQualRecord::class;
-}
+    protected string $modelName = CoachQualRecord::class;
+
+    /**
+     * 审核技师资质认证
+     *
+     * @param int $id 认证记录ID
+     * @param int $state 审核状态 2:通过 3:驳回
+     * @param string $remark 审核意见
+     * @param int $adminId 审核人ID
+     * @return bool
+     * @throws \Exception
+     */
+    public function audit(int $id, int $state, string $remark, int $adminId): bool
+    {
+        DB::beginTransaction();
+        try {
+            // 获取认证记录
+            $record = $this->getModel()::findOrFail($id);
+
+            // 检查状态
+            if ((int)$record->state != TechnicianAuthStatus::AUDITING->value) {
+                throw new \Exception('该认证已审核');
+            }
+
+            // 更新认证记录
+            $record->update([
+                'state' => $state,
+                'audit_remark' => $remark,
+                'auditor' => $adminId,
+                'audit_time' => now(),
+            ]);
+
+            // 如果审核通过,更新技师状态
+            if ($state == TechnicianAuthStatus::PASSED->value) {
+                CoachUser::where('id', $record->coach_id)->update([
+                    'qual_record_id' => $record->id
+                ]);
+            }
+
+            DB::commit();
+            return true;
+        } catch (\Exception $e) {
+            DB::rollBack();
+            throw $e;
+        }
+    }
+}

+ 2 - 0
routes/admin.php

@@ -31,6 +31,8 @@ Route::group([
     $router->post('coach_info_records/audit', [\App\Admin\Controllers\CoachInfoRecordController::class, 'audit']);
     // 技师资质认证记录
     $router->resource('coach_qual_records', \App\Admin\Controllers\CoachQualRecordController::class);
+    // 审核技师资质认证记录
+    $router->post('coach_qual_records/audit', [\App\Admin\Controllers\CoachQualRecordController::class, 'audit']);
     // 技师评分
     $router->resource('coach_scores', \App\Admin\Controllers\CoachScoreController::class);
     // 技师定位

+ 2 - 0
routes/web.php

@@ -232,5 +232,7 @@ Route::group([
         Route::post('coach_info_records/audit', [\App\Admin\Controllers\CoachInfoRecordController::class, 'audit']);
         // 审核技师实名认证记录
         Route::post('coach_real_records/audit', [\App\Admin\Controllers\CoachRealRecordController::class, 'audit']);
+        // 审核技师资质认证记录
+        Route::post('coach_qual_records/audit', [\App\Admin\Controllers\CoachQualRecordController::class, 'audit']);
     });
 });