api
This commit is contained in:
59
app/Models/Entities/V2chghistoryModel.php
Normal file
59
app/Models/Entities/V2chghistoryModel.php
Normal file
@@ -0,0 +1,59 @@
|
||||
CREATE TABLE `v2_chg_history` (
|
||||
`seq` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '순번',
|
||||
`vr_sq` BIGINT(20) UNSIGNED NOT NULL COMMENT '검증요청순번',
|
||||
`stat_cd` VARCHAR(6) NOT NULL COMMENT '상태코드' COLLATE 'utf8mb3_uca1400_ai_ci',
|
||||
`chg_type` VARCHAR(10) NOT NULL COMMENT '변경유형' COLLATE 'utf8mb3_uca1400_ai_ci',
|
||||
`memo` TEXT NULL DEFAULT NULL COMMENT '메모' COLLATE 'utf8mb3_uca1400_ai_ci',
|
||||
`insert_id` VARCHAR(60) NOT NULL COMMENT '등록자ID' COLLATE 'utf8mb3_uca1400_ai_ci',
|
||||
`insert_tm` DATETIME NOT NULL COMMENT '등록시간',
|
||||
PRIMARY KEY (`seq`) USING BTREE,
|
||||
INDEX `vr_sq` (`vr_sq`) USING BTREE
|
||||
)
|
||||
COMMENT='변경이력'
|
||||
COLLATE='utf8mb3_uca1400_ai_ci'
|
||||
ENGINE=InnoDB
|
||||
AUTO_INCREMENT=81103559
|
||||
;
|
||||
<?php
|
||||
namespace App\Models;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class V2chgstatModel extends Model
|
||||
{
|
||||
protected $table = 'v2_chg_history';
|
||||
protected $primaryKey = 'seq'; // 실제 PK 컬럼명으로 수정하세요 (st_date, cpid, gbn_cd가 복합키인 경우도 있음)
|
||||
protected $allowedFields = ['vr_sq', 'stat_cd', 'chg_type', 'memo', 'insert_id', 'insert_tm'];
|
||||
|
||||
protected $useTimestamps = false; // insert_tm을 직접 넣으시므로 false
|
||||
|
||||
/**
|
||||
* 상태 변경 이력 저장 (CI4 통합 버전)
|
||||
* @param array $data ['vr_sq' => 값, 'stat_cd' => 값, ...]
|
||||
* @param string $saveType 'I'(Upsert), 'U'(Update)
|
||||
*/
|
||||
public function v2_savehistory(array $data )
|
||||
{
|
||||
$payload = [
|
||||
'vr_sq' => $data['vr_sq'],
|
||||
'stat_cd' => $data['stat_cd'],
|
||||
'chg_type' => $data['chg_type'],
|
||||
'memo' => $data['memo'] ?? '',
|
||||
'insert_id' => $data['insert_id'] ?? '0',
|
||||
'insert_tm' => $data['insert_tm'] ?? db_now(),
|
||||
];
|
||||
|
||||
// insert 수행
|
||||
if (!$this->insert($payload)) {
|
||||
return [
|
||||
'error' => [
|
||||
'code' => $this->db->error()['code'],
|
||||
'message' => $this->db->error()['message'],
|
||||
],
|
||||
'query' => (string)$this->getLastQuery()
|
||||
];
|
||||
}
|
||||
|
||||
return ['error' => ['code' => 0, 'message' => ''], 'id' => $this->getInsertID()];
|
||||
}
|
||||
}
|
||||
50
app/Models/Entities/V2chgstatModel.php
Normal file
50
app/Models/Entities/V2chgstatModel.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
namespace App\Models;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class V2chgstatModel extends Model
|
||||
{
|
||||
protected $table = 'v2_chg_stat';
|
||||
protected $primaryKey = 'seq'; // 실제 PK 컬럼명으로 수정하세요 (st_date, cpid, gbn_cd가 복합키인 경우도 있음)
|
||||
protected $allowedFields = ['vr_sq', 'stat_cd', 'insert_user', 'insert_tm'];
|
||||
|
||||
protected $useTimestamps = false; // insert_tm을 직접 넣으시므로 false
|
||||
|
||||
/**
|
||||
* 상태 변경 이력 저장 (CI4 통합 버전)
|
||||
* @param array $data ['vr_sq' => 값, 'stat_cd' => 값, ...]
|
||||
* @param string $saveType 'I'(Upsert), 'U'(Update)
|
||||
*/
|
||||
public function saveChgstat(array $data, string $saveType)
|
||||
{
|
||||
// 1. 기본값 세팅 (데이터 유연성 확보)
|
||||
$payload = [
|
||||
'vr_sq' => $data['vr_sq'] ?? null,
|
||||
'stat_cd' => $data['stat_cd'] ?? '10', // 기본값 30
|
||||
'insert_user' => $data['insert_user'] ?? 0,
|
||||
'insert_tm' => $data['insert_tm'] ?? date('Y-m-d H:i:s'),
|
||||
];
|
||||
|
||||
if (empty($payload['vr_sq'])) {
|
||||
throw new \Exception("V2chgstatModel Error: vr_sq is required.");
|
||||
}
|
||||
|
||||
if ($saveType === 'I') {
|
||||
// CI2 방식의 ON DUPLICATE KEY UPDATE 유지 (seq 번호 보존을 위해)
|
||||
$sql = "INSERT INTO v2_chg_stat (vr_sq, stat_cd, insert_user, insert_tm)
|
||||
VALUES (:vr_sq:, :stat_cd:, :insert_user:, :insert_tm:)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
insert_user = VALUES(insert_user),
|
||||
insert_tm = VALUES(insert_tm)";
|
||||
|
||||
return $this->db->query($sql, $payload);
|
||||
} else {
|
||||
// Update 방식
|
||||
return $this->where('vr_sq', $payload['vr_sq'])
|
||||
->where('stat_cd', $payload['stat_cd'])
|
||||
->set($payload)
|
||||
->update();
|
||||
}
|
||||
}
|
||||
}
|
||||
50
app/Models/Entities/V2stdailyModel.php
Normal file
50
app/Models/Entities/V2stdailyModel.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
namespace App\Models;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class V2stdailyModel extends Model
|
||||
{
|
||||
protected $table = 'v2_st_daily';
|
||||
protected $primaryKey = 'id'; // 실제 PK 컬럼명으로 수정하세요 (st_date, cpid, gbn_cd가 복합키인 경우도 있음)
|
||||
protected $allowedFields = ['st_date', 'cpid', 'gbn_cd', 'cnt'];
|
||||
|
||||
public function set_v2_st_daily($st_date, $cpid, $gbn_cd, $cnt, $cnt_type = 'add')
|
||||
{
|
||||
if (empty($cnt)) $cnt = 0;
|
||||
|
||||
$data = [];
|
||||
// 1. 날짜 처리
|
||||
$date_field = empty($st_date) ? "NOW()" : "?";
|
||||
if (!empty($st_date)) $data[] = $st_date;
|
||||
|
||||
// 2. 나머지 필드 바인딩 데이터 준비
|
||||
$data[] = $cpid;
|
||||
$data[] = $gbn_cd;
|
||||
$data[] = $cnt;
|
||||
|
||||
// 3. 중복 처리 로직 분기
|
||||
if (strtolower($cnt_type) === 'add') {
|
||||
// MariaDB에서 가장 안전한 바인딩 방식
|
||||
$sql = "INSERT INTO v2_st_daily (st_date, cpid, gbn_cd, cnt)
|
||||
VALUES ($date_field, ?, ?, ?)
|
||||
ON DUPLICATE KEY UPDATE cnt = cnt + ?";
|
||||
$data[] = $cnt; // UPDATE 절의 더하기 값을 위해 한 번 더 추가
|
||||
} else {
|
||||
// 중복 시 값을 덮어씌움 (VALUES 함수 사용)
|
||||
$sql = "INSERT INTO v2_st_daily (st_date, cpid, gbn_cd, cnt)
|
||||
VALUES ($date_field, ?, ?, ?)
|
||||
ON DUPLICATE KEY UPDATE cnt = VALUES(cnt)";
|
||||
}
|
||||
|
||||
// 쿼리 실행
|
||||
$result = $this->db->query($sql, $data);
|
||||
|
||||
return [
|
||||
'status' => $result ? true : false,
|
||||
'error' => $this->db->error(), // ['code', 'message']
|
||||
'last_query' => (string)$this->db->getLastQuery() // 디버깅용
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user