후행 처리 서비스 개발

후행 처리 서비스는 Bxm Service 를 개발하여야 하며, 서비스의 입출력을 bxm.deferred.data.io.DeferredExecIO 을 사용하여야 한다.

후행 처리 서비스 로직은 업무 내용에 맞게 작성하면 된다.

아래의 그림은 후행 처리 서비스 입출력을 나타낸다.

후행 처리 서비스 입출력
Figure 1. 후행 처리 서비스 입출력

아래 표는 DTO 의 컬럼 명에 대해 설명한 것이다.

컬럼(물리 명) 컬럼(논리 명) 타입

domainId

도메인ID

String

deferredId

후행처리ID

String

bizDt

영업일자

String

nodeNo

노드 번호

Integer

deferredProcCd

후행실행처리코드

String

parllProcSeq

병렬처리일련번호

Integer

targetTableNm

대상테이블 명

String

targetTableColumn

대상테이블컬럼 명

String

startSeq

시작일련번호

Long

endSeq

종료일련번호

Long

procSeq

현재일련번호

Long

아래의 예는 후행 처리 서비스 개발 샘플이다.

    @BxmServiceOperation("transferDef")
    public DeferredExecIO transferDef(DeferredExecIO in) throws DefaultApplicationException
    {
        DeferredExecIO out = new DeferredExecIO();

        /**
         * 영업일자 체크
         */
        if ( !isValidBizDt(in.getBizDt()))
        {
            logger.error("Not valid bizDt : [{}]", in.getBizDt());
            throw new IllegalArgumentException("Not valid bizDt");
        }

        /**
         * 업무 로그 데이터 가져오기.
         */
        BxmLogTrx01IO logTrx01IO = getLogTrx(in);

        /**
         * 입력항목 체크
         */
        if ( !inputValidation(logTrx01IO))
        {
            logger.error("InputValidation is failed.");
            return null;
        }

        /**
         * 총계정 원장 조회
         */
        PocAccMst02IO pocAccMstIO = getOpBrchInfo(Integer.parseInt(logTrx01IO.getOpenBranchNo()));

        /**
         * 계좌개설점 체크
         */
        if (pocAccMstIO == null)
        {
            // 해당계좌개설점이 존재하지 않습니다.
            logger.error("해당계좌개설점이 존재하지 않습니다.");
            throw new DefaultApplicationException("CMFWE0023", new Object [] {});
        }

        /**
         * 입력거래 유형체크 후 처리금액계산
         */
        checkTrxType(logTrx01IO);

        return out;
    }

    @BxmCategory(logicalName = "입력항목검증", description = "입력항목검증")
    private boolean inputValidation(BxmLogTrx01IO in) throws DefaultApplicationException
    {
        /**
         * 입력값 null 체크
         */
        if (in == null)
        {
            /**
             * 입력값 null
             */

            logger.error("in is null.");

            return false;
        }

        /**
         * 거래 유형 체크
         */
        if (in.getTrxTypeCd() == null || StringUtils.isEmpty(in.getTrxTypeCd()))
        {
            /**
             * 거래 유형 항목 누락
             */
            logger.error("in.getTrxTypeCd() is null.");
            return false;
        }
        /**
         * 금액 체크
         */
        if (in.getTrxAmt() == null || in.getTrxAmt().compareTo(BigDecimal.ZERO) <= 0)
        {
            /**
             * 금액이 비었거나 0보다 작거나 같음
             */
            logger.error("in.getTrxAmt() is null");
            return false;
        }

        if (in.getOpenBranchNo() == null || StringUtils.isEmpty(in.getOpenBranchNo()))
        {
            logger.error("in.getOpenBranchNo is null");
            return false;
        }

        return true;
    }

    @BxmCategory(logicalName = "총계정정보조회", description = "총계정정보조회")
    private PocAccMst02IO getOpBrchInfo(int opBrch) throws DefaultApplicationException
    {
        if (pocAccMstDBIO == null)
            pocAccMstDBIO = LApplicationContext.getBean(PocAccMstDBIO.class);

        PocAccMst02IO pocAccMstIO = pocAccMstDBIO.selectAccMst01(opBrch);
        return pocAccMstIO;
    }

    @BxmCategory(logicalName = "거래유형별처리금액계산", description = "거래유형에 따라 금액을 가감한다")
    private void checkTrxType(BxmLogTrx01IO in) throws DefaultApplicationException
    {

        PocAccMst02IO pocAccMstIO = new PocAccMst02IO();
        pocAccMstIO.setOpBrch(Integer.parseInt(in.getOpenBranchNo()));
        pocAccMstIO.setAmt(in.getTrxAmt());

        // 입금 1, 출금 2
        /**
         * 입금인 경우 (처리금액 = 잔액 + 거래금액)
         * 출금인 경우 (처리금액 = 잔액 - 거래금액)
         */

        // if (CommonCodeConstants.TRX_TYPE_DEP == in.getTrxType()) {

        if (CommonCodeConstants.TRX_TYPE_DEP.equals(in.getTrxTypeCd()))
        {
            pocAccMstDBIO.updateAccMst01(pocAccMstIO);
        }
        else if (CommonCodeConstants.TRX_TYPE_PAY.equals(in.getTrxTypeCd()))
        {
            pocAccMstDBIO.updateAccMst02(pocAccMstIO);
        }
    }

    private BxmLogTrx01IO getLogTrx(DeferredExecIO in)
    {
        if (bxmLogTrxDBIO == null)
            bxmLogTrxDBIO = LApplicationContext.getBean(BxmLogTrxDBIO.class);

        BxmLogTrx01IO bxmLogTrx01IO = new BxmLogTrx01IO();
        bxmLogTrx01IO.setBizDt(in.getBizDt());
        bxmLogTrx01IO.setNodeNo(in.getNodeNo());
        bxmLogTrx01IO.setLogSeq(in.getProcSeq());
        bxmLogTrx01IO.setDay(NumberingUtil.getBizDay(in.getBizDt()));
        BxmLogTrx01IO logTrxOut = bxmLogTrxDBIO.selectListLogTrx02(bxmLogTrx01IO);
        return logTrxOut;
    }

    private boolean isValidBizDt(String bizDt)
    {
        return !(StringUtils.isEmpty(bizDt)) && (bizDt.length() == 8);
    }
SWLab Bankware Global
  • 전체
  • BXM
  • BXCM
  • BXCP
  • BXI
제품 선택 시 더 정확한 매뉴얼 가이드를 제공해드립니다.

Copyright© Bankwareglobal All Rights Reserved.