dbms/app/Controllers/CLI/DBMigration/DBMigration.php
2025-07-10 16:50:12 +09:00

125 lines
5.0 KiB
PHP

<?php
namespace App\Controllers\CLI\DBMigration;
use App\Controllers\BaseController;
use CodeIgniter\Database\BaseConnection;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
abstract class DBMigration extends BaseController
{
private $_targetDB = null;
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
parent::initController($request, $response, $logger);
}
abstract protected function getSourceDB(): BaseConnection;
abstract protected function getClient(): array;
abstract protected function getLine(): array;
final protected function getTargetDB(): BaseConnection
{
if ($this->_targetDB === null) {
$this->_targetDB = \Config\Database::connect('default');
}
return $this->_targetDB;
}
protected function client_process(mixed $row, int $cnt): void
{
$temps = [];
$temps['code'] = $row['Client_Code'];
$temps['role'] = $row['Client_Reseller'] == 30 ? "reseller" : "user";
$temps['name'] = $row['Client_Name'];
$temps['phone'] = empty($row['Client_Phone1']) ? "" : $row['Client_Phone1'];
if (empty($temps['phone'])) {
$temps['phone'] = empty($row['Client_Phone2']) ? "" : $row['Client_Phone2'];
}
$temps['email'] = empty($row['Client_EMail1']) ? "" : $row['Client_EMail1'];
if (empty($temps['email'])) {
$temps['email'] = empty($row['Client_EMail2']) ? "" : $row['Client_EMail2'];
}
$temps['account_balance'] = intval($row['Client_Money']);
$temps['coupon_balance'] = 0;
$temps['point_balance'] = 0;
$temps['status'] = 'default';
$temps['updated_at'] = empty($row['Client_Renew_date']) ? NULL : $row['Client_Renew_date'];;
if (!empty($row['Client_Receive_date'])) {
$temps['created_at'] = $row['Client_Receive_date'];;
}
//신규DB에 삽입
if (!$this->getTargetDB()->table('clientinfo')->insert($temps)) {
throw new \Exception($this->getTargetDB()->error()['message']);
}
echo "{$cnt} -> {$temps['name']} 고객완료.\n";
}
final public function client(): void
{
//Transaction Start
$this->getTargetDB()->transStart();
try {
$cnt = 1;
foreach ($this->getClient() as $row) {
$this->client_process($row, $cnt);
$cnt++;
}
echo __FUNCTION__ . " 작업을 완료하였습니다.";
$this->getTargetDB()->transCommit();
} catch (\Exception $e) {
//Transaction Rollback
$this->getTargetDB()->transRollback();
echo __FUNCTION__ . " 작업을 실패하였습니다.\n--------------\n" . $e->getMessage() . "\n--------------\n";
}
}
protected function line_process(mixed $row, int $cnt): void
{
$temps = [];
$temps['code'] = $row['Client_Code'];
$temps['role'] = $row['Client_Reseller'] == 30 ? "reseller" : "user";
$temps['name'] = $row['Client_Name'];
$temps['phone'] = empty($row['Client_Phone1']) ? "" : $row['Client_Phone1'];
if (empty($temps['phone'])) {
$temps['phone'] = empty($row['Client_Phone2']) ? "" : $row['Client_Phone2'];
}
$temps['email'] = empty($row['Client_EMail1']) ? "" : $row['Client_EMail1'];
if (empty($temps['email'])) {
$temps['email'] = empty($row['Client_EMail2']) ? "" : $row['Client_EMail2'];
}
$temps['account_balance'] = intval($row['Client_Money']);
$temps['coupon_balance'] = 0;
$temps['point_balance'] = 0;
$temps['status'] = 'default';
$temps['updated_at'] = empty($row['Client_Renew_date']) ? NULL : $row['Client_Renew_date'];;
if (!empty($row['Client_Receive_date'])) {
$temps['created_at'] = $row['Client_Receive_date'];;
}
//신규DB에 삽입
if (!$this->getTargetDB()->table('lineinfo')->insert($temps)) {
throw new \Exception($this->getTargetDB()->error()['message']);
}
echo "{$cnt} -> {$temps['name']} Line완료.\n";
}
final public function line(): void
{
//Transaction Start
$this->getTargetDB()->transStart();
try {
$cnt = 1;
foreach ($this->getClient() as $row) {
$this->line_process($row, $cnt);
$cnt++;
}
echo __FUNCTION__ . " 작업을 완료하였습니다.";
$this->getTargetDB()->transCommit();
} catch (\Exception $e) {
//Transaction Rollback
$this->getTargetDB()->transRollback();
echo __FUNCTION__ . " 작업을 실패하였습니다.\n--------------\n" . $e->getMessage() . "\n--------------\n";
}
}
}