|
@@ -98,7 +98,7 @@ class AccountService
|
|
*
|
|
*
|
|
* @param User $user 当前认证用户
|
|
* @param User $user 当前认证用户
|
|
* @param array $data 资质信息数据,包含:
|
|
* @param array $data 资质信息数据,包含:
|
|
- * - qual_type: string 资质类型(如:高级按摩师)
|
|
|
|
|
|
+ * - qual_type: int 资质类型(1:初级 2:中级 3:高级)
|
|
* - qual_photo: string 资质证书照片
|
|
* - qual_photo: string 资质证书照片
|
|
* - business_license: string 营业执照照片
|
|
* - business_license: string 营业执照照片
|
|
* - health_cert: string 健康证照片
|
|
* - health_cert: string 健康证照片
|
|
@@ -210,31 +210,57 @@ class AccountService
|
|
|
|
|
|
/**
|
|
/**
|
|
* 获取技师信息
|
|
* 获取技师信息
|
|
|
|
+ * 包括基本信息、资质信息和实名认证信息
|
|
|
|
+ *
|
|
|
|
+ * 业务流程:
|
|
|
|
+ * 1. 验证用户和技师信息存在性
|
|
|
|
+ * 2. 尝试从缓存获取数据
|
|
|
|
+ * 3. 如果缓存不存在,从数据库获取并缓存
|
|
|
|
+ *
|
|
|
|
+ * 注意事项:
|
|
|
|
+ * - 所有图片数据不限制格式
|
|
|
|
+ * - 敏感信息会进行脱敏处理
|
|
|
|
+ * - 使用缓存提高性能
|
|
|
|
+ *
|
|
|
|
+ * @param User $user 当前认证用户
|
|
|
|
+ * @return array 返回技师所有信息,包含:
|
|
|
|
+ * - base_info: array|null 基本信息
|
|
|
|
+ * - qualification: array|null 资质信息
|
|
|
|
+ * - real_name: array|null 实名认证信息
|
|
|
|
+ * @throws \Exception 当验证失败时抛出异常
|
|
*/
|
|
*/
|
|
public function getCoachInfo($user)
|
|
public function getCoachInfo($user)
|
|
{
|
|
{
|
|
- abort_if(! $user, 404, '用户不存在');
|
|
|
|
- abort_if(! $user->coach, 404, '技师信息不存在');
|
|
|
|
|
|
+ // 验证用户和技师信息
|
|
|
|
+ abort_if(!$user, 404, '用户不存在');
|
|
|
|
+ abort_if(!$user->coach, 404, '技师信息不存在');
|
|
|
|
|
|
|
|
+ // 尝试从缓存获取数据
|
|
return Cache::remember(
|
|
return Cache::remember(
|
|
self::CACHE_KEY_PREFIX . $user->coach->id,
|
|
self::CACHE_KEY_PREFIX . $user->coach->id,
|
|
self::CACHE_TTL,
|
|
self::CACHE_TTL,
|
|
function () use ($user) {
|
|
function () use ($user) {
|
|
|
|
+ // 缓存不存在时,从数据库获取
|
|
return $this->fetchCoachInfo($user->coach);
|
|
return $this->fetchCoachInfo($user->coach);
|
|
}
|
|
}
|
|
);
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* 获取技师详细信息
|
|
* 获取技师详细信息
|
|
|
|
+ * 从数据库获取最新的认证记录信息
|
|
|
|
+ *
|
|
|
|
+ * @param CoachUser $coach 技师对象
|
|
|
|
+ * @return array 格式化后的技师信息
|
|
*/
|
|
*/
|
|
private function fetchCoachInfo($coach)
|
|
private function fetchCoachInfo($coach)
|
|
{
|
|
{
|
|
|
|
+ // 获取最新的各类认证记录
|
|
$baseInfo = $coach->infoRecords()->latest()->first();
|
|
$baseInfo = $coach->infoRecords()->latest()->first();
|
|
$qualification = $coach->qualRecords()->latest()->first();
|
|
$qualification = $coach->qualRecords()->latest()->first();
|
|
$realName = $coach->realRecords()->latest()->first();
|
|
$realName = $coach->realRecords()->latest()->first();
|
|
|
|
|
|
|
|
+ // 格式化并返回数据
|
|
return [
|
|
return [
|
|
'base_info' => $baseInfo ? $this->formatBaseInfo($baseInfo) : null,
|
|
'base_info' => $baseInfo ? $this->formatBaseInfo($baseInfo) : null,
|
|
'qualification' => $qualification ? $this->formatQualification($qualification) : null,
|
|
'qualification' => $qualification ? $this->formatQualification($qualification) : null,
|
|
@@ -244,14 +270,19 @@ class AccountService
|
|
|
|
|
|
/**
|
|
/**
|
|
* 格式化基本信息
|
|
* 格式化基本信息
|
|
|
|
+ * 处理技师基本信息的展示格式
|
|
|
|
+ *
|
|
|
|
+ * @param object $info 基本信息记录对象
|
|
|
|
+ * @return array 格式化后的基本信息
|
|
*/
|
|
*/
|
|
private function formatBaseInfo($info)
|
|
private function formatBaseInfo($info)
|
|
{
|
|
{
|
|
|
|
+ // 返回格式化后的基本信息,包含状态文本
|
|
return [
|
|
return [
|
|
'nickname' => $info->nickname,
|
|
'nickname' => $info->nickname,
|
|
- 'avatar' => $info->avatar,
|
|
|
|
|
|
+ 'avatar' => $info->avatar, // 支持任意格式的图片数据
|
|
'gender' => $info->gender,
|
|
'gender' => $info->gender,
|
|
- 'mobile' => $this->maskMobile($info->mobile),
|
|
|
|
|
|
+ 'mobile' => $this->maskMobile($info->mobile), // 手机号脱敏处理
|
|
'birthday' => $info->birthday,
|
|
'birthday' => $info->birthday,
|
|
'work_years' => $info->work_years,
|
|
'work_years' => $info->work_years,
|
|
'intention_city' => $info->intention_city,
|
|
'intention_city' => $info->intention_city,
|
|
@@ -264,17 +295,27 @@ class AccountService
|
|
|
|
|
|
/**
|
|
/**
|
|
* 格式化资质信息
|
|
* 格式化资质信息
|
|
|
|
+ * 处理技师资质信息的展示格式
|
|
*
|
|
*
|
|
* @param object $qual 资质记录对象
|
|
* @param object $qual 资质记录对象
|
|
* @return array 格式化后的资质信息
|
|
* @return array 格式化后的资质信息
|
|
*/
|
|
*/
|
|
private function formatQualification($qual)
|
|
private function formatQualification($qual)
|
|
{
|
|
{
|
|
|
|
+ // 资质类型文本映射
|
|
|
|
+ $qualTypeMap = [
|
|
|
|
+ 1 => '初级按摩师',
|
|
|
|
+ 2 => '中级按摩师',
|
|
|
|
+ 3 => '高级按摩师',
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ // 返回格式化后的资质信息,包含状态文本
|
|
return [
|
|
return [
|
|
'qual_type' => $qual->qual_type,
|
|
'qual_type' => $qual->qual_type,
|
|
- 'qual_photo' => $qual->qual_photo,
|
|
|
|
- 'business_license' => $qual->business_license,
|
|
|
|
- 'health_cert' => $qual->health_cert,
|
|
|
|
|
|
+ 'qual_type_text' => $qualTypeMap[$qual->qual_type] ?? '未知类型', // 添加类型文本
|
|
|
|
+ 'qual_photo' => $qual->qual_photo, // 支持任意格式的图片数据
|
|
|
|
+ 'business_license' => $qual->business_license, // 支持任意格式的图片数据
|
|
|
|
+ 'health_cert' => $qual->health_cert, // 支持任意格式的图片数据
|
|
'state' => $qual->state,
|
|
'state' => $qual->state,
|
|
'state_text' => TechnicianAuthStatus::fromValue($qual->state)->label(),
|
|
'state_text' => TechnicianAuthStatus::fromValue($qual->state)->label(),
|
|
'audit_remark' => $qual->audit_remark,
|
|
'audit_remark' => $qual->audit_remark,
|
|
@@ -283,15 +324,20 @@ class AccountService
|
|
|
|
|
|
/**
|
|
/**
|
|
* 格式化实名信息
|
|
* 格式化实名信息
|
|
|
|
+ * 处理技师实名认证信息的展示格式
|
|
|
|
+ *
|
|
|
|
+ * @param object $real 实名认证记录对象
|
|
|
|
+ * @return array 格式化后的实名信息
|
|
*/
|
|
*/
|
|
private function formatRealName($real)
|
|
private function formatRealName($real)
|
|
{
|
|
{
|
|
|
|
+ // 返回格式化后的实名信息,包含状态文本和脱敏处理
|
|
return [
|
|
return [
|
|
'real_name' => $real->real_name,
|
|
'real_name' => $real->real_name,
|
|
- 'id_card' => $this->maskIdCard($real->id_card),
|
|
|
|
- 'id_card_front_photo' => $real->id_card_front_photo,
|
|
|
|
- 'id_card_back_photo' => $real->id_card_back_photo,
|
|
|
|
- 'id_card_hand_photo' => $real->id_card_hand_photo,
|
|
|
|
|
|
+ 'id_card' => $this->maskIdCard($real->id_card), // 身份证号脱敏处理
|
|
|
|
+ 'id_card_front_photo' => $real->id_card_front_photo, // 支持任意格式的图片数据
|
|
|
|
+ 'id_card_back_photo' => $real->id_card_back_photo, // 支持任意格式的图片数据
|
|
|
|
+ 'id_card_hand_photo' => $real->id_card_hand_photo, // 支持任意格式的图片数据
|
|
'state' => $real->state,
|
|
'state' => $real->state,
|
|
'state_text' => TechnicianAuthStatus::fromValue($real->state)->label(),
|
|
'state_text' => TechnicianAuthStatus::fromValue($real->state)->label(),
|
|
'audit_remark' => $real->audit_remark,
|
|
'audit_remark' => $real->audit_remark,
|
|
@@ -300,6 +346,10 @@ class AccountService
|
|
|
|
|
|
/**
|
|
/**
|
|
* 手机号脱敏
|
|
* 手机号脱敏
|
|
|
|
+ * 将手机号中间4位替换为****
|
|
|
|
+ *
|
|
|
|
+ * @param string $mobile 原始手机号
|
|
|
|
+ * @return string 脱敏后的手机号
|
|
*/
|
|
*/
|
|
private function maskMobile($mobile)
|
|
private function maskMobile($mobile)
|
|
{
|
|
{
|
|
@@ -307,10 +357,17 @@ class AccountService
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 身份证脱敏
|
|
|
|
|
|
+ * 身份证号脱敏
|
|
|
|
+ * 将身份证号中间8位替换为****
|
|
|
|
+ *
|
|
|
|
+ * @param string|null $idCard 原始身份证号
|
|
|
|
+ * @return string|null 脱敏后的身份证号
|
|
*/
|
|
*/
|
|
private function maskIdCard($idCard)
|
|
private function maskIdCard($idCard)
|
|
{
|
|
{
|
|
|
|
+ if (!$idCard) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
return substr_replace($idCard, '****', 6, 8);
|
|
return substr_replace($idCard, '****', 6, 8);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -759,7 +816,7 @@ class AccountService
|
|
*/
|
|
*/
|
|
private function validateRestStatus(int $currentStatus): void
|
|
private function validateRestStatus(int $currentStatus): void
|
|
{
|
|
{
|
|
- // 只有在空闲或忙碌状态下才能更改为休息状态
|
|
|
|
|
|
+ // 只有在空闲或忙碌状态下才能改为休息状态
|
|
abort_if(! in_array($currentStatus, [
|
|
abort_if(! in_array($currentStatus, [
|
|
TechnicianWorkStatus::FREE->value,
|
|
TechnicianWorkStatus::FREE->value,
|
|
TechnicianWorkStatus::BUSY->value,
|
|
TechnicianWorkStatus::BUSY->value,
|