Files
cunkebao_v3/Moncter/app/controller/PersonMergeController.php
2026-01-05 10:16:20 +08:00

170 lines
5.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\controller;
use app\service\PersonMergeService;
use app\service\IdentifierService;
use app\repository\UserProfileRepository;
use app\repository\UserTagRepository;
use app\repository\UserPhoneRelationRepository;
use app\service\UserPhoneService;
use app\service\TagService;
use app\repository\TagDefinitionRepository;
use app\repository\TagHistoryRepository;
use app\service\TagRuleEngine\SimpleRuleEngine;
use app\utils\ApiResponseHelper;
use app\utils\LoggerHelper;
use support\Request;
use support\Response;
/**
* 身份合并控制器
*
* 提供身份合并相关接口实现场景4手机号发现身份证后合并
*/
class PersonMergeController
{
/**
* 合并手机号到身份证场景4的实现
*
* 如果某个手机号发现了对应的身份证号,查询该身份下是否有标签,
* 如果有就会将对应的这个身份证号的所有标签重新计算同步。
*
* POST /api/person-merge/phone-to-id-card
*/
public function mergePhoneToIdCard(Request $request): Response
{
try {
LoggerHelper::logRequest('POST', '/api/person-merge/phone-to-id-card');
$rawBody = $request->rawBody();
if (empty($rawBody)) {
return ApiResponseHelper::error('请求体为空,请确保 Content-Type 为 application/json 并发送有效的 JSON 数据', 400);
}
$body = json_decode($rawBody, true);
if (json_last_error() !== JSON_ERROR_NONE) {
return ApiResponseHelper::error('JSON 格式错误: ' . json_last_error_msg(), 400);
}
// 验证必填字段
if (empty($body['phone_number'])) {
throw new \InvalidArgumentException('缺少必填字段phone_number');
}
if (empty($body['id_card'])) {
throw new \InvalidArgumentException('缺少必填字段id_card');
}
$phoneNumber = (string)$body['phone_number'];
$idCard = (string)$body['id_card'];
// 创建服务实例
$mergeService = new PersonMergeService(
new UserProfileRepository(),
new UserTagRepository(),
new UserPhoneService(
new UserPhoneRelationRepository()
),
new TagService(
new TagDefinitionRepository(),
new UserProfileRepository(),
new UserTagRepository(),
new TagHistoryRepository(),
new SimpleRuleEngine()
)
);
// 执行合并
$formalUserId = $mergeService->mergePhoneToIdCard($phoneNumber, $idCard);
LoggerHelper::logBusiness('person_merge_phone_to_id_card', [
'phone_number' => $phoneNumber,
'id_card_provided' => true,
'formal_user_id' => $formalUserId,
]);
return ApiResponseHelper::success([
'phone_number' => $phoneNumber,
'formal_user_id' => $formalUserId,
'message' => '身份合并成功,标签已重新计算',
]);
} catch (\InvalidArgumentException $e) {
return ApiResponseHelper::error($e->getMessage(), 400);
} catch (\Throwable $e) {
return ApiResponseHelper::exception($e);
}
}
/**
* 合并临时人到正式人
*
* POST /api/person-merge/temporary-to-formal
*/
public function mergeTemporaryToFormal(Request $request): Response
{
try {
LoggerHelper::logRequest('POST', '/api/person-merge/temporary-to-formal');
$rawBody = $request->rawBody();
if (empty($rawBody)) {
return ApiResponseHelper::error('请求体为空,请确保 Content-Type 为 application/json 并发送有效的 JSON 数据', 400);
}
$body = json_decode($rawBody, true);
if (json_last_error() !== JSON_ERROR_NONE) {
return ApiResponseHelper::error('JSON 格式错误: ' . json_last_error_msg(), 400);
}
// 验证必填字段
if (empty($body['user_id'])) {
throw new \InvalidArgumentException('缺少必填字段user_id');
}
if (empty($body['id_card'])) {
throw new \InvalidArgumentException('缺少必填字段id_card');
}
$tempUserId = (string)$body['user_id'];
$idCard = (string)$body['id_card'];
// 创建服务实例
$mergeService = new PersonMergeService(
new UserProfileRepository(),
new UserTagRepository(),
new UserPhoneService(
new UserPhoneRelationRepository()
),
new TagService(
new TagDefinitionRepository(),
new UserProfileRepository(),
new UserTagRepository(),
new TagHistoryRepository(),
new SimpleRuleEngine()
)
);
// 执行合并
$formalUserId = $mergeService->mergeTemporaryToFormal($tempUserId, $idCard);
LoggerHelper::logBusiness('person_merge_temporary_to_formal', [
'temp_user_id' => $tempUserId,
'formal_user_id' => $formalUserId,
]);
return ApiResponseHelper::success([
'temp_user_id' => $tempUserId,
'formal_user_id' => $formalUserId,
'message' => '临时人已转为正式人,标签已重新计算',
]);
} catch (\InvalidArgumentException $e) {
return ApiResponseHelper::error($e->getMessage(), 400);
} catch (\Throwable $e) {
return ApiResponseHelper::exception($e);
}
}
}