/* @tier medium @module vl @transform validation-online */ /* * vl_ol_0018.pgc - 중복승인 검출 서비스 (VL_OL_0018) [tier=medium] * * 동일 승인번호(approval_no) 가 원장(vl_ledger) 에 2건 이상 존재하는지 * 집계하여 중복승인 여부를 판정한다. 중복이면 표준 에러코드(VL18xx) 를 * 응답에 실어 반환한다. */ #include #include #include #include "txcore.h" #include "txcore_dbio.h" #include "acq_util.h" #include "vl_core.h" EXEC SQL INCLUDE sqlca; TX_SERVICE(VL_OL_0018, ctx) { EXEC SQL BEGIN DECLARE SECTION; char h_appr[10]; char h_bizdate[9]; long h_dupcnt; EXEC SQL END DECLARE SECTION; char appr[10]; char bizdate[16]; tx_log(TX_LOG_INFO, "[VL_OL_0018] 중복승인 검출 서비스 진입"); if (tx_buf_get(ctx->in, "APPRNO", appr, sizeof(appr)) != TX_OK) { tx_log(TX_LOG_ERROR, "[VL_OL_0018] 승인번호(APPRNO) 누락"); tx_buf_sets(ctx->out, "ERRCODE", "VL1800"); tx_return(ctx, TX_EINVAL, ctx->out); return; } if (tx_buf_get(ctx->in, "BIZDATE", bizdate, sizeof(bizdate)) != TX_OK) { tx_log(TX_LOG_ERROR, "[VL_OL_0018] 영업일(BIZDATE) 누락"); tx_buf_sets(ctx->out, "ERRCODE", "VL1801"); tx_return(ctx, TX_EINVAL, ctx->out); return; } if (!date_is_valid(bizdate)) { tx_log(TX_LOG_WARN, "[VL_OL_0018] 영업일 형식 오류 date=%s", bizdate); tx_buf_sets(ctx->out, "ERRCODE", "VL1802"); tx_return(ctx, TX_EINVAL, ctx->out); return; } strncpy(h_appr, appr, sizeof(h_appr) - 1); h_appr[sizeof(h_appr) - 1] = '\0'; strncpy(h_bizdate, bizdate, sizeof(h_bizdate) - 1); h_bizdate[sizeof(h_bizdate) - 1] = '\0'; h_dupcnt = 0; EXEC SQL SELECT COUNT(*) INTO :h_dupcnt FROM vl_ledger WHERE approval_no = :h_appr AND biz_date = :h_bizdate; if (sqlca.sqlcode != TX_SQL_OK) { TX_DBIO_LOG_ERR("SELECT COUNT vl_ledger"); tx_buf_sets(ctx->out, "ERRCODE", "VL1809"); tx_return(ctx, TX_EDB, ctx->out); return; } tx_buf_reset(ctx->out); tx_buf_sets(ctx->out, "APPRNO", appr); tx_buf_sets(ctx->out, "BIZDATE", bizdate); tx_buf_setlong(ctx->out, "DUPCNT", h_dupcnt); if (h_dupcnt >= 2) { tx_log(TX_LOG_WARN, "[VL_OL_0018] 중복승인 검출 appr=%s cnt=%ld", appr, h_dupcnt); tx_buf_sets(ctx->out, "RESULT", "DUPLICATE"); tx_buf_sets(ctx->out, "ERRCODE", "VL1803"); tx_return(ctx, TX_OK, ctx->out); return; } tx_buf_sets(ctx->out, "RESULT", "UNIQUE"); tx_buf_sets(ctx->out, "ERRCODE", RESP_OK); tx_log(TX_LOG_INFO, "[VL_OL_0018] 중복없음 appr=%s cnt=%ld", appr, h_dupcnt); tx_return(ctx, TX_OK, ctx->out); }