/* @tier medium @module mm @transform master-online */ /* * mm_ol_0025.pgc - 카드사별 가맹점수 집계 서비스 (MM_OL_0025) [tier=medium] * * 입력 카드사코드에 소속(주거래 카드사)된 가맹점 수를 mm_merchant 에서 * COUNT 로 집계한다. 카드사 마스터(mm_issuer) 존재 확인 후, 정상 상태 * 가맹점 수도 함께 집계하여 응답한다. 조회 전용(읽기) 서비스. (마스터 집계) */ #include #include #include #include "txcore.h" #include "txcore_dbio.h" #include "acq_util.h" #include "mm_core.h" EXEC SQL INCLUDE sqlca; TX_SERVICE(MM_OL_0025, ctx) { EXEC SQL BEGIN DECLARE SECTION; char h_issuer_cd[4]; char h_issuer_nm[32]; char h_st_done[2]; long h_total_cnt; long h_active_cnt; EXEC SQL END DECLARE SECTION; char issuer_cd[4]; tx_log(TX_LOG_INFO, "[MM_OL_0025] 카드사별 가맹점수 집계 서비스 진입"); if (tx_buf_get(ctx->in, "ISSUERCD", issuer_cd, sizeof(issuer_cd)) != TX_OK) { tx_log(TX_LOG_ERROR, "[MM_OL_0025] ISSUERCD 누락"); tx_buf_sets(ctx->out, "ERRCODE", "MM2500"); tx_return(ctx, TX_EINVAL, ctx->out); return; } strncpy(h_issuer_cd, issuer_cd, sizeof(h_issuer_cd) - 1); h_issuer_cd[sizeof(h_issuer_cd) - 1] = '\0'; strncpy(h_st_done, MM_ST_DONE, sizeof(h_st_done)); /* 1) 카드사 마스터 존재 확인 */ EXEC SQL SELECT issuer_nm INTO :h_issuer_nm FROM mm_issuer WHERE issuer_cd = :h_issuer_cd; if (sqlca.sqlcode == TX_SQL_NOTFOUND) { tx_log(TX_LOG_WARN, "[MM_OL_0025] 카드사 미등록 issuer=%s", issuer_cd); tx_buf_sets(ctx->out, "ERRCODE", "MM2501"); tx_return(ctx, TX_ENOENT, ctx->out); return; } if (sqlca.sqlcode != TX_SQL_OK) { TX_DBIO_LOG_ERR("SELECT mm_issuer"); tx_buf_sets(ctx->out, "ERRCODE", "MM2509"); tx_return(ctx, TX_EDB, ctx->out); return; } /* 2) 소속 가맹점 총수 집계 */ h_total_cnt = 0; EXEC SQL SELECT COUNT(*) INTO :h_total_cnt FROM mm_merchant WHERE issuer_cd = :h_issuer_cd; if (sqlca.sqlcode != TX_SQL_OK && sqlca.sqlcode != TX_SQL_NOTFOUND) { TX_DBIO_LOG_ERR("COUNT mm_merchant total"); tx_buf_sets(ctx->out, "ERRCODE", "MM2509"); tx_return(ctx, TX_EDB, ctx->out); return; } /* 3) 정상 상태 가맹점 수 집계 */ h_active_cnt = 0; EXEC SQL SELECT COUNT(*) INTO :h_active_cnt FROM mm_merchant WHERE issuer_cd = :h_issuer_cd AND status = :h_st_done; if (sqlca.sqlcode != TX_SQL_OK && sqlca.sqlcode != TX_SQL_NOTFOUND) { TX_DBIO_LOG_ERR("COUNT mm_merchant active"); tx_buf_sets(ctx->out, "ERRCODE", "MM2509"); tx_return(ctx, TX_EDB, ctx->out); return; } tx_buf_reset(ctx->out); tx_buf_sets(ctx->out, "ISSUERCD", issuer_cd); tx_buf_sets(ctx->out, "ISSUERNM", h_issuer_nm); tx_buf_setlong(ctx->out, "TOTALCNT", h_total_cnt); tx_buf_setlong(ctx->out, "ACTIVECNT", h_active_cnt); tx_buf_sets(ctx->out, "ERRCODE", RESP_OK); tx_log(TX_LOG_INFO, "[MM_OL_0025] 집계완료 issuer=%s 총%ld 정상%ld", issuer_cd, h_total_cnt, h_active_cnt); tx_return(ctx, TX_OK, ctx->out); }