/* @tier medium @module ac @transform acquire-online */ /* * ac_ol_0015.pgc - 매입 온라인 서비스 (AC_OL_0015) [tier=medium] * * 카드사별 매입분류: KEY 원장의 카드번호 BIN(앞 2자리)으로 카드사 코드를 * 판별한다('94'→KB, '95'→SH, '96'→HN, 그 외 ETC). 판별한 코드를 * ac_ledger.corp_cd 에 반영한다. */ #include #include #include "txcore.h" #include "txcore_dbio.h" #include "acq_util.h" #include "ac_core.h" EXEC SQL INCLUDE sqlca; TX_SERVICE(AC_OL_0015, ctx) { EXEC SQL BEGIN DECLARE SECTION; char h_key[16]; char h_card[20]; char h_corp[8]; EXEC SQL END DECLARE SECTION; char key[16]; char card[20]; char bin[3]; char corp[8]; tx_log(TX_LOG_INFO, "[AC_OL_0015] 카드사별 매입분류 서비스 진입"); if (tx_buf_get(ctx->in, "KEY", key, sizeof(key)) != TX_OK) { tx_log(TX_LOG_ERROR, "[AC_OL_0015] KEY 누락"); tx_return(ctx, TX_EINVAL, ctx->out); return; } strncpy(h_key, key, sizeof(h_key) - 1); h_key[sizeof(h_key) - 1] = '\0'; EXEC SQL SELECT card_no INTO :h_card FROM ac_ledger WHERE key = :h_key; if (sqlca.sqlcode == TX_SQL_NOTFOUND) { tx_log(TX_LOG_WARN, "[AC_OL_0015] 원장 없음 key=%s", key); tx_return(ctx, TX_ENOENT, ctx->out); return; } if (sqlca.sqlcode != TX_SQL_OK) { TX_DBIO_LOG_ERR("AC_OL_0015 ac_ledger select"); tx_return(ctx, TX_EDB, ctx->out); return; } strncpy(card, h_card, sizeof(card) - 1); card[sizeof(card) - 1] = '\0'; bin[0] = card[0]; bin[1] = card[1]; bin[2] = '\0'; if (strcmp(bin, "94") == 0) { strcpy(corp, "KB"); } else if (strcmp(bin, "95") == 0) { strcpy(corp, "SH"); } else if (strcmp(bin, "96") == 0) { strcpy(corp, "HN"); } else { strcpy(corp, "ETC"); } strncpy(h_corp, corp, sizeof(h_corp) - 1); h_corp[sizeof(h_corp) - 1] = '\0'; EXEC SQL UPDATE ac_ledger SET corp_cd = :h_corp, upd_ts = now() WHERE key = :h_key; if (sqlca.sqlcode != TX_SQL_OK) { TX_DBIO_LOG_ERR("AC_OL_0015 ac_ledger update"); tx_return(ctx, TX_EDB, ctx->out); return; } if (sqlca.sqlerrd[2] == 0) { tx_log(TX_LOG_WARN, "[AC_OL_0015] 갱신대상 원장 없음 key=%s", key); tx_return(ctx, TX_ENOENT, ctx->out); return; } tx_buf_reset(ctx->out); tx_buf_sets(ctx->out, "RESPCODE", RESP_OK); tx_buf_sets(ctx->out, "KEY", key); tx_buf_sets(ctx->out, "CORP", corp); tx_log(TX_LOG_INFO, "[AC_OL_0015] 카드사분류 완료 key=%s bin=%s corp=%s", key, bin, corp); tx_return(ctx, TX_OK, ctx->out); }