/* @tier easy @module vl @transform validation-online */ /* * vl_ol_0021.pgc - 매입-정산 대사 서비스 (VL_OL_0021) [tier=easy] * * 영업일 기준 매입합계(SUM vl_purchase) 와 정산합계(SUM vl_settle) 를 * 조회하여 차액을 산출하고 정합/불일치를 판정한다. */ #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_0021, ctx) { EXEC SQL BEGIN DECLARE SECTION; char h_bizdate[9]; long h_purch_sum; long h_settle_sum; EXEC SQL END DECLARE SECTION; char bizdate[16]; long diff; tx_log(TX_LOG_INFO, "[VL_OL_0021] 매입-정산 대사 서비스 진입"); if (tx_buf_get(ctx->in, "BIZDATE", bizdate, sizeof(bizdate)) != TX_OK) { tx_log(TX_LOG_ERROR, "[VL_OL_0021] 영업일(BIZDATE) 누락"); tx_buf_sets(ctx->out, "ERRCODE", "VL2100"); tx_return(ctx, TX_EINVAL, ctx->out); return; } if (!date_is_valid(bizdate)) { tx_log(TX_LOG_WARN, "[VL_OL_0021] 영업일 형식 오류 date=%s", bizdate); tx_buf_sets(ctx->out, "ERRCODE", "VL2101"); tx_return(ctx, TX_EINVAL, ctx->out); return; } strncpy(h_bizdate, bizdate, sizeof(h_bizdate) - 1); h_bizdate[sizeof(h_bizdate) - 1] = '\0'; h_purch_sum = 0; EXEC SQL SELECT COALESCE(SUM(amount), 0) INTO :h_purch_sum FROM vl_purchase WHERE biz_date = :h_bizdate; if (sqlca.sqlcode != TX_SQL_OK) { TX_DBIO_LOG_ERR("SELECT SUM vl_purchase"); tx_buf_sets(ctx->out, "ERRCODE", "VL2108"); tx_return(ctx, TX_EDB, ctx->out); return; } h_settle_sum = 0; EXEC SQL SELECT COALESCE(SUM(settle_amt), 0) INTO :h_settle_sum FROM vl_settle WHERE biz_date = :h_bizdate; if (sqlca.sqlcode != TX_SQL_OK) { TX_DBIO_LOG_ERR("SELECT SUM vl_settle"); tx_buf_sets(ctx->out, "ERRCODE", "VL2109"); tx_return(ctx, TX_EDB, ctx->out); return; } diff = h_purch_sum - h_settle_sum; tx_buf_reset(ctx->out); tx_buf_sets(ctx->out, "BIZDATE", bizdate); tx_buf_setlong(ctx->out, "PURCHSUM", h_purch_sum); tx_buf_setlong(ctx->out, "SETTLESUM", h_settle_sum); tx_buf_setlong(ctx->out, "DIFF", diff); if (diff != 0) { tx_log(TX_LOG_WARN, "[VL_OL_0021] 매입-정산 불일치 date=%s diff=%ld", bizdate, diff); tx_buf_sets(ctx->out, "RESULT", "MISMATCH"); tx_buf_sets(ctx->out, "ERRCODE", "VL2102"); tx_return(ctx, TX_OK, ctx->out); return; } tx_buf_sets(ctx->out, "RESULT", "MATCH"); tx_buf_sets(ctx->out, "ERRCODE", RESP_OK); tx_log(TX_LOG_INFO, "[VL_OL_0021] 매입-정산 정합 date=%s sum=%ld", bizdate, h_purch_sum); tx_return(ctx, TX_OK, ctx->out); }