From c869981f59d1fe5dcd71a58cbd3b5fd7baa89a4a Mon Sep 17 00:00:00 2001 From: "Jonguk. Lim" Date: Wed, 2 Oct 2024 15:50:24 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20NICE=20CI=20accept=20=EC=A7=84=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/mens-iup-query.sql | 16 +- .../modules/nice/mapper/INiceCiMapper.java | 11 +- .../xit/ens/modules/nice/model/NiceCiDTO.java | 232 ++++++++++++++++-- .../nice/presentation/NiceCiController.java | 5 +- .../nice/service/NiceCiAcceptService.java | 104 +++++--- .../modules/iup-niceci-mapper.xml | 115 +++++++-- 6 files changed, 406 insertions(+), 77 deletions(-) diff --git a/db/mens-iup-query.sql b/db/mens-iup-query.sql index af45ae0..4ecb9e9 100644 --- a/db/mens-iup-query.sql +++ b/db/mens-iup-query.sql @@ -1,14 +1,14 @@ Insert into TB_INPUT_XIT (LNK_INPUT_ID, ORG_CD, JOB_CD, TOT_CNT, PRCS_CD, RUN_DT, EXPIRES_DT, SEND_TYPE, REG_ID, REG_DT, PAY_EXPIRES_DT) Values - (302400001123, '0002', 'B0001', 1, 'TGRG', SYSDATE, SYSDATE + 30 - , 'KP', 'cntc', SYSDATE, SYSDATE+30); + (302400002001, '0002', 'B0001', 1, 'TRRG', SYSDATE, SYSDATE + 30 + , 'NI', 'cntc', SYSDATE, SYSDATE+30); Insert into TB_INPUT_DATA_XIT (LNK_INPUT_ID, DATA_ID, SID, NAME, BIRTHDAY, GENDER, MSG_DATA, MSG_DTL_DATA, REG_ID, REG_DT, CAR_NO, CALL_CENTER_NO) Values - (302400001123, '300799990000000001123', '8312181157213', '김지호', '19831218','1' + (302400002001, '300799990000000002001', '8312181157213', '김지호', '19831218','1' , '{"~~@@!!CAR_NO!!@@~~":"20우3412","~~@@!!DEGREE!!@@~~":"3","~~@@!!FEE!!@@~~":"1,900","~~@@!!YYYY!!@@~~":"2022","~~@@!!MM!!@@~~":"03","~~@@!!DD!!@@~~":"11","~~@@!!BANK!!@@~~":"우체국","~~@@!!ACCOUNT!!@@~~":"8608-90-80907938","~~@@!!HISTORY!!@@~~":"-2021-11-29 12:33 (별내 550)\n-2021-11-29 12:19 (양주 900)\n-2021-11-30 14:33 (불암산② 450)","~~@@!!CALL_NO!!@@~~":"(031)522-6400~1","~~@@!!HOMEPAGE!!@@~~":"https://seoulbeltway.co.kr/main/esccar.jsp"}' , '{"details":[{"item_type":"TEXT","elements":[],"title":"미납통행료 안내문(1차)","properties":{"use_toggle":false}},{"item_type":"PRE_TEXT","elements":"수도권제1순환고속도로 안내문(1차)이 도착하였습니다.\n미납통행료 종이고지서를 모바일 전자문서로 고지하고 있으며, 본 전자문서를 받으신 경우 종이고지서는 발송되지 않습니다.","title":"","properties":{"use_toggle":false}},{"item_type":"KEY_VALUE","elements":[{"level":1,"value":"67어3853","key":"차량번호"},{"level":1,"value":"수도권제1순환","key":"미납발생\n노선명"},{"level":1,"value":"미납통행료 안내문(1차)","key":"고지서명"},{"level":1,"value":"1,260원","key":"납부하실 통행료"},{"level":1,"value":"1,260원","key":"- 미납통행료"},{"level":1,"value":"0원","key":"- 부가통행료"},{"level":1,"value":"2023년 06월 22일까지","key":"납부기한"}],"title":"안내내역","properties":{"use_toggle":false}},{"item_type":"TEXT","elements":[],"title":"상세내역","properties":{"use_toggle":false}},{"item_type":"KEY_VALUE","elements":[{"level":1,"value":"2023-05-20 13:10","key":"통행일시"},{"level":1,"value":"양주","key":"통행영업소"},{"level":1,"value":"1,260 원","key":"통행요금"},{"level":1,"value":"SC잔액부족","key":"미납사유"}],"title":"","properties":{"use_toggle":false}},{"item_type":"PRE_TEXT","elements":" \n","title":"","properties":{"use_toggle":false}},{"item_type":"PRE_TEXT","elements":"※ 해당 통행을 포함하여 최근 1년 이내에 20회 이상 통행료 미납 시 누적 20회부터 즉시 부가통행료(미납통행료의 10배)가 미납통행료와 함께 부과될 수 있음을 알려드립니다.","title":"","properties":{"style":{"highlight":{"※ 해당 통행을 포함하여 최근 1년 이내에 20회 이상 통행료 미납 시 누적 20회부터 즉시 부가통행료(미납통행료의 10배)가 미납통행료와 함께 부과될 수 있음을 알려드립니다.":{"font-color":"black","font-weight":"bold"}}},"use_toggle":false}},{"item_type":"KEY_VALUE","elements":[{"level":1,"value":"하단의 납부하기 클릭 또는\n가상계좌 납부\n(우체국 8608-89-80215603)","key":"납부방법"},{"level":1,"value":"수도권제1순환고속도로\n고객센터 ☎ (031)894-6300~1\n홈페이지 https://seoulbeltway.co.kr/main/esccar.jsp","key":"문의처"}],"title":"납부방법 및 문의처","properties":{"hyperlink":["https://seoulbeltway.co.kr/main/esccar.jsp"],"style":{"highlight":{"(031)894-6300~1":{"font-color":"blue","font-weight":"bold","font-size":"35px","use-clipboard":true},"우체국":{"font-weight":"bold"},"고객센터 ☎ ":{"font-color":"blue","font-weight":"bold","font-size":"35px"},"8608-89-80215603":{"font-weight":"bold","use-clipboard":true}}},"use_toggle":false}},{"item_type":"TABLE","elements":{"head":[""],"rows":[["발송처 : 민자도로 관리지원센터\n(044-211-3377)"]]},"title":"","properties":{"style":{"highlight":{"발송처 : 민자도로 관리지원센터":{"font-size":"25px"},"(044-211-3377)":{"font-size":"25px"}},"text_align":["right"]},"use_toggle":false}},{"item_type":"PAY_BUTTON","title":"납부하기"}]}' , 'cntc', SYSDATE, '20우3412', '1599-2509'); @@ -131,3 +131,13 @@ WHERE tix.send_type='NI' AND tix.expires_dt < SYSDATE - 1; -- 2. tb_input_xit 테이블 prcs_cd='CLOS' / 실패 시 prcs_cd='FAIL' + + +INSERT + INTO + ens_bill + ( bill_id, bill_uid, biller_user_key, BILL_SE_CD, org_cd, regist_dt ) + VALUES + ( 7, 'billUid', 'billerUserKey', 'kkk', '0002', sysdate ); + +commit; diff --git a/src/main/java/cokr/xit/ens/modules/nice/mapper/INiceCiMapper.java b/src/main/java/cokr/xit/ens/modules/nice/mapper/INiceCiMapper.java index 9f2b87e..8810e6c 100644 --- a/src/main/java/cokr/xit/ens/modules/nice/mapper/INiceCiMapper.java +++ b/src/main/java/cokr/xit/ens/modules/nice/mapper/INiceCiMapper.java @@ -22,8 +22,13 @@ import cokr.xit.ens.modules.nice.model.*; */ @Mapper public interface INiceCiMapper { - List selectNiceCiAcceptTgts(final NiceCiDTO.InputXit inputXit); - List selectNiceCiAcceptDatas(final NiceCiDTO.InputXit inputXit); + List selectNiceCiAcceptTgts(final NiceCiDTO.NiceCiParam niceCiParam); + List selectNiceCiAcceptDatas(final NiceCiDTO.NiceCiParam niceCiParam); - int saveBill(final NiceCiDTO.BillDTO bill); + int insertBill(final NiceCiDTO.BillDTO billDTO); + int updateBill(final NiceCiDTO.BillDTO billDTO); + //int saveBill(final NiceCiDTO.BillDTO billDTO); + int saveBillKko(final NiceCiDTO.BillKkoDTO billKkoDTO); + int updatePayUrlOfDataInput(final NiceCiDTO.InputDataXit inputDataXit); + int updatePrcsCdOfInputXit(final NiceCiDTO.InputXit inputXit); } diff --git a/src/main/java/cokr/xit/ens/modules/nice/model/NiceCiDTO.java b/src/main/java/cokr/xit/ens/modules/nice/model/NiceCiDTO.java index 8279eb6..bd22896 100644 --- a/src/main/java/cokr/xit/ens/modules/nice/model/NiceCiDTO.java +++ b/src/main/java/cokr/xit/ens/modules/nice/model/NiceCiDTO.java @@ -3,11 +3,7 @@ package cokr.xit.ens.modules.nice.model; import java.time.*; import java.util.*; -import javax.persistence.*; - import cokr.xit.ens.biz.iup.code.*; -import cokr.xit.ens.core.jpa.support.*; -import cokr.xit.ens.modules.common.ctgy.intgrnbill.support.code.*; import io.swagger.v3.oas.annotations.media.*; import lombok.*; import lombok.experimental.*; @@ -27,6 +23,91 @@ import lombok.experimental.*; * */ public class NiceCiDTO { + @Schema(name = "InputXit DTO", description = "InputXit DTO") + @Data + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @EqualsAndHashCode(callSuper = false) + public static class NiceCiParam { + /** + * 발송구분 + */ + private String sendType = IupSendTypeCd.NI.getCode(); + + /** + * 상태값 + */ + private String prcsCd = IupPrcsCd.TGRG.getCode(); + + /** + * 연계입수아이디 + */ + private Long lnkInputId; + + /** + * 안내장 코드 + */ + private String jobCd; + + // private String signguCode; + // private String ffnlgCode; + // private String profile; + // + // /** + // * 통합 발송 마스터 id + // */ + // private String unitySndngMastrId; + // /** + // * 통합 발송 마스터 id + // */ + // private String unitySndngDetailId; + // /** + // * 발송 마스터 id + // */ + // private String sndngMastrId; + // + // /** + // * 발송상세ID + // */ + // private String sndngDetailId; + // + // /** + // * 템플릿ID + // */ + // private String tmplatId; + // + // /** + // * 발송 건수 + // */ + // private int sndngCo; + // + // private String sndngProcessSttus; + // /** + // * 발송 처리 상태 + // */ + // private String newSndngProcessSttus; + // + // private String try1; + // private String try2; + // private String try3; + // private int tryCnt; + // private int trySeq; + // private String sndngSeCode; + // private String sndngDt; + // private String sndngDt2; + // private String sndngDt3; + // private String try2Minute; + // private String try3Minute; + private String errorCode; + private String errorMessage; + + private String resultCd; + private String resultDt; + + private String url; + } + @Schema(name = "InputXit DTO", description = "InputXit DTO") @Data @NoArgsConstructor @@ -57,8 +138,7 @@ public class NiceCiDTO { /** * 상태값 */ - @Enumerated(EnumType.STRING) - private IupPrcsCd prcsCd; + private String prcsCd; /** * 에러메세지 @@ -78,8 +158,7 @@ public class NiceCiDTO { /** * 발송구분 */ - @Enumerated(EnumType.STRING) - private IupSendTypeCd sendType; + private String sendType; /** * 접수일시 @@ -123,7 +202,6 @@ public class NiceCiDTO { private String msgData; - @Lob private String msgDtlData; private String name; @@ -156,22 +234,21 @@ public class NiceCiDTO { /** * 청구서 타입 */ - @Enumerated(EnumType.STRING) - private BillSeCd billSeCd; + //@Enumerated(EnumType.STRING) + private String billSeCd; private String orgCd; /** * 납부결제여부 */ - @Convert(converter = BooleanToYnConverter.class) private Boolean paidAt; /** * 지불유형 */ - @Enumerated(EnumType.STRING) - private PaidTypeCd paidType; + //@Enumerated(EnumType.STRING) + private String paidType; /** * 납부(결제) 날짜 - 14자리 @@ -183,16 +260,131 @@ public class NiceCiDTO { */ private String paidCancelDt; + + private String docBillKko; + + + private String docBillNv; + } + + @Schema(name = "BillKkoDTO DTO", description = "BillKkoDTO DTO") + @Data + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + public static class BillKkoDTO { + private Long billId; + private String billUid; + private String billerUserKey; + /** - * 카카오 청구서 + * 청구년월 */ - @Lob - private String docBillKko; + private String billedYearMonth; /** - * 네이버 청구서 + * 동일 고객번호 구분 값 */ - @Lob - private String docBillNv; + private String ordinal; + + /** + * 개별 청구서를 식별하는 키 값 + */ + private String billerNoticeKey; + + /** + * URL 만료일 + */ + private String expireAt; + + /** + * API 호출 시 함께 전달할 JSON형태의 문자열 + */ + private String parameters; + + /** + *
+         * 청구서조회/납부가능여부/납부결과 API Url정보 JSON형태의 문자열
+         * "    "custom_url\": {\n" +
+         * "      \"notice_url\" : \" https://test-api.dozn.co.kr/kakao/notice\",\n" +
+         * "      \"prepay_url\": \"https://test-api.dozn.co.kr/kakao/prepay\",\n" +
+         * "      \"pay_result_url\": \" https://test-api.dozn.co.kr/kakao/pay-result\"\n" +
+         * "    }"
+         * 
+ */ + private String customUrl; + + /** + * 청구서 URL + */ + private String url; + + /* ===================================== + * 결제진행 - PayNotice 단계 + ===================================== */ + + /** + * 청구서 명 + */ + private String title; + + /** + * 납부 요청 금액 + */ + private Integer amount; + + /** + * 비과세 금액 + */ + private Integer taxFreeAmount; + + /** + * 부가세 금액 + */ + private Integer vatAmount; + + /** + * 납기 안내타입 : D1 + */ + private String expireType; + + /** + * 첫번째 납기일 + */ + private String payExpireDate; + + /** + * 두번째 납기일 + */ + private String secondPayExpireDate; + + /** + * 계좌송금수단 사용 시 계좌정보 + */ + private String bankAccounts; + + /** + * 청구서 상세정보 + */ + private String details; + + /** + * 결제일시(YYYYMMDDHH24MISS) + */ + private String lastPaidAt; + + /** + * 결제번호 + */ + private Integer lastPayId; + + + private String errorCode; + private String errorMessage; + // @Embedded + // @Setter + // private FieldError error; + + } } diff --git a/src/main/java/cokr/xit/ens/modules/nice/presentation/NiceCiController.java b/src/main/java/cokr/xit/ens/modules/nice/presentation/NiceCiController.java index 9e95c11..dbbbc9b 100644 --- a/src/main/java/cokr/xit/ens/modules/nice/presentation/NiceCiController.java +++ b/src/main/java/cokr/xit/ens/modules/nice/presentation/NiceCiController.java @@ -3,6 +3,7 @@ package cokr.xit.ens.modules.nice.presentation; import org.springframework.http.*; import org.springframework.web.bind.annotation.*; +import cokr.xit.ens.modules.nice.model.*; import cokr.xit.ens.modules.nice.service.*; import io.swagger.v3.oas.annotations.*; import io.swagger.v3.oas.annotations.tags.*; @@ -32,8 +33,8 @@ public class NiceCiController { @Operation(summary = "접수") @PostMapping(value = "/accept", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity accept() { - return new ResponseEntity<>(niceCiAcceptService.accept(), HttpStatus.OK); + public ResponseEntity accept(final NiceCiDTO.NiceCiParam niceCiParam) { + return new ResponseEntity<>(niceCiAcceptService.accept(niceCiParam), HttpStatus.OK); } @Operation(summary = "(대량)전송요청") diff --git a/src/main/java/cokr/xit/ens/modules/nice/service/NiceCiAcceptService.java b/src/main/java/cokr/xit/ens/modules/nice/service/NiceCiAcceptService.java index 79b1d5d..fb5d982 100644 --- a/src/main/java/cokr/xit/ens/modules/nice/service/NiceCiAcceptService.java +++ b/src/main/java/cokr/xit/ens/modules/nice/service/NiceCiAcceptService.java @@ -6,10 +6,14 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.*; import org.springframework.transaction.annotation.*; +import com.google.gson.*; + import cokr.xit.ens.biz.iup.code.*; import cokr.xit.ens.core.aop.*; import cokr.xit.ens.core.utils.*; import cokr.xit.ens.modules.common.code.*; +import cokr.xit.ens.modules.common.ctgy.intgrnbill.kko.service.process.model.*; +import cokr.xit.ens.modules.common.ctgy.intgrnbill.support.code.*; import cokr.xit.ens.modules.common.ctgy.sys.mng.service.*; import cokr.xit.ens.modules.nice.mapper.*; import cokr.xit.ens.modules.nice.model.*; @@ -35,16 +39,20 @@ import lombok.extern.slf4j.*; @Service @RequiredArgsConstructor public class NiceCiAcceptService { - @Value("${contract.niceCi.orgId}") - private String ORG_ID; - - @Value("${contract.niceCi.clientId}") - private String CLIENT_ID; + @Value("${contract.kakao.pay.bill.dozn.api.validate.host}") + private String BILL_HOST; + @Value("${contract.kakao.pay.bill.dozn.api.validate.notice}") + private String BILL_NOTICE_URL; + @Value("${contract.kakao.pay.bill.dozn.api.validate.prepay}") + private String BILL_PREPAY_URL; + @Value("${contract.kakao.pay.bill.dozn.api.validate.payresult}") + private String BILL_PAYREUSLT_URL; private final KeySequenceService keySequenceService; private final NiceCiApiService niceCiApiService; private final INiceCiMapper niceCiMapper; + private Gson gson = new GsonBuilder().disableHtmlEscaping().create(); /** *
@@ -65,38 +73,68 @@ public class NiceCiAcceptService {
      * 
*/ @Transactional(propagation = Propagation.REQUIRES_NEW) - public EnsResponseVO accept(){ - NiceCiDTO.InputXit inputXit = NiceCiDTO.InputXit.builder() - .sendType(IupSendTypeCd.NI) - .prcsCd(IupPrcsCd.TGRG) - .build(); - - final List list = niceCiMapper.selectNiceCiAcceptTgts(inputXit); - - list.forEach(niceCiMapper::selectNiceCiAcceptDatas); + public EnsResponseVO accept(final NiceCiDTO.NiceCiParam niceCiParam){ + niceCiParam.setSendType(IupSendTypeCd.NI.getCode()); + niceCiParam.setPrcsCd(IupPrcsCd.TGRG.getCode()); + + final List list = niceCiMapper.selectNiceCiAcceptTgts(niceCiParam); + list.forEach(d -> { + niceCiParam.setLnkInputId(d.getLnkInputId()); + d.setInputDataXits(niceCiMapper.selectNiceCiAcceptDatas(niceCiParam)); + }); + //List bills = new ArrayList<>(); + //List billKkos = new ArrayList<>(); final String prefixBillUid = PostSeCd.intgrnNoti.getCode() + "-" + IdGenerator.getCurrentTimeSec(); - - List bills = new ArrayList<>(); - for(NiceCiDTO.InputXit d : list){ - List inputDataXits = niceCiMapper.selectNiceCiAcceptDatas(d); - - // bill - bills.add( - NiceCiDTO.BillDTO.builder() - //.billId(keySequenceService.getKeySequence("bill_id")) - .billUid(IdGenerator.getShortUUID(prefixBillUid)) - //.billerUserKey(document.getXit_property().getBill_acpt_data().getBillerUserKey()) - //.billSeCd(document.getXit_property().getBill_acpt_data().getBillSe()) - //.orgMng(OrgMng.builder().orgCd(reqDTO.getOrg_cd()).build()) - .build() - ); + final String customUrl = gson.toJson(CustomUrl.builder() + .noticeUrl(BILL_HOST + BILL_NOTICE_URL) + .prepayUrl(BILL_HOST + BILL_PREPAY_URL) + .payResultUrl(BILL_HOST + BILL_PAYREUSLT_URL) + .build()); + final String expireAt = DateUtil.getTodayAndNowTime("YYYYMMddHHmmss"); + + for(NiceCiDTO.InputXit xit : list){ + try { + List inputDataXits = xit.getInputDataXits(); + + for (NiceCiDTO.InputDataXit data : inputDataXits) { + final long bilId = keySequenceService.getKeySequence("bill_id"); + final String billUid = IdGenerator.getShortUUID(prefixBillUid); + + // FIXME: bill_se_cd, org_cd 설정 및 확인 필요??? + niceCiMapper.insertBill( + NiceCiDTO.BillDTO.builder() + .billId(bilId) + .billUid(billUid) + .billerUserKey(data.getDataId()) + .billSeCd(BillSeCd.privt.getCode()) + .orgCd(xit.getOrgCd()) + .build() + ); + // FIXME: biller_notice_key, custom_url, expire_at 설정 및 확인 필요??? + niceCiMapper.saveBillKko( + NiceCiDTO.BillKkoDTO.builder() + .billId(bilId) + .billerUserKey(data.getDataId()) + .billerNoticeKey(billUid) + .customUrl(customUrl) + .expireAt(expireAt) //d.getExpiresDt() + .billUid(billUid) + .build() + ); + + data.setPayUrl(customUrl); + niceCiMapper.updatePayUrlOfDataInput(data); + } + + xit.setPrcsCd(IupPrcsCd.GRUC.getCode()); + niceCiMapper.updatePrcsCdOfInputXit(xit); + } catch (Exception e){ + xit.setPrcsCd(IupPrcsCd.TGRF.getCode()); + niceCiMapper.updatePrcsCdOfInputXit(xit); + } } - bills.forEach(b -> { - b.setBillId(keySequenceService.getKeySequence("bill_id")); - niceCiMapper.saveBill(b); - }); return EnsResponseVO.okBuilder() //.resultInfo(niceCiMapper.selectAcceptTgts(null)) diff --git a/src/main/resources/mybatis-mapper/modules/iup-niceci-mapper.xml b/src/main/resources/mybatis-mapper/modules/iup-niceci-mapper.xml index 79ac4a4..07b31b9 100644 --- a/src/main/resources/mybatis-mapper/modules/iup-niceci-mapper.xml +++ b/src/main/resources/mybatis-mapper/modules/iup-niceci-mapper.xml @@ -6,7 +6,7 @@ - /** iup-niceci-mapper|selectNiceCiAcceptTgts-NICE CI 발송 대상 조회|julim */ SELECT lnk_input_id , err_msg @@ -24,12 +24,11 @@ , upd_dt , upd_id FROM tb_input_xit - -- WHERE send_type='NI' - -- AND prcs_cd='TGRG'; - where ORG_CD = '0005' + WHERE send_type = #{sendType} + AND prcs_cd = #{prcsCd} - /** iup-niceci-mapper|selectNiceCiAcceptDatas-NICE CI 발송 대상 조회|julim */ SELECT data_id , birthday @@ -53,29 +52,113 @@ WHERE lnk_input_id = #{lnkInputId} - - /** iup-niceci-mapper|saveBill-NICE CI 청구서 생성|julim */ + + /** iup-niceci-mapper|insertBill-NICE CI 청구서 생성|julim */ INSERT INTO ens_bill ( bill_id, bill_uid, + biller_user_key, bill_se_cd, --- doc_bill_kko, --- doc_bill_nv, org_cd, - biller_user_key, --- paid_at, --- paid_cancel_dt, --- paid_dt, --- paid_type, regist_dt ) VALUES ( #{billId}, #{billUid}, + #{billerUserKey}, #{billSeCd}, #{orgCd}, - #{billerUserKey}, sysdate - ) ) + ) + + + + UPDATE ens_bill + SET doc_bill_kko = #{docBillKko} + , paid_at = #{paidAt} + , paid_cancel_dt = #{paidCancelDt} + , paid_dt = #{paidDt} + , paid_type = #{paidType} + , last_updt_dt = sysdate + WHERE bill_id = #{billId} + + + + + /** iup-niceci-mapper|saveBill-NICE CI 청구서 생성|julim */ + MERGE INTO ens_bill_kko + USING DUAL + ON (bill_id = #{billId}) + WHEN MATCHED THEN + UPDATE + SET amount = #{amount} + , details = #{details} + , url = #{url} + , title = #{title} + , expire_type = #{expireType} + , pay_expire_date = #{payExpireDate} + , second_pay_expire_date = #{secondPayExpireDate} + , billed_year_month = #{billedYearMonth} + , ordinal = #{ordinal} + , parameters = #{parameters} + , bank_accounts = #{bankAccounts} + , tax_free_amount = #{taxFreeAmount} + , vat_amount = #{vatAmount} + , last_paid_at = TO_CHAR(sysdate, 'YYYYMMDDHH24MISS') + , last_pay_id = #{lastPayId} + , error_code = #{errorCode} + , error_message = #{errorMessage} + , last_updt_dt = sysdate + WHEN NOT MATCHED THEN + INSERT ( + bill_id, + bill_uid, + biller_user_key, + biller_notice_key, + custom_url, + expire_at, + regist_dt + ) VALUES ( + #{billId} + , #{billUid} + , #{billerUserKey} + , #{billerNoticeKey} + , #{customUrl} + , #{expireAt} + , sysdate + ) + + + /** iup-niceci-mapper|updatePayUrlOfDataInput-payUrl update|julim */ + UPDATE tb_input_data_xit + SET pay_url = #{payUrl} + WHERE lnk_input_id = #{lnkInputId} + + + + /** iup-niceci-mapper|updatePrcsCdOfInputXit-prcsCd update|julim */ + UPDATE tb_input_xit + SET prcs_cd = #{prcsCd} + WHERE lnk_input_id = #{lnkInputId} +