dbmsv4 init...3
This commit is contained in:
parent
5de9ccac2e
commit
8130974b1c
@ -774,4 +774,4 @@ UNLOCK TABLES;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
|
||||
-- Dump completed on 2025-12-10 18:15:34
|
||||
-- Dump completed on 2025-12-11 13:04:30
|
||||
|
||||
@ -134,25 +134,26 @@ class AccountService extends WalletService
|
||||
$this->model->orLike($this->model->getTable() . '.alias', $word, 'both');
|
||||
parent::setSearchWord($word);
|
||||
}
|
||||
|
||||
//결제 관련 출금 처리
|
||||
protected function withdrawalByPayment_process(ClientEntity $clientEntity, PaymentEntity $paymentEntity, array $formDatas): array
|
||||
protected function withdrawal_process(ClientEntity $clientEntity, array $formDatas): array
|
||||
{
|
||||
$amount = $paymentEntity->getAmount();
|
||||
$balance = $clientEntity->getAccountBalance();
|
||||
if ($balance < $amount) {
|
||||
if (!array_key_exists('amount', $formDatas)) {
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: 출금액이 정의되지 않았습니다.");
|
||||
}
|
||||
if ($clientEntity->getAccountBalance() < $formDatas['amount']) {
|
||||
throw new RuntimeException(sprintf(
|
||||
"%s 에서 오류발생: 출금액(%s원) , %s 고객의 예치금액(%s원)이 부족합니다.",
|
||||
static::class . '->' . __FUNCTION__,
|
||||
number_format($amount),
|
||||
number_format($formDatas['amount']),
|
||||
$clientEntity->getTitle(),
|
||||
number_format($balance)
|
||||
number_format($clientEntity->getAccountBalance())
|
||||
));
|
||||
}
|
||||
//최종처리
|
||||
$formDatas['bank'] = BANKS['결제차감'];
|
||||
$formDatas['alias'] = array_key_exists('alias', $formDatas) ? $formDatas['alias'] : $clientEntity->getTitle();
|
||||
$formDatas['amount'] = $amount;
|
||||
$formDatas['balance'] = $balance - $amount;
|
||||
return $formDatas;
|
||||
$formDatas['balance'] = $clientEntity->getAccountBalance() - $formDatas['amount'];
|
||||
return parent::withdrawal_process($clientEntity, $formDatas);
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ use App\Entities\Customer\ClientEntity;
|
||||
use App\Entities\PaymentEntity;
|
||||
use App\Models\CommonModel;
|
||||
use App\Services\Customer\CustomerService;
|
||||
use GuzzleHttp\Client;
|
||||
use RuntimeException;
|
||||
|
||||
abstract class WalletService extends CustomerService
|
||||
@ -15,31 +16,52 @@ abstract class WalletService extends CustomerService
|
||||
parent::__construct($model);
|
||||
$this->addClassPaths('Wallet');
|
||||
}
|
||||
abstract protected function withdrawalByPayment_process(ClientEntity $clientEntity, PaymentEntity $paymentEntity, array $formDatas): array;
|
||||
//기본기능
|
||||
//결제 관련 출금 처리
|
||||
final public function withdrawalByPayment(PaymentEntity $paymentEntity): void
|
||||
//생성
|
||||
protected function create_process(array $formDatas): object
|
||||
{
|
||||
//고객정보
|
||||
$clientEntity = service('customer_clientservice')->getEntity($paymentEntity->getClientInfoUID());
|
||||
if (!$clientEntity instanceof ClientEntity) {
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: {$paymentEntity->getClientInfoUID()}에 해당하는 고객정보를 찾을수 없습니다.");
|
||||
if (!array_key_exists('clientinfo_uid', $formDatas)) {
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: 고객정보가 정의되지 않았습니다.");
|
||||
}
|
||||
if (!array_key_exists('status', $formDatas)) {
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: 상태정보가 정의되지 않았습니다.");
|
||||
}
|
||||
//고객 정보 잔액 수정
|
||||
$clientEntity = service('customer_clientservice')->getEntity($formDatas['clientinfo_uid']);
|
||||
if (!$clientEntity instanceof ClientEntity) {
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: {$formDatas['clientinfo_uid']}에 해당하는 고객정보를 찾을수 없습니다.");
|
||||
}
|
||||
switch ($formDatas['status']) {
|
||||
case STATUS['DEPOSIT']:
|
||||
$formDatas = $this->deposit_process($clientEntity, $formDatas);
|
||||
break;
|
||||
case STATUS['WITHDRAWAL']:
|
||||
$formDatas = $this->withdrawal_process($clientEntity, $formDatas);
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: 정의되지 않은 상태정보입니다.");
|
||||
//break;
|
||||
}
|
||||
$formDatas = [];
|
||||
$formDatas['clientinfo_uid'] = $clientEntity->getPK();
|
||||
$formDatas['title'] = $paymentEntity->getTitle();
|
||||
$formDatas['issue_at'] = date('Y-m-d');
|
||||
$formDatas['status'] = STATUS['WITHDRAWAL'];
|
||||
//출금액 계산
|
||||
$formDatas = $this->withdrawalByPayment_process($clientEntity, $paymentEntity, $formDatas);
|
||||
$fields = array_keys($formDatas);
|
||||
$this->getFormService()->setFormFields($fields);
|
||||
$this->getFormService()->setFormRules('create', $fields);
|
||||
$entity = $this->create_process($formDatas);
|
||||
if (!$entity) {
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__, "에서 오류발생: {$clientEntity->getTitle()} 고객의 입금(쿠폰추가)처리중 Wallet정보 생성에 실패하였습니다.");
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: 고객의 Wallet정보 생성에 실패하였습니다.");
|
||||
}
|
||||
//고객정보 수정
|
||||
service('customer_clientservice')->modify_process($clientEntity, [constant("static::CLIENTINFO_BALANCE_FIELD") => $entity->getBalance()]);
|
||||
return $entity;
|
||||
}
|
||||
//입금,쿠폰 충전 처리
|
||||
protected function deposit_process(ClientEntity $clientEntity, array $formDatas): array
|
||||
{
|
||||
$formDatas['issue_at'] = array_key_exists('issue_at', $formDatas) ? $formDatas['issue_at'] : date('Y-m-d');
|
||||
return $formDatas;
|
||||
}
|
||||
//출금,쿠폰 사용 처리
|
||||
protected function withdrawal_process(ClientEntity $clientEntity, array $formDatas): array
|
||||
{
|
||||
$formDatas['issue_at'] = array_key_exists('issue_at', $formDatas) ? $formDatas['issue_at'] : date('Y-m-d');
|
||||
return $formDatas;
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,26 +25,6 @@ class PaymentService extends CommonService
|
||||
parent::__construct($model);
|
||||
$this->addClassPaths('Payment');
|
||||
}
|
||||
//pay방식에따른 WalletService
|
||||
private function getWalletService(string $pay): WalletService
|
||||
{
|
||||
$walletService = null;
|
||||
switch ($pay) {
|
||||
case PAYMENT['PAY']['ACCOUNT']:
|
||||
$walletService = service('customer_wallet_accountservice');
|
||||
break;
|
||||
case PAYMENT['PAY']['COUPON']:
|
||||
$walletService = service('customer_wallet_couponservice');
|
||||
break;
|
||||
case PAYMENT['PAY']['POINT']:
|
||||
$walletService = service('customer_wallet_pointservice');
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: {$pay}는 지정되지 않은 지불방식입니다.");
|
||||
// break;
|
||||
}
|
||||
return $walletService;
|
||||
}
|
||||
protected function getDTOClass(): string
|
||||
{
|
||||
return PaymentDTO::class;
|
||||
@ -197,6 +177,32 @@ class PaymentService extends CommonService
|
||||
parent::setSearchWord($word);
|
||||
}
|
||||
//추가기능
|
||||
//pay방식에따른 WalletService 등록
|
||||
private function setWallet(PaymentEntity $entity): void
|
||||
{
|
||||
$walletService = null;
|
||||
switch ($entity->getPay()) {
|
||||
case PAYMENT['PAY']['ACCOUNT']:
|
||||
$walletService = service('customer_wallet_accountservice');
|
||||
break;
|
||||
case PAYMENT['PAY']['COUPON']:
|
||||
$walletService = service('customer_wallet_couponservice');
|
||||
break;
|
||||
case PAYMENT['PAY']['POINT']:
|
||||
$walletService = service('customer_wallet_pointservice');
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: {$entity->getPay()}는 지정되지 않은 지불방식입니다.");
|
||||
// break;
|
||||
}
|
||||
$formDatas = [
|
||||
'clientinfo_uid' => $entity->getClientInfoUID(),
|
||||
'title' => $entity->getTitle(),
|
||||
'amount' => $entity->getAmount(),
|
||||
'status' => STATUS['WITHDRAWAL'],
|
||||
];
|
||||
$walletService->create_process($formDatas);
|
||||
}
|
||||
//일회성,선결제,쿠폰,포인트 입력 관련
|
||||
protected function create_process(array $formDatas): PaymentEntity
|
||||
{
|
||||
@ -211,7 +217,7 @@ class PaymentService extends CommonService
|
||||
}
|
||||
//지불이 완료된경우 지불처리
|
||||
if ($entity->getStatus() === STATUS['PAID']) {
|
||||
$this->getWalletService($entity->getPay())->withdrawalByPayment($entity);
|
||||
$this->setWallet($entity);
|
||||
}
|
||||
//선결제인경우 서비스정보에 결제일 변경용
|
||||
if ($entity->getBilling() === PAYMENT['BILLING']['PREPAYMENT']) {
|
||||
@ -222,13 +228,17 @@ class PaymentService extends CommonService
|
||||
|
||||
protected function modify_process($entity, array $formDatas): PaymentEntity
|
||||
{
|
||||
if ($entity->getStatus() === STATUS['PAID']) {
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: 이미 지불된 결제정보는 수정이 불가합니다.");
|
||||
}
|
||||
//수정된 결제정보
|
||||
$entity = parent::modify_process($entity, $formDatas);
|
||||
if (!$entity instanceof PaymentEntity) {
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생:Return Type은 PaymentEntity만 가능");
|
||||
}
|
||||
//지불이 완료된경우 지불처리
|
||||
//지불이 된경우 지불처리
|
||||
if ($entity->getStatus() === STATUS['PAID']) {
|
||||
$this->getWalletService($entity->getPay())->withdrawalByPayment($entity);
|
||||
$this->setWallet($entity);
|
||||
}
|
||||
//선결제인경우 서비스정보에 결제일 변경용
|
||||
if ($entity->getBilling() === PAYMENT['BILLING']['PREPAYMENT']) {
|
||||
@ -236,17 +246,24 @@ class PaymentService extends CommonService
|
||||
}
|
||||
return $entity;
|
||||
}
|
||||
protected function delete_process($entity): PaymentEntity
|
||||
{
|
||||
if ($entity->getStatus() === STATUS['PAID']) {
|
||||
throw new RuntimeException(static::class . '->' . __FUNCTION__ . "에서 오류발생: 이미 지불된 결제정보는 수정이 불가합니다.");
|
||||
}
|
||||
return parent::delete_process($entity);
|
||||
}
|
||||
//지불 관련
|
||||
//일괄 지불용
|
||||
protected function batchjob_process($entity, array $formDatas): object
|
||||
{
|
||||
// modify_process를 호출하여 로직 재사용 (PK 로드 및 PK 제거/방어 로직 포함)
|
||||
$entity = parent::batchjob_process($entity, $formDatas);
|
||||
//지불방식에 따른 고객 예치금,쿠폰,포인트 처리
|
||||
$this->getWalletService($entity->getPay())->withdrawalByPayment($entity);
|
||||
if ($entity->getStatus() === STATUS['PAID']) {
|
||||
$this->setWallet($entity);
|
||||
}
|
||||
return $entity;
|
||||
}
|
||||
|
||||
//청구서 관련
|
||||
public function getInvoices(ClientEntity $clientEntity, ServiceEntity $serviceEntity, PaymentEntity $entity, array $rows): array
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user