|
@@ -93,7 +93,7 @@ class AccountService
|
|
|
|
|
|
|
|
|
$pendingRecord = $this->hasPendingRecord($user->coach, 'qual');
|
|
|
-
|
|
|
+ abort_if($pendingRecord, 422, '已有待审核的资质信息记录');
|
|
|
|
|
|
|
|
|
$record = $user->coach->qualRecords()->create([
|
|
@@ -128,33 +128,64 @@ class AccountService
|
|
|
|
|
|
|
|
|
* 提交实名认证信息
|
|
|
+ * 包括姓名、身份证号(可选)和三张身份证照片的提交和审核
|
|
|
+ *
|
|
|
+ * 业务流程:
|
|
|
+ * 1. 验证技师信息存在性
|
|
|
+ * 2. 检查是否有待审核的记录
|
|
|
+ * 3. 创建新的实名认证记录
|
|
|
+ * 4. 清除相关缓存
|
|
|
+ *
|
|
|
+ * 注意事项:
|
|
|
+ * - 同一时间只能有一条待审核记录
|
|
|
+ * - 审核不通过可以重新提交
|
|
|
+ * - 所有图片数据不限制格式
|
|
|
+ * - 身份证号为可选字段
|
|
|
+ * - 敏感信息会进行脱敏处理
|
|
|
+ *
|
|
|
+ * @param User $user 当前认证用户
|
|
|
+ * @param array $data 实名认证数据,包含:
|
|
|
+ * - real_name: string 真实姓名
|
|
|
+ * - id_card: string|null 身份证号(可选)
|
|
|
+ * - id_card_front_photo: string 身份证正面照片
|
|
|
+ * - id_card_back_photo: string 身份证反面照片
|
|
|
+ * - id_card_hand_photo: string 手持身份证照片
|
|
|
+ * @return array 返回结果
|
|
|
+ * @throws \Exception 当验证失败或保存失败时抛出异常
|
|
|
*/
|
|
|
public function submitRealName($user, array $data)
|
|
|
{
|
|
|
+
|
|
|
DB::beginTransaction();
|
|
|
try {
|
|
|
+
|
|
|
+ abort_if(!$user->coach, 404, '技师信息不存在');
|
|
|
|
|
|
- abort_if(! $user->coach, 404, '技师信息不存在');
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
$pendingRecord = $this->hasPendingRecord($user->coach, 'real');
|
|
|
abort_if($pendingRecord, 422, '已有待审核的实名认证信息');
|
|
|
|
|
|
-
|
|
|
+
|
|
|
$record = $user->coach->realRecords()->create(array_merge($data, [
|
|
|
'state' => TechnicianAuthStatus::AUDITING->value,
|
|
|
]));
|
|
|
|
|
|
-
|
|
|
+
|
|
|
$this->clearCoachCache($user->coach->id);
|
|
|
|
|
|
+
|
|
|
DB::commit();
|
|
|
|
|
|
+
|
|
|
$this->logInfo('技师提交实名认证信息成功', $user, $this->maskSensitiveData($data));
|
|
|
|
|
|
+
|
|
|
return ['message' => '实名认证信息提交成功'];
|
|
|
} catch (\Exception $e) {
|
|
|
+
|
|
|
DB::rollBack();
|
|
|
+
|
|
|
+
|
|
|
$this->logError('提交实名认证信息失败', $user, $this->maskSensitiveData($data), $e);
|
|
|
throw $e;
|
|
|
}
|
|
@@ -341,7 +372,7 @@ class AccountService
|
|
|
try {
|
|
|
|
|
|
if (! is_numeric($latitude) || ! is_numeric($longitude)) {
|
|
|
- throw new \Exception('无���的经纬度坐标');
|
|
|
+ throw new \Exception('无效的经纬度坐标');
|
|
|
}
|
|
|
|
|
|
|
|
@@ -500,7 +531,7 @@ class AccountService
|
|
|
*/
|
|
|
private function validateAndSortTimeRanges(array $timeRanges): array
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
abort_if(empty($timeRanges), 400, '必须至少设置一个时间段');
|
|
|
|
|
|
|
|
@@ -797,7 +828,7 @@ class AccountService
|
|
|
|
|
|
return false;
|
|
|
} catch (\Exception $e) {
|
|
|
- Log::error('检查排班时间异���', [
|
|
|
+ Log::error('检查排班时间异常', [
|
|
|
'coach_id' => $coachId,
|
|
|
'error' => $e->getMessage(),
|
|
|
]);
|
|
@@ -929,9 +960,9 @@ class AccountService
|
|
|
}
|
|
|
|
|
|
|
|
|
- * 检查是否存在待审核记录
|
|
|
+ * 检查是否存在��审核记录
|
|
|
*
|
|
|
- * @param CoachUser $coach 技师���象
|
|
|
+ * @param CoachUser $coach 技师象
|
|
|
* @param string $type 记录类型(info|qual|real)
|
|
|
* @return bool
|
|
|
*/
|