diff --git a/src/main/java/cokr/xit/fims/levy/Levy.java b/src/main/java/cokr/xit/fims/levy/Levy.java index 0fe57472..c511b53f 100644 --- a/src/main/java/cokr/xit/fims/levy/Levy.java +++ b/src/main/java/cokr/xit/fims/levy/Levy.java @@ -78,14 +78,9 @@ public class Levy extends AbstractEntity { private String levySeCd; /** - * 부과 구분 명 + * 통합 구분 코드 */ - private String levySeNm; - - /** - * 통합 구분 명 - */ - private String untyLvySeNm; + private String untySeCd; /** * 분납 구분 명 diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java index f2a089f3..d8d236b7 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java @@ -1,5 +1,7 @@ package cokr.xit.fims.sndb.service.bean; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model; + import java.util.List; import javax.annotation.Resource; @@ -566,8 +568,6 @@ public class SndngBean extends AbstractComponent { } // 전자우편 접수 상세 내역을 등록한다. /////////////////////////////////////////////// - String gojiStep = "00"; // 고지순번이 아님 01은 분납 - String gojiGubun = "2"; // 1=정기분 2=수시분 String infoSndngSeNm = ""; // 약식 발송 구분 명 if (sndngInfo.string("SNDNG_SE_CD").equals("01")) { // 계도 @@ -630,7 +630,7 @@ public class SndngBean extends AbstractComponent { EpostRcptDtl epostRcptDtl = new EpostRcptDtl(); // 발송 상세 및 부과 정보 조회 - DataObject sndngDtlInfo = sndngMapper.selectSndngDtlLevyInfo(sndng.getSndngDtlIDs()[iLoop]); + DataObject sndngDtlInfo = sndngMapper.selectSndngDtlInfo(sndng.getSndngDtlIDs()[iLoop]); // 고지번호 String becevBillNumber = ""; @@ -650,14 +650,36 @@ public class SndngBean extends AbstractComponent { } // 금액 - int pcptax = 0; // 본세 - int adamt = 0; // 가산금 - int sumAmt = 0; // 합계 금액 - int afterPcptax = 0; // 납기후 본세 - int afterAdamt = 0; // 납기후 가산금 - int afterSumAmt = 0; // 납기후 합계 금액 - - // 납기일자 + int pcptax = 0; // 본세 + int adamt = 0; // 가산금 + int sumAmt = 0; // 합계 금액 + int afterPcptax = 0; // 납기후 본세 + int afterAdamt = 0; // 납기후 가산금 + int afterSumAmt = 0; // 납기후 합계 금액 + + // 계도장, 사전통지서는 최초 과태료 금액을 출력한다. + if (sndngInfo.string("SNDNG_SE_CD").equals("01") || sndngInfo.string("SNDNG_SE_CD").equals("02")) { + pcptax = sndngDtlInfo.number("FFNLG_CRDN_AMT").intValue(); // 본세 = 과태료 단속 금액 + adamt = 0; // 가산금 = 0 + sumAmt = sndngDtlInfo.number("FFNLG_CRDN_AMT").intValue(); // 합계 금액 = 과태료 단속 금액 + afterPcptax = 0; // 납기후 본세 + afterAdamt = 0; // 납기후 가산금 + afterSumAmt = 0; // 납기후 합계 금액 + } else { + pcptax = sndngDtlInfo.number("PCPTAX").intValue(); // 본세 + adamt = sndngDtlInfo.number("ADAMT").intValue(); // 가산금 + sumAmt = sndngDtlInfo.number("SUM_AMT").intValue(); // 합계 금액 + + if (sndngDtlInfo.string("SGG_CD").equals("50110")) { + afterPcptax = 0; // 납기후 본세 + afterAdamt = 0; // 납기후 가산금 + afterSumAmt = 0; // 납기후 합계 금액 + } else { + afterPcptax = sndngDtlInfo.number("PCPTAX").intValue(); // 납기후 본세 + afterAdamt = sndngDtlInfo.number("DUDT_AFTR_AMT").intValue() - sndngDtlInfo.number("PCPTAX").intValue(); // 납기후 가산금 + afterSumAmt = sndngDtlInfo.number("DUDT_AFTR_AMT").intValue(); // 납기후 금액 + } + } // OCR Band String band1 = ""; @@ -675,17 +697,71 @@ public class SndngBean extends AbstractComponent { band5 = ""; band6 = ""; } else if (ctpvCode.equals("11")) { // 서울 - band1 = ""; + band1 = sndngDtlInfo.string("TAX_NO"); band2 = ""; band3 = ""; band4 = ""; band5 = ""; band6 = ""; } else { - + String levySeCd = ""; // OCR 부과구분코드 + String ocrVrfcCode = ""; // OCR 검증코드 + + // OCR 1번째 줄 54 + // band1 = 부서코드 + 회계연도 + 회계구분 + 세목코드 + 고지번호 + 분납순번 + band1 = sndngDtlInfo.string("DEPT_CD") + "0000" + + sndngDtlInfo.string("FYR") + + sndngDtlInfo.string("ACNTG_SE") + + sndngDtlInfo.string("TXITM_CD") + + sndngDtlInfo.string("LEVY_NO") + + sndngDtlInfo.string("INSPY_SN"); + ocrVrfcCode = getOcrVrfcCode("12357", band1, 31); + band1 = band1 + ocrVrfcCode; + + // 1=정기분 2=수시분 + if (sndngDtlInfo.string("LEVY_SE_CD").equals("01")) { + levySeCd = "1" ; + } else if (sndngDtlInfo.string("LEVY_SE_CD").equals("02")) { + levySeCd = "2" ; + } else { + levySeCd = "2" ; + } + // band2 = 부과구분코드 + 합계금액 + 납기일자 + "0" + band2 = levySeCd + + String.format("%011d", sndngDtlInfo.string("SUM_AMT")) + + sndngDtlInfo.string("DUDT_YMD") + + "0"; + + ocrVrfcCode = getOcrVrfcCode("23571", band1 + band2, 53); + band2 = band2 + ocrVrfcCode; + + // OCR 2번째줄 54 + // band3 = 국세 + 국세요율(납기후에 추가되는 가산금의 비율) + 시도세 + 시도세요율 + 시군구세 + 시군구세요율 + band3 = "0000000000" + + "00" + + "0000000000" + + "00" + + String.format("%011d", sndngDtlInfo.string("SUM_AMT")) + + "00"; + ocrVrfcCode = getOcrVrfcCode("35712", band3, 36); + + // band4 = 부과월 + 납기후처리 + 납기후금액(12자리) + // 0=납기후 수납가능, 1=납기후 수납불가, 2=납기 무관, 7~9=납기후 수납가능 + band4 = sndngDtlInfo.string("DUDT_YMD").substring(4, 5) + + "1" + + "000000000000"; + ocrVrfcCode = getOcrVrfcCode("57123", band3 + band4, 52); + band4 = band4 + ocrVrfcCode; + + // band5 = 전체 합산해서 검코드 구하기용, 사용하지는 않음 + band5 = band1 + band2 + band3 + band4; + ocrVrfcCode = getOcrVrfcCode("71235", band5, 107); + band5 = band5 + ocrVrfcCode; + + // band6 + band6 = band3 + band4 + ocrVrfcCode; } - // 전자우편 접수 상세 set /////////////////////////////////////////////// // CON_KEY epostRcptDtl.setConKey(conKey); @@ -722,26 +798,27 @@ public class SndngBean extends AbstractComponent { // 위반동 epostRcptDtl.setRecevViolateDong(sndngDtlInfo.string("CRDN_STDG_NM")); // 위반장소 - 80 - epostRcptDtl.setRecevViolatePlace(sndngDtlInfo.string("CRDN_PLC")); + if (sndngDtlInfo.string("CRDN_PLC").length() > 80) { + epostRcptDtl.setRecevViolatePlace(sndngDtlInfo.string("CRDN_PLC").substring(0, 80)); + } else { + epostRcptDtl.setRecevViolatePlace(sndngDtlInfo.string("CRDN_PLC")); + } // 법조항 epostRcptDtl.setRecevLaws(vltnInfo.string("VLTN_LAW_NM") + " " + vltnInfo.string("VLTN_LAW1") + " " + vltnInfo.string("VLTN_LAW2")); - // 납부번호1 - // 납부번호2 + // 납부번호 + if (band1.equals("")) { + epostRcptDtl.setRecevPayNumber1(""); // 납부번호1 + epostRcptDtl.setRecevPayNumber2(""); // 납부번호2 + } else { + epostRcptDtl.setRecevPayNumber1(band1.substring(0, 17)); // 납부번호1 + epostRcptDtl.setRecevPayNumber2(band1.substring(18)); // 납부번호2 + } // OCR0 + epostRcptDtl.setRecevOcr0(band1); // OCR1 + epostRcptDtl.setRecevOcr1(band1 + band2); // OCR2 -// qryPutDetail.ParamByName('RECEV_PAY_NUMBER1').AsString := Copy(band1, 1, 17); -// qryPutDetail.ParamByName('RECEV_PAY_NUMBER2').AsString := Copy(band1, 18, 15); -// -// if copy(CPSystem_Info.Sido_Code,1,2) = '11' then -// qryPutDetail.ParamByName('RECEV_OCR0').AsString := FieldByName('GP_TAXNO').AsString -// else -// qryPutDetail.ParamByName('RECEV_OCR0').AsString := band1; -// -// qryPutDetail.ParamByName('RECEV_OCR1').AsString := band1 + band2; -// qryPutDetail.ParamByName('RECEV_OCR2').AsString := band6; -// -// + epostRcptDtl.setRecevOcr2(band6); // 전자 납부번호 epostRcptDtl.setRecevOnlinePayNumber(sndngDtlInfo.string("EPAYNO")); // 가상계좌 @@ -769,96 +846,82 @@ public class SndngBean extends AbstractComponent { epostRcptDtl.setVractno9(sndngDtlInfo.string("BANK_NM9") + " " + sndngDtlInfo.string("VR_ACTNO9")); epostRcptDtl.setVractno10(sndngDtlInfo.string("BANK_NM10") + " " + sndngDtlInfo.string("VR_ACTNO10")); epostRcptDtl.setVractno11(sndngDtlInfo.string("BANK_NM11") + " " + sndngDtlInfo.string("VR_ACTNO11")); - } -// -// qryPutDetail.ParamByName('RECEV_FINE_PRICE').AsString := IntToStr(keum_t); // 과태료금액 -// qryPutDetail.ParamByName('RECEV_PAY_PRICE').AsString := IntToStr(keum_b); // 납부금액 -// qryPutDetail.ParamByName('RECEV_PAY_DT').AsString := FormatDateH(sEndDate); -// -// qryPutDetail.ParamByName('RECEV_PAY_IN_DATE').AsString := FormatDate2(sEndDate); -// -// if (prtGubun = GOJI_GUBUN_INSTRUCT) or (prtGubun = GOJI_GUBUN_PRE) then // 사전통지서 -// qryPutDetail.ParamByName('RECEV_PAY_IN_PRICE').AsString := IntToStr(keum_b) // 납기내금액 -// else -// qryPutDetail.ParamByName('RECEV_PAY_IN_PRICE').AsString := IntToStr(keum_t); -// -// qryPutDetail.ParamByName('RECEV_PAY_IN_ADD_PRICE').AsString := IntToStr(keum_a); -// qryPutDetail.ParamByName('RECEV_PAY_IN_DEFAULT_PRICE').AsString := IntToStr(keum_b); -// -// if CPSystem_Info.Sido_Code = '50110' then -// begin -// qryPutDetail.ParamByName('RECEV_PAY_OUT_DATE').AsString := ''; -// qryPutDetail.ParamByName('RECEV_PAY_OUT_PRICE').AsString := ''; -// qryPutDetail.ParamByName('RECEV_PAY_OUT_ADD_PRICE').AsString := ''; -// qryPutDetail.ParamByName('RECEV_PAY_OUT_DEFAULT_PRICE').AsString := ''; -// end -// else -// begin -// qryPutDetail.ParamByName('RECEV_PAY_OUT_DATE').AsString := FormatDate2(af_date); // 납기 후 기한 -// qryPutDetail.ParamByName('RECEV_PAY_OUT_PRICE').AsString := IntToStr(af_keum_t); // 납기 후 과태료금액 -// qryPutDetail.ParamByName('RECEV_PAY_OUT_ADD_PRICE').AsString := IntToStr(af_keum_a); // 납기 후 가산금액 -// qryPutDetail.ParamByName('RECEV_PAY_OUT_DEFAULT_PRICE').AsString := IntToStr(af_keum_b); -// end; -// -// qryPutDetail.ParamByName('RECEV_CAR_NUMBER').AsString := FieldByName('GP_MM_CARNO').AsString; -// -// if useJuso = JUSO_USE_TAXELSE_DB then // 세외수입에 등록된 주소 사용 -// begin -// qryPutDetail.ParamByName('RECEV_CAR_OWNER_ZIPCODE').AsString := FieldByName('GP_ZIP').AsString; -// qryPutDetail.ParamByName('RECEV_CAR_OWNER_ADDR').AsString := FieldByName('GP_JUSO').AsString; -// qryPutDetail.ParamByName('RECEV_CAR_OWNER_DETAILADDR').AsString := FieldByName('GP_BUNJI').AsString; -// end -// else -// begin -// qryPutDetail.ParamByName('RECEV_CAR_OWNER_ZIPCODE').AsString := FieldByName('OM_ZIP').AsString; -// qryPutDetail.ParamByName('RECEV_CAR_OWNER_ADDR').AsString := FieldByName('OM_JUSO').AsString; -// qryPutDetail.ParamByName('RECEV_CAR_OWNER_DETAILADDR').AsString := FieldByName('OM_BUNJI').AsString; -// end; -// -// qryPutDetail.ParamByName('RECEV_CAR_OWNER_NM').AsString := im_name; -// qryPutDetail.ParamByName('RECEV_CAR_OWNER_SSN').AsString := Copy(FieldByName('GP_JNO_STR').AsString, 1, 6); -// -// qryPutDetail.ParamByName('RECEV_EVIDENCE_NUMBER').AsString := FieldByName('GP_CODE').AsString; -// -// qryPutDetail.ParamByName('RECEV_PHOTO_CNT').AsString := '0'; -// qryPutDetail.ParamByName('RECEV_PHOTO_FILE1').AsString := ''; -// qryPutDetail.ParamByName('RECEV_PHOTO_FILE2').AsString := ''; -// qryPutDetail.ParamByName('RECEV_PHOTO_FILE3').AsString := ''; -// qryPutDetail.ParamByName('RECEV_PHOTO_FILE4').AsString := ''; -// -// -// if (prtGubun = GOJI_GUBUN_INSTRUCT) or (prtGubun = GOJI_GUBUN_PRE) then //사전통지서엔 사진출력 -// begin -// cutFileName := FieldByName('MM_CODE').AsString; -// -// qryPutDetail.ParamByName('RECEV_PHOTO_CNT').AsString := FieldByName('MM_IMAGECNT').AsString; -// -// -// if FieldByName('MM_IMAGECNT').AsInteger > 0 then -// begin -// qryPutDetail.ParamByName('RECEV_PHOTO_FILE1').AsString := cutFileName + 'A.jpg'; -// end; -// -// -// if FieldByName('MM_IMAGECNT').AsInteger > 1 then -// begin -// qryPutDetail.ParamByName('RECEV_PHOTO_FILE2').AsString := cutFileName + 'B.jpg'; -// end; -// -// -// if FieldByName('MM_IMAGECNT').AsInteger > 2 then -// begin -// qryPutDetail.ParamByName('RECEV_PHOTO_FILE3').AsString := cutFileName + 'C.jpg'; -// end; -// -// -// if FieldByName('MM_IMAGECNT').AsInteger > 3 then -// begin -// qryPutDetail.ParamByName('RECEV_PHOTO_FILE4').AsString := cutFileName + 'D.jpg'; -// end; -// -// end; + // 과태료금액 + epostRcptDtl.setRecevFinePrice(sndngDtlInfo.string("FFNLG_AMT")); + // 납부 금액 + epostRcptDtl.setRecevPayPrice(sndngDtlInfo.string("SUM_AMT")); + // 납부기한 + epostRcptDtl.setRecevPayDt(sndngDtlInfo.string("DUDT_YMD_MASK_KOR")); + // 납기내기한 + epostRcptDtl.setRecevPayInDate(sndngDtlInfo.string("DUDT_YMD_MASK")); + // 납기내금액 + if (sndngInfo.string("SNDNG_SE_CD").equals("01") || sndngInfo.string("SNDNG_SE_CD").equals("02")) { // 계도장, 사전통지서는 최초 과태료 금액을 출력 + epostRcptDtl.setRecevPayInPrice(sndngDtlInfo.string("FFNLG_AMT")); + } else { + epostRcptDtl.setRecevPayInPrice(sndngDtlInfo.string("PCPTAX")); + } + // 납기내가산금 + epostRcptDtl.setRecevPayInAddPrice(sndngDtlInfo.string("ADAMT")); + // 납기내합계금액 + epostRcptDtl.setRecevPayInDefaultPrice(sndngDtlInfo.string("SUM_AMT")); + // 납기후기한 + epostRcptDtl.setRecevPayOutDate(sndngDtlInfo.string("DUDT_AFTR_YMD_MASK")); + // 납기후금액 + epostRcptDtl.setRecevPayOutPrice(String.valueOf(afterPcptax)); + // 납기후가산금 + epostRcptDtl.setRecevPayOutAddPrice(String.valueOf(afterAdamt)); + // 납기후합계금액 + epostRcptDtl.setRecevPayOutDefaultPrice(String.valueOf(afterSumAmt)); + // 차량번호 + epostRcptDtl.setRecevCarNumber(sndngDtlInfo.string("VHRNO")); + // 우편번호 + epostRcptDtl.setRecevCarOwnerZipcode(sndngDtlInfo.string("RTPYR_ZIP")); + // 주소(시, 구) + epostRcptDtl.setRecevCarOwnerAddr(sndngDtlInfo.string("RTPYR_ADDR")); + // 상세주소 + epostRcptDtl.setRecevCarOwnerDetailaddr(sndngDtlInfo.string("RTPYR_DTL_ADDR")); + // 소유자명 + epostRcptDtl.setRecevCarOwnerNm(sndngDtlInfo.string("RTPYR_NM")); + // 주민번호(생년월일) + epostRcptDtl.setRecevCarOwnerSsn(sndngDtlInfo.string("RTPYR_NO")); + // 증거번호 + epostRcptDtl.setRecevEvidenceNumber(sndngDtlInfo.string("SNDNG_DTL_ID")); + // 사진장수 + epostRcptDtl.setRecevPhotoCnt("0"); + // 사진파일명1 + epostRcptDtl.setRecevPhotoFilename1(""); + // 사진파일명2 + epostRcptDtl.setRecevPhotoFilename2(""); + // 사진파일명3 + epostRcptDtl.setRecevPhotoFilename3(""); + // 사진파일명4 + epostRcptDtl.setRecevPhotoFilename4(""); + + // 계도장, 사전통지서에는 사진을 출력한다. + if (sndngInfo.string("SNDNG_SE_CD").equals("01") || sndngInfo.string("SNDNG_SE_CD").equals("02")) { +// if (prtGubun = GOJI_GUBUN_INSTRUCT) or (prtGubun = GOJI_GUBUN_PRE) then //사전통지서엔 사진출력 +// begin +// cutFileName := FieldByName('MM_CODE').AsString; +// qryPutDetail.ParamByName('RECEV_PHOTO_CNT').AsString := FieldByName('MM_IMAGECNT').AsString; +// if FieldByName('MM_IMAGECNT').AsInteger > 0 then +// begin +// qryPutDetail.ParamByName('RECEV_PHOTO_FILE1').AsString := cutFileName + 'A.jpg'; +// end; +// if FieldByName('MM_IMAGECNT').AsInteger > 1 then +// begin +// qryPutDetail.ParamByName('RECEV_PHOTO_FILE2').AsString := cutFileName + 'B.jpg'; +// end; +// if FieldByName('MM_IMAGECNT').AsInteger > 2 then +// begin +// qryPutDetail.ParamByName('RECEV_PHOTO_FILE3').AsString := cutFileName + 'C.jpg'; +// end; +// if FieldByName('MM_IMAGECNT').AsInteger > 3 then +// begin +// qryPutDetail.ParamByName('RECEV_PHOTO_FILE4').AsString := cutFileName + 'D.jpg'; +// end; +// end; + } // 전자우편 접수 상세 retSuccess = epostRcptRegBean.createEpostRcptDtl(epostRcptDtl); @@ -971,4 +1034,29 @@ public class SndngBean extends AbstractComponent { return svbtcMapper.delete(svbtc); } + /**OCR 밴드의 검을 반환한다. + * @param vrfcCode 검증에 사용할 코드 + * ocrData OCR 데이터 + * bgngPstn 시작 위치 + * totalLength OCR 데이터의 총길이 + * @return 검증 코드 + *