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); } } }