_serviceService) { $this->_serviceService = new ServiceService(); } return $this->_serviceService; } public function getServiceItemService(): ServiceItemService { if (!$this->_servicItemeService) { $this->_servicItemeService = new ServiceItemService(); } return $this->_servicItemeService; } public function getServicePaymentService(): ServicePaymentService { if (!$this->_servicePaymentService) { $this->_servicePaymentService = new ServicePaymentService(); } return $this->_servicePaymentService; } public function billing(): void { //Transaction Start $this->getServiceService()->getModel()->transStart(); try { //서비스중 결제일이 오늘이고, 상태가 사용중이 경우만 서비스 모두 연장처리 $this->getServiceService()->extendBillingAt(date('Y-m-d'), DEFAULTS['STATUS']); //결제일이 오늘보다 크고, 상태가 사용중인 서비스정보를 이용해서 결제정보에 신규 추가하기 foreach ($this->getServiceService()->getEntities(['billing_at' => date("Y-m-d"), 'status' => DEFAULTS['STATUS']]) as $serviceEntity) { // echo $serviceEntity->getPK() . ":" . $serviceEntity->getBillingAt() . "\n"; foreach ($this->getServiceItemService()->getEntities(['serviceinfo_uid' => $serviceEntity->getPK()]) as $itemEntity) { //결제정보 ServicePaymentService에 월별 결제만 신규등록 if ($itemEntity->getBillingCycle() == "month") { //결제정보 ServicePaymentService에 등록 $paymentFormDatas = ['status' => ServicePaymentEntity::STATUS_UNPAID]; $this->getServicePaymentService()->createByServiceItemService($paymentFormDatas, $itemEntity); } } } // echo $this->getServiceService()->getModel()->getLastQuery() . "\n"; log_message("notice", "Billing 작업을 완료하였습니다."); $this->getServiceService()->getModel()->transCommit(); } catch (\Exception $e) { //Transaction Rollback $this->getServiceService()->getModel()->transRollback(); log_message( "error", "Billing 작업을 실패하였습니다.\n--------------\n" . $e->getMessage() . "\n--------------\n" ); } } }