diff --git a/src/main/java/cokr/xit/fims/crdn/Crdn.java b/src/main/java/cokr/xit/fims/crdn/Crdn.java index 4b3b330b..251c3442 100644 --- a/src/main/java/cokr/xit/fims/crdn/Crdn.java +++ b/src/main/java/cokr/xit/fims/crdn/Crdn.java @@ -1,6 +1,10 @@ package cokr.xit.fims.crdn; +import java.util.List; + import cokr.xit.foundation.AbstractEntity; +import cokr.xit.foundation.Assert; +import cokr.xit.foundation.data.DataObject; import lombok.Getter; import lombok.Setter; @@ -12,394 +16,179 @@ import lombok.Setter; public class Crdn extends AbstractEntity { public static String INF_TYPE = "100"; - /** - * 단속 ID - */ + /** 단속 ID */ private String crdnId; - - /** - * 시군구 코드 - */ + /** 시군구 코드 */ private String sggCd; - - /** - * 업무 구분 코드 - */ + /** 업무 구분 코드 */ private String taskSeCd; - - /** - * 단속 등록 구분 코드 - */ + /** 단속 등록 구분 코드 */ private String crdnRegSeCd; - - /** - * 단속 입력 구분 코드 - */ + /** 단속 입력 구분 코드 */ private String crdnInptSeCd; - - /** - * 민원 연계 여부 - */ + /** 민원 연계 여부 */ private String cvlcptLinkYn; - - /** - * 민원 연계 테이블 명 - */ + /** 민원 연계 테이블 명 */ private String cvlcptLinkTblNm; - - /** - * 민원 연계 ID - */ + /** 민원 연계 ID */ private String cvlcptLinkId; - - /** - * 단속 구분 코드 - */ + /** 단속 구분 코드 */ private String crdnSeCd; - - /** - * 납부자 ID - */ + /** 납부자 ID */ private String rtpyrId; - - /** - * 주소 일련번호 - */ + /** 주소 일련번호 */ private String addrSn; - - /** - * 단속 일자 - */ + /** 단속 일자 */ private String crdnYmd; - - /** - * 단속 시각 - */ + /** 단속 시각 */ private String crdnTm; - - /** - * 차량번호 - */ + /** 차량번호 */ private String vhrno; - - /** - * 단속 법정동 명 - */ + /** 단속 법정동 명 */ private String crdnStdgNm; - - /** - * 단속 도로 명 - */ + /** 단속 도로 명 */ private String crdnRoadNm; - - /** - * 단속 장소 - */ + /** 단속 장소 */ private String crdnPlc; - - /** - * 상세 단속 장소 - */ + /** 상세 단속 장소 */ private String dtlCrdnPlc; - - /** - * 조 ID - */ + /** 조 ID */ private String teamId; - - /** - * 위반 ID - */ + /** 위반 ID */ private String vltnId; - - /** - * 단속 특별구역 코드 - */ + /** 단속 특별구역 코드 */ private String crdnSpareaCd; - - /** - * 단속 시작 시각 - */ + /** 단속 시작 시각 */ private String crdnBgngTm; - - /** - * 단속 종료 시간 - */ + /** 단속 종료 시간 */ private String crdnEndTm; - - /** - * 단속 일련번호 - */ + /** 단속 일련번호 */ private String crdnSn; - - /** - * GPS X - */ + /** GPS X */ private String gpsX; - - /** - * GPS Y - */ + /** GPS Y */ private String gpsY; - - /** - * 모자이크 X - */ + /** 모자이크 X */ private String moscX; - - /** - * 모자이크 Y - */ + /** 모자이크 Y */ private String moscY; - - /** - * 견인 여부 - */ + /** 견인 여부 */ private String towngYn; - - /** - * 첨부 파일 수 - */ + /** 첨부 파일 수 */ private Integer atchFileCnt; - - /** - * 차대번호 - */ + /** 차대번호 */ private String vin; - - /** - * 말소등록일자 - */ + /** 말소등록일자 */ private String ersrRegYmd; - - /** - * 차량 명 - */ + /** 차량 명 */ private String vhclNm; - - /** - * 차량 색상 - */ + /** 차량 색상 */ private String vhclColr; - - /** - * 사용 연료 코드 - */ + /** 사용 연료 코드 */ private String useFuelCd; - - /** - * 과태료 차종 코드 - */ + /** 과태료 차종 코드 */ private String ffnlgCarmdlCd; - - /** - * 주차 가능 결과 코드 - */ + /** 주차 가능 결과 코드 */ private String prkPsbltyRsltCd; - - /** - * 위반 횟수 - */ + /** 위반 횟수 */ private String vltnNmtm; - - /** - * 시간외 여부 - */ + /** 시간외 여부 */ private String ovtmYn; - - /** - * 시간외 분할 여부 - */ + /** 시간외 분할 여부 */ private String ovtmPrttnYn; - - /** - * 과태료 단속 금액 - */ + /** 과태료 단속 금액 */ private Integer ffnlgCrdnAmt; - - /** - * 과태료 감경율 - */ + /** 과태료 감경율 */ private String ffnlgRdcrt; - - /** - * 과태료 금액 - */ + /** 과태료 금액 */ private Integer ffnlgAmt; - - /** - * 사전통지 시작 일자 - */ + /** 사전통지 시작 일자 */ private String advntceBgngYmd; - - /** - * 사전통지 납기 일자 - */ + /** 사전통지 납기 일자 */ private String advntceDudtYmd; - - /** - * 사전통지 금액 - */ + /** 사전통지 금액 */ private Integer advntceAmt; - - /** - * 의견 제출 여부 - */ + /** 의견 제출 여부 */ private String opnnSbmsnYn; - - /** - * 기타 내용 - */ + /** 기타 내용 */ private String etcCn; - - /** - * 부과 ID - */ + /** 부과 ID */ private String levyId; - - /** - * 단속 상태 코드 - */ + /** 단속 상태 코드 */ private String crdnSttsCd; - - /** - * 단속 상태 변경 일시 - */ + /** 단속 상태 변경 일시 */ private String crdnSttsChgDt; - - /** - * 가산 금액 - */ + /** 가산 금액 */ private Integer adtnAmt; - - /** - * 감경 금액 - */ + /** 감경 금액 */ private Integer minusAmt; - - /** - * 수납 금액 - */ + /** 수납 금액 */ private Integer rcvmtAmt; - - /** - * 이전 단속 ID - */ + /** 이전 단속 ID */ private String bfrCrdnId; - - /** - * 세외수입 단속 연계 여부 - */ + /** 세외수입 단속 연계 여부 */ private String nxrpCrdnLinkYn; - - /** - * 세외수입 단속 연계 사용자 ID - */ + /** 세외수입 단속 연계 사용자 ID */ private String nxrpCrdnLinkUserId; - - /** - * 세외수입 단속 연계 일시 - */ + /** 세외수입 단속 연계 일시 */ private String nxrpCrdnLinkDt; - - /** - * 세외수입 대장 키 - */ + /** 세외수입 대장 키 */ private String nxrpAcbKey; - - /** - * 삭제 여부 - */ + /** 삭제 여부 */ private String delYn; - - /** - * 삭제 일시 - */ + /** 삭제 일시 */ private String delDt; - - /** - * 삭제자 - */ + /** 삭제자 */ private String dltr; - - /** - * 삭제 사유 - */ + /** 삭제 사유 */ private String delRsn; - - /** - * 위반코드 - */ + /** 위반코드 */ private String vltnCd; - - /** - * 납부자 구분 코드 - */ + /** 납부자 구분 코드 */ private String rtpyrSeCd; - - /** - * 납부자 명 - */ + /** 납부자 명 */ private String rtpyrNm; - - /** - * 납부자 번호 - */ + /** 납부자 번호 */ private String rtpyrNo; - - /** - * 납부자 우편번호 - */ + /** 납부자 우편번호 */ private String zip; - - /** - * 납부자 주소 - */ + /** 납부자 주소 */ private String addr; - - /** - * 납부자 상세주소 - */ + /** 납부자 상세주소 */ private String dtlAddr; - - /** - * 부과 제외 구분 코드 - */ + /** 부과 제외 구분 코드 */ private String levyExclSeCd; - - /** - * 부과 제외 사유 코드 - */ + /** 부과 제외 사유 코드 */ private String levyExclRsnCd; - - /** - * 부과 제외 일자 - */ + /** 부과 제외 일자 */ private String levyExclYmd; - - /** - * 조원1 - */ + /** 조원1 */ private String teamer1; - - /** - * 조원2 - */ + /** 조원2 */ private String teamer2; - - /** - * 조원3 - */ + /** 조원3 */ private String teamer3; - - /** - * 조원4 - */ + /** 조원4 */ private String teamer4; - - /** - * 클린파킹 키 - */ + /** 클린파킹 키 */ private String mmCode; + public static final String location(Object obj) { + if (Assert.isEmpty(obj)) return ""; + + List strs = null; + if (obj instanceof DataObject info) + strs = List.of(info.string("CRDN_STDG_NM"), info.string("CRDN_ROAD_NM"), info.string("CRDN_PLC")); + else if (obj instanceof Crdn crdn) + strs = List.of(crdn.crdnStdgNm, crdn.crdnRoadNm, crdn.crdnPlc); + else + throw new IllegalArgumentException("Either Crdn or DataObject accepted"); + + return Assert.isEmpty(strs) ? "" : + String.join(" ", + strs.stream() + .filter(str -> !Assert.isEmpty(str)) + .toList() + ); + } } diff --git a/src/main/java/cokr/xit/fims/mngt/Vltn.java b/src/main/java/cokr/xit/fims/mngt/Vltn.java index 93a7064f..e489a52e 100644 --- a/src/main/java/cokr/xit/fims/mngt/Vltn.java +++ b/src/main/java/cokr/xit/fims/mngt/Vltn.java @@ -1,100 +1,70 @@ package cokr.xit.fims.mngt; +import java.util.List; + import cokr.xit.foundation.AbstractEntity; +import cokr.xit.foundation.Assert; +import cokr.xit.foundation.data.DataObject; import lombok.Getter; import lombok.Setter; -/** - * 위반 정보 +/**위반 정보 * @author JoJH */ @Getter @Setter public class Vltn extends AbstractEntity { - - /** - * 위반 ID - */ + /** 위반 ID */ private String vltnId; - - /** - * 시군구 코드 - */ + /** 시군구 코드 */ private String sggCd; - - /** - * 업무 구분 코드 - */ + /** 업무 구분 코드 */ private String taskSeCd; - - /** - * 위반 코드 - */ + /** 위반 코드 */ private String vltnCd; - - /** - * 위반 항목 - */ + /** 위반 항목 */ private String vltnArtcl; - - /** - * 위반 법 명 - */ + /** 위반 법 명 */ private String vltnLawNm; - - /** - * 위반 법1 - */ + /** 위반 법1 */ private String vltnLaw1; - - /** - * 위반 법2 - */ + /** 위반 법2 */ private String vltnLaw2; - - /** - * 위반 법 기타 - */ + /** 위반 법 기타 */ private String vltnLawEtc; - - /** - * 회계 구분 코드 - */ + /** 회계 구분 코드 */ private String acntgSeCd; - - /** - * 회계 구분 명 - */ + /** 회계 구분 명 */ private String acntgSeNm; - - /** - * 세목 코드 - */ + /** 세목 코드 */ private String txitmCd; - - /** - * 세목 명 - */ + /** 세목 명 */ private String txitmNm; - - /** - * 운영 항목 코드 - */ + /** 운영 항목 코드 */ private String operItemCd; - - /** - * 운영 항목 명 - */ + /** 운영 항목 명 */ private String operItemNm; - - /** - * 특별회계 사업 코드 - */ + /** 특별회계 사업 코드 */ private String spclBizCd; - - /** - * 사용 여부 - */ + /** 사용 여부 */ private String useYn; -} + public static final String legalBasis(Object obj) { + if (Assert.isEmpty(obj)) return ""; + + List strs = null; + if (obj instanceof DataObject info) + strs = List.of(info.string("VLTN_LAW_NM"), info.string("VLTN_LAW1"), info.string("VLTN_LAW2"), info.string("VLTN_LAW_ETC")); + else if (obj instanceof Vltn vltn) + strs = List.of(vltn.vltnLawNm, vltn.vltnLaw1, vltn.vltnLaw2, vltn.vltnLawEtc); + else + throw new IllegalArgumentException("Either Vltn or DataObject accepted"); + + return Assert.isEmpty(strs) ? "" : + String.join(" ", + strs.stream() + .filter(str -> !Assert.isEmpty(str)) + .toList() + ); + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/mngt/service/bean/TaskProcessor.java b/src/main/java/cokr/xit/fims/mngt/service/bean/TaskProcessor.java index c5e9efe7..ee561cea 100644 --- a/src/main/java/cokr/xit/fims/mngt/service/bean/TaskProcessor.java +++ b/src/main/java/cokr/xit/fims/mngt/service/bean/TaskProcessor.java @@ -406,4 +406,16 @@ public class TaskProcessor extends AbstractBean { public boolean statByTeamEquipment(String taskSeCd) { return "PVS,BPV".contains(taskSeCd); } + + /**주어진 업무의 세외수입 연계 대상을 반환한다. + * @param taskSeCd 업무구분 코드 + * @return 세외수입 연계 대상 + * + */ + public String getNtrisInterface(String taskSeCd) { + return "lntris"; + } } \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/nxrp/A03.java b/src/main/java/cokr/xit/fims/nxrp/A03.java index 79912291..909ccaba 100644 --- a/src/main/java/cokr/xit/fims/nxrp/A03.java +++ b/src/main/java/cokr/xit/fims/nxrp/A03.java @@ -572,4 +572,5 @@ public class A03 extends AbstractEntity { */ private String taskAplcnMsg; -} + +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/nxrp/dao/NisA01Mapper.java b/src/main/java/cokr/xit/fims/nxrp/dao/NisA01Mapper.java index 46c0fe43..af33d2cf 100644 --- a/src/main/java/cokr/xit/fims/nxrp/dao/NisA01Mapper.java +++ b/src/main/java/cokr/xit/fims/nxrp/dao/NisA01Mapper.java @@ -5,11 +5,10 @@ import java.util.Map; import org.egovframe.rte.psl.dataaccess.mapper.Mapper; -import cokr.xit.foundation.component.AbstractMapper; -import cokr.xit.foundation.data.DataObject; - import cokr.xit.fims.nxrp.A01; import cokr.xit.fims.nxrp.NisIndivQuery; +import cokr.xit.foundation.component.AbstractMapper; +import cokr.xit.foundation.data.DataObject; /** 과태료 대장 단속 정보 등록 정보 DAO * @@ -23,7 +22,6 @@ import cokr.xit.fims.nxrp.NisIndivQuery; */ @Mapper("nisA01Mapper") public interface NisA01Mapper extends AbstractMapper { - /**지정한 조건에 따라 과태료 대장 단속 정보 등록 목록을 조회하여 반환한다.
* @param req 과태료 대장 단속 정보 등록 조회 조건 * @return 과태료 대장 단속 정보 등록 목록 @@ -97,9 +95,22 @@ public interface NisA01Mapper extends AbstractMapper { } /**단속 ID에 해당하는 단속, 납부자 객체를 반환한다. - * @param crdnId 단속 ID + * @param params 파라미터 + * * @return 단속, 납부자 객체 */ - DataObject selectCrdnInfo(String crdnId); + List selectCrdnList(Map params); -} + default List selectCrdnList(Iterable crdnIds) { + return selectCrdnList(Map.of("crdnIds", crdnIds)); + } + + /**단속 ID에 해당하는 단속, 납부자 객체를 반환한다. + * @param crdnId 단속 ID + * @return 단속, 납부자 객체 + */ + default DataObject selectCrdnInfo(String crdnId) { + List list = selectCrdnList(List.of(crdnId)); + return !list.isEmpty() ? list.get(0) : null; + } +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/nxrp/service/bean/LnisBean.java b/src/main/java/cokr/xit/fims/nxrp/service/bean/LnisBean.java deleted file mode 100644 index 8a6eda5d..00000000 --- a/src/main/java/cokr/xit/fims/nxrp/service/bean/LnisBean.java +++ /dev/null @@ -1,554 +0,0 @@ -package cokr.xit.fims.nxrp.service.bean; - -import java.io.File; -import java.io.FilenameFilter; -import java.net.http.HttpResponse; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSession; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - -import org.springframework.stereotype.Component; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import cokr.xit.base.code.CommonCode; -import cokr.xit.base.code.service.bean.CodeBean; -import cokr.xit.base.file.ZIP; -import cokr.xit.base.file.service.FileQuery; -import cokr.xit.base.file.service.bean.FileBean; -import cokr.xit.base.user.service.bean.UserBean; -import cokr.xit.fims.base.OgdpQuery; -import cokr.xit.fims.base.service.bean.OgdpBean; -import cokr.xit.fims.cmmn.CmmnQuery; -import cokr.xit.fims.cmmn.service.bean.StngBean; -import cokr.xit.fims.crdn.Crdn; -import cokr.xit.fims.crdn.dao.CrdnInfoMapper; -import cokr.xit.fims.crdn.dao.CrdnStngMapper; -import cokr.xit.fims.crdn.dao.CrdnUpdtMapper; -import cokr.xit.fims.mngt.dao.TaskMapper; -import cokr.xit.fims.nxrp.NisIndivQuery; -import cokr.xit.fims.nxrp.dao.NisA01Mapper; -import cokr.xit.fims.nxrp.dao.NisA02Mapper; -import cokr.xit.fims.nxrp.dao.NisA03Mapper; -import cokr.xit.fims.nxrp.support.AttachedTxtMaker; -import cokr.xit.fims.nxrp.support.LinkFileMaker; -import cokr.xit.fims.nxrp.support.OnlyImageMaker; -import cokr.xit.foundation.component.AbstractBean; -import cokr.xit.foundation.data.DataObject; -import cokr.xit.foundation.data.JSON; -import cokr.xit.foundation.web.WebClient; -import cokr.xit.interfaces.filejob.JobConf; -import cokr.xit.interfaces.lntris.basic.a.LntrisA01; -import cokr.xit.interfaces.lntris.basic.a.LntrisA01.A01Response; -import cokr.xit.interfaces.lntris.basic.a.LntrisA03; -import cokr.xit.interfaces.lntris.basic.a.LntrisA03.A03Response; -import cokr.xit.interfaces.lntris.basic.a.service.LntrisAService; - -/**과태료 대장 단속 정보 등록 정보 관리 Bean - * - *

상세 설명: - * - *

- * ============ 변경 이력 ============
- * 2024-02-16	JoJH 최초 작성
- * ================================
- * 
- */ -@Component("lnisBean") -public class LnisBean extends AbstractBean { - private JSON json = new JSON(); - - @Resource(name="objectMapper") - private ObjectMapper objectMapper; - @Resource(name = "lntrisAService") - private LntrisAService lntrisAService; - /** 과태료 대장 단속 정보 등록 정보 DAO */ - @Resource(name = "nisA01Mapper") - private NisA01Mapper nisA01Mapper; - /** 과태료 대장 등록 자료 일괄 조회 정보 DAO */ - @Resource(name = "nisA02Mapper") - private NisA02Mapper nisA02Mapper; - /** 과태료 대장 등록 자료 상세 조회 정보 DAO */ - @Resource(name = "nisA03Mapper") - private NisA03Mapper nisA03Mapper; - /** 단속 대장 수정 정보 DAO */ - @Resource(name = "crdnUpdtMapper") - private CrdnUpdtMapper crdnUpdtMapper; - @Resource(name="crdnInfoMapper") - private CrdnInfoMapper crdnInfoMapper; - @Resource(name="crdnStngMapper") - private CrdnStngMapper crdnStngMapper; - @Resource(name="taskMapper") - private TaskMapper taskMapper; - @Resource(name="fileBean") - private FileBean fileBean; - /** 사용자 정보 DAO */ - @Resource(name="userBean") - protected UserBean userBean; - /** 코드 정보 DAO */ - @Resource(name="codeBean") - protected CodeBean codeBean; - /** 설정 정보 DAO */ - @Resource(name="stngBean") - protected StngBean stngBean; - /** 부서 정보 DAO */ - @Resource(name = "ogdpBean") - private OgdpBean ogdpBean; - - /**지정한 조건에 따라 과태료 대장 단속 정보 등록 목록을 조회하여 반환한다. - * @param req 과태료 대장 단속 정보 등록 조회 조건 - * @return 과태료 대장 단속 정보 등록 목록 - */ - public List getNisIndivA01List(NisIndivQuery req) { - return nisA01Mapper.selectNisIndivA01List(req); - } - - /**지정한 조건에 따라 과태료 대장 단속 정보 등록 객체들을 반환한다. - * @param req 과태료 대장 단속 정보 등록 조회 조건 - * @return 과태료 대장 단속 정보 등록 객체 목록 - */ - public List getNisIndivA01s(NisIndivQuery req) { - return nisA01Mapper.selectNisIndivA01s(req); - } - - /**과태료 대장 단속 정보 등록 정보를 등록한다. - * @param nisIndivA01 과태료 대장 단속 정보 등록 - * @return 저장 여부 - *
  • 저장됐으면 true
  • - *
  • 그렇지 않으면 false
  • - *
- */ - public String createNisIndivA01(NisIndivQuery req) { - DataObject userInfo = userBean.getUserInfo(currentUser().getId()); // 1. 사용자 정보 - String userDept = userInfo.string("DEPT_CD"); - DataObject deptInfo = ogdpBean.getDeptStngInfo(new OgdpQuery().setDeptCd(userDept)); // 2. 부서 정보 - DataObject crdnInfo = nisA01Mapper.selectCrdnInfo(req.getCrdnId()); // 3. 세외수입 과태료대장에 연계할 단속 정보 - String - sggCd = crdnInfo.string("SGG_CD"), - crdnId = crdnInfo.string("CRDN_ID"), - intfKey = sggCd + crdnId + '_' + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")), - taskSeCd = crdnInfo.string("TASK_SE_CD"), // 업무 구분 코드 - nsttCd = userInfo.string("NSTT_CD"); - - LntrisA01.A01ReqDetail a01 = new LntrisA01.A01ReqDetail(); - a01.setSgbCd(nsttCd); // 자치단체코드 - a01.setLinkTrgtCd(nsttCd + taskSeCd + "01001"); // 연계대상코드 - a01.setLinkMngKey(intfKey); // 연계관리키 시군구코드 + 단속 ID + 년월일시분초 - a01.setDptCd(userDept); // 부서코드 - a01.setRcptYr(req.getSndngYmd().substring(0, 4)); // 접수연도 - a01.setSpacBizCd(crdnInfo.string("SPCL_BIZ_CD")); // 특별회계사업코드 (밤샘주차 0159:주차장특별회계) - a01.setActSeCd(crdnInfo.string("ACNTG_SE_CD")); // 회계구분코드 - a01.setRprsTxmCd(crdnInfo.string("TXITM_CD")); // 대표세입과목코드 - a01.setOperItemCd(crdnInfo.string("OPER_ITEM_CD")); // 운영항목코드 - // 과태료과징금구분코드 01:과태료 02:과징금 - a01.setFinScrgSeCd("PES".equals(taskSeCd) ? "02" : "01"); // 밤샘주차는 과징금(02) - // 납부자구분코드(FIM011) 01:주민 02:외국인 03:법인 04:사업자 05:기타 -> 01:개인 02:법인 03:단체 05:외국인 - a01.setPyrSeCd( - switch (crdnInfo.string("RTPYR_SE_CD")) { - case "01" -> "01"; // 주민(01) -> 개인(01) - case "02" -> "05"; // 외국인(02) -> 외국인(05) - case "03" -> "02"; // 법인(03) -> 법인(02) - case "04" -> "04"; // 사업자(04) -> 사업자(04) - default -> "03"; // 기타(05) -> 단체(03) - } - ); - String rtpyrNo = crdnInfo.string("RTPYR_NO"); - a01.setPyrNo(rtpyrNo); // 납부자번호 - String rtpyrNm = crdnInfo.string("RTPYR_NM"); - a01.setPyrNm(rtpyrNm); // 납부자명 - a01.setRprsPyrNo(rtpyrNo); // 대표납부자번호 / 법인의 경우 대표 납부자번호 필수 - a01.setRprsPyrNm(rtpyrNm); // 대표납부자명 / 법인의 경우 대표 납부자명 필수 - a01.setPyrTelno(crdnInfo.string("RTPYR_TELNO")); // 납부자전화번호 - a01.setPyrMblTelno(crdnInfo.string("RTPYR_MBL_TELNO")); // 납부자휴대전화번호 - a01.setPyrEmlAddr(crdnInfo.string("RTPYR_EML")); // 납부자이메일주소 - a01.setPyrSttCd("10"); // 납부자상태코드('10') - a01.setPyrLotnoRoadAddrSeCd(crdnInfo.string("ADDR_SE_CD")); // 납부자지번도로주소구분코드 01:지번주소, 02:도로명주소 - a01.setPyrZip(crdnInfo.string("ZIP")); // 납부자우편번호 - a01.setPyrRoadNmCd(crdnInfo.string("ROAD_NM_CD")); // 납부자도로명코드 - // 납부자주소지하여부(FIM036) 0:지상 1: 지하 -> Y:지하, N:지상 - a01.setPyrAddrUdgdYn("1".equals(crdnInfo.string("ROAD_NM_CD")) ? "Y" : "N"); // 지하(1) -> 지하(Y), 기본값('N') - a01.setPyrBmno(crdnInfo.string("BMNO")); // 납부자건물본번 - a01.setPyrBsno(crdnInfo.string("BSNO")); // 납부자건물부번 - a01.setPyrStdgCd(crdnInfo.string("STDG_CD")); // 납부자법정동코드 - a01.setPyrDongCd(crdnInfo.string("DONG_CD")); // 납부자행정동코드 - // 산 구분 코드(FIM037) 0: 1:산 -> 납부자산구분코드 01:일반번지, 02:산번지 - a01.setPyrMtnSeCd("1".equals(crdnInfo.string("MTN_SE_CD")) ? "02" : "01"); - a01.setPyrBldgMngNo(crdnInfo.string("BLDG_MNG_NO")); // 납부자건물관리번호 - a01.setPyrBldgNm(""); // 납부자건물명 - a01.setPyrMno(crdnInfo.string("MNO")); // 납부자본번 / 번지. 지번주소인 경우 필수 - a01.setPyrSno(crdnInfo.string("SNO")); // 납부자부번 / 호 - a01.setPyrSpclDg(crdnInfo.string("SPCL_DONG")); // 납부자특수동 / 상세주소 동 - a01.setPyrSpclHo(crdnInfo.string("SPCL_HO")); // 납부자특수호 / 상세주소 호 - a01.setPyrTong(""); // 납부자통 - a01.setPyrBan(""); // 납부자반 - a01.setPyrSpclAddr(crdnInfo.string("SPCL_ADDR")); // 납부자특수주소 - a01.setPyrRoadNmAddr(crdnInfo.string("ADDR")); // 납부자도로명주소 - a01.setPyrRoadNmDaddr(crdnInfo.string("DTL_ADDR")); // 납부자도로명상세주소 - a01.setPyrRoadNmAlAddr(crdnInfo.string("WHOL_ADDR")); // 납부자도로명전체주소 - String vhrno = crdnInfo.string("VHRNO"); - a01.setGlNm(vhrno); // 물건지명 - a01.setLvyTrgtSeCd("01"); // 부과대상구분코드 01:차량 - a01.setRegYmd(crdnInfo.string("CRDN_YMD")); // 등록일자 / 위반일자 - a01.setFinScrgAmt(crdnInfo.string("FFNLG_AMT")); // 과태료과징금금액 - a01.setFcltSeCd(""); // 시설구분코드 / 금연구역흡연위반 과태료인 경우 활용 - a01.setRegSeCd(""); // 등록구분코드 / 폐기물관리법위반 과태료인 경우 01투기, 02소각, 99기타 - // 감경 사유 코드(FIM019) -> 감경사유구분코드 - a01.setRdtRsnSeCd( - switch (crdnInfo.string("RDCT_RSN_CD")) { - case "01" -> "0101"; // 국민기초생활수급자 - case "02" -> "0102"; // 한부모가족보호대상자 - case "03" -> "0103"; // 장애인(장애의 정도가 심한 장애인) - case "04" -> "0104"; // 국가유공자(상이등급3급이상) - case "05" -> "0105"; // 미성년자 - case "08" -> ""; // 의견진술감액 - case "09" -> ""; // 기타 - case "99" -> "0199"; // 타법령에의한감경 - default -> "0100"; // 해당없음 - } - ); - a01.setVhrno(vhrno); // 자동차등록번호 - - if ("PES".equals(taskSeCd)) { // 밤샘주차 - a01.setMngItemCn1("차고지 외 밤샘주차"); // 관리항목1 - a01.setMngItemCn2("위반일시 : " + crdnInfo.string("CRDN_YMD_TM_MASK")); // 관리항목2 - a01.setMngItemCn3("위반장소 : " + crdnInfo.string("CRDN_PLC")); // 관리항목3 - a01.setMngItemCn4("화물자동차운수사업법"); // 관리항목4 - // 관리항목5 - if (crdnInfo.string("CRDN_INPT_SE_CD").equals("06")) { - a01.setMngItemCn5("관내단속"); - } else if (crdnInfo.string("CRDN_INPT_SE_CD").equals("08")) { - a01.setMngItemCn5(crdnInfo.string("ETC_CN")); - } else { - a01.setMngItemCn5(""); - } - } else if ("DPV,ECA".contains(taskSeCd)) { // 장애인, 전기차 - a01.setMngItemCn1("위반일시 : " + crdnInfo.string("CRDN_YMD_TM_MASK")); // 관리항목1 - a01.setMngItemCn2(""); // 관리항목2 - a01.setMngItemCn3("위반장소 : " + crdnInfo.string("CRDN_PLC")); // 관리항목3 - a01.setMngItemCn4(""); // 관리항목4 - a01.setMngItemCn5("위반항목 : " + crdnInfo.string("VLTN_ARTCL")); // 관리항목5 - } else { - throw new RuntimeException("지정되지 않은 업무 구분코드가 입력되었습니다."); // 예외를 발생시켜서 DB Rollback - } - - a01.setMngItemCn6(sggCd + crdnId); // 관리6항목 - a01.setRmCn(crdnInfo.string("ETC_CN")); // 비고내용 - - // 차세대 세외수입 연계 서비스 호출 - A01 과태료 대장 단속 정보 등록 - if (true) { //TODO:별도연계서비스여부 - return jsonCall( - deptInfo.string("NXRP_LINK_SRVC_URL") + "/intf/lntris/a01/register", - Map.of( - "taskSeCd", taskSeCd, - "msg", a01 - ) - ); - } else { - List res = lntrisAService.registerA01s(taskSeCd, List.of(a01)); - - A01Response res0 = !res.isEmpty() ? res.get(0) : null; - return json.stringify(res0); - } - } - - /**지정한 조건에 따라 과태료 대장 등록 자료 일괄 조회 목록을 조회하여 반환한다. - * @param req 과태료 대장 등록 자료 일괄 조회 조회 조건 - * @return 과태료 대장 등록 자료 일괄 조회 목록 - */ - public List getNisIndivA02List(NisIndivQuery req) { - return nisA02Mapper.selectNisIndivA02List(req); - } - - /**지정한 조건에 따라 과태료 대장 등록 자료 일괄 조회 객체들을 반환한다. - * @param req 과태료 대장 등록 자료 일괄 조회 조회 조건 - * @return 과태료 대장 등록 자료 일괄 조회 객체 목록 - */ - public List getNisIndivA02s(NisIndivQuery req) { - return nisA02Mapper.selectNisIndivA02s(req); - } - - /**지정한 조건에 따라 과태료 대장 등록 자료 상세 조회 목록을 조회하여 반환한다. - * @param req 과태료 대장 등록 자료 상세 조회 조회 조건 - * @return 과태료 대장 등록 자료 상세 조회 목록 - */ - public List getNisIndivA03List(NisIndivQuery req) { - return nisA03Mapper.selectNisIndivA03List(req); - } - - /**지정한 조건에 따라 과태료 대장 등록 자료 상세 조회 객체들을 반환한다. - * @param req 과태료 대장 등록 자료 상세 조회 조회 조건 - * @return 과태료 대장 등록 자료 상세 조회 객체 목록 - */ - public List getNisIndivA03s(NisIndivQuery req) { - return nisA03Mapper.selectNisIndivA03s(req); - } - - /**과태료 대장 등록 자료 상세 조회 정보에서 업무 적용 정보를 수정한다. - * @param nisIndivA03 과태료 대장 등록 자료 상세 조회 - * @return 저장 여부 - *
  • 저장됐으면 true
  • - *
  • 그렇지 않으면 false
  • - *
- */ - public String createNisIndivA03(NisIndivQuery req) { - DataObject userInfo = userBean.getUserInfo(currentUser().getId()); // 1. 사용자 정보 - DataObject deptInfo = ogdpBean.getDeptStngInfo(new OgdpQuery().setDeptCd(userInfo.string("DEPT_CD"))); // 2. 부서 정보 - DataObject crdnInfo = nisA01Mapper.selectCrdnInfo(req.getCrdnId()); // 3. 세외수입 과태료대장에 연계할 단속 정보 - - LntrisA03.A03ReqDetail a03Rqst = new LntrisA03.A03ReqDetail(); - - a03Rqst.setSgbCd(userInfo.string("NSTT_CD")); // 자치단체코드 - a03Rqst.setLinkTrgtCd(req.getLinkTrgtCd()); // 연계대상코드 - a03Rqst.setLinkMngKey(req.getLinkMngKey()); // 연계관리키 시군구코드 + 단속 ID + 년월일시분초 - - String taskSeCd = crdnInfo.string("TASK_SE_CD"); - // 차세대 세외수입 연계 서비스 호출 - A01 과태료 대장 단속 정보 등록 - if (true) { //TODO:별도연계서비스여부 - return jsonCall( - deptInfo.string("NXRP_LINK_SRVC_URL") + "/intf/lntris/a03/info", - Map.of( - "taskSeCd", taskSeCd, - "msg", a03Rqst - ) - ); - } else { - LntrisA03.A03ReqDetail rd = new LntrisA03.A03ReqDetail(); - rd.setSgbCd(a03Rqst.getSgbCd()); - rd.setFinScrgAcbKey(a03Rqst.getFinScrgAcbKey()); - rd.setLinkMngKey(a03Rqst.getLinkMngKey()); - rd.setLinkTrgtCd(a03Rqst.getLinkTrgtCd()); - - A03Response res = lntrisAService.getA03(taskSeCd, rd); - return json.stringify(res); - } - } - - private String jsonCall(String url, Object data) { - HttpResponse hresp = new WebClient().post(req -> - req.uri(url) - .json(json) - .bodyData(data) - ); - return hresp.body(); - } - - // SSL 무시 ///////////////////////////////////////////////////////////////// - public void ignoreSsl() throws Exception { - HostnameVerifier hv = new HostnameVerifier() { - @Override - public boolean verify(String urlHostName, SSLSession session) { - return true; - } - }; - - trustAllHttpsCertificates(); - HttpsURLConnection.setDefaultHostnameVerifier(hv); - } - - public void trustAllHttpsCertificates() throws Exception { - TrustManager[] trustAllCerts = new TrustManager[1]; - TrustManager tm = new miTM(); - trustAllCerts[0] = tm; - SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, trustAllCerts, null); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - } - - static class miTM implements TrustManager, X509TrustManager { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - - public boolean isServerTrusted(X509Certificate[] certs) { - return true; - } - - public boolean isClientTrusted(X509Certificate[] certs) { - return true; - } - - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException { - return; - } - - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException { - return; - } - } - // SSL 무시 ///////////////////////////////////////////////////////////////// - - public String createNisIndivB01C01(NisIndivQuery req) { - String rtnMsg = "[F]"; - - List fimsVltnCodes = codeBean.getCodes("FIM004"); - List nxrpVltnCodes = codeBean.getCodes("NTR055"); - - DataObject deptStng = stngBean.getStng("dept"); - String gujesi = deptStng.string("NXRP_RGN_SE_CD"); - - for(String crdnID : req.getCrdnIds()) { - DataObject crdnInfo = crdnInfoMapper.selectCrdnInfo(crdnID); - - if (crdnInfo.string("NXRP_CRDN_LINK_YN").equals("Y")) { - throw new RuntimeException(rtnMsg += "이미 세외수입 단속 연계 처리된 자료입니다."); - } - - String firstTaskSeCd = ""; - String taskSeCd = crdnInfo.string("TASK_SE_CD"); - if (firstTaskSeCd.equals("")) { - firstTaskSeCd = taskSeCd; - } - - if (!taskSeCd.equals("PVS") && !taskSeCd.equals("BPV")) - throw new RuntimeException(rtnMsg += "주정차위반 또는 전용차로위반 자료만 처리 가능합니다."); - if (!firstTaskSeCd.equals(taskSeCd)) - throw new RuntimeException(rtnMsg += "과태료 구분이 동일한 자료만 처리가능합니다."); - if (crdnInfo.number("ATCH_FILE_CNT").intValue() < 1) - throw new RuntimeException(rtnMsg += "단속사진이 없습니다."); - - CmmnQuery cmmnQuery = new CmmnQuery(); - cmmnQuery.setUseYn("Y"); - cmmnQuery.setSggCd(crdnInfo.string("SGG_CD")); - cmmnQuery.setTaskSeCd(taskSeCd); - DataObject nxrpLinkInfo = taskMapper.selectTaskInfo(cmmnQuery); - if (nxrpLinkInfo == null) - throw new RuntimeException(rtnMsg += "과태료 설정 정보가 없습니다."); - - String nxrpLinkSeCd = nxrpLinkInfo.string("NXRP_LINK_SE_CD"); - String nxrpLinkSeDtlSn = nxrpLinkInfo.string("NXRP_LINK_SE_DTL_SN"); - - if (!nxrpLinkSeCd.equals("B01") && !nxrpLinkSeCd.equals("C01")) - throw new RuntimeException(rtnMsg += "세외수입 연계 구분 코드 설정 오류입니다."); - if (!nxrpLinkSeDtlSn.equals("01") && !nxrpLinkSeDtlSn.equals("02")) - throw new RuntimeException(rtnMsg += "세외수입 연계 구분 상세 순번 설정 오류입니다."); - - String instDigit7 = currentUser().getInstitute(); - - //법정동코드 구하기 - if (!isEmpty(crdnInfo.string("CRDN_STDG_NM"))) { - Map stdgQuery = new HashMap<>(); - stdgQuery.put("sggCd", crdnInfo.string("SGG_CD")); - stdgQuery.put("emdNm", crdnInfo.string("CRDN_STDG_NM")); - List stdgCds = crdnStngMapper.selectStdgCdListByStdgNm(stdgQuery); - - String stdgCd = !isEmpty(stdgCds) ? stdgCds.get(0) : null; - if (!isEmpty(stdgCd)) - crdnInfo.put("STDG_CD", stdgCd); - } - - LinkFileMaker linkFileMaker = null; - if (nxrpLinkSeDtlSn.equals("01")) { - linkFileMaker = new AttachedTxtMaker(nxrpLinkSeCd, instDigit7); - if (nxrpLinkSeCd.equals("B01")) { - - ((AttachedTxtMaker)linkFileMaker).appendVltnCodeInfo(fimsVltnCodes, nxrpVltnCodes); - } - } else { - linkFileMaker = new OnlyImageMaker(nxrpLinkSeCd, instDigit7); - } - - if (!gujesi.equals("")) { - linkFileMaker.setGujesiStng(gujesi); - } - - String workPath = "files/temp/sendCrdn/"+crdnInfo.string("SGG_CD")+"/"+crdnInfo.string("CRDN_ID"); - File workFolder = new File(workPath); - if (workFolder.exists()) { - boolean del = false; - File[] lf = workFolder.listFiles(); - if (lf != null && lf.length > 0) { - for(File f : lf) { - del = f.delete(); - if (!del) { - throw new RuntimeException("[F]파일삭제오류"); - } - } - } - del = workFolder.delete(); - if (!del) { - throw new RuntimeException("[F]파일삭제오류"); - } - } - workFolder.mkdirs(); - - try { - String[] items = null; - boolean includeTxt = nxrpLinkSeDtlSn.equals("01"); - - if (taskSeCd.equals("PVS")) { - items = linkFileMaker.extractForPVS(crdnInfo,includeTxt).get(); - } else if (taskSeCd.equals("BPV")) { - items = linkFileMaker.extractForBPV(crdnInfo,includeTxt).get(); - } - - if (nxrpLinkSeDtlSn.equals("01")) { - - ((AttachedTxtMaker)linkFileMaker).writeTextFileContents(workPath, items); - - } - - FileQuery fileQuery = new FileQuery() - .setInfoType(Crdn.INF_TYPE) - .setInfoKeys(crdnID) - .setOrderBy("SRT_ORD"); - List crdnFileList = fileBean.getFileList(fileQuery); - for(int j=0; (j상세 설명: * @@ -79,17 +74,16 @@ import cokr.xit.interfaces.lntris.basic.a.service.LntrisAService; */ @Component("nisIndivBean") public class NisIndivBean extends AbstractBean { - @Resource(name="objectMapper") - private ObjectMapper objectMapper; + private JSON json = new JSON(); @Resource(name = "lntrisAService") private LntrisAService lntrisAService; - /** 과태료 대장 단속 정보 등록 정보 DAO */ + /** 과태료대장 단속정보 DAO */ @Resource(name = "nisA01Mapper") private NisA01Mapper nisA01Mapper; - /** 과태료 대장 등록 자료 일괄 조회 정보 DAO */ + /** 과태료대장 일괄조회 DAO */ @Resource(name = "nisA02Mapper") private NisA02Mapper nisA02Mapper; - /** 과태료 대장 등록 자료 상세 조회 정보 DAO */ + /** 과태료대장 상세조회 DAO */ @Resource(name = "nisA03Mapper") private NisA03Mapper nisA03Mapper; /** 단속 대장 수정 정보 DAO */ @@ -116,24 +110,24 @@ public class NisIndivBean extends AbstractBean { @Resource(name = "ogdpBean") private OgdpBean ogdpBean; - /**지정한 조건에 따라 과태료 대장 단속 정보 등록 목록을 조회하여 반환한다. - * @param req 과태료 대장 단속 정보 등록 조회 조건 - * @return 과태료 대장 단속 정보 등록 목록 + /**지정한 조건에 따라 과태료대장 단속정보 목록을 조회하여 반환한다. + * @param req 과태료대장 단속정보 조회 조건 + * @return 과태료대장 단속정보 목록 */ public List getNisIndivA01List(NisIndivQuery req) { return nisA01Mapper.selectNisIndivA01List(req); } - /**지정한 조건에 따라 과태료 대장 단속 정보 등록 객체들을 반환한다. - * @param req 과태료 대장 단속 정보 등록 조회 조건 - * @return 과태료 대장 단속 정보 등록 객체 목록 + /**지정한 조건에 따라 과태료대장 단속정보 객체들을 반환한다. + * @param req 과태료대장 단속정보 조회 조건 + * @return 과태료대장 단속정보 객체 목록 */ public List getNisIndivA01s(NisIndivQuery req) { return nisA01Mapper.selectNisIndivA01s(req); } - /**과태료 대장 단속 정보 등록 정보를 등록한다. - * @param nisIndivA01 과태료 대장 단속 정보 등록 + /**과태료대장 단속정보를 등록한다. + * @param nisIndivA01 과태료대장 단속정보 * @return 저장 여부 *
  • 저장됐으면 true
  • *
  • 그렇지 않으면 false
  • @@ -144,10 +138,10 @@ public class NisIndivBean extends AbstractBean { DataObject userInfo = userBean.getUserInfo(currentUser().getId()); // 2. 부서 정보 DataObject deptInfo = ogdpBean.getDeptStngInfo(new OgdpQuery().setDeptCd(userInfo.string("DEPT_CD"))); - // 3. 세외수입 과태료대장에 연계할 단속 정보를 조회 + // 3. 세외수입 과태료대장에 연계할 단속정보를 조회 DataObject selectCrdnInfo = nisA01Mapper.selectCrdnInfo(req.getCrdnId()); - LocalDateTime now = LocalDateTime.now(); // 현재 날짜/시간 + LocalDateTime now = LocalDateTime.now(); // 현재 날짜/시간 String sggCd = selectCrdnInfo.string("SGG_CD"); String taskSeCd = selectCrdnInfo.string("TASK_SE_CD"); String linkMngKey = sggCd + selectCrdnInfo.string("CRDN_ID") + '_' + now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); @@ -155,15 +149,15 @@ public class NisIndivBean extends AbstractBean { A01 a01 = new A01(); a01.setTaskSeCd(taskSeCd); // 업무 구분 코드 - a01.setSgbCd(userInfo.string("NSTT_CD")); // 자치단체코드 + a01.setSgbCd(userInfo.string("NSTT_CD")); // 자치단체코드 a01.setLinkTrgtCd(userInfo.string("NSTT_CD") + taskSeCd + "01001"); // 연계대상코드 - a01.setLinkMngKey(linkMngKey); // 연계관리키 시군구코드 + 단속 ID + 년월일시분초 - a01.setDptCd(userInfo.string("DEPT_CD")); // 부서코드 - a01.setRcptYr(req.getSndngYmd().substring(0, 4)); // 접수연도 - a01.setSpacBizCd(selectCrdnInfo.string("SPCL_BIZ_CD")); // 특별회계사업코드 (밤샘주차 0159:주차장특별회계) - a01.setActSeCd(selectCrdnInfo.string("ACNTG_SE_CD")); // 회계구분코드 - a01.setRprsTxmCd(selectCrdnInfo.string("TXITM_CD")); // 대표세입과목코드 - a01.setOperItemCd(selectCrdnInfo.string("OPER_ITEM_CD")); // 운영항목코드 + a01.setLinkMngKey(linkMngKey); // 연계관리키 시군구코드 + 단속 ID + 년월일시분초 + a01.setDptCd(userInfo.string("DEPT_CD")); // 부서코드 + a01.setRcptYr(req.getSndngYmd().substring(0, 4)); // 접수연도 + a01.setSpacBizCd(selectCrdnInfo.string("SPCL_BIZ_CD")); // 특별회계사업코드 (밤샘주차 0159:주차장특별회계) + a01.setActSeCd(selectCrdnInfo.string("ACNTG_SE_CD")); // 회계구분코드 + a01.setRprsTxmCd(selectCrdnInfo.string("TXITM_CD")); // 대표세입과목코드 + a01.setOperItemCd(selectCrdnInfo.string("OPER_ITEM_CD")); // 운영항목코드 TaskProcessor taskProcessor = TaskProcessor.get(); a01.setFinScrgSeCd(taskProcessor.getFinScrgSeCd(taskSeCd)); @@ -245,74 +239,84 @@ public class NisIndivBean extends AbstractBean { a01.setCreatedBy(userInfo.string("USER_ID")); a01.setModifiedBy(userInfo.string("USER_ID")); - // 차세대 세외수입 연계 서비스 호출 - A01 과태료 대장 단속 정보 등록 + // 차세대 세외수입 연계 서비스 호출 - A01 과태료대장 단속정보 등록 // 연계서비스 별도 프로세스 여부 - if (ifEmpty(FimsConf.get().getNxrpDemonYn(),() -> "Y").equals("Y")) { - String sUrl = deptInfo.string("NXRP_LINK_SRVC_URL") + "/intf/lntris/a01/register"; // create - - ObjectMapper mapper = new ObjectMapper(); - - String sJsonData = ""; - + if ("Y".equals(ifEmpty(FimsConf.get().getNxrpDemonYn(),() -> "Y"))) { + String url = deptInfo.string("NXRP_LINK_SRVC_URL") + "/intf/lntris/a01/register"; // create // Json 파라미터 설정 - try { - sJsonData = "{ " - + " \"taskSeCd\":" + "\"" + a01.getTaskSeCd() + "\"" - + ", \"msg\":" + mapper.writeValueAsString(a01) - + " }"; - } catch (IOException e) { - throw new RuntimeException("세외수입 과태료대장에 전송할 자료 생성중 오류가 발생하였습니다."); // 예외를 발생시켜서 DB Rollback - } + String jsonData = "{ " + + " \"taskSeCd\":" + "\"" + a01.getTaskSeCd() + "\"" + + ", \"msg\":" + json.stringify(a01) + + " }"; // 연계 서비스 호출 후 메세지 return - return callHttpsJson(sUrl, "POST", sJsonData); + return jsonCall(url, jsonData); } else { LntrisA01.A01ReqDetail rd = (LntrisA01.A01ReqDetail) convert(a01, LntrisA01.A01ReqDetail.class); List res = lntrisAService.registerA01s(a01.getTaskSeCd(), List.of(rd)); A01Response res0 = !res.isEmpty() ? res.get(0) : null; + return json.stringify(res0); + } + } - try { - return objectMapper.writeValueAsString(res0); - } catch (JsonProcessingException e) { - throw runtimeException(e); - } + public SndngDtl registerNisIndivA01(NisIndivQuery req) { + String hresp = createNisIndivA01(req); + + try { + JsonNode linkRst = json.getObjectMapper().readTree(hresp); + + // 개별시스템 연계결과코드(linkRstCd) - 000:정상, 100:검증오류(연계관리키 중복), 101:검증오류(등록 시 자료 null, 길이체크), 900:필수값누락 + if ("000".equals(linkRst.get("linkRstCd").asText())) { + // resVo1 + JsonNode resVo1 = linkRst.findValue("resVo1"); + + // 발송 대장(TB_SNDNG) - 발송 상태 코드(SNDNG_DTL_STTS_CD) 수정 + SndngDtl uptSndngDtl = new SndngDtl(); + uptSndngDtl.setSndngDtlSttsCd("01"); // 발송 상태 코드(FIM050) 01:세외수입부과 + uptSndngDtl.setLinkTrgtCd(resVo1.get("linkTrgtCd").asText()); // 연계 대상 코드 + uptSndngDtl.setLinkMngKey(resVo1.get("linkMngKey").asText()); // 연계 관리 키 + return uptSndngDtl; + } else + return null; + } catch (Exception e) { + throw runtimeException(e); } } - /**지정한 조건에 따라 과태료 대장 등록 자료 일괄 조회 목록을 조회하여 반환한다. - * @param req 과태료 대장 등록 자료 일괄 조회 조회 조건 - * @return 과태료 대장 등록 자료 일괄 조회 목록 + /**지정한 조건에 따라 과태료대장 일괄조회 목록을 조회하여 반환한다. + * @param req 과태료대장 일괄조회 조건 + * @return 과태료대장 일괄조회 목록 */ public List getNisIndivA02List(NisIndivQuery req) { return nisA02Mapper.selectNisIndivA02List(req); } - /**지정한 조건에 따라 과태료 대장 등록 자료 일괄 조회 객체들을 반환한다. - * @param req 과태료 대장 등록 자료 일괄 조회 조회 조건 - * @return 과태료 대장 등록 자료 일괄 조회 객체 목록 + /**지정한 조건에 따라 과태료대장 일괄조회 객체들을 반환한다. + * @param req 과태료대장 일괄조회 조건 + * @return 과태료대장 일괄조회 객체 목록 */ public List getNisIndivA02s(NisIndivQuery req) { return nisA02Mapper.selectNisIndivA02s(req); } - /**지정한 조건에 따라 과태료 대장 등록 자료 상세 조회 목록을 조회하여 반환한다. - * @param req 과태료 대장 등록 자료 상세 조회 조회 조건 - * @return 과태료 대장 등록 자료 상세 조회 목록 + /**지정한 조건에 따라 과태료대장 상세조회 목록을 조회하여 반환한다. + * @param req 과태료대장 상세조회 조건 + * @return 과태료대장 상세조회 목록 */ public List getNisIndivA03List(NisIndivQuery req) { return nisA03Mapper.selectNisIndivA03List(req); } - /**지정한 조건에 따라 과태료 대장 등록 자료 상세 조회 객체들을 반환한다. - * @param req 과태료 대장 등록 자료 상세 조회 조회 조건 - * @return 과태료 대장 등록 자료 상세 조회 객체 목록 + /**지정한 조건에 따라 과태료대장 상세조회 객체들을 반환한다. + * @param req 과태료대장 상세조회 조건 + * @return 과태료대장 상세조회 객체 목록 */ public List getNisIndivA03s(NisIndivQuery req) { return nisA03Mapper.selectNisIndivA03s(req); } - /**과태료 대장 등록 자료 상세 조회 정보에서 업무 적용 정보를 수정한다. - * @param nisIndivA03 과태료 대장 등록 자료 상세 조회 + /**과태료대장 상세조회 정보에서 업무 적용 정보를 수정한다. + * @param nisIndivA03 과태료대장 상세조회 * @return 저장 여부 *
    • 저장됐으면 true
    • *
    • 그렇지 않으면 false
    • @@ -323,7 +327,7 @@ public class NisIndivBean extends AbstractBean { DataObject userInfo = userBean.getUserInfo(currentUser().getId()); // 2. 부서 정보 DataObject deptInfo = ogdpBean.getDeptStngInfo(new OgdpQuery().setDeptCd(userInfo.string("DEPT_CD"))); - // 3. 세외수입 과태료대장에 연계할 단속 정보를 조회 + // 3. 세외수입 과태료대장에 연계할 단속정보를 조회 DataObject selectCrdnInfo = nisA01Mapper.selectCrdnInfo(req.getCrdnId()); A03Rqst a03Rqst = new A03Rqst(); @@ -333,27 +337,17 @@ public class NisIndivBean extends AbstractBean { a03Rqst.setLinkTrgtCd(req.getLinkTrgtCd()); // 연계대상코드 a03Rqst.setLinkMngKey(req.getLinkMngKey()); // 연계관리키 시군구코드 + 단속 ID + 년월일시분초 - // 차세대 세외수입 연계 서비스 호출 - A01 과태료 대장 단속 정보 등록 + // 차세대 세외수입 연계 서비스 호출 - A01 과태료대장 단속정보 등록 // 연계서비스 별도 프로세스 여부 - if (ifEmpty(FimsConf.get().getNxrpDemonYn(),() -> "Y").equals("Y")) { - String sUrl = deptInfo.string("NXRP_LINK_SRVC_URL") + "/intf/lntris/a03/info"; // create - - ObjectMapper mapper = new ObjectMapper(); - String sJsonData = ""; - - // Json 파라미터 설정 - try { - sJsonData = "{ " - + " \"taskSeCd\":" + "\"" + a03Rqst.getTaskSeCd() + "\"" - + ", \"msg\":" + mapper.writeValueAsString(a03Rqst) - + " }"; - } catch (IOException e) { - throw new RuntimeException("세외수입 과태료대장에 전송할 자료 생성중 오류가 발생하였습니다."); // 예외를 발생시켜서 DB Rollback - } + if ("Y".equals(ifEmpty(FimsConf.get().getNxrpDemonYn(),() -> "Y"))) { + String url = deptInfo.string("NXRP_LINK_SRVC_URL") + "/intf/lntris/a03/info"; // create + String jsonData = "{ " + + " \"taskSeCd\":" + "\"" + a03Rqst.getTaskSeCd() + "\"" + + ", \"msg\":" + json.stringify(a03Rqst) + + " }"; // 연계 서비스 호출 후 메세지 return - return callHttpsJson(sUrl, "POST", sJsonData); - + return jsonCall(url, jsonData); } else { LntrisA03.A03ReqDetail rd = new LntrisA03.A03ReqDetail(); rd.setSgbCd(a03Rqst.getSgbCd()); @@ -362,97 +356,21 @@ public class NisIndivBean extends AbstractBean { rd.setLinkTrgtCd(a03Rqst.getLinkTrgtCd()); A03Response res = lntrisAService.getA03(a03Rqst.getTaskSeCd(), rd); - - try { - return objectMapper.writeValueAsString(res); - } catch (JsonProcessingException e) { - throw runtimeException(e); - } + return json.stringify(res); } } - /**지정한 조건에 따라 과태료 대장 등록 자료 일괄 조회 목록을 조회하여 반환한다. - * @param req 과태료 대장 등록 자료 일괄 조회 조회 조건 - * @return 과태료 대장 등록 자료 일괄 조회 목록 + /**지정한 조건에 따라 과태료대장 일괄조회 목록을 조회하여 반환한다. + * @param req 과태료대장 일괄조회 조건 + * @return 과태료대장 일괄조회 목록 */ - public String callHttpsJson(String sUrl, String sMethod, String sJsonData) { - // - String returnMsg = ""; - // - HttpsURLConnection httpsConn = null; - - try { - // HTTPS 통신을 위한 URL 생성 - URL url = new URL(sUrl); - - // SSL 무시 - ignoreSsl(); - - // HttpsURLConnection 객체 생성 - httpsConn = (HttpsURLConnection) url.openConnection(); - - // Content-Type - httpsConn.setRequestProperty("Content-Type", "application/json"); - // Method Setting(GET/POST) - httpsConn.setRequestMethod(sMethod); // GET, POST, DELETE - // Connection Timeout setting - httpsConn.setConnectTimeout(10000); // 컨텍션타임아웃 10초 - // Read Timeout Setting - httpsConn.setReadTimeout(10000); // 컨텐츠조회 타임아웃 10초 - - if (sMethod.equals("POST")) { - // Input setting - httpsConn.setDoInput(true); - // Output setting - httpsConn.setDoOutput(true); // 항상 갱신된내용을 가져옴 - - // POST방식으로 송신할 json 데이터 전송 - BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(httpsConn.getOutputStream())); - bw.write(sJsonData); - bw.flush(); - bw.close(); - } else { - // Input setting - httpsConn.setDoInput(false); - // Output setting - httpsConn.setDoOutput(false); - } - - // HTTP 응답 코드 수신, 서버에서 보낸 응답 데이터 수신 받기 - int responseCode = httpsConn.getResponseCode(); - - Charset charset = Charset.forName("UTF-8"); - String inputLine; - StringBuffer response = new StringBuffer(); - - if (responseCode == 200) { - BufferedReader in = new BufferedReader(new InputStreamReader(httpsConn.getInputStream(), charset)); - - while ((inputLine = in.readLine()) != null) { - response.append(inputLine); - } - in.close(); - } else { - BufferedReader in = new BufferedReader(new InputStreamReader(httpsConn.getErrorStream(), charset)); - - while ((inputLine = in.readLine()) != null) { - response.append(inputLine); - } - in.close(); - } - - returnMsg = response.toString(); - } catch (IOException e) { - returnMsg = "IOException :" + e; - } catch (Exception e) { - returnMsg = "Exception :" + e; - } finally { - if (httpsConn != null) { - httpsConn.disconnect(); - } - } - - return returnMsg; + public String jsonCall(String url, String jsonData) { + HttpResponse hresp = new WebClient().post(req -> + req.uri(url) + .json(json) + .bodyData(jsonData) + ); + return hresp.body(); } // SSL 무시 ///////////////////////////////////////////////////////////////// @@ -504,19 +422,19 @@ public class NisIndivBean extends AbstractBean { // SSL 무시 ///////////////////////////////////////////////////////////////// public String createNisIndivB01C01(NisIndivQuery req) { - List fimsVltnCodes = codeBean.getCodes("FIM004"); - List nxrpVltnCodes = codeBean.getCodes("NTR055"); + Map> codes = codeBean.getCodesOf("FIM004", "NTR055"); + List fimsVltnCodes = codes.get("FIM004"); + List nxrpVltnCodes = codes.get("NTR055"); DataObject deptStng = stngBean.getStng("dept"); String gujesi = deptStng.string("NXRP_RGN_SE_CD"); String rtnMsg = "[F]"; - ZIP zip = new ZIP(); - for(String crdnID : req.getCrdnIds()) { + for (String crdnID : req.getCrdnIds()) { DataObject crdnInfo = crdnInfoMapper.selectCrdnInfo(crdnID); if ("Y".equals(crdnInfo.get("NXRP_CRDN_LINK_YN"))) - throw new RuntimeException(rtnMsg += "이미 세외수입 단속 연계 처리된 자료입니다."); + throw new RuntimeException(rtnMsg += "이미 연계 처리된 세외수입 단속 자료입니다."); String sggCd = crdnInfo.string("SGG_CD"); String firstTaskSeCd = ""; @@ -551,14 +469,13 @@ public class NisIndivBean extends AbstractBean { //법정동코드 구하기 if (!isEmpty(crdnInfo.string("CRDN_STDG_NM"))) { - Map stdgQuery = new HashMap<>(); - stdgQuery.put("sggCd", sggCd); - stdgQuery.put("emdNm", crdnInfo.string("CRDN_STDG_NM")); + DataObject stdgQuery = new DataObject() + .set("sggCd", sggCd) + .set("emdNm", crdnInfo.string("CRDN_STDG_NM")); List stdgCds = crdnStngMapper.selectStdgCdListByStdgNm(stdgQuery); - - if (stdgCds != null && stdgCds.size() == 1 && stdgCds.get(0) != null && !stdgCds.get(0).equals("")) { - crdnInfo.put("STDG_CD", stdgCds.get(0)); - } + String stdgCd = !stdgCds.isEmpty() ? stdgCds.get(0) : null; + if (!isEmpty(stdgCd)) + crdnInfo.put("STDG_CD", stdgCd); } LinkFileMaker linkFileMaker = null; @@ -580,7 +497,7 @@ public class NisIndivBean extends AbstractBean { boolean del = false; File[] lf = workFolder.listFiles(); if (lf != null && lf.length > 0) { - for(File f : lf) { + for (File f : lf) { del = f.delete(); if (!del) throw new RuntimeException("[F]파일삭제오류"); @@ -610,12 +527,10 @@ public class NisIndivBean extends AbstractBean { .setInfoKeys(crdnID) .setOrderBy("SRT_ORD"); List crdnFileList = fileBean.getFileList(fileQuery); - for(int j=0; (j t) { - DataObject convert = new DataObject(); + DataObject convert = json.getObjectMapper().convertValue(s, DataObject.class); DataObject convert2 = new DataObject(); - convert = objectMapper.convertValue(s, DataObject.class); Field[] fs = t.getDeclaredFields(); - for(Field f : fs) { + for (Field f : fs) { String fn = f.getName(); String val = convert.string(fn); convert2.set(fn, val); } - return objectMapper.convertValue(convert2, t); + return json.getObjectMapper().convertValue(convert2, t); } } \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/nxrp/service/bean/NisIndivServiceBean.java b/src/main/java/cokr/xit/fims/nxrp/service/bean/NisIndivServiceBean.java index e3605bb9..d095e42b 100644 --- a/src/main/java/cokr/xit/fims/nxrp/service/bean/NisIndivServiceBean.java +++ b/src/main/java/cokr/xit/fims/nxrp/service/bean/NisIndivServiceBean.java @@ -23,7 +23,6 @@ import cokr.xit.foundation.data.DataObject; */ @Service("nisIndivService") public class NisIndivServiceBean extends AbstractServiceBean implements NisIndivService { - /** 과태료 대장 단속 정보 등록 정보 Bean */ @Resource(name = "nisIndivBean") private NisIndivBean nisIndivBean; @@ -72,5 +71,4 @@ public class NisIndivServiceBean extends AbstractServiceBean implements NisIndiv public String createNisIndivC01(NisIndivQuery req) { return nisIndivBean.createNisIndivB01C01(req); } - -} +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java b/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java index b26bde2a..9c33e180 100644 --- a/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java +++ b/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java @@ -1,60 +1,45 @@ package cokr.xit.fims.nxrp.service.bean; -import java.io.File; -import java.io.FilenameFilter; -import java.net.http.HttpResponse; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.HashMap; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; import javax.annotation.Resource; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSession; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; import org.springframework.stereotype.Component; -import com.fasterxml.jackson.databind.ObjectMapper; - -import cokr.xit.base.code.CommonCode; import cokr.xit.base.code.service.bean.CodeBean; -import cokr.xit.base.file.ZIP; -import cokr.xit.base.file.service.FileQuery; import cokr.xit.base.file.service.bean.FileBean; import cokr.xit.base.user.service.bean.UserBean; -import cokr.xit.fims.base.OgdpQuery; import cokr.xit.fims.base.service.bean.OgdpBean; -import cokr.xit.fims.cmmn.CmmnQuery; import cokr.xit.fims.cmmn.service.bean.StngBean; import cokr.xit.fims.crdn.Crdn; import cokr.xit.fims.crdn.dao.CrdnInfoMapper; import cokr.xit.fims.crdn.dao.CrdnStngMapper; import cokr.xit.fims.crdn.dao.CrdnUpdtMapper; +import cokr.xit.fims.mngt.Vltn; import cokr.xit.fims.mngt.dao.TaskMapper; import cokr.xit.fims.nxrp.NisIndivQuery; import cokr.xit.fims.nxrp.dao.NisA01Mapper; import cokr.xit.fims.nxrp.dao.NisA02Mapper; import cokr.xit.fims.nxrp.dao.NisA03Mapper; -import cokr.xit.fims.nxrp.support.AttachedTxtMaker; -import cokr.xit.fims.nxrp.support.LinkFileMaker; -import cokr.xit.fims.nxrp.support.OnlyImageMaker; +import cokr.xit.fims.sndb.SndbQuery; +import cokr.xit.fims.sndb.SndngDtl; +import cokr.xit.fims.sndb.dao.SndngDtlMapper; +import cokr.xit.foundation.UserInfo; import cokr.xit.foundation.component.AbstractBean; import cokr.xit.foundation.data.DataObject; import cokr.xit.foundation.data.JSON; -import cokr.xit.foundation.web.WebClient; -import cokr.xit.interfaces.filejob.JobConf; -import cokr.xit.interfaces.lntris.basic.a.LntrisA03; -import cokr.xit.interfaces.lntris.basic.a.LntrisA03.A03Response; -import cokr.xit.interfaces.lntris.basic.a.service.LntrisAService; import cokr.xit.interfaces.sntris.buga.Bu04BugaWSDTO; -import cokr.xit.interfaces.sntris.buga.BugaWS; -import cokr.xit.interfaces.sntris.buga.BugaWSProxy; -import cokr.xit.interfaces.sntris.dao.SntrisMapper; +import cokr.xit.interfaces.sntris.fileoffer.Ye22InputDTO; +import cokr.xit.interfaces.sntris.fileoffer.Ye22NoticeInfoDTO; +import cokr.xit.interfaces.sntris.prenotice.Bu18WebPreNoticeDTO; +import cokr.xit.interfaces.sntris.prenotice.Bu18WebReturnInfoDTO; +import cokr.xit.interfaces.sntris.service.bean.SntrisBean; /**과태료 대장 단속 정보 등록 정보 관리 Bean * @@ -69,13 +54,11 @@ import cokr.xit.interfaces.sntris.dao.SntrisMapper; @Component("snisBean") public class SnisBean extends AbstractBean { private JSON json = new JSON(); - private BugaWS bugaWS = new BugaWSProxy(); - - @Resource(name="objectMapper") - private ObjectMapper objectMapper; - - @Resource(name = "lntrisAService") - private LntrisAService lntrisAService; + @Resource(name = "sntrisBean") + private SntrisBean sntrisBean; + /** 발송 상세 정보 DAO */ + @Resource(name = "sndngDtlMapper") + private SndngDtlMapper sndngDtlMapper; /** 과태료 대장 단속 정보 등록 정보 DAO */ @Resource(name = "nisA01Mapper") @@ -102,9 +85,6 @@ public class SnisBean extends AbstractBean { @Resource(name="taskMapper") private TaskMapper taskMapper; - @Resource(name="sntrisMapper") - private SntrisMapper sntrisMapper; - @Resource(name="fileBean") private FileBean fileBean; @@ -140,8 +120,152 @@ public class SnisBean extends AbstractBean { return nisA01Mapper.selectNisIndivA01s(req); } - public boolean isEnabled() { - return sntrisMapper.useSeoul(null); + public void registerPreNotices(SndbQuery req) { + Map prenotices = getPreNotices(req); + + Ye22InputDTO input = new Ye22InputDTO(); + input.setSystemGubun(req.getTaskSeCd()); + Map retrieved = sntrisBean.registerPreNotices(input, prenotices); + + Set sndngDtlIds = retrieved.keySet(); + List details = sndngDtlMapper.selectSndngDetails(req.setSndngDtlIds(sndngDtlIds.toArray(new String[sndngDtlIds.size()]))).stream() + .map(detail -> { + Ye22NoticeInfoDTO notice = retrieved.get(detail.getSndngDtlId()); + return update(notice, detail); + }) + .filter(detail -> detail != null) + .toList(); + } + + private SndngDtl update(Ye22NoticeInfoDTO notice, SndngDtl detail) { + if (notice == null) return null; + + detail.setSndngDtlSttsCd("01"); + detail.setLinkMngKey(Long.toString(notice.getBuAk())); // 과태료 키 + detail.setTaxNo(notice.getTaxNo()); // 과세번호 + detail.setLevyYmd(notice.getTaxYmd()); // 과세일자 + + notice.accountGetters().forEach((bank, account) -> detail.setBankAccount(bank, account.get())); // 은행 / 계좌번호 + detail.setEpayno(notice.getEnapbuNo()); // 전자납부번호 + + long taxAmt = notice.getTaxAmt(), + gasanAmt = notice.getSiseGasanAmt() + notice.getGuseGasanAmt() + notice.getGukseGasanAmt() + notice.getGigumGasanAmt(), + totalAmt = taxAmt + gasanAmt; + + detail.setPcptax((int)taxAmt); // 본세 + detail.setAdamt((int)gasanAmt); // 가산금 + return detail; + } + + public Map getPreNotices(SndbQuery req) { + // 발송대상 ID 추출 + List targets = sndngDtlMapper.selectSndngTrgtDtlIds(req); + if (targets.isEmpty()) return Collections.emptyMap(); + + List crdnIds = targets.stream() + .map(target -> target.string("CRDN_ID")) + .toList(); + Map crdnMap = nisA01Mapper.selectCrdnList(crdnIds).stream().collect( + Collectors.toMap(info -> info.string("CRDN_ID"), info -> info) + ); + // 발송대상 ID별 단속정보 병합 + targets.forEach(target -> { + DataObject found = crdnMap.get(target.string("CRDN_ID")); + if (found == null) return; + + target.putAll(found); + }); + + // 발송대상 ID별 사전통지 생성 + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + UserInfo currentUser = currentUser(); + DataObject userInfo = userBean.getUserInfo(currentUser.getId()); + return targets.stream().collect(Collectors.toMap( + target -> target.string("SNDNG_DTL_ID"), + target -> createPreNotice(currentUser, now, userInfo, target) + )); + } + + public SndngDtl registerPreNotice(SndngDtl sndngDtl) { + if (!"00".equals(sndngDtl.getSndngDtlSttsCd())) return null; + + // 1. 사용자 정보 + UserInfo currentUser = currentUser(); + DataObject userInfo = userBean.getUserInfo(currentUser.getId()); + // 2. 세외수입 과태료대장에 연계할 단속 정보를 조회 + DataObject crdnInfo = nisA01Mapper.selectCrdnInfo(sndngDtl.getCrdnId()); + + String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + Bu18WebPreNoticeDTO prenotice = createPreNotice(currentUser, now, userInfo, crdnInfo); + + try { + Bu18WebReturnInfoDTO result = sntrisBean.register(prenotice); + if (result.isSuccess()) { + SndngDtl uptSndngDtl = new SndngDtl(); + uptSndngDtl.setSndngDtlSttsCd("01"); // 발송 상태 코드(FIM050) 01:세외수입부과 + uptSndngDtl.setSndngDtlId(sndngDtl.getSndngDtlId()); // 발송 상세 ID +// uptSndngDtl.setLinkTrgtCd(resVo1.get("linkTrgtCd").asText()); // 연계 대상 코드 + uptSndngDtl.setLinkMngKey(result.getNoticeAk()); // 연계 관리 키 + return uptSndngDtl; + } else + return null; + } catch (Exception e) { + throw runtimeException(e); + } + } + + private Bu18WebPreNoticeDTO createPreNotice(UserInfo currentUser, String now, DataObject userInfo, DataObject crdnInfo) { + String sggCd = crdnInfo.string("SGG_CD"); + String taskSeCd = crdnInfo.string("TASK_SE_CD"); + String linkMngKey = sggCd + crdnInfo.string("CRDN_ID") + '_' + now; + + Bu18WebPreNoticeDTO prenotice = new Bu18WebPreNoticeDTO(); + + prenotice.setBigo(crdnInfo.string("ETC_CN")); // 비고 + prenotice.setBookNo(linkMngKey); // 자료키 + prenotice.setSidoCd("11"); // 시도코드 + prenotice.setSiguCd(sggCd); // 시구코드 + prenotice.setBuseoCd(currentUser.getDeptCode()); // 부서코드 + + prenotice.setDisposalContent("부과"); // 처분내용 + prenotice.setRawBasis(Vltn.legalBasis(crdnInfo)); // 부과근거 + prenotice.setSemokCd(crdnInfo.string("TXITM_CD")); // 세목코드 + long taxAmt = toLong(crdnInfo.get("FFNLG_AMT")); + prenotice.setTaxAmt(taxAmt); // 과세금액 + prenotice.setPreTaxAmt(toLong(taxAmt * 0.8)); // + + prenotice.setJukbalDtlAddr(Crdn.location(crdnInfo)); // 위반장소 + prenotice.setJukbalMgrNm(currentUser.getName()); // 적발담당자 + prenotice.setJukbalTarget(String.format("%s(%s)", crdnInfo.string("VLTN_ARTCL"), crdnInfo.string("VHRNO"))); // 적발내용 + prenotice.setJukbalTelNo(userInfo.string("TEL_NO")); // 적발담당자 전화번호 + String crdnYmdhms = crdnInfo.string("CRDN_YMD") + crdnInfo.string("CRDN_TM"); + prenotice.setJukbalYm(crdnYmdhms.substring(0, 6)); // 적발년월 + prenotice.setJukbalYmdHs(crdnYmdhms); // 위반일시 + + prenotice.setNapId(crdnInfo.string("RTPYR_NO")); // 납세자 주민번호 + prenotice.setNapNm(crdnInfo.string("RTPYR_NM")); // 납세자 이름 + prenotice.setNapMobilNo(crdnInfo.string("RTPYR_MBL_TELNO")); // 납세자 휴대폰 번호 + prenotice.setNapTelNo(crdnInfo.string("RTPYR_TELNO")); // 납세자 전화번호 + + prenotice.setNapDzipAddr(crdnInfo.string("ADDR")); // 도로명 우편주소 + prenotice.setNapDdtlAddr(crdnInfo.string("DTL_ADDR")); // 도로명 상세주소 + prenotice.setNapDzipCd(crdnInfo.string("ZIP")); // 도로명 우편번호 +/* + prenotice.setNapDrefAddr(""); // 도로명 참고항목 + + prenotice.setNapZipAddr(""); // 지번 우편주소 + prenotice.setNapDtlAddr(""); // 지번 상세주소 + prenotice.setNapZipCd(""); // 지번 우편번호 +*/ + prenotice.setSendYmd(crdnInfo.string("ADVNTCE_BGNG_YMD")); // 사전통지일 + prenotice.setSubmitYmd(crdnInfo.string("ADVNTCE_DUDT_YMD")); // 의견제출기한 + + prenotice.setSysGubun(taskSeCd); // 시스템 구분 + prenotice.setLastWorkId(currentUser.getAccount()); // 작업자 ID + prenotice.setLastWorkNm(currentUser.getName()); // 작업자 이름 + prenotice.setWorkYmd(now); // 작업일자 + + return prenotice; } /**과태료 대장 단속 정보 등록 정보를 등록한다. @@ -287,327 +411,10 @@ public class SnisBean extends AbstractBean { buga.setNapgiYmd(""); try { - bugaWS.insertBugaRegist(buga); + sntrisBean.register(userId, buga); return ""; } catch (Exception e) { throw runtimeException(e); } } - - /**지정한 조건에 따라 과태료 대장 등록 자료 일괄 조회 목록을 조회하여 반환한다. - * @param req 과태료 대장 등록 자료 일괄 조회 조회 조건 - * @return 과태료 대장 등록 자료 일괄 조회 목록 - */ - public List getNisIndivA02List(NisIndivQuery req) { - return nisA02Mapper.selectNisIndivA02List(req); - } - - /**지정한 조건에 따라 과태료 대장 등록 자료 일괄 조회 객체들을 반환한다. - * @param req 과태료 대장 등록 자료 일괄 조회 조회 조건 - * @return 과태료 대장 등록 자료 일괄 조회 객체 목록 - */ - public List getNisIndivA02s(NisIndivQuery req) { - return nisA02Mapper.selectNisIndivA02s(req); - } - - /**지정한 조건에 따라 과태료 대장 등록 자료 상세 조회 목록을 조회하여 반환한다. - * @param req 과태료 대장 등록 자료 상세 조회 조회 조건 - * @return 과태료 대장 등록 자료 상세 조회 목록 - */ - public List getNisIndivA03List(NisIndivQuery req) { - return nisA03Mapper.selectNisIndivA03List(req); - } - - /**지정한 조건에 따라 과태료 대장 등록 자료 상세 조회 객체들을 반환한다. - * @param req 과태료 대장 등록 자료 상세 조회 조회 조건 - * @return 과태료 대장 등록 자료 상세 조회 객체 목록 - */ - public List getNisIndivA03s(NisIndivQuery req) { - return nisA03Mapper.selectNisIndivA03s(req); - } - - /**과태료 대장 등록 자료 상세 조회 정보에서 업무 적용 정보를 수정한다. - * @param nisIndivA03 과태료 대장 등록 자료 상세 조회 - * @return 저장 여부 - *
      • 저장됐으면 true
      • - *
      • 그렇지 않으면 false
      • - *
      - */ - public String createNisIndivA03(NisIndivQuery req) { - DataObject userInfo = userBean.getUserInfo(currentUser().getId()); // 1. 사용자 정보 - DataObject deptInfo = ogdpBean.getDeptStngInfo(new OgdpQuery().setDeptCd(userInfo.string("DEPT_CD"))); // 2. 부서 정보 - DataObject crdnInfo = nisA01Mapper.selectCrdnInfo(req.getCrdnId()); // 3. 세외수입 과태료대장에 연계할 단속 정보 - - LntrisA03.A03ReqDetail a03Rqst = new LntrisA03.A03ReqDetail(); - - a03Rqst.setSgbCd(userInfo.string("NSTT_CD")); // 자치단체코드 - a03Rqst.setLinkTrgtCd(req.getLinkTrgtCd()); // 연계대상코드 - a03Rqst.setLinkMngKey(req.getLinkMngKey()); // 연계관리키 시군구코드 + 단속 ID + 년월일시분초 - - String taskSeCd = crdnInfo.string("TASK_SE_CD"); - // 차세대 세외수입 연계 서비스 호출 - A01 과태료 대장 단속 정보 등록 - if (true) { //TODO:별도연계서비스여부 - return jsonCall( - deptInfo.string("NXRP_LINK_SRVC_URL") + "/intf/lntris/a03/info", - Map.of( - "taskSeCd", taskSeCd, - "msg", a03Rqst - ) - ); - } else { - LntrisA03.A03ReqDetail rd = new LntrisA03.A03ReqDetail(); - rd.setSgbCd(a03Rqst.getSgbCd()); - rd.setFinScrgAcbKey(a03Rqst.getFinScrgAcbKey()); - rd.setLinkMngKey(a03Rqst.getLinkMngKey()); - rd.setLinkTrgtCd(a03Rqst.getLinkTrgtCd()); - - A03Response res = lntrisAService.getA03(taskSeCd, rd); - return json.stringify(res); - } - } - - private String jsonCall(String url, Object data) { - HttpResponse hresp = new WebClient().post(req -> - req.uri(url) - .json(json) - .bodyData(data) - ); - return hresp.body(); - } - - // SSL 무시 ///////////////////////////////////////////////////////////////// - public void ignoreSsl() throws Exception { - HostnameVerifier hv = new HostnameVerifier() { - @Override - public boolean verify(String urlHostName, SSLSession session) { - return true; - } - }; - - trustAllHttpsCertificates(); - HttpsURLConnection.setDefaultHostnameVerifier(hv); - } - - public void trustAllHttpsCertificates() throws Exception { - TrustManager[] trustAllCerts = new TrustManager[1]; - TrustManager tm = new miTM(); - trustAllCerts[0] = tm; - SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, trustAllCerts, null); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - } - - static class miTM implements TrustManager, X509TrustManager { - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - - public boolean isServerTrusted(X509Certificate[] certs) { - return true; - } - - public boolean isClientTrusted(X509Certificate[] certs) { - return true; - } - - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException { - return; - } - - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException { - return; - } - } - // SSL 무시 ///////////////////////////////////////////////////////////////// - - public String createNisIndivB01C01(NisIndivQuery req) { - - String[] crdnIds = req.getCrdnIds(); - - String rtnMsg = "[F]"; - - List fimsVltnCodes = codeBean.getCodes("FIM004"); - List nxrpVltnCodes = codeBean.getCodes("NTR055"); - - DataObject deptStng = stngBean.getStng("dept"); - String gujesi = deptStng.string("NXRP_RGN_SE_CD"); - - for(String crdnID : crdnIds) { - DataObject crdnInfo = crdnInfoMapper.selectCrdnInfo(crdnID); - - if(crdnInfo.string("NXRP_CRDN_LINK_YN").equals("Y")) { - rtnMsg += "이미 세외수입 단속 연계 처리된 자료입니다."; - throw new RuntimeException(rtnMsg); - } - - String firstTaskSeCd = ""; - String taskSeCd = crdnInfo.string("TASK_SE_CD"); - if(firstTaskSeCd.equals("")) { - firstTaskSeCd = taskSeCd; - } - - if(!taskSeCd.equals("PVS") && !taskSeCd.equals("BPV")) { - rtnMsg += "주정차위반 또는 전용차로위반 자료만 처리 가능합니다."; - throw new RuntimeException(rtnMsg); - } - - if(!firstTaskSeCd.equals(taskSeCd)) { - rtnMsg += "과태료 구분이 동일한 자료만 처리가능합니다."; - throw new RuntimeException(rtnMsg); - } - - if(crdnInfo.number("ATCH_FILE_CNT").intValue() < 1) { - rtnMsg += "단속사진이 없습니다."; - throw new RuntimeException(rtnMsg); - } - - CmmnQuery cmmnQuery = new CmmnQuery(); - cmmnQuery.setUseYn("Y"); - cmmnQuery.setSggCd(crdnInfo.string("SGG_CD")); - cmmnQuery.setTaskSeCd(taskSeCd); - DataObject nxrpLinkInfo = taskMapper.selectTaskInfo(cmmnQuery); - if(nxrpLinkInfo == null) { - rtnMsg += "과태료 설정 정보가 없습니다."; - throw new RuntimeException(rtnMsg); - } - - String nxrpLinkSeCd = nxrpLinkInfo.string("NXRP_LINK_SE_CD"); - String nxrpLinkSeDtlSn = nxrpLinkInfo.string("NXRP_LINK_SE_DTL_SN"); - - if(!nxrpLinkSeCd.equals("B01") && !nxrpLinkSeCd.equals("C01")) { - rtnMsg += "세외수입 연계 구분 코드 설정 오류입니다."; - throw new RuntimeException(rtnMsg); - } - if(!nxrpLinkSeDtlSn.equals("01") && !nxrpLinkSeDtlSn.equals("02")) { - rtnMsg += "세외수입 연계 구분 상세 순번 설정 오류입니다."; - throw new RuntimeException(rtnMsg); - } - - String instDigit7 = currentUser().getInstitute(); - - //법정동코드 구하기 - if(!crdnInfo.string("CRDN_STDG_NM").equals("")) { - - Map stdgQuery = new HashMap<>(); - stdgQuery.put("sggCd", crdnInfo.string("SGG_CD")); - stdgQuery.put("emdNm", crdnInfo.string("CRDN_STDG_NM")); - List stdgCds = crdnStngMapper.selectStdgCdListByStdgNm(stdgQuery); - - if(stdgCds != null && stdgCds.size() == 1 && stdgCds.get(0) != null && !stdgCds.get(0).equals("")) { - crdnInfo.put("STDG_CD", stdgCds.get(0)); - } - } - - LinkFileMaker linkFileMaker = null; - if(nxrpLinkSeDtlSn.equals("01")) { - linkFileMaker = new AttachedTxtMaker(nxrpLinkSeCd, instDigit7); - if(nxrpLinkSeCd.equals("B01")) { - - ((AttachedTxtMaker)linkFileMaker).appendVltnCodeInfo(fimsVltnCodes, nxrpVltnCodes); - } - } else { - linkFileMaker = new OnlyImageMaker(nxrpLinkSeCd, instDigit7); - } - - if(!gujesi.equals("")) { - linkFileMaker.setGujesiStng(gujesi); - } - - String workPath = "files/temp/sendCrdn/"+crdnInfo.string("SGG_CD")+"/"+crdnInfo.string("CRDN_ID"); - File workFolder = new File(workPath); - if(workFolder.exists()) { - boolean del = false; - File[] lf = workFolder.listFiles(); - if(lf != null && lf.length > 0) { - for(File f : lf) { - del = f.delete(); - if(!del) { - throw new RuntimeException("[F]파일삭제오류"); - } - } - } - del = workFolder.delete(); - if(!del) { - throw new RuntimeException("[F]파일삭제오류"); - } - } - workFolder.mkdirs(); - - try { - String[] items = null; - boolean includeTxt = nxrpLinkSeDtlSn.equals("01"); - - if(taskSeCd.equals("PVS")) { - items = linkFileMaker.extractForPVS(crdnInfo,includeTxt).get(); - } else if(taskSeCd.equals("BPV")) { - items = linkFileMaker.extractForBPV(crdnInfo,includeTxt).get(); - } - - if(nxrpLinkSeDtlSn.equals("01")) { - - ((AttachedTxtMaker)linkFileMaker).writeTextFileContents(workPath, items); - - } - - FileQuery fileQuery = new FileQuery(); - fileQuery.setInfoType(Crdn.INF_TYPE); - fileQuery.setInfoKeys(crdnID); - fileQuery.setOrderBy("SRT_ORD"); - List crdnFileList = fileBean.getFileList(fileQuery); - for(int j=0; (j * @param req 발송 상세 조회 조건 * @return 발송 상세 목록 @@ -50,7 +49,6 @@ public interface SndngDtlMapper extends AbstractMapper { } List sndngDtls = selectSndngDtls(req); - return !sndngDtls.isEmpty() ? sndngDtls.get(0) : null; } @@ -60,6 +58,8 @@ public interface SndngDtlMapper extends AbstractMapper { */ List selectSndngTrgtDtlIds(SndbQuery req); + List selectSndngDetails(SndbQuery req); + /**발송 상세 정보를 등록한다. * @param params 파라미터 *
      • "sndngDtl" - 발송 상세
      • @@ -216,5 +216,4 @@ public interface SndngDtlMapper extends AbstractMapper { * @return 저장된 정보수 */ int deleteSndngDtlSvbtc(SndngDtl sndngDtl); - -} +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/sndb/service/SndngDtlService.java b/src/main/java/cokr/xit/fims/sndb/service/SndngDtlService.java index bf35b6d3..d57697ad 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/SndngDtlService.java +++ b/src/main/java/cokr/xit/fims/sndb/service/SndngDtlService.java @@ -2,10 +2,9 @@ package cokr.xit.fims.sndb.service; import java.util.List; -import cokr.xit.foundation.data.DataObject; - import cokr.xit.fims.sndb.SndbQuery; import cokr.xit.fims.sndb.SndngDtl; +import cokr.xit.foundation.data.DataObject; /**발송 상세 관리 서비스 인터페이스. * @@ -18,7 +17,6 @@ import cokr.xit.fims.sndb.SndngDtl; * */ public interface SndngDtlService { - /**지정한 조건에 따라 발송상세 목록을 조회하여 반환한다. * @param req 발송 상세 조회 조건 * @return 발송 상세 목록 @@ -43,6 +41,8 @@ public interface SndngDtlService { */ String setNxrpIndivA01List(SndngDtl sndngDtl); + String registerPreNotice(SndbQuery req); + /**지정한 조건에 따라 과태료 대장 등록 자료 상세 조회 목록을 조회하여 반환한다. * @param req 발송 상세 조회 조건 * @return 저장 여부 @@ -96,5 +96,4 @@ public interface SndngDtlService { *
      */ String removeSndbk(SndngDtl sndngDtl); - -} +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java index 82ea168b..f389faad 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java @@ -22,7 +22,6 @@ import cokr.xit.fims.levy.dao.LevyMapper; import cokr.xit.fims.nxrp.A03; import cokr.xit.fims.nxrp.NisIndivQuery; import cokr.xit.fims.nxrp.service.bean.NisIndivBean; -import cokr.xit.fims.nxrp.service.bean.SnisBean; import cokr.xit.fims.sndb.SndbQuery; import cokr.xit.fims.sndb.SndngDtl; import cokr.xit.fims.sndb.dao.SndngDtlMapper; @@ -42,32 +41,24 @@ import cokr.xit.foundation.data.DataObject; */ @Component("sndngDtlBean") public class SndngDtlBean extends AbstractBean { - /** 발송 상세 정보 DAO */ @Resource(name = "sndngDtlMapper") private SndngDtlMapper sndngDtlMapper; - /** 공시송달 대장 정보 DAO */ @Resource(name = "svbtcMapper") private SvbtcMapper svbtcMapper; - /** 전자우편 배달 결과 정보 DAO */ @Resource(name = "epostDlvrRsltMapper") private EpostDlvrRsltMapper epostDlvrRsltMapper; - /** 부과 대장 정보 DAO */ @Resource(name = "levyMapper") private LevyMapper levyMapper; - /** 단속 상태 이력 정보 Bean */ @Resource(name = "crdnSttsHstryBean") private CrdnSttsHstryBean crdnSttsHstryBean; - /** 과태료 대장 단속 정보 등록 정보 Bean */ @Resource(name = "nisIndivBean") private NisIndivBean nisIndivBean; - @Resource(name = "snisBean") - private SnisBean snisBean; /**지정한 조건에 따라 발송 상세 목록을 조회하여 반환한다. * @param req 발송 상세 조회 조건 @@ -122,47 +113,26 @@ public class SndngDtlBean extends AbstractBean { *
    */ public String setNxrpIndivA01List(SndngDtl sndngDtl) { - int rtnNocs = -1; // 처리 결과 건수 - // 발송 상세 상태 코드(SNDNG_DTL_STTS_CD) 가 처리전(00)인 자료만 처리 - if (sndngDtl.getSndngDtlSttsCd().equals("00")) { - NisIndivQuery nisIndivQuery = new NisIndivQuery(); - nisIndivQuery.setCrdnId(sndngDtl.getCrdnId()); - nisIndivQuery.setSndngDtlId(sndngDtl.getSndngDtlId()); - - nisIndivQuery.setSndngYmd(sndngDtl.getSndngYmd()); - - String a01Msg = !snisBean.isEnabled() ? - nisIndivBean.createNisIndivA01(nisIndivQuery) : - snisBean.createBu04Buga(nisIndivQuery); - - try { - ObjectMapper mapper = new ObjectMapper(); - JsonNode linkRst = mapper.readTree(a01Msg); - - // 개별시스템 연계결과코드(linkRstCd) - 000:정상, 100:검증오류(연계관리키 중복), 101:검증오류(등록 시 자료 null, 길이체크), 900:필수값누락 - if (linkRst.get("linkRstCd").asText().equals("000")) { - // resVo1 - JsonNode resVo1 = linkRst.findValue("resVo1"); - - // 발송 대장(TB_SNDNG) - 발송 상태 코드(SNDNG_DTL_STTS_CD) 수정 - SndngDtl uptSndngDtl = new SndngDtl(); - uptSndngDtl.setSndngDtlSttsCd("01"); // 발송 상태 코드(FIM050) 01:세외수입부과 - uptSndngDtl.setSndngDtlId(sndngDtl.getSndngDtlId()); // 발송 상세 ID - uptSndngDtl.setLinkTrgtCd(resVo1.get("linkTrgtCd").asText()); // 연계 대상 코드 - uptSndngDtl.setLinkMngKey(resVo1.get("linkMngKey").asText()); // 연계 관리 키 - - rtnNocs = sndngDtlMapper.updateSndngDtlSttsCd(uptSndngDtl); - if (rtnNocs != 1) { - throw new RuntimeException("세외수입 과태료대장 연계 정보를 단속 대장에 수정하지 못했습니다."); // 예외를 발생시켜서 DB Rollback - } - } - } catch (IOException e) { - throw new RuntimeException("세외수입 과태료대장 연계 작업중 오류가 발생하였습니다."); // 예외를 발생시켜서 DB Rollback - } - } - - return "[S] 작업이 정상 처리 되었습니다."; + if (!"00".equals(sndngDtl.getSndngDtlSttsCd())) + throw new RuntimeException("연계처리할 수 없는 발송정보 입니다."); + + NisIndivQuery nisIndivQuery = new NisIndivQuery(); + nisIndivQuery.setCrdnId(sndngDtl.getCrdnId()); + nisIndivQuery.setSndngDtlId(sndngDtl.getSndngDtlId()); + + nisIndivQuery.setSndngYmd(sndngDtl.getSndngYmd()); + + SndngDtl uptSndngDtl = nisIndivBean.registerNisIndivA01(nisIndivQuery); + if (uptSndngDtl != null) { + uptSndngDtl.setSndngDtlId(sndngDtl.getSndngDtlId()); // 발송 상세 ID + int affected = sndngDtlMapper.updateSndngDtlSttsCd(uptSndngDtl); + if (affected == 1) + return "[S] 작업이 정상 처리 되었습니다."; + else + throw new RuntimeException("세외수입 과태료대장 연계 정보를 단속 대장에 수정하지 못했습니다."); + } else + throw new RuntimeException("세외수입 과태료대장 연계 작업중 오류가 발생했습니다."); } /**발송 상세 정보를 세외수입 과태료대장 상세 조회 정보를 조회하여 발송 상세 정보를 수정한다. @@ -173,12 +143,8 @@ public class SndngDtlBean extends AbstractBean { *
*/ public String getNxrpIndivA03List(SndngDtl sndngDtl) { - // 변수 선언 - boolean rtnScs = false; // DB 처리 결과 - int rtnNocs = -1; // 처리 결과 건수 - // 발송 상세 상태 코드(SNDNG_DTL_STTS_CD) 가 세외수입부과(01)인 자료만 처리 - if (sndngDtl.getSndngDtlSttsCd().equals("01")) { + if ("01".equals(sndngDtl.getSndngDtlSttsCd())) { NisIndivQuery nisIndivQuery = new NisIndivQuery(); nisIndivQuery.setCrdnId(sndngDtl.getCrdnId()); nisIndivQuery.setSndngDtlId(sndngDtl.getSndngDtlId()); @@ -312,12 +278,12 @@ public class SndngDtlBean extends AbstractBean { SndngDtl uptSndngDtl = new SndngDtl(); uptSndngDtl.setSndngDtlId(sndngDtl.getSndngDtlId()); // 발송 상세 ID - if (Integer.valueOf(sndngDtl.getSndngDtlSttsCd()) >= 3) { + if (toInt(sndngDtl.getSndngDtlSttsCd()) >= 3) { uptSndngDtl.setSndngDtlSttsCd(sndngDtl.getSndngDtlSttsCd()); } else { uptSndngDtl.setSndngDtlSttsCd("02"); // 발송 상태 코드(FIM050) 02:가상계좌취득 } - if (a03.getPyrSeCd().equals("01")) { + if ("01".equals(a03.getPyrSeCd())) { uptSndngDtl.setRcpnBrdt(a03.getPyrNo().substring(0, 6)); // 수령인 생년월일 } uptSndngDtl.setRcpnNm(a03.getPyrNm()); // 수령인 명 @@ -328,10 +294,10 @@ public class SndngDtlBean extends AbstractBean { uptSndngDtl.setLevyNo(a03.getRsveItem1().substring(23, 29)); // 부과 번호 uptSndngDtl.setLevyYmd(a03.getOpnSbmsnTermBgngYmd()); // 부과 일자 uptSndngDtl.setDudtYmd(a03.getOpnSbmsnTermEndYmd()); // 납기 일자 - uptSndngDtl.setFfnlgAmt(Integer.parseInt(a03.getFinScrgAmt())); // 과태료 금액 - uptSndngDtl.setPcptax(Integer.parseInt(a03.getFinScrgAmt()) - Integer.parseInt(a03.getBfRdtAmt())); // 본세 + uptSndngDtl.setFfnlgAmt(toInt(a03.getFinScrgAmt())); // 과태료 금액 + uptSndngDtl.setPcptax(toInt(a03.getFinScrgAmt()) - toInt(a03.getBfRdtAmt())); // 본세 uptSndngDtl.setAdamt(0); // 가산금 - uptSndngDtl.setLastAmt(Integer.parseInt(a03.getFinScrgAmt()) - Integer.parseInt(a03.getBfRdtAmt())); // 최종 금액 + uptSndngDtl.setLastAmt(toInt(a03.getFinScrgAmt()) - toInt(a03.getBfRdtAmt())); // 최종 금액 uptSndngDtl.setDudtAftrAmt(0); // 납기 후 금액 uptSndngDtl.setTaxNo(a03.getRsveItem1()); // 납세 번호 uptSndngDtl.setEpayno(a03.getEpayNo()); // 전자납부번호 @@ -376,10 +342,9 @@ public class SndngDtlBean extends AbstractBean { uptSndngDtl.setBankNm20(a03.getVtlacBankNm20()); // 은행 명20 uptSndngDtl.setVrActno20(a03.getVrActno20()); // 가상 계좌번호20 - rtnNocs = sndngDtlMapper.updateSndngDtlNxrpA03(uptSndngDtl); - if (rtnNocs != 1) { + int affected = sndngDtlMapper.updateSndngDtlNxrpA03(uptSndngDtl); + if (affected != 1) throw new RuntimeException("세외수입 연계 정보를 발송 상세에 수정하지 못했습니다."); // 예외를 발생시켜서 DB Rollback - } // 단속, 부과 대장 조회 DataObject crdnLevyInfo = sndngDtlMapper.selectCrdnLevy(sndngDtl.getCrdnId()); @@ -389,8 +354,8 @@ public class SndngDtlBean extends AbstractBean { crdn.setCrdnId(crdnLevyInfo.string("CRDN_ID")); // 단속 ID crdn.setNxrpAcbKey(a03.getFinScrgAcbKey()); // 세외수입 대장 키 - rtnNocs = sndngDtlMapper.updateCrdnNxrpAcbKey(crdn); - if (rtnNocs != 1) { + affected = sndngDtlMapper.updateCrdnNxrpAcbKey(crdn); + if (affected != 1) { throw new RuntimeException("단속 대장에 세외수입 대장키 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback } @@ -414,15 +379,15 @@ public class SndngDtlBean extends AbstractBean { levy.setLevyYmd(a03.getOpnSbmsnTermBgngYmd()); // 부과 일자 levy.setFrstDudtYmd(a03.getOpnSbmsnTermEndYmd()); // 최초 납기 일자 levy.setDudtYmd(a03.getOpnSbmsnTermEndYmd()); // 납기 일자 - levy.setFfnlgAmt(Integer.parseInt(a03.getFinScrgAmt())); // 과태료 금액 - levy.setLevyPcptax(Integer.parseInt(a03.getFinScrgAmt()) - Integer.parseInt(a03.getBfRdtAmt())); // 부과 본세 + levy.setFfnlgAmt(toInt(a03.getFinScrgAmt())); // 과태료 금액 + levy.setLevyPcptax(toInt(a03.getFinScrgAmt()) - toInt(a03.getBfRdtAmt())); // 부과 본세 levy.setLevyAdamt(0); // 부과 가산금 levy.setIspyInt(0); // 분납 이자 levy.setRcvmtPcptax(0); // 수납 본세 levy.setRcvmtAdamt(0); // 수납 가산금 levy.setRdamtPcptax(0); // 감액 본세 levy.setRdamtAdamt(0); // 감액 가산금 - levy.setLastAmt(Integer.parseInt(a03.getFinScrgAmt()) - Integer.parseInt(a03.getBfRdtAmt())); // 최종 금액 + levy.setLastAmt(toInt(a03.getFinScrgAmt()) - toInt(a03.getBfRdtAmt())); // 최종 금액 levy.setDudtAftrAmt(0); // 납기 후 금액 // levy.setTxtnThing(a03.getVhrno()); // 과세 물건 -> 값이 넘어오지 않는다.. 차세대 연계 확인 요청이 필요하다. levy.setTxtnThing(crdnLevyInfo.string("VHRNO")); // 과세 물건 @@ -474,10 +439,10 @@ public class SndngDtlBean extends AbstractBean { levy.setBankNm20(a03.getVtlacBankNm20()); // 은행 명20 levy.setVrActno20(a03.getVrActno20()); // 가상 계좌번호20 - if (crdnLevyInfo.string("LEVY_ID").equals("")) { // 부과 ID가 없다면 + if (isEmpty(crdnLevyInfo.get("LEVY_ID"))) { // 부과 ID가 없다면 // 부과(TB_LEVY) 대장을 등록한다. - rtnNocs = levyMapper.insertLevy(levy); - if (rtnNocs != 1) { + affected = levyMapper.insertLevy(levy); + if (affected != 1) { throw new RuntimeException("부과대장 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback } @@ -488,27 +453,25 @@ public class SndngDtlBean extends AbstractBean { crdnSttsHstry.setBfrSttsChgDt(crdnLevyInfo.string("CRDN_STTS_CHG_DT")); // 이전 단속 상태 변경 일시 crdnSttsHstry.setCrdnSttsCd("23"); // 단속 상태 코드(FIM010) - 23:감경부과 + boolean rtnScs = false; // DB 처리 결과 if (toInt(crdnLevyInfo.get("CRDN_STTS_CD")) >= 1 && toInt(crdnLevyInfo.get("CRDN_STTS_CD")) <= 22 ) { // 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다. rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry); - if (!rtnScs) { + if (!rtnScs) throw new RuntimeException("감경부과 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback - } } else { // 단속상태이력(TB_CRDN_STTS_HSTRY) 대장을 등록한다. rtnScs = crdnSttsHstryBean.create(crdnSttsHstry); - if (!rtnScs) { + if (!rtnScs) throw new RuntimeException("감경부과 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback - } } } else { levy.setLevyId(crdnLevyInfo.string("LEVY_ID")); // 부과(TB_LEVY) 대장을 수정한다. - rtnNocs = levyMapper.updateLevy(levy); - if (rtnNocs != 1) { + affected = levyMapper.updateLevy(levy); + if (affected != 1) throw new RuntimeException("부과대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback - } } // 수납 정보 확인하여 발송(TB_SNDNG) - 발송 상태 코드(SNDNG_DTL_STTS_CD) 수정 @@ -517,8 +480,8 @@ public class SndngDtlBean extends AbstractBean { uptSndngDtl.setSndngRcvmtCd("1"); // 발송 수납 코드(FIM051) 1:수납 // 발송(TB_SNDNG) 대장을 수정한다. - rtnNocs = sndngDtlMapper.updateSndngDtlSttsCd(uptSndngDtl); - if (rtnNocs != 1) { + affected = sndngDtlMapper.updateSndngDtlSttsCd(uptSndngDtl); + if (affected != 1) { throw new RuntimeException("세외수입 연계 정보를 발송 상세에 수정하지 못했습니다."); // 예외를 발생시켜서 DB Rollback } } @@ -544,15 +507,9 @@ public class SndngDtlBean extends AbstractBean { * @return 발송상세 미배달 정보 */ public DataObject getSndbkInfo(SndbQuery req) { - DataObject info = new DataObject(); - - if (req.getCallPurpose().equals("create")) { - info = sndngDtlMapper.selectSndngDtlInfo(req); - } else { - info = sndngDtlMapper.selectSndbkInfo(req); - } - - return info; + return "create".equals(req.getCallPurpose()) ? + sndngDtlMapper.selectSndngDtlInfo(req) : + sndngDtlMapper.selectSndbkInfo(req); } /**발송 상세 목록의 반송 정보를 등록한다. @@ -563,37 +520,24 @@ public class SndngDtlBean extends AbstractBean { * */ public String createSndbkList(SndbQuery req) { - // 변수 선언 - String rtnMsg = ""; // 처리 결과 메시지 - List sndngDtlList = sndngDtlMapper.selectSndngTrgtDtlIds(req); - - // 조회 건수 확인 - if (sndngDtlList == null || sndngDtlList.size() < 1) { - rtnMsg = "[F] 작업 중 대상 자료가 존재하지 않습니다."; - return rtnMsg; - } + if (isEmpty(sndngDtlList)) + return "[F] 작업 중 대상 자료가 존재하지 않습니다."; // 반송 정보를 등록한다. - for (int iLoop = 0; iLoop < sndngDtlList.size(); iLoop++) { + for (int i = 0; i < sndngDtlList.size(); i++) { // 반송 내역 조회 - DataObject sndbkInfo = sndngDtlMapper.selectSndbkInfo(new SndbQuery().setSndngDtlId(sndngDtlList.get(iLoop).string("SNDNG_DTL_ID"))); + DataObject sndbkInfo = sndngDtlMapper.selectSndbkInfo(new SndbQuery().setSndngDtlId(sndngDtlList.get(i).string("SNDNG_DTL_ID"))); // 반송 등록이 가능한지 확인. - if (!("03,05".contains(sndbkInfo.string("SNDNG_DTL_STTS_CD")))) { - rtnMsg = "[F] 반송 등록 대상자료가 아닙니다."; - return rtnMsg; - } + if (!("03,05".contains(sndbkInfo.string("SNDNG_DTL_STTS_CD")))) + return "[F] 반송 등록 대상자료가 아닙니다."; // 등기 번호가 있는지 확인 - if (sndbkInfo.string("RG_NO").equals("")) { - rtnMsg = "[F] 등기번호가 존재하지 않습니다."; - return rtnMsg; - } + if (sndbkInfo.string("RG_NO").equals("")) + return "[F] 등기번호가 존재하지 않습니다."; // 등기 번호가 13자리인지 확인 - if (sndbkInfo.string("RG_NO").length() != 13) { - rtnMsg = "[F] 등기번호 자릿수(13)가 맞지 않습니다."; - return rtnMsg; - } + if (sndbkInfo.string("RG_NO").length() != 13) + return "[F] 등기번호 자릿수(13)가 맞지 않습니다."; // 전자우편 배달 결과 조회 EpostQuery epostQuery = new EpostQuery(); @@ -602,10 +546,8 @@ public class SndngDtlBean extends AbstractBean { DataObject epostDlvrRsltInfo = epostDlvrRsltMapper.selectEpostDlvrRsltInfo(epostQuery); // 조회 건수 확인 - if (epostDlvrRsltInfo == null) { - rtnMsg = "[F] 반송 자료가 존재하지 않습니다."; - return rtnMsg; - } + if (epostDlvrRsltInfo == null) + return "[F] 반송 자료가 존재하지 않습니다."; // 발송 상세(TB_SNDNG_DTL) 대장에 반송 정보를 등록한다. SndngDtl sndngDtl = new SndngDtl(); @@ -628,7 +570,7 @@ public class SndngDtlBean extends AbstractBean { } // 발송상세(TB_SNDNG_DTL)에 반송 정보를 등록한다. - rtnMsg = createSndbk(sndngDtl); + String rtnMsg = createSndbk(sndngDtl); // 메시지 확인 if (!rtnMsg.contains("[S]")) { throw new RuntimeException(rtnMsg); // 예외를 발생시켜서 DB Rollback @@ -648,9 +590,8 @@ public class SndngDtlBean extends AbstractBean { public String createSndbk(SndngDtl sndngDtl) { // 발송상세(TB_SNDNG_DTL)에 반송 정보를 등록한다. int rtnNocs = sndngDtlMapper.createSndbk(sndngDtl); - if (rtnNocs < 1) { + if (rtnNocs < 1) throw new RuntimeException("발송상세의 반송 정보 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback - } return "[S] 작업이 정상 처리 되었습니다."; } @@ -665,9 +606,8 @@ public class SndngDtlBean extends AbstractBean { public String updateSndbk(SndngDtl sndngDtl) { // 발송상세(TB_SNDNG_DTL)에 반송 정보를 등록한다. int rtnNocs = sndngDtlMapper.updateSndbk(sndngDtl); - if (rtnNocs != 1) { + if (rtnNocs != 1) throw new RuntimeException("발송상세의 반송 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback - } return "[S] 작업이 정상 처리 되었습니다."; } @@ -680,10 +620,6 @@ public class SndngDtlBean extends AbstractBean { * */ public String removeSndbk(SndngDtl sndngDtl) { - // 변수 선언 - int rtnNocs = -1; // 처리 결과 건수 - String rtnMsg = "[F] "; // 처리 결과 메시지 - // 반송 내역 조회 SndbQuery req = new SndbQuery(); req.setSndngDtlId(sndngDtl.getSndngDtlId()); @@ -692,20 +628,17 @@ public class SndngDtlBean extends AbstractBean { DataObject sndbkInfo = sndngDtlMapper.selectSndbkInfo(req); // 반송 삭제가 가능한지 확인 - if (sndbkInfo == null) { - rtnMsg = "[F] 작업 중 대상 자료가 존재하지 않습니다."; - return rtnMsg; - } + if (sndbkInfo == null) + return "[F] 작업 중 대상 자료가 존재하지 않습니다."; sndngDtl.setDlvrYmd(sndbkInfo.string("BFR_DLVR_YMD")); sndngDtl.setDlvrTm(sndbkInfo.string("BFR_DLVR_TM")); sndngDtl.setSndngDtlSttsCd(sndbkInfo.string("BFR_SNDNG_DTL_STTS_CD")); // 발송 상세(TB_SNDNG_DTL) 대장에 반송 정보를 삭제한다. - rtnNocs = sndngDtlMapper.deleteSndbk(sndngDtl); - if (rtnNocs < 1) { + int rtnNocs = sndngDtlMapper.deleteSndbk(sndngDtl); + if (rtnNocs < 1) throw new RuntimeException("발송상세의 반송 정보 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback - } return "[S] 작업이 정상 처리 되었습니다."; } @@ -728,11 +661,9 @@ public class SndngDtlBean extends AbstractBean { public String removeSndngDtlSvbtc(SndngDtl sndngDtl) { // 발송 상세(TB_SNDNG_DTL) 대장에 공시송달 정보를 삭제한다. int rtnNocs = sndngDtlMapper.deleteSndngDtlSvbtc(sndngDtl); - if (rtnNocs != 1) { + if (rtnNocs != 1) throw new RuntimeException("발송상세의 공시송달 정보 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback - } return "[S] 작업이 정상 처리 되었습니다."; } - -} +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlServiceBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlServiceBean.java index 14655f42..9db3154f 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlServiceBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlServiceBean.java @@ -6,12 +6,12 @@ import javax.annotation.Resource; import org.springframework.stereotype.Service; -import cokr.xit.foundation.component.AbstractServiceBean; -import cokr.xit.foundation.data.DataObject; - +import cokr.xit.fims.nxrp.service.bean.SnisBean; import cokr.xit.fims.sndb.SndbQuery; import cokr.xit.fims.sndb.SndngDtl; import cokr.xit.fims.sndb.service.SndngDtlService; +import cokr.xit.foundation.component.AbstractServiceBean; +import cokr.xit.foundation.data.DataObject; /**발송 상세 서비스 구현체. * @@ -25,10 +25,11 @@ import cokr.xit.fims.sndb.service.SndngDtlService; */ @Service("sndngDtlService") public class SndngDtlServiceBean extends AbstractServiceBean implements SndngDtlService { - /** 발송 상세 정보 Bean */ @Resource(name = "sndngDtlBean") private SndngDtlBean sndngDtlBean; + @Resource(name = "snisBean") + private SnisBean snisBean; /** 공시송달 대장 정보 Bean */ @Resource(name = "svbtcBean") @@ -54,6 +55,12 @@ public class SndngDtlServiceBean extends AbstractServiceBean implements SndngDtl return sndngDtlBean.setNxrpIndivA01List(sndngDtl); } + @Override + public String registerPreNotice(SndbQuery req) { + snisBean.registerPreNotices(req); + return null; + } + @Override public String getNxrpIndivA03List(SndngDtl sndngDtl) { return sndngDtlBean.getNxrpIndivA03List(sndngDtl); @@ -88,5 +95,4 @@ public class SndngDtlServiceBean extends AbstractServiceBean implements SndngDtl public String removeSndbk(SndngDtl sndngDtl) { return sndngDtlBean.removeSndbk(sndngDtl); } - -} +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java b/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java index 481e47b3..a2fbe390 100644 --- a/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java +++ b/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java @@ -56,7 +56,7 @@ import cokr.xit.fims.task.Task; import cokr.xit.foundation.UserInfo; import cokr.xit.foundation.data.DataObject; -/**발송 대장 서비스의 웹 컨트롤러 +/**발송대장 서비스의 웹 컨트롤러 * *

상세 설명: * @@ -127,13 +127,13 @@ public class Sndb01Controller extends ApplicationController { , createServiceByPublicNotice = "/260/create.do" // 공시송달 등록 , updateServiceByPublicNotice = "/260/update.do" // 공시송달 수정 - , setNonTaxReceiptIndividualA01List = "/991/nxrpA01List.do" // 과태료 대장 단속 정보 등록(실시간) A01 - , getNonTaxReceiptIndividualA03List = "/991/nxrpA03List.do" // 과태료 대장 등록 자료 상세 조회(실시간) A03 + , setNonTaxReceiptIndividualA01List = "/991/nxrpA01List.do" // 과태료대장 단속정보 등록(실시간) A01 + , getNonTaxReceiptIndividualA03List = "/991/nxrpA03List.do" // 과태료대장 상세조회(실시간) A03 , getNonTaxReceiptSpecialB01List = "/991/nxrpB01List.do" // 체납상세세목정보(실시간) B01 ; } - /**발송 대장 서비스*/ + /**발송대장 서비스*/ @Resource(name="sndngService") private SndngService sndngService; /**발송 상세 서비스*/ @@ -190,7 +190,7 @@ public class Sndb01Controller extends ApplicationController { /**계고장 발송 대상 목록을 조회하여 반환한다. * {@link SndngService#getSndngList(SndngQuery)} 참고 - * @param req 발송 대장 조회 조건 + * @param req 발송대장 조회 조건 * @return jsonView *

 {
      *     "wrngSndngTrgtList": [계고장 발송 대상 목록]
@@ -256,7 +256,7 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("계고장 발송 대상").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("계고장발송대상" + "_목록_" + dateTime + ".xlsx"));
@@ -271,7 +271,7 @@ public class Sndb01Controller extends ApplicationController {
      * }
*/ @Task - @RequestMapping(name="계고장 발송 대상 상세 조회", value=METHOD_URL.getWarningTargetInfo) + @RequestMapping(name="계고장 발송 대상 상세조회", value=METHOD_URL.getWarningTargetInfo) public ModelAndView getWarningTargetInfo(HttpServletRequest hReq, SndbQuery req) { ModelAndView mav = getWarningTargetList(req); @@ -295,8 +295,8 @@ public class Sndb01Controller extends ApplicationController { return mav; } - /**계도장 발송 대상을 조회하여 발송 대장에 등록한다. - * @param req 계도장 발송 대상 조회, sndng 발송 대장 + /**계도장 발송 대상을 조회하여 발송대장에 등록한다. + * @param req 계도장 발송 대상 조회, sndng 발송대장 * @return jsonView *
 {
      *     "saved": 등록되었으면 true, 그렇지 않으면 false
@@ -331,7 +331,7 @@ public class Sndb01Controller extends ApplicationController {
 
     /**계도장 발송 현황 목록을 조회하여 반환한다.
      * {@link SndngService#getWarningSendingList(SndngQuery)} 참고
-     * @param req 발송 대장 조회 조건
+     * @param req 발송대장 조회 조건
      * @return jsonView
      * 
 {
      *     "sndngList": [계도장 발송 현황 목록]
@@ -381,7 +381,7 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("계고장 발송 현황").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("계고장발송현황" + "_목록_" + dateTime + ".xlsx"));
@@ -422,7 +422,7 @@ public class Sndb01Controller extends ApplicationController {
 
     /**계도장 발송 현황 - 발송상세 목록을 조회하여 반환한다.
      * {@link SndngService#getSndngList(SndngQuery)} 참고
-     * @param req 발송 대장 조회 조건
+     * @param req 발송대장 조회 조건
      * @return jsonView
      * 
 {
      *     "sndngDtlList": [발송상세 목록]
@@ -481,27 +481,27 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("계도장 발송 상세").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("계도장 발송상세" + "_목록_" + dateTime + ".xlsx"));
         }
     }
 
-    /**지정한 계도장 발송 대장을 제거한다.
-     * @param sndng 발송 대장
+    /**지정한 계도장 발송대장을 제거한다.
+     * @param sndng 발송대장
      * @return jsonView
      * 
 {
      *     "saved": 등록되었으면 true, 그렇지 않으면 false
      * }
*/ @Task - @RequestMapping(name="계고장 발송 대장 제거", value=METHOD_URL.removeWarningSending) + @RequestMapping(name="계고장 발송대장 제거", value=METHOD_URL.removeWarningSending) public ModelAndView removeWarningSending(Sndng sndng) { String rtnMsg = ""; // 발송 ID 단건 삭제 - if (sndng.getSndngIds() == null || sndng.getSndngIds().length < 1) { + if (isEmpty(sndng.getSndngIds())) { rtnMsg = sndngService.removeWrngSndng(sndng); } else { // 발송 IDs 만큼 발송 삭제 반복.. @@ -544,7 +544,7 @@ public class Sndb01Controller extends ApplicationController { /**사전통지 발송 대상 목록을 조회하여 반환한다. * {@link SndngService#getSndngList(SndngQuery)} 참고 - * @param req 발송 대장 조회 조건 + * @param req 발송대장 조회 조건 * @return jsonView *
 {
      *     "sndngList": [사전통지 발송 대상 목록]
@@ -608,7 +608,7 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("사전통지 발송 대상").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("사전통지발송대상" + "_목록_" + dateTime + ".xlsx"));
@@ -623,7 +623,7 @@ public class Sndb01Controller extends ApplicationController {
      * }
*/ @Task - @RequestMapping(name="사전통지 발송 대상 상세 조회", value=METHOD_URL.getAdvanceNoticeTargetInfo) + @RequestMapping(name="사전통지 발송 대상 상세조회", value=METHOD_URL.getAdvanceNoticeTargetInfo) public ModelAndView getAdvanceNoticeTargetInfo(HttpServletRequest hReq, SndbQuery req) { ModelAndView mav = getAdvanceNoticeTargetList(req); @@ -691,7 +691,7 @@ public class Sndb01Controller extends ApplicationController { /**사전통지 발송 현황 목록을 조회하여 반환한다. * {@link SndngService#getSndngList(SndngQuery)} 참고 - * @param req 발송 대장 조회 조건 + * @param req 발송대장 조회 조건 * @return jsonView *
 {
      *     "sndngList": [사전통지 발송 현황 목록]
@@ -741,27 +741,27 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("사전통지 발송 현황").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("사전통지발송현황" + "_목록_" + dateTime + ".xlsx"));
         }
     }
 
-    /**지정한 사전통지 발송 대장을 제거한다.
-     * @param sndng 발송 대장
+    /**지정한 사전통지 발송대장을 제거한다.
+     * @param sndng 발송대장
      * @return jsonView
      * 
 {
      *     "saved": 삭제되었으면 true, 그렇지 않으면 false
      * }
*/ @Task - @RequestMapping(name="사전통지 발송 대장 제거", value=METHOD_URL.removeAdvanceNoticeSending) + @RequestMapping(name="사전통지 발송대장 제거", value=METHOD_URL.removeAdvanceNoticeSending) public ModelAndView removeAdvanceNoticeSending(Sndng sndng) { String rtnMsg = ""; // 발송 ID 단건 삭제 - if (sndng.getSndngIds() == null || sndng.getSndngIds().length < 1) { + if (isEmpty(sndng.getSndngIds())) { rtnMsg = sndngService.removeAdvntceSndng(sndng); } else { // 발송 IDs 만큼 발송 삭제 반복.. @@ -816,7 +816,7 @@ public class Sndb01Controller extends ApplicationController { /**사전통지 발송 현황 - 발송상세 목록을 조회하여 반환한다. * {@link SndngService#getSndngList(SndngQuery)} 참고 - * @param req 발송 대장 조회 조건 + * @param req 발송대장 조회 조건 * @return jsonView *
 {
      *     "sndngDtlList": [발송상세 목록]
@@ -882,7 +882,7 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("사전통지 발송 상세").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("사전통지 발송상세" + "_목록_" + dateTime + ".xlsx"));
@@ -913,7 +913,7 @@ public class Sndb01Controller extends ApplicationController {
 
     /**고지서 발송 대상 목록을 조회하여 반환한다.
      * {@link SndngService#getSndngList(SndngQuery)} 참고
-     * @param req 발송 대장 조회 조건
+     * @param req 발송대장 조회 조건
      * @return jsonView
      * 
 {
      *     "sndngList": [사전통지 발송 대상 목록]
@@ -977,7 +977,7 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("사전통지 발송 대상").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("사전통지발송대상" + "_목록_" + dateTime + ".xlsx"));
@@ -1017,7 +1017,7 @@ public class Sndb01Controller extends ApplicationController {
      * }
*/ @Task - @RequestMapping(name="고지서 발송 대장 등록", value=METHOD_URL.createNoticeSheetSendingList) + @RequestMapping(name="고지서 발송대장 등록", value=METHOD_URL.createNoticeSheetSendingList) public ModelAndView createNoticeSheetSendingList(SndbQuery req, Sndng sndng) { String rtnMsg = sndngService.createNhtSndngList(req, sndng); @@ -1047,7 +1047,7 @@ public class Sndb01Controller extends ApplicationController { /**고지서 발송 현황 목록을 조회하여 반환한다. * {@link SndngService#getSndngList(SndngQuery)} 참고 - * @param req 발송 대장 조회 조건 + * @param req 발송대장 조회 조건 * @return jsonView *
 {
      *     "sndngList": [고지서 발송 현황 목록]
@@ -1097,27 +1097,27 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("고지서 발송 현황").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("고지서발송현황" + "_목록_" + dateTime + ".xlsx"));
         }
     }
 
-    /****지정한 고지서 발송 대장을 제거한다.
-     * @param sndng 발송 대장
+    /****지정한 고지서 발송대장을 제거한다.
+     * @param sndng 발송대장
      * @return jsonView
      * 
 {
      *     "saved": 저장되었으면 true, 그렇지 않으면 false
      * }
*/ @Task - @RequestMapping(name="고지서 발송 대장 삭제", value=METHOD_URL.removeNoticeSheetSending) + @RequestMapping(name="고지서 발송대장 삭제", value=METHOD_URL.removeNoticeSheetSending) public ModelAndView removeNoticeSheetSending(Sndng sndng) { String rtnMsg = ""; // 발송(sndngId) 단건 삭제 - if (sndng.getSndngIds() == null || sndng.getSndngIds().length < 1) { + if (isEmpty(sndng.getSndngIds())) { rtnMsg = sndngService.removeSndng(sndng); } else { // 발송 IDs 만큼 삭제 반복.. @@ -1172,7 +1172,7 @@ public class Sndb01Controller extends ApplicationController { /**고지서 발송 현황 - 발송상세 목록을 조회하여 반환한다. * {@link SndngService#getSndngList(SndngQuery)} 참고 - * @param req 발송 대장 조회 조건 + * @param req 발송대장 조회 조건 * @return jsonView *
 {
      *     "sndngDtlList": [발송상세 목록]
@@ -1238,7 +1238,7 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("고지서 발송 상세").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("고지서발송상세" + "_목록_" + dateTime + ".xlsx"));
@@ -1285,7 +1285,7 @@ public class Sndb01Controller extends ApplicationController {
 
     /**발송 상세 대장 목록을 조회하여 반환한다
      * {@link SndngService#getSndngList(SndngQuery)} 참고
-     * @param req 발송 대장 조회 조건
+     * @param req 발송대장 조회 조건
      * @return jsonView
      * 
 {
      *     "sndngDtlList": [발송상세 목록]
@@ -1351,7 +1351,7 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("사전통지 발송 상세").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("발송 상세" + "_목록_" + dateTime + ".xlsx"));
@@ -1422,7 +1422,7 @@ public class Sndb01Controller extends ApplicationController {
         String rtnMsg = "";
 
         // 발송상세의 반송 정보 삭제
-        if (sndngDtl.getSndngDtlIds() == null || sndngDtl.getSndngDtlIds().length < 1) {
+        if (isEmpty(sndngDtl.getSndngDtlIds())) {
             rtnMsg = sndngDtlService.removeSndbk(sndngDtl);
         } else {
             // 발송상세 IDs 만큼 반송 삭제 반복..
@@ -1463,7 +1463,7 @@ public class Sndb01Controller extends ApplicationController {
 
     /**반송 현황 목록을 조회하여 반환한다.
      * {@link SndngService#getSndngList(SndngQuery)} 참고
-     * @param req 발송 대장 조회 조건
+     * @param req 발송대장 조회 조건
      * @return jsonView
      * 
 {
      *     "sndngList": [반송 현황 목록]
@@ -1527,7 +1527,7 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("반송현황").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("반송현황" + "_목록_" + dateTime + ".xlsx"));
@@ -1547,7 +1547,7 @@ public class Sndb01Controller extends ApplicationController {
         DataObject info = sndngDtlService.getSndbkInfo(req);
 
         // 등록을 호출하였지만 등록된 미배달 사유가 있는지 확인.
-        if (req.getCallPurpose().equals("create") && !info.string("UNDLVR_RSN_NM").equals("")) {
+        if ("create".equals(req.getCallPurpose()) && !isEmpty(info.get("UNDLVR_RSN_NM"))) {
             return new ModelAndView("jsonView")
             	.addObject("pageName", "sndb01230")
                 .addObject("rtnMsg", "이미 등록된 미배달 사유가 있습니다.");
@@ -1589,7 +1589,7 @@ public class Sndb01Controller extends ApplicationController {
 
     /**공시송달 현황 목록을 조회하여 반환한다.
      * {@link SndngService#getSndngList(SndngQuery)} 참고
-     * @param req 발송 대장 조회 조건
+     * @param req 발송대장 조회 조건
      * @return jsonView
      * 
 {
      *     "sndngList": [공시송달 현황 목록]
@@ -1638,7 +1638,7 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("공시송달현황").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                     .addObject("download", xlsx.getDownloadable().setFilename("공시송달현황" + "_목록_" + dateTime + ".xlsx"));
@@ -1679,7 +1679,7 @@ public class Sndb01Controller extends ApplicationController {
 
     /**공시송달 발송 현황 - 공시송달 상세 목록을 조회하여 반환한다.
      * {@link SndngService#getSndngList(SndngQuery)} 참고
-     * @param req 발송 대장 조회 조건
+     * @param req 발송대장 조회 조건
      * @return jsonView
      * 
 {
      *     "sndngDtlList": [공시송달 상세 목록]
@@ -1745,7 +1745,7 @@ public class Sndb01Controller extends ApplicationController {
 
             xlsx.cell(0, 0).value("공시송달 상세").value(center).merge(0, cellDefs.size() - 1)
                 .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
-                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
+                .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if (i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
 
             return new ModelAndView("downloadView")
                 .addObject("download", xlsx.getDownloadable().setFilename("공시송달상세" + "_목록_" + dateTime + ".xlsx"));
@@ -1784,7 +1784,7 @@ public class Sndb01Controller extends ApplicationController {
      * }
*/ @Task - @RequestMapping(name="공시송달 정보 상세 조회", value=METHOD_URL.getServiceByPublicNoticeInfo) + @RequestMapping(name="공시송달 정보 상세조회", value=METHOD_URL.getServiceByPublicNoticeInfo) public ModelAndView getServiceByPublicNoticeInfo(HttpServletRequest hReq, SndbQuery req) { boolean json = jsonResponse(); @@ -1857,7 +1857,7 @@ public class Sndb01Controller extends ApplicationController { public ModelAndView removeServiceByPublicNotice(Svbtc svbtc) { String rtnMsg = ""; - if (svbtc.getSvbtcIds() == null || svbtc.getSvbtcIds().length < 1) { + if (isEmpty(svbtc.getSvbtcIds())) { rtnMsg = svbtcService.removeSvbtc(svbtc); } else { // 공시송달 Ids 만큼 삭제 반복.. @@ -1911,7 +1911,7 @@ public class Sndb01Controller extends ApplicationController { } List dataObjectList = new ArrayList(); - if(crdnIds.length == 1 && crdnIds[0].equals("sample")) { + if (crdnIds.length == 1 && crdnIds[0].equals("sample")) { DataObject sample = new Advntce().createSampleData(); dataObjectList.add(sample); } else { @@ -1919,7 +1919,7 @@ public class Sndb01Controller extends ApplicationController { sprtQuery.setCrdnIds(crdnIds); dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery); - for(int i=0; i < dataObjectList.size(); i++) { + for (int i = 0; i < dataObjectList.size(); i++) { DataObject dataObject = dataObjectList.get(i); String crdnId = dataObject.string("CRDN_ID"); @@ -1929,13 +1929,15 @@ public class Sndb01Controller extends ApplicationController { List fileInfoList = fileBean.getFileList(fileQuery); if (fileInfoList != null && fileInfoList.size() > 0) { - for (int j=0; j mosSet = mediaBean.getMosaicList(fileInfoList.get(j).string("FILE_ID")); + List mosSet = mediaBean.getMosaicList(fileID); if (mosSet != null && !mosSet.isEmpty()) { - dataObject.set("MOS"+fileInfoList.get(j).string("FILE_ID"), mosSet); + dataObject.set("MOS"+fileID, mosSet); } } } @@ -1956,10 +1958,7 @@ public class Sndb01Controller extends ApplicationController { otptStngQuery.setTaskSeCd(taskSeCd); otptStngQuery.setSndngSeCd("02"); otptStngQuery.setPaperSeCd(paperSeCd); - DataObject otptBscStng = otptStngMapper.selectOtptBscStng(otptStngQuery); - if(otptBscStng == null) { - otptBscStng = new DataObject(); - } + DataObject otptBscStng = ifEmpty(otptStngMapper.selectOtptBscStng(otptStngQuery), DataObject::new); //출력 요소별 설정 List otptArtclStngList = otptStngMapper.selectOtptArtclStngList(otptStngQuery); @@ -1968,7 +1967,7 @@ public class Sndb01Controller extends ApplicationController { DataObject deptStngInfo = stngBean.getStng("dept"); // Map globalVariable = printOption.getGlobalVariable(); - if(globalVariable == null) { + if (globalVariable == null) { globalVariable = new HashMap(); } globalVariable.put("offcsFilePath", sggStngInfo.string("OFFCS_FILE_PATH")); @@ -1978,7 +1977,7 @@ public class Sndb01Controller extends ApplicationController { globalVariable.put("instZip", sggStngInfo.string("INST_ZIP")); globalVariable.put("deptTelno", deptStngInfo.string("DEPT_TELNO")); globalVariable.put("deptFxno", deptStngInfo.string("DEPT_FXNO")); - if(!otptBscStng.string("BCRN_IMG_PATH").equals("")) { + if (!otptBscStng.string("BCRN_IMG_PATH").equals("")) { globalVariable.put("bcrnImgPath", otptBscStng.string("BCRN_IMG_PATH")); } printOption.setGlobalVariable(globalVariable); @@ -1996,19 +1995,16 @@ public class Sndb01Controller extends ApplicationController { @Task @RequestMapping(name="사전통지서 외주 파일 생성", value=METHOD_URL.makeAdvanceNoticeOutsourcing) public ModelAndView makeAdvanceNoticeOutsourcing(SndbQuery req, FimsPrintOption printOption) { - String taskSeCd = ""; - List list = sndngDtlService.getSndngTrgtDtlIds(req); String[] crdnIds = new String[list.size()]; - for (int iLoop = 0; iLoop < list.size(); iLoop++) { crdnIds[iLoop] = list.get(iLoop).string("CRDN_ID"); } SprtQuery sprtQuery = new SprtQuery(); sprtQuery.setCrdnIds(crdnIds); List dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery); - for(int i=0; i < dataObjectList.size(); i++) { + for (int i=0; i < dataObjectList.size(); i++) { DataObject sndngDtl = integrationSearchMapper.selectLatestSndngDtlInfo(dataObjectList.get(i).string("CRDN_ID")); dataObjectList.get(i).set("SNDNG_DTL_ID",sndngDtl.string("SNDNG_DTL_ID")); dataObjectList.get(i).set("SNDNG_YMD",sndngDtl.string("SNDNG_YMD")); @@ -2017,29 +2013,29 @@ public class Sndb01Controller extends ApplicationController { dataObjectList.get(i).set("RG_NO",sndngDtl.string("RG_NO")); } - for(int i=0; i < dataObjectList.size(); i++) { + String taskSeCd = ""; + for (int i = 0; i < dataObjectList.size(); i++) { DataObject dataObject = dataObjectList.get(i); - if(taskSeCd.equals("")) { + if (taskSeCd.isEmpty()) taskSeCd = dataObject.string("TASK_SE_CD"); - } FileQuery fileQuery = new FileQuery(); fileQuery.setInfoType(Crdn.INF_TYPE); fileQuery.setInfoKeys(dataObject.string("CRDN_ID")); List fileInfoList = fileBean.getFileList(fileQuery); - if(fileInfoList != null) { + if (fileInfoList != null) { int crdnPhotoCnt = fileInfoList.size(); - for(int j=0; j < fileInfoList.size(); j++) { + for (int j=0; j < fileInfoList.size(); j++) { DataObject fileInfo = fileInfoList.get(j); dataObject .set("CRDN_PHOTO"+(j+1), fileInfo.string("FILE_PATH")) .set("CRDN_PHOTO"+(j+1)+"KEY", fileInfo.string("FILE_ID")); List mosSet = mediaBean.getMosaicList(fileInfo.string("FILE_ID")); - if(mosSet != null) { - for(int k=0; k < mosSet.size(); k++) { + if (mosSet != null) { + for (int k=0; k < mosSet.size(); k++) { dataObject.set("MOS"+fileInfo.string("FILE_ID"), mosSet); } } @@ -2122,7 +2118,7 @@ public class Sndb01Controller extends ApplicationController { otptStngQuery.setSndngSeCd("03"); otptStngQuery.setPaperSeCd(paperSeCd); DataObject otptBscStng = otptStngMapper.selectOtptBscStng(otptStngQuery); - if(otptBscStng == null) { + if (otptBscStng == null) { otptBscStng = new DataObject(); } //출력 요소별 설정 @@ -2132,7 +2128,7 @@ public class Sndb01Controller extends ApplicationController { DataObject deptStngInfo = stngBean.getStng("dept"); // Map globalVariable = printOption.getGlobalVariable(); - if(globalVariable == null) { + if (globalVariable == null) { globalVariable = new HashMap(); } globalVariable.put("offcsFilePath", sggStngInfo.string("OFFCS_FILE_PATH")); @@ -2142,7 +2138,7 @@ public class Sndb01Controller extends ApplicationController { globalVariable.put("instZip", sggStngInfo.string("INST_ZIP")); globalVariable.put("deptTelno", deptStngInfo.string("DEPT_TELNO")); globalVariable.put("deptFxno", deptStngInfo.string("DEPT_FXNO")); - if(!otptBscStng.string("BCRN_IMG_PATH").equals("")) { + if (!otptBscStng.string("BCRN_IMG_PATH").equals("")) { globalVariable.put("bcrnImgPath", otptBscStng.string("BCRN_IMG_PATH")); } printOption.setGlobalVariable(globalVariable); @@ -2165,8 +2161,8 @@ public class Sndb01Controller extends ApplicationController { List list = sndngDtlService.getSndngTrgtDtlIds(req); String[] crdnIds = new String[list.size()]; - for (int iLoop = 0; iLoop < list.size(); iLoop++) { - crdnIds[iLoop] = list.get(iLoop).string("CRDN_ID"); + for (int i = 0; i < list.size(); i++) { + crdnIds[i] = list.get(i).string("CRDN_ID"); } UserInfo userInfo = currentUser(); @@ -2183,7 +2179,7 @@ public class Sndb01Controller extends ApplicationController { for (int i=0; i < dataObjectList.size(); i++) { DataObject dataObject = dataObjectList.get(i); - if (taskSeCd.equals("")) { + if (taskSeCd.isEmpty()) { taskSeCd = dataObject.string("TASK_SE_CD"); } @@ -2194,15 +2190,16 @@ public class Sndb01Controller extends ApplicationController { if (fileInfoList != null) { int crdnPhotoCnt = fileInfoList.size(); - for (int j=0; j < fileInfoList.size(); j++) { + for (int j = 0; j < fileInfoList.size(); j++) { DataObject fileInfo = fileInfoList.get(j); - dataObject.set("CRDN_PHOTO"+(j+1), fileInfo.string("FILE_PATH")); - dataObject.set("CRDN_PHOTO"+(j+1)+"KEY", fileInfo.string("FILE_ID")); + dataObject.set("CRDN_PHOTO"+(j + 1), fileInfo.string("FILE_PATH")); + String fileID = fileInfo.string("FILE_ID"); + dataObject.set("CRDN_PHOTO"+(j + 1)+"KEY", fileID); - List mosSet = mediaBean.getMosaicList(fileInfo.string("FILE_ID")); + List mosSet = mediaBean.getMosaicList(fileID); if (mosSet != null) { for (int k=0; k < mosSet.size(); k++) { - dataObject.set("MOS"+fileInfo.string("FILE_ID"), mosSet); + dataObject.set("MOS"+fileID, mosSet); } } } @@ -2216,59 +2213,62 @@ public class Sndb01Controller extends ApplicationController { .setSndngSeCd("03") .setSggCd(currentUser().getOrgID()) .setTaskSeCd(taskSeCd); - List printStngItems = outsourcingStngBean.getArtclStngList(stngQuery); - - OutsourcingFileMaker osMaker = new OutsourcingFileMaker("고지서", printOption, printStngItems, dataObjectList); - - Map result = osMaker.makeFile(); + Map result = new OutsourcingFileMaker("고지서", printOption, printStngItems, dataObjectList).makeFile(); return new ModelAndView("downloadView").addAllObjects(result); } - /**과태료 대장 단속 정보 등록를 등록한다. - * @param req 발송 대장 조회 조건 + /**과태료대장 단속정보 등록를 등록한다. + * @param req 발송대장 조회 조건 * @return jsonView *
 {
      *     "saved": 등록되었으면 true, 그렇지 않으면 false
      * }
*/ @Task({"ECA","DPV","PES","DVS"}) - @RequestMapping(name="세외수입 과태료 대장 단속 정보 등록", value=METHOD_URL.setNonTaxReceiptIndividualA01List) + @RequestMapping(name="세외수입 과태료대장 단속정보 등록", value=METHOD_URL.setNonTaxReceiptIndividualA01List) public ModelAndView setNonTaxReceiptIndividualA01List(SndbQuery req, Sndng sndng) { - boolean saved = false; - String rtnMsg = ""; + if ("lntris".equals(TaskProcessor.get().getNtrisInterface(req.getTaskSeCd()))) { // 지방 세외수입 + boolean saved = false; + String rtnMsg = ""; - // 발송상세 Ids 만큼 반복.. - for (DataObject dtl: sndngDtlService.getSndngTrgtDtlIds(req)) { SndngDtl sndngDtl = new SndngDtl(); + sndngDtl.setTaskSeCd(req.getTaskSeCd()); + // 발송상세 Ids 만큼 반복.. + for (DataObject dtl: sndngDtlService.getSndngTrgtDtlIds(req)) { + sndngDtl.setSndngDtlId(dtl.string("SNDNG_DTL_ID")); + sndngDtl.setCrdnId(dtl.string("CRDN_ID")); + sndngDtl.setLinkTrgtCd(dtl.string("LINK_TRGT_CD")); + sndngDtl.setLinkMngKey(dtl.string("LINK_MNG_KEY")); + sndngDtl.setSndngDtlSttsCd(dtl.string("SNDNG_DTL_STTS_CD")); + sndngDtl.setDelYn("N"); + sndngDtl.setSndngYmd(sndng.getSndngYmd()); + + rtnMsg = sndngDtlService.setNxrpIndivA01List(sndngDtl); + saved = rtnMsg.contains("[S]"); + } - sndngDtl.setSndngDtlId(dtl.string("SNDNG_DTL_ID")); - sndngDtl.setCrdnId(dtl.string("CRDN_ID")); - sndngDtl.setLinkTrgtCd(dtl.string("LINK_TRGT_CD")); - sndngDtl.setLinkMngKey(dtl.string("LINK_MNG_KEY")); - sndngDtl.setSndngDtlSttsCd(dtl.string("SNDNG_DTL_STTS_CD")); - sndngDtl.setDelYn("N"); - sndngDtl.setSndngYmd(sndng.getSndngYmd()); - - rtnMsg = sndngDtlService.setNxrpIndivA01List(sndngDtl); - saved = rtnMsg.contains("[S]"); - } - - return new ModelAndView("jsonView") - .addObject("saved", saved) - .addObject("rtnMsg", rtnMsg); + return new ModelAndView("jsonView") + .addObject("saved", saved) + .addObject("rtnMsg", rtnMsg); + } else { // 서울 세외수입 + String resp = sndngDtlService.registerPreNotice(req); + return new ModelAndView("jsonView") + .addObject("saved", true) + .addObject("rtnMsg", resp); + } } - /**과태료 대장 등록 자료 상세 조회(실시간)한다. - * @param req 발송 대장 조회 조건 + /**과태료대장 상세조회(실시간)한다. + * @param req 발송대장 조회 조건 * @return jsonView *
 {
      *     "saved": 등록되었으면 true, 그렇지 않으면 false
      * }
*/ @Task({"ECA","DPV","PES","DVS"}) - @RequestMapping(name="세외수입 과태료 대장 등록 자료 상세 조회", value=METHOD_URL.getNonTaxReceiptIndividualA03List) + @RequestMapping(name="세외수입 과태료대장 상세조회", value=METHOD_URL.getNonTaxReceiptIndividualA03List) public ModelAndView getNonTaxReceiptIndividualA03List(SndbQuery req) { boolean saved = false; String rtnMsg = ""; @@ -2292,8 +2292,8 @@ public class Sndb01Controller extends ApplicationController { .addObject("rtnMsg", rtnMsg); } - /**과태료 대장 등록 자료 상세 조회(실시간)한다. - * @param req 발송 대장 조회 조건 + /**과태료대장 상세조회(실시간)한다. + * @param req 발송대장 조회 조건 * @return jsonView *
 {
      *     "saved": 등록되었으면 true, 그렇지 않으면 false
diff --git a/src/main/resources/sql/mapper/fims/nxrp/nisA01-mapper.xml b/src/main/resources/sql/mapper/fims/nxrp/nisA01-mapper.xml
index 904a148f..d2b1eac6 100644
--- a/src/main/resources/sql/mapper/fims/nxrp/nisA01-mapper.xml
+++ b/src/main/resources/sql/mapper/fims/nxrp/nisA01-mapper.xml
@@ -518,7 +518,7 @@
          WHERE A01_ID   = #{nisIndivA01.a01Id}
     
 
-	/* 단속 목록 가져오기(nisIndivA01Mapper.selectCrdnList) */
         SELECT C.CRDN_ID                
              , C.SGG_CD                 
              , C.TASK_SE_CD             
@@ -608,14 +608,14 @@
              , PA.WHOL_ADDR             
              , (GET_MASK_DATETIME(C.CRDN_YMD, '-', C.CRDN_TM, ':'))     AS CRDN_YMD_TM_MASK 
              , (SELECT RDCT_RSN_CD FROM TB_RDCT X WHERE X.CRDN_ID = C.CRDN_ID AND X.DEL_YN = 'N') AS RDCT_RSN_CD 
-             ,  AS TODAY
+             , AS TODAY
           FROM TB_CRDN            C
          INNER JOIN TB_CRDN_ADI   CA ON (C.CRDN_ID  = CA.CRDN_ID)
          INNER JOIN TB_VLTN       V  ON (C.VLTN_ID  = V.VLTN_ID)
     LEFT OUTER JOIN TB_PAYER      P  ON (C.RTPYR_ID = P.RTPYR_ID)
     LEFT OUTER JOIN TB_PAYER_ADDR PA ON (C.RTPYR_ID = PA.RTPYR_ID AND C.ADDR_SN = PA.ADDR_SN)
-         WHERE C.CRDN_ID    = #{crdnId} 
+         WHERE C.CRDN_ID IN #{crdnId}
            AND C.DEL_YN     = 'N'       
     
 
-
+
\ No newline at end of file
diff --git a/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml b/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml
index 06c19148..0bf10447 100644
--- a/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml
+++ b/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml
@@ -101,6 +101,12 @@
 							
 							
 	
+	
+	
 
 	
         SELECT SD.SNDNG_DTL_ID      
@@ -564,7 +570,7 @@
              , LEVY_NO          = #{levyNo}     
              , LEVY_YMD         = #{levyYmd}    
              , DUDT_YMD         = #{dudtYmd}    
-             , DUDT_AFTR_YMD    = #{dudtAftrYmd} 
+             , DUDT_AFTR_YMD    = #{dudtAftrYmd}
              , FFNLG_AMT        = #{ffnlgAmt}   
              , PCPTAX           = #{pcptax}     
              , ADAMT            = #{adamt}