dbms/app/Controllers/CLI/Payment.php
2025-06-18 13:31:28 +09:00

78 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($this->request);
}
return $this->_serviceService;
}
public function getServiceItemService(): ServiceItemService
{
if (!$this->_servicItemeService) {
$this->_servicItemeService = new ServiceItemService($this->request);
}
return $this->_servicItemeService;
}
public function getServicePaymentService(): ServicePaymentService
{
if (!$this->_servicePaymentService) {
$this->_servicePaymentService = new ServicePaymentService($this->request);
}
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")]) as $serviceEntity) {
echo $serviceEntity->getPK() . ":" . $serviceEntity->getBillingAt() . "\n";
foreach ($this->getServiceItemService()->getEntities(['serviceinfo_uid' => $serviceEntity->getPK()]) as $itemEntity) {
if ($itemEntity->getBillingCycle() == "month") {
//결제정보 ServicePaymentService에 신규등록
$this->getServicePaymentService()->createPaymentByServiceItem($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"
);
}
}
}