70 lines
2.3 KiB
Text
70 lines
2.3 KiB
Text
/* @tier medium @module cm @transform common-online */
|
|
/*
|
|
* cm_ol_0027.pgc - 공통 온라인 서비스 (CM_OL_0027) [tier=medium]
|
|
*
|
|
* TxCore TX_SERVICE 엔트리. 요청 TXBUF 를 검증하고 cm 표준 DBIO 를
|
|
* 통해 처리한 뒤 응답 TXBUF 를 구성한다. (ATMI void SVC(TPSVCINFO*) 대응)
|
|
*/
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#include "txcore.h"
|
|
#include "acq_util.h"
|
|
#include "cm_core.h"
|
|
|
|
EXEC SQL INCLUDE sqlca;
|
|
|
|
TX_SERVICE(CM_OL_0027, ctx)
|
|
{
|
|
cm_rec_t rec;
|
|
char key[16], merch[16], bizdate[16];
|
|
long amount = 0, cnt;
|
|
int rc;
|
|
|
|
tx_log(TX_LOG_INFO, "[CM_OL_0027] 공통 등록 서비스 진입");
|
|
|
|
if (tx_buf_get(ctx->in, "KEY", key, sizeof(key)) != TX_OK ||
|
|
tx_buf_get(ctx->in, "MERCHID", merch, sizeof(merch)) != TX_OK ||
|
|
tx_buf_get(ctx->in, "BIZDATE", bizdate, sizeof(bizdate)) != TX_OK) {
|
|
tx_log(TX_LOG_ERROR, "[CM_OL_0027] 필수 필드 누락");
|
|
tx_return(ctx, TX_EINVAL, ctx->out);
|
|
return;
|
|
}
|
|
tx_buf_getlong(ctx->in, "AMOUNT", &amount);
|
|
|
|
/* 업무검증: 금액 범위 + 영업일 형식 */
|
|
if (!amount_is_valid(amount)) {
|
|
tx_log(TX_LOG_WARN, "[CM_OL_0027] 금액 범위 오류 amount=%ld", amount);
|
|
tx_return(ctx, TX_EINVAL, ctx->out);
|
|
return;
|
|
}
|
|
if (!date_is_valid(bizdate)) {
|
|
tx_log(TX_LOG_WARN, "[CM_OL_0027] 영업일 오류 date=%s", bizdate);
|
|
tx_return(ctx, TX_EINVAL, ctx->out);
|
|
return;
|
|
}
|
|
|
|
memset(&rec, 0, sizeof(rec));
|
|
strncpy(rec.key, key, sizeof(rec.key) - 1);
|
|
strncpy(rec.merch_id, merch, sizeof(rec.merch_id) - 1);
|
|
strncpy(rec.biz_date, bizdate, sizeof(rec.biz_date) - 1);
|
|
strncpy(rec.status, CM_ST_RECV, sizeof(rec.status) - 1);
|
|
rec.amount = amount;
|
|
rec.fee = amount / 100; /* 수수료 1% 가정 */
|
|
|
|
rc = cm_rec_insert(&rec);
|
|
if (rc != TX_OK) {
|
|
tx_log(TX_LOG_ERROR, "[CM_OL_0027] 등록 실패 rc=%d(%s)", rc, tx_strerror(rc));
|
|
tx_return(ctx, rc, ctx->out);
|
|
return;
|
|
}
|
|
|
|
cnt = cm_rec_count(bizdate, CM_ST_RECV);
|
|
|
|
tx_buf_reset(ctx->out);
|
|
tx_buf_sets(ctx->out, "RESPCODE", RESP_OK);
|
|
tx_buf_sets(ctx->out, "KEY", key);
|
|
tx_buf_setlong(ctx->out, "DAYCNT", (cnt < 0) ? 0 : cnt);
|
|
tx_log(TX_LOG_INFO, "[CM_OL_0027] 등록완료 key=%s 당일건수=%ld", key, cnt);
|
|
tx_return(ctx, TX_OK, ctx->out);
|
|
}
|