|
@@ -419,7 +419,7 @@ class AccountService
|
|
|
*/
|
|
|
public function setLocation($coachId, $latitude, $longitude, $type = TechnicianLocationType::COMMON->value, array $locationInfo = [])
|
|
|
{
|
|
|
- // 使用事务确保��一致性
|
|
|
+ // 使用事务确保一致性
|
|
|
return DB::transaction(function () use ($coachId, $latitude, $longitude, $type, $locationInfo) {
|
|
|
// 验证经纬度的有效性(-90≤纬度≤90,-180≤经度≤180)
|
|
|
$this->validateCoordinates($latitude, $longitude);
|
|
@@ -1221,14 +1221,16 @@ class AccountService
|
|
|
*
|
|
|
* 业务流程:
|
|
|
* 1. 获取最新的非拒绝记录
|
|
|
- * 2. 如果是待审核状态,直接更新字段
|
|
|
- * 3. 如果是已通过状态,创建新记录并复制字段
|
|
|
+ * 2. 验证手机验证码(如果修改手机号)
|
|
|
+ * 3. 如果是待审核状态,直接更新字段
|
|
|
+ * 4. 如果是已通过状态,创建新记录并复制字段
|
|
|
*
|
|
|
* @param CoachUser $coach 技师对象
|
|
|
* @param array $data 待更新的数据,可包含:
|
|
|
* - nickname: ?string 昵称
|
|
|
* - gender: ?int 性别(1:男 2:女)
|
|
|
* - mobile: ?string 手机号
|
|
|
+ * - code: ?string 验证码(修改手机号时必填)
|
|
|
* @return array 返回结果
|
|
|
*/
|
|
|
public function updateBasicInfo(CoachUser $coach, array $data): array
|
|
@@ -1242,6 +1244,11 @@ class AccountService
|
|
|
|
|
|
abort_if(!$latestRecord, 404, '未找到有效的基础信息记录');
|
|
|
|
|
|
+ // 如果要修改手机号,验证验证码
|
|
|
+ if (isset($data['mobile'])) {
|
|
|
+ $this->verifyMobileCode($data['mobile'], $data['code']);
|
|
|
+ }
|
|
|
+
|
|
|
// 提取要更新的字段
|
|
|
$updateFields = array_intersect_key($data, [
|
|
|
'nickname' => '',
|
|
@@ -1284,6 +1291,28 @@ class AccountService
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 验证手机验证码
|
|
|
+ *
|
|
|
+ * @param string $mobile 手机号
|
|
|
+ * @param string $code 验证码
|
|
|
+ * @throws \Illuminate\Http\Exceptions\HttpResponseException
|
|
|
+ */
|
|
|
+ private function verifyMobileCode(string $mobile, string $code): void
|
|
|
+ {
|
|
|
+ // 缓存键
|
|
|
+ $cacheKey = "sms_code:update:{$mobile}";
|
|
|
+
|
|
|
+ // 获取缓存中的验证码
|
|
|
+ $cacheCode = Redis::get($cacheKey);
|
|
|
+
|
|
|
+ // 验证码不存在或不匹配
|
|
|
+ abort_if(!$cacheCode || $cacheCode !== $code, 422, '验证码错误或已过期');
|
|
|
+
|
|
|
+ // 验证成功后删除验证码
|
|
|
+ Redis::del($cacheKey);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 发送验证码
|
|
|
*
|