본문으로 건너뛰기

애널리틱스 세션 분석 기능 고도화

PHP 7 · GODO25
변경 파일 수: 11개
변경 파일 목록
총 11개
변경 파일 코드
추가삭제
Component/Cart/Cart.php+12
변경 전Cart.php
use Framework\Utility\ArrayUtils;
use Framework\Utility\NumberUtils;
use Framework\Utility\ProducerUtils;
 
use Framework\Utility\SkinUtils;
use Framework\Utility\StringUtils;
use Globals;
$result = $kafka->send($kafka::TOPIC_CART_ADD_STATISTICS, $kafka->makeData([$cartStatistics], 'cas'), $kafka::MODE_RESULT_CALLLBACK, true);
\Logger::channel('kafka')->info('process sendMQ - return :', $result);
}
 
 
 
 
 
 
 
 
 
 
 
// 장바구니 변경 갯수 상품 업데이트
$goods = \App::load(\Component\Goods\Goods::class);
$goods->setCartGoodsCount($arrData['goodsNo']);
 
변경 후Cart.php
use Framework\Utility\ArrayUtils;
use Framework\Utility\NumberUtils;
use Framework\Utility\ProducerUtils;
use Origin\Service\Statistics\Analytics\Cart\CartAddHistoryAnalyticsCollectorService;
use Framework\Utility\SkinUtils;
use Framework\Utility\StringUtils;
use Globals;
$result = $kafka->send($kafka::TOPIC_CART_ADD_STATISTICS, $kafka->makeData([$cartStatistics], 'cas'), $kafka::MODE_RESULT_CALLLBACK, true);
\Logger::channel('kafka')->info('process sendMQ - return :', $result);
}
 
// 장바구니 추가 통계 수집 (수기주문 제외)
try {
$cartAddHistoryAnalyticsCollectorService = \App::getInstance(CartAddHistoryAnalyticsCollectorService::class);
if ($cartAddHistoryAnalyticsCollectorService->isCollectableCart($this->isWrite)) {
$cartAddHistoryAnalyticsCollectorService->collectAnalytics($arrData);
}
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
 
// 장바구니 변경 갯수 상품 업데이트
$goods = \App::load(\Component\Goods\Goods::class);
$goods->setCartGoodsCount($arrData['goodsNo']);
 
Component/Database/DBTableField.php+19
변경 전DBTableField.php
 
return $arrField;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
}
 
변경 후DBTableField.php
 
return $arrField;
}
 
/**
* [주문] analyticsOrder 필드 기본값
*
* @return array analyticsOrder 테이블 필드 정보
*/
public static function tableAnalyticsOrder()
{
// @formatter:off
$arrField = [
['val' => 'orderNo', 'typ' => 's', 'def' => null], // 주문번호
['val' => 'clientId', 'typ' => 's', 'def' => null], // 애널리틱스 클라이언트 ID
['val' => 'sessionId', 'typ' => 's', 'def' => null], // 애널리틱스 세션 ID
['val' => 'regDt', 'typ' => 's', 'def' => null], // 등록일
];
// @formatter:on
 
return $arrField;
}
}
 
Component/Order/ExternalOrder.php+12
변경 전ExternalOrder.php
use Session;
use Framework\Utility\ArrayUtils;
use Framework\Utility\StringUtils;
 
 
/**
* 외부채널 주문 관련 class
}
 
unset($arrBind);
 
 
 
 
 
 
 
 
 
 
 
}
 
/*
 
변경 후ExternalOrder.php
use Session;
use Framework\Utility\ArrayUtils;
use Framework\Utility\StringUtils;
use Origin\Service\Statistics\Analytics\Order\AnalyticsOrderService;
 
/**
* 외부채널 주문 관련 class
}
 
unset($arrBind);
 
// 애널리틱스 주문 추적값 저장
try {
if (empty($insertDataOrder['orderNo'])) {
throw new Exception('orderNo가 비어있습니다');
}
$analyticsOrderService = \App::getInstance(AnalyticsOrderService::class);
$analyticsOrderService->saveAnalyticsOrder($insertDataOrder['orderNo']);
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analyticsOrder 저장 실패', ['exception' => $e, 'errorMessage' => $e->getMessage(), 'orderNo' => $insertDataOrder['orderNo']]);
}
}
 
/*
 
Component/Order/OrderAdminNew.php+33-20
변경 전OrderAdminNew.php
use Framework\Utility\StringUtils;
use Globals;
use LogHandler;
use Origin\Enum\Order\OrderSettleKind;
use Origin\Enum\Order\OrderHandleMode;
use Origin\Enum\Order\OrderStatusCode;
use Origin\Enum\Order\OrderStatusGroup;
 
 
use Origin\Service\Statistics\Analytics\Order\OrderCompleteAnalyticsCollectorService;
use Origin\Service\WebHook\OrderWebHookService;
use Repository\Order\OrderDeliveryOriginalRepository;
break;
}
 
// 주문 완료 통계 수집
try {
$isOrderAnalyticsCollectAvailable = false;
$analyticsCheckChangeStatus = substr($changeStatus, 0, 1);
if (in_array($analyticsCheckChangeStatus, ['p', 'o'])) { // 결제완료, 입금대기일때
if ($analyticsCheckChangeStatus === 'o' && in_array($orderData['settleKind'], OrderSettleKind::getVirtualAccountKinds())) { // 입금 대기중인 가상계좌는 수집
$isOrderAnalyticsCollectAvailable = true;
}
 
if ($analyticsCheckChangeStatus === 'p' && !in_array($orderData['settleKind'], OrderSettleKind::getBankAndVirtualAccountKinds())) { // 결제 완료된 무통장/가상계좌는 수집 하지 않음
$isOrderAnalyticsCollectAvailable = true;
}
}
 
if ($isOrderAnalyticsCollectAvailable) {
$orderCompleteStatisticsCollectorService = \App::getInstance(OrderCompleteAnalyticsCollectorService::class);
$orderAnalyticsData = [
'orderNo' => $orderNo,
'order' => $orderData,
];
$orderCompleteStatisticsCollectorService->collectAnalytics($orderAnalyticsData);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
}
} catch (\Throwable $e) {
\Logger::channel('global')->error(__METHOD__ . ' analytics 수집 실패: ' . $e->getMessage(), [$e->getTraceAsString()]);
}
 
// 고도몰 주문 웹훅 발송
 
변경 후OrderAdminNew.php
use Framework\Utility\StringUtils;
use Globals;
use LogHandler;
 
use Origin\Enum\Order\OrderHandleMode;
use Origin\Enum\Order\OrderStatusCode;
use Origin\Enum\Order\OrderStatusGroup;
use Origin\Enum\Statistics\Analytics\Order\ClaimType;
use Origin\Service\Statistics\Analytics\Order\ClaimCompleteAnalyticsCollectorService;
use Origin\Service\Statistics\Analytics\Order\OrderCompleteAnalyticsCollectorService;
use Origin\Service\WebHook\OrderWebHookService;
use Repository\Order\OrderDeliveryOriginalRepository;
break;
}
 
 
try {
$orderCompleteStatisticsCollectorService = \App::getInstance(OrderCompleteAnalyticsCollectorService::class);
$claimCompleteStatisticsCollectorService = \App::getInstance(ClaimCompleteAnalyticsCollectorService::class);
 
// 결제완료 묶음에 교환추가(z)가 섞이면 통째로 claim, 아니면 일반 결제완료(order_complete)
$exchangeExtraPaymentAmount = $claimCompleteStatisticsCollectorService->getCollectibleExchangeExtraPaymentAmount($changeStatus, $orderNo, $bundleData['sno'] ?? []);
if (!empty($exchangeExtraPaymentAmount)) {
// 교환추가가 섞인 결제완료 → claim_complete 수집 (일반상품 결제금액 + 교환 차액)
$claimCompleteStatisticsCollectorService->collectAnalytics([
'orderNo' => $orderNo,
'claimType' => ClaimType::EXCHANGE,
'claimAmount' => $exchangeExtraPaymentAmount,
]);
} elseif ($orderCompleteStatisticsCollectorService->isOrderCompleteCollectible($changeStatus)) {
$orderCompleteStatisticsCollectorService->collectAnalytics([
 
'orderNo' => $orderNo,
'order' => $orderData,
]);
}
// 결제완료 → 입금대기 되돌림 시점 통계 수집
// 되돌림은 주문 묶음 전체 단위로만 일어나므로(부분 되돌림 없음) 대표로 첫 상품 상태만 확인
$prevStatus = array_values($goodsData)[0]['orderStatus'] ?? '';
$claimAmount = $orderData['settlePrice'] ?? 0;
$mileageClaimAmount = $orderData['useMileage'] ?? 0;
$depositClaimAmount = $orderData['useDeposit'] ?? 0;
if ($claimCompleteStatisticsCollectorService->isReversalToWaitDepositCollectible($changeStatus, $prevStatus, (float)$claimAmount, (float)$mileageClaimAmount, (float)$depositClaimAmount)) {
$claimCompleteStatisticsCollectorService->collectAnalytics([
'orderNo' => $orderNo,
'claimType' => ClaimType::REVERSAL,
'claimAmount' => $claimAmount,
'mileageClaimAmount' => $mileageClaimAmount,
'depositClaimAmount' => $depositClaimAmount,
]);
}
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
 
// 고도몰 주문 웹훅 발송
 
Component/Order/OrderAdmin.php+33-20
변경 전OrderAdmin.php
use Framework\Utility\StringUtils;
use Globals;
use LogHandler;
use Origin\Enum\Order\OrderSettleKind;
use Origin\Enum\Order\OrderHandleMode;
use Origin\Enum\Order\OrderStatusCode;
use Origin\Enum\Order\OrderStatusGroup;
 
 
use Origin\Service\Statistics\Analytics\Order\OrderCompleteAnalyticsCollectorService;
use Origin\Service\WebHook\OrderWebHookService;
use Repository\Order\OrderDeliveryOriginalRepository;
break;
}
 
// 주문 완료 통계 수집
try {
$isOrderAnalyticsCollectAvailable = false;
$analyticsCheckChangeStatus = substr($changeStatus, 0, 1);
if (in_array($analyticsCheckChangeStatus, ['p', 'o'])) { // 결제완료, 입금대기일때
if ($analyticsCheckChangeStatus === 'o' && in_array($orderData['settleKind'], OrderSettleKind::getVirtualAccountKinds())) { // 입금 대기중인 가상계좌는 수집
$isOrderAnalyticsCollectAvailable = true;
}
 
if ($analyticsCheckChangeStatus === 'p' && !in_array($orderData['settleKind'], OrderSettleKind::getBankAndVirtualAccountKinds())) { // 결제 완료된 무통장/가상계좌는 수집 하지 않음
$isOrderAnalyticsCollectAvailable = true;
}
}
 
if ($isOrderAnalyticsCollectAvailable) {
$orderCompleteStatisticsCollectorService = \App::getInstance(OrderCompleteAnalyticsCollectorService::class);
$orderAnalyticsData = [
'orderNo' => $orderNo,
'order' => $orderData,
];
$orderCompleteStatisticsCollectorService->collectAnalytics($orderAnalyticsData);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
}
} catch (\Throwable $e) {
\Logger::channel('global')->error(__METHOD__ . ' analytics 수집 실패: ' . $e->getMessage(), [$e->getTraceAsString()]);
}
 
// 고도몰 주문 웹훅 발송
 
변경 후OrderAdmin.php
use Framework\Utility\StringUtils;
use Globals;
use LogHandler;
 
use Origin\Enum\Order\OrderHandleMode;
use Origin\Enum\Order\OrderStatusCode;
use Origin\Enum\Order\OrderStatusGroup;
use Origin\Enum\Statistics\Analytics\Order\ClaimType;
use Origin\Service\Statistics\Analytics\Order\ClaimCompleteAnalyticsCollectorService;
use Origin\Service\Statistics\Analytics\Order\OrderCompleteAnalyticsCollectorService;
use Origin\Service\WebHook\OrderWebHookService;
use Repository\Order\OrderDeliveryOriginalRepository;
break;
}
 
 
try {
$orderCompleteStatisticsCollectorService = \App::getInstance(OrderCompleteAnalyticsCollectorService::class);
$claimCompleteStatisticsCollectorService = \App::getInstance(ClaimCompleteAnalyticsCollectorService::class);
 
// 결제완료 묶음에 교환추가(z)가 섞이면 통째로 claim, 아니면 일반 결제완료(order_complete)
$exchangeExtraPaymentAmount = $claimCompleteStatisticsCollectorService->getCollectibleExchangeExtraPaymentAmount($changeStatus, $orderNo, $bundleData['sno'] ?? []);
if (!empty($exchangeExtraPaymentAmount)) {
// 교환추가가 섞인 결제완료 → claim_complete 수집 (일반상품 결제금액 + 교환 차액)
$claimCompleteStatisticsCollectorService->collectAnalytics([
'orderNo' => $orderNo,
'claimType' => ClaimType::EXCHANGE,
'claimAmount' => $exchangeExtraPaymentAmount,
]);
} elseif ($orderCompleteStatisticsCollectorService->isOrderCompleteCollectible($changeStatus)) {
$orderCompleteStatisticsCollectorService->collectAnalytics([
 
'orderNo' => $orderNo,
'order' => $orderData,
]);
}
// 결제완료 → 입금대기 되돌림 시점 통계 수집
// 되돌림은 주문 묶음 전체 단위로만 일어나므로(부분 되돌림 없음) 대표로 첫 상품 상태만 확인
$prevStatus = array_values($goodsData)[0]['orderStatus'] ?? '';
$claimAmount = $orderData['settlePrice'] ?? 0;
$mileageClaimAmount = $orderData['useMileage'] ?? 0;
$depositClaimAmount = $orderData['useDeposit'] ?? 0;
if ($claimCompleteStatisticsCollectorService->isReversalToWaitDepositCollectible($changeStatus, $prevStatus, (float)$claimAmount, (float)$mileageClaimAmount, (float)$depositClaimAmount)) {
$claimCompleteStatisticsCollectorService->collectAnalytics([
'orderNo' => $orderNo,
'claimType' => ClaimType::REVERSAL,
'claimAmount' => $claimAmount,
'mileageClaimAmount' => $mileageClaimAmount,
'depositClaimAmount' => $depositClaimAmount,
]);
}
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
 
// 고도몰 주문 웹훅 발송
 
Component/Order/OrderNew.php+15-3
변경 전OrderNew.php
use LogHandler;
use Origin\Constants\WebHookEventType;
use Origin\Service\Order\OrderInfoService;
 
use Origin\Service\Statistics\Analytics\Order\OrderCompleteAnalyticsCollectorService;
use Origin\Service\WebHook\OrderWebHookService;
use Request;
$this->db->set_insert_db(DB_ORDER, $arrBind['param'], $arrBind['bind'], 'y', false);
unset($arrBind);
 
 
 
 
 
 
 
 
 
 
 
 
$this->setPayHistory($history);
 
// 주문 사은품 정보 저장
}
}
 
// 주문 완료 통계 수집
try {
if ($orderInfo['settleKind'] == 'gb' || $orderInfo['settleKind'] == self::SETTLE_KIND_ZERO) {
$orderCompleteStatisticsCollectorService = \App::getInstance(OrderCompleteAnalyticsCollectorService::class);
$orderAnalyticsData = [
'orderNo' => $this->orderNo,
$orderCompleteStatisticsCollectorService->collectAnalytics($orderAnalyticsData);
}
} catch (\Throwable $e) {
\Logger::channel('global')->error(__METHOD__ . ' analytics 수집 실패: ' . $e->getMessage(), [$e->getTraceAsString()]);
}
 
// 주문서 저장 이후, channelType 세션 데이터 제거
 
변경 후OrderNew.php
use LogHandler;
use Origin\Constants\WebHookEventType;
use Origin\Service\Order\OrderInfoService;
use Origin\Service\Statistics\Analytics\Order\AnalyticsOrderService;
use Origin\Service\Statistics\Analytics\Order\OrderCompleteAnalyticsCollectorService;
use Origin\Service\WebHook\OrderWebHookService;
use Request;
$this->db->set_insert_db(DB_ORDER, $arrBind['param'], $arrBind['bind'], 'y', false);
unset($arrBind);
 
// 애널리틱스 주문 추적값 저장
try {
if (empty($this->orderNo)) {
throw new Exception('orderNo가 비어있습니다');
}
$analyticsOrderService = \App::getInstance(AnalyticsOrderService::class);
$analyticsOrderService->saveAnalyticsOrder($this->orderNo);
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analyticsOrder 저장 실패', ['exception' => $e, 'errorMessage' => $e->getMessage(), 'orderNo' => $this->orderNo]);
}
 
$this->setPayHistory($history);
 
// 주문 사은품 정보 저장
}
}
 
// 결제완료 시점 통계 수집
try {
if ($orderInfo['settleKind'] == self::SETTLE_KIND_ZERO) {
$orderCompleteStatisticsCollectorService = \App::getInstance(OrderCompleteAnalyticsCollectorService::class);
$orderAnalyticsData = [
'orderNo' => $this->orderNo,
$orderCompleteStatisticsCollectorService->collectAnalytics($orderAnalyticsData);
}
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
 
// 주문서 저장 이후, channelType 세션 데이터 제거
 
Component/Order/Order.php+15-3
변경 전Order.php
use LogHandler;
use Origin\Constants\WebHookEventType;
use Origin\Service\Order\OrderInfoService;
 
use Origin\Service\Statistics\Analytics\Order\OrderCompleteAnalyticsCollectorService;
use Origin\Service\WebHook\OrderWebHookService;
use Request;
$this->db->set_insert_db(DB_ORDER, $arrBind['param'], $arrBind['bind'], 'y', false);
unset($arrBind);
 
 
 
 
 
 
 
 
 
 
 
 
// 최초결제 결제히스토리 저장
$history = [
'orderNo' => $this->orderNo,// 주문번호
}
}
 
// 주문 완료 통계 수집
try {
if ($orderInfo['settleKind'] == 'gb' || $orderInfo['settleKind'] == self::SETTLE_KIND_ZERO) {
$orderCompleteStatisticsCollectorService = \App::getInstance(OrderCompleteAnalyticsCollectorService::class);
$orderAnalyticsData = [
'orderNo' => $this->orderNo,
$orderCompleteStatisticsCollectorService->collectAnalytics($orderAnalyticsData);
}
} catch (\Throwable $e) {
\Logger::channel('global')->error(__METHOD__ . ' analytics 수집 실패: ' . $e->getMessage(), [$e->getTraceAsString()]);
}
 
// 페이스북 FBE v2 pixelCookie 값 주문서 저장
 
변경 후Order.php
use LogHandler;
use Origin\Constants\WebHookEventType;
use Origin\Service\Order\OrderInfoService;
use Origin\Service\Statistics\Analytics\Order\AnalyticsOrderService;
use Origin\Service\Statistics\Analytics\Order\OrderCompleteAnalyticsCollectorService;
use Origin\Service\WebHook\OrderWebHookService;
use Request;
$this->db->set_insert_db(DB_ORDER, $arrBind['param'], $arrBind['bind'], 'y', false);
unset($arrBind);
 
// 애널리틱스 주문 추적값 저장
try {
if (empty($this->orderNo)) {
throw new Exception('orderNo가 비어있습니다');
}
$analyticsOrderService = \App::getInstance(AnalyticsOrderService::class);
$analyticsOrderService->saveAnalyticsOrder($this->orderNo);
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analyticsOrder 저장 실패', ['exception' => $e, 'errorMessage' => $e->getMessage(), 'orderNo' => $this->orderNo]);
}
 
// 최초결제 결제히스토리 저장
$history = [
'orderNo' => $this->orderNo,// 주문번호
}
}
 
// 결제완료 시점 통계 수집
try {
if ($orderInfo['settleKind'] == self::SETTLE_KIND_ZERO) {
$orderCompleteStatisticsCollectorService = \App::getInstance(OrderCompleteAnalyticsCollectorService::class);
$orderAnalyticsData = [
'orderNo' => $this->orderNo,
$orderCompleteStatisticsCollectorService->collectAnalytics($orderAnalyticsData);
}
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
 
// 페이스북 FBE v2 pixelCookie 값 주문서 저장
 
Component/Order/ReOrderCalculation.php+54
변경 전ReOrderCalculation.php
use Globals;
use Origin\Constants\WebHookEventType;
use Origin\Service\WebHook\OrderWebHookService;
 
 
use Session;
use Component\Member\Manager;
use Component\Order\OrderSalesStatistics;
// 바로 위의 updateStatusPreprocess 는 내부에 transaction 이 한번 더 있기 때문에 이 exception 롤백과 무관하게 commit 됨.
throw new Exception(__($returnError));
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
}
 
public function setRefundCompleteOrderGoodsNew($getData, $autoProcess, $userHandleFl = false)
// 바로 위의 updateStatusPreprocess 는 내부에 transaction 이 한번 더 있기 때문에 이 exception 롤백과 무관하게 commit 됨.
throw new Exception(__($returnError));
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
}
 
/**
$this->orderWebHookService->sendOrderGoodsWebHook($webhookOrderGoodsSnos, $claimStatus, $changeStatus);
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
return true;
}
 
 
변경 후ReOrderCalculation.php
use Globals;
use Origin\Constants\WebHookEventType;
use Origin\Service\WebHook\OrderWebHookService;
use Origin\Enum\Statistics\Analytics\Order\ClaimType;
use Origin\Service\Statistics\Analytics\Order\ClaimCompleteAnalyticsCollectorService;
use Session;
use Component\Member\Manager;
use Component\Order\OrderSalesStatistics;
// 바로 위의 updateStatusPreprocess 는 내부에 transaction 이 한번 더 있기 때문에 이 exception 롤백과 무관하게 commit 됨.
throw new Exception(__($returnError));
}
 
// 환불완료 시점 통계 수집
try {
$claimCompleteStatisticsCollectorService = \App::getInstance(ClaimCompleteAnalyticsCollectorService::class);
$claimAmount = $getData['check']['totalRefundPrice'] ?? 0;
$mileageClaimAmount = gd_isset($getData['info']['refundGoodsUseMileage'], 0) + gd_isset($getData['info']['refundDeliveryUseMileage'], 0) - gd_isset($getData['info']['refundUseMileageCommission'], 0);
$depositClaimAmount = gd_isset($getData['info']['refundGoodsUseDeposit'], 0) + gd_isset($getData['info']['refundDeliveryUseDeposit'], 0) - gd_isset($getData['info']['refundUseDepositCommission'], 0);
if ($claimCompleteStatisticsCollectorService->isRefundAmountCollectible((float)$claimAmount, (float)$mileageClaimAmount, (float)$depositClaimAmount)) {
$claimCompleteStatisticsCollectorService->collectAnalytics([
'orderNo' => $getData['orderNo'],
'claimType' => ClaimType::REFUND,
'claimAmount' => $claimAmount,
'mileageClaimAmount' => $mileageClaimAmount,
'depositClaimAmount' => $depositClaimAmount,
]);
}
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
}
 
public function setRefundCompleteOrderGoodsNew($getData, $autoProcess, $userHandleFl = false)
// 바로 위의 updateStatusPreprocess 는 내부에 transaction 이 한번 더 있기 때문에 이 exception 롤백과 무관하게 commit 됨.
throw new Exception(__($returnError));
}
 
// 환불완료 시점 통계 수집
try {
$claimCompleteStatisticsCollectorService = \App::getInstance(ClaimCompleteAnalyticsCollectorService::class);
$claimAmount = $getData['check']['totalRefundPrice'] ?? 0;
$mileageClaimAmount = gd_isset($getData['info']['refundGoodsUseMileage'], 0) + gd_isset($getData['info']['refundDeliveryUseMileage'], 0) - gd_isset($getData['info']['refundUseMileageCommission'], 0);
$depositClaimAmount = gd_isset($getData['info']['refundGoodsUseDeposit'], 0) + gd_isset($getData['info']['refundDeliveryUseDeposit'], 0) - gd_isset($getData['info']['refundUseDepositCommission'], 0);
if ($claimCompleteStatisticsCollectorService->isRefundAmountCollectible((float)$claimAmount, (float)$mileageClaimAmount, (float)$depositClaimAmount)) {
$claimCompleteStatisticsCollectorService->collectAnalytics([
'orderNo' => $getData['orderNo'],
'claimType' => ClaimType::REFUND,
'claimAmount' => $claimAmount,
'mileageClaimAmount' => $mileageClaimAmount,
'depositClaimAmount' => $depositClaimAmount,
]);
}
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
}
 
/**
$this->orderWebHookService->sendOrderGoodsWebHook($webhookOrderGoodsSnos, $claimStatus, $changeStatus);
}
 
// 교환접수 시점 통계 수집
try {
$claimCompleteStatisticsCollectorService = \App::getInstance(ClaimCompleteAnalyticsCollectorService::class);
if ($postData['totalChangePrice'] > 0) {
$claimCompleteStatisticsCollectorService->collectAnalytics([
'orderNo' => $postData['orderNo'],
'claimType' => ClaimType::EXCHANGE,
'claimAmount' => $postData['totalChangePrice'],
]);
}
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
 
return true;
}
 
 
Component/Wish/Wish.php+17
변경 전Wish.php
use Exception;
use App;
use Origin\Service\WebHook\CartWebHookService;
 
 
 
class Wish
{
$result = $kafka->send($kafka::TOPIC_CART_ADD_STATISTICS, $kafka->makeData([$cartStatistics], 'cas'), $kafka::MODE_RESULT_CALLLBACK, true);
\Logger::channel('kafka')->info('process sendMQ - return :', $result);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$cartInfo = gd_policy('order.cart');
if($cartInfo['moveWishPageFl'] =='n') {
//장바구니 저장 상품 삭제
 
변경 후Wish.php
use Exception;
use App;
use Origin\Service\WebHook\CartWebHookService;
use Origin\Service\Statistics\Analytics\Cart\CartAddHistoryAnalyticsCollectorService;
use Origin\Repository\Wish\WishRepository;
 
class Wish
{
$result = $kafka->send($kafka::TOPIC_CART_ADD_STATISTICS, $kafka->makeData([$cartStatistics], 'cas'), $kafka::MODE_RESULT_CALLLBACK, true);
\Logger::channel('kafka')->info('process sendMQ - return :', $result);
 
// 장바구니 추가 통계 수집
try {
// 다중 insert 시 insert_id는 첫 sno만 반환 → insert된 cart 특정 불가, 원본 위시(es_wish) 조회
$wishRepository = \App::getInstance(WishRepository::class);
$wishGoodsList = $wishRepository->findGoodsByWishSnosAndMemNo($sno, (int)Session::get('member.memNo'));
if (!empty($wishGoodsList)) {
$cartAddHistoryAnalyticsCollectorService = \App::getInstance(CartAddHistoryAnalyticsCollectorService::class);
foreach ($wishGoodsList as $wishGoods) {
$cartAddHistoryAnalyticsCollectorService->collectAnalytics($wishGoods);
}
}
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
 
$cartInfo = gd_policy('order.cart');
if($cartInfo['moveWishPageFl'] =='n') {
//장바구니 저장 상품 삭제
 
Controller/Front/Member/MemberPsController.php+2-2
변경 전MemberPsController.php
$memberStatisticsCollectorService = \App::getInstance(MemberJoinCompleteAnalyticsCollectorService::class);
$memberStatisticsCollectorService->collectAnalytics($memberVO->toArray());
} catch (\Throwable $e) {
\Logger::channel('global')->error(__METHOD__ . ' analytics 수집 실패: ' . $e->getMessage(), [$e->getTraceAsString()]);
}
 
// 평생회원 이벤트
$memberStatisticsCollectorService = \App::getInstance(MemberJoinCompleteAnalyticsCollectorService::class);
$memberStatisticsCollectorService->collectAnalytics($memberVO->toArray());
} catch (\Throwable $e) {
\Logger::channel('global')->error(__METHOD__ . ' analytics 수집 실패: ' . $e->getMessage(), [$e->getTraceAsString()]);
}
 
$memNo = $memberVO->getMemNo();
 
변경 후MemberPsController.php
$memberStatisticsCollectorService = \App::getInstance(MemberJoinCompleteAnalyticsCollectorService::class);
$memberStatisticsCollectorService->collectAnalytics($memberVO->toArray());
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
 
// 평생회원 이벤트
$memberStatisticsCollectorService = \App::getInstance(MemberJoinCompleteAnalyticsCollectorService::class);
$memberStatisticsCollectorService->collectAnalytics($memberVO->toArray());
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
 
$memNo = $memberVO->getMemNo();
 
Controller/Mobile/Member/MemberPsController.php+2-2
변경 전MemberPsController.php
$memberStatisticsCollectorService = \App::getInstance(MemberJoinCompleteAnalyticsCollectorService::class);
$memberStatisticsCollectorService->collectAnalytics($memberVO->toArray());
} catch (\Throwable $e) {
\Logger::channel('global')->error(__METHOD__ . ' analytics 수집 실패: ' . $e->getMessage(), [$e->getTraceAsString()]);
}
 
// request가 ajax일 때 (카카오 싱크)
$memberStatisticsCollectorService = \App::getInstance(MemberJoinCompleteAnalyticsCollectorService::class);
$memberStatisticsCollectorService->collectAnalytics($memberVO->toArray());
} catch (\Throwable $e) {
\Logger::channel('global')->error(__METHOD__ . ' analytics 수집 실패: ' . $e->getMessage(), [$e->getTraceAsString()]);
}
 
$memNo = $memberVO->getMemNo();
 
변경 후MemberPsController.php
$memberStatisticsCollectorService = \App::getInstance(MemberJoinCompleteAnalyticsCollectorService::class);
$memberStatisticsCollectorService->collectAnalytics($memberVO->toArray());
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
 
// request가 ajax일 때 (카카오 싱크)
$memberStatisticsCollectorService = \App::getInstance(MemberJoinCompleteAnalyticsCollectorService::class);
$memberStatisticsCollectorService->collectAnalytics($memberVO->toArray());
} catch (\Throwable $e) {
\Logger::channel('analytics')->warning('analytics 수집 실패', ['exception' => $e, 'errorMessage' => $e->getMessage()]);
}
 
$memNo = $memberVO->getMemNo();