getModel()::with('coach')->findOrFail($id); $coach = $record->coach; // 检查技师信息和认证状态 abort_if(!$coach, 400, '技师信息不存在'); abort_if( (int)$record->state !== TechnicianAuthStatus::AUDITING->value, 400, '该申请已审核' ); // 更新认证记录 $record->state = $state; $record->audit_remark = $remark; $record->auditor = $adminId; $record->audit_time = now(); $record->save(); // 审核通过时的处理 if ($state === TechnicianAuthStatus::PASSED->value) { $updateData = ['info_record_id' => $record->id]; // 首次申请通过时,激活技师状态 if (!$coach->info_record_id) { $updateData['state'] = TechnicianStatus::ACTIVE->value; } // 更新技师信息 $coach->update($updateData); } return true; }); } /** * 更新技师基本信息 * * 业务流程: * 1. 验证记录是否存在 * 2. 处理正装照片: * - 从数据中提取正装照片字段 * - 如果有值则更新技师表 * - 记录更新时间和操作人 * 3. 处理基本信息: * - 过滤空值字段 * - 处理生活照片JSON转换 * - 更新基本信息记录 * 4. 使用事务确保数据一致性 * * 注意事项: * - 所有字段都是可选的 * - 正装照片存储在技师表中 * - 生活照片以JSON数组格式存储 * - 只更新有值的字段 * * @param array $data 更新数据,包含: * - id: int 记录ID * - nickname: ?string 昵称 * - avatar: ?string 头像 * - formal_photo: ?string 正装照片(存储在技师表) * - gender: ?int 性别(1:男 2:女) * - mobile: ?string 手机号 * - birthday: ?string 出生日期 * - work_years: ?int 工作年限 * - intention_city: ?string 意向城市 * - introduction: ?string 个人简介 * - life_photos: ?array 生活照片数组 * * @return array 更新结果 * @throws \Exception 当记录不存在时抛出异常 */ public function updateInfo(array $data): array { return DB::transaction(function () use ($data) { $record = $this->getModel()::findOrFail($data['id']); $coach = $record->coach; // 提取正装照片字段 $formalPhoto = $data['formal_photo'] ?? null; unset($data['formal_photo']); // 移除 id 字段 unset($data['id']); // 过滤掉空值字段 $updateData = array_filter($data, function ($value) { return !is_null($value); }); // 如果有生活照片,转换为JSON if (isset($updateData['life_photos'])) { $updateData['life_photos'] = json_encode(array_values($updateData['life_photos'])); } // 更新记录 $record->update($updateData); // 如果有正装照片,更新技师表 if ($formalPhoto !== null && $coach) { $coach->update([ 'formal_photo' => $formalPhoto, 'formal_photo_updated_at' => now(), 'formal_photo_admin_id' => Auth::id(), ]); } return [ 'message' => '修改成功', 'data' => $record ]; }); } }