77 lines
3.3 KiB
PHP
77 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace App\Controllers\CLI;
|
|
|
|
use App\Controllers\BaseController;
|
|
use App\Services\Customer\ServiceService;
|
|
use App\Services\Customer\ServiceItemService;
|
|
use App\Services\Customer\ServicePaymentService;
|
|
use CodeIgniter\HTTP\RequestInterface;
|
|
use CodeIgniter\HTTP\ResponseInterface;
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
class Payment extends BaseController
|
|
{
|
|
private $_db = null;
|
|
private ?ServiceService $_serviceService = null;
|
|
private ?ServiceItemService $_servicItemeService = null;
|
|
private ?ServicePaymentService $_servicePaymentService = null;
|
|
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
|
{
|
|
parent::initController($request, $response, $logger);
|
|
// $this->_db = \Config\Database::connect();
|
|
}
|
|
public function getServiceService(): ServiceService
|
|
{
|
|
if (!$this->_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") {
|
|
$this->getServicePaymentService()->createByServiceItem($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"
|
|
);
|
|
}
|
|
}
|
|
}
|