서울 세외수입 연계 추가(작업 중)

main
mjkhan21 9 months ago
parent 2fa3861890
commit 9434c4feaf

@ -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<String> 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()
);
}
}

@ -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<String> 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()
);
}
}

@ -406,4 +406,16 @@ public class TaskProcessor extends AbstractBean {
public boolean statByTeamEquipment(String taskSeCd) {
return "PVS,BPV".contains(taskSeCd);
}
/** .
* @param taskSeCd
* @return
* <ul><li> sntris</li>
* <li> lntris</li>
* <li> ("")</li>
* </ul>
*/
public String getNtrisInterface(String taskSeCd) {
return "lntris";
}
}

@ -572,4 +572,5 @@ public class A03 extends AbstractEntity {
*/
private String taskAplcnMsg;
}
}

@ -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 {
/** .<br />
* @param req
* @return
@ -97,9 +95,22 @@ public interface NisA01Mapper extends AbstractMapper {
}
/** ID , .
* @param crdnId ID
* @param params
* <ul><li>crdnIds - </li></ul>
* @return ,
*/
DataObject selectCrdnInfo(String crdnId);
List<DataObject> selectCrdnList(Map<String, Object> params);
}
default List<DataObject> selectCrdnList(Iterable<String> crdnIds) {
return selectCrdnList(Map.of("crdnIds", crdnIds));
}
/** ID , .
* @param crdnId ID
* @return ,
*/
default DataObject selectCrdnInfo(String crdnId) {
List<DataObject> list = selectCrdnList(List.of(crdnId));
return !list.isEmpty() ? list.get(0) : 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
*
* <p> :
*
* <pre>
* ============ ============
* 2024-02-16 JoJH
* ================================
* </pre>
*/
@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<DataObject> getNisIndivA01List(NisIndivQuery req) {
return nisA01Mapper.selectNisIndivA01List(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA01s(NisIndivQuery req) {
return nisA01Mapper.selectNisIndivA01s(req);
}
/** .
* @param nisIndivA01
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
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<A01Response> res = lntrisAService.registerA01s(taskSeCd, List.of(a01));
A01Response res0 = !res.isEmpty() ? res.get(0) : null;
return json.stringify(res0);
}
}
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA02List(NisIndivQuery req) {
return nisA02Mapper.selectNisIndivA02List(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA02s(NisIndivQuery req) {
return nisA02Mapper.selectNisIndivA02s(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA03List(NisIndivQuery req) {
return nisA03Mapper.selectNisIndivA03List(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA03s(NisIndivQuery req) {
return nisA03Mapper.selectNisIndivA03s(req);
}
/** .
* @param nisIndivA03
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
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<String> 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<CommonCode> fimsVltnCodes = codeBean.getCodes("FIM004");
List<CommonCode> 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<String, Object> stdgQuery = new HashMap<>();
stdgQuery.put("sggCd", crdnInfo.string("SGG_CD"));
stdgQuery.put("emdNm", crdnInfo.string("CRDN_STDG_NM"));
List<String> 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<DataObject> crdnFileList = fileBean.getFileList(fileQuery);
for(int j=0; (j<crdnFileList.size()) && (j < linkFileMaker.getMaxImageFileCnt()); j++) {
linkFileMaker.copyFile(workPath, crdnFileList.get(j).string("FILE_PATH"), j, items);
}
String zipFilePath = workPath + "/" + linkFileMaker.getZipFileName();
File[] fileList = workFolder.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return !(name.toUpperCase().endsWith(".ZIP"));
}
});
String[] fileNameList = new String[fileList.length];
for(int i=0; i<fileList.length; i++) {
fileNameList[i] = fileList[i].getPath();
}
new ZIP().compress(zipFilePath, fileNameList);
for(File file : fileList) {
if (!file.delete())
throw new RuntimeException("[F]파일 삭제 중 오류가 발생하였습니다.");
}
String ESB_Folder_Path = JobConf.get().getDir("send")+"/"+JobConf.get().getDirCode("lntris");
if (!new File(ESB_Folder_Path).exists())
new File(ESB_Folder_Path).mkdirs();
File src = new File(zipFilePath);
File dst = new File(ESB_Folder_Path+"/"+linkFileMaker.getZipFileName());
src.renameTo(dst);
Crdn crdn = new Crdn();
crdn.setCrdnId(crdnID);
crdn.setModifiedBy(currentUser().getId());
int affected = crdnUpdtMapper.updateNxrpCrdnLinkYn(crdn);
if (affected != 1)
throw new RuntimeException(rtnMsg += "세외수입 연계 여부 변경 중 오류가 발생하였습니다.");
} catch (Exception e) {
throw new RuntimeException("[F]"+e);
}
}
return "[S]처리되었습니다.";
}
}

@ -1,20 +1,13 @@
package cokr.xit.fims.nxrp.service.bean;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.lang.reflect.Field;
import java.net.URL;
import java.nio.charset.Charset;
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 java.util.function.Consumer;
@ -29,8 +22,7 @@ import javax.net.ssl.X509TrustManager;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.JsonNode;
import cokr.xit.base.code.CommonCode;
import cokr.xit.base.code.service.bean.CodeBean;
@ -58,8 +50,11 @@ 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.SndngDtl;
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;
@ -67,7 +62,7 @@ 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
/** Bean
*
* <p> :
*
@ -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<DataObject> getNisIndivA01List(NisIndivQuery req) {
return nisA01Mapper.selectNisIndivA01List(req);
}
/** .
* @param req
* @return
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA01s(NisIndivQuery req) {
return nisA01Mapper.selectNisIndivA01s(req);
}
/** .
* @param nisIndivA01
/** .
* @param nisIndivA01
* @return
* <ul><li> true</li>
* <li> false</li>
@ -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<A01Response> 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<DataObject> getNisIndivA02List(NisIndivQuery req) {
return nisA02Mapper.selectNisIndivA02List(req);
}
/** .
* @param req
* @return
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA02s(NisIndivQuery req) {
return nisA02Mapper.selectNisIndivA02s(req);
}
/** .
* @param req
* @return
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA03List(NisIndivQuery req) {
return nisA03Mapper.selectNisIndivA03List(req);
}
/** .
* @param req
* @return
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA03s(NisIndivQuery req) {
return nisA03Mapper.selectNisIndivA03s(req);
}
/** .
* @param nisIndivA03
/** .
* @param nisIndivA03
* @return
* <ul><li> true</li>
* <li> false</li>
@ -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<String> 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<CommonCode> fimsVltnCodes = codeBean.getCodes("FIM004");
List<CommonCode> nxrpVltnCodes = codeBean.getCodes("NTR055");
Map<String, List<CommonCode>> codes = codeBean.getCodesOf("FIM004", "NTR055");
List<CommonCode> fimsVltnCodes = codes.get("FIM004");
List<CommonCode> 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<String, Object> 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<String> 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<DataObject> crdnFileList = fileBean.getFileList(fileQuery);
for(int j=0; (j<crdnFileList.size()) && (j < linkFileMaker.getMaxImageFileCnt()); j++) {
for (int j=0; (j<crdnFileList.size()) && (j < linkFileMaker.getMaxImageFileCnt()); j++) {
linkFileMaker.copyFile(workPath, crdnFileList.get(j).string("FILE_PATH"), j, items);
}
String zipFilePath = workPath + "/" + linkFileMaker.getZipFileName();
File[] fileList = workFolder.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
@ -623,26 +538,24 @@ public class NisIndivBean extends AbstractBean {
}
});
String[] fileNameList = new String[fileList.length];
for(int i=0; i<fileList.length; i++) {
for (int i = 0; i < fileList.length; i++) {
fileNameList[i] = fileList[i].getPath();
}
zip.compress(zipFilePath, fileNameList);
String zipFilePath = workPath + "/" + linkFileMaker.getZipFileName();
new ZIP().compress(zipFilePath, fileNameList);
for(File file : fileList) {
for (File file : fileList) {
if (!file.delete())
throw new RuntimeException("[F]파일 삭제 중 오류가 발생하였습니다.");
}
String ESB_Folder_Path = JobConf.get().getDir("send")+"/"+JobConf.get().getDirCode("lntris");
if (!new File(ESB_Folder_Path).exists()) {
new File(ESB_Folder_Path).mkdirs();
}
ensureDir(ESB_Folder_Path);
File src = new File(zipFilePath);
File dst = new File(ESB_Folder_Path+"/"+linkFileMaker.getZipFileName());
src.renameTo(dst);
Crdn crdn = new Crdn();
crdn.setCrdnId(crdnID);
crdn.setModifiedBy(currentUser().getId());
@ -657,16 +570,15 @@ public class NisIndivBean extends AbstractBean {
}
private Object convert(Object s, Class<? extends Object> 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);
}
}

@ -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);
}
}
}

@ -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<String, Bu18WebPreNoticeDTO> prenotices = getPreNotices(req);
Ye22InputDTO input = new Ye22InputDTO();
input.setSystemGubun(req.getTaskSeCd());
Map<String, Ye22NoticeInfoDTO> retrieved = sntrisBean.registerPreNotices(input, prenotices);
Set<String> sndngDtlIds = retrieved.keySet();
List<SndngDtl> 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<String, Bu18WebPreNoticeDTO> getPreNotices(SndbQuery req) {
// 발송대상 ID 추출
List<DataObject> targets = sndngDtlMapper.selectSndngTrgtDtlIds(req);
if (targets.isEmpty()) return Collections.emptyMap();
List<String> crdnIds = targets.stream()
.map(target -> target.string("CRDN_ID"))
.toList();
Map<String, DataObject> 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<DataObject> getNisIndivA02List(NisIndivQuery req) {
return nisA02Mapper.selectNisIndivA02List(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA02s(NisIndivQuery req) {
return nisA02Mapper.selectNisIndivA02s(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA03List(NisIndivQuery req) {
return nisA03Mapper.selectNisIndivA03List(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getNisIndivA03s(NisIndivQuery req) {
return nisA03Mapper.selectNisIndivA03s(req);
}
/** .
* @param nisIndivA03
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
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<String> 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<CommonCode> fimsVltnCodes = codeBean.getCodes("FIM004");
List<CommonCode> 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<String, Object> stdgQuery = new HashMap<>();
stdgQuery.put("sggCd", crdnInfo.string("SGG_CD"));
stdgQuery.put("emdNm", crdnInfo.string("CRDN_STDG_NM"));
List<String> 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<DataObject> crdnFileList = fileBean.getFileList(fileQuery);
for(int j=0; (j<crdnFileList.size()) && (j < linkFileMaker.getMaxImageFileCnt()); j++) {
linkFileMaker.copyFile(workPath, crdnFileList.get(j).string("FILE_PATH"), j, items);
}
String zipFilePath = workPath + "/" + linkFileMaker.getZipFileName();
File[] fileList = workFolder.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return !(name.toUpperCase().endsWith(".ZIP"));
}
});
String[] fileNameList = new String[fileList.length];
for(int i=0; i<fileList.length; i++) {
fileNameList[i] = fileList[i].getPath();
}
ZIP zip = new ZIP();
zip.compress(zipFilePath, fileNameList);
for(File file : fileList) {
if(!file.delete()) {
throw new RuntimeException("[F]파일 삭제 중 오류가 발생하였습니다.");
}
}
String ESB_Folder_Path = JobConf.get().getDir("send")+"/"+JobConf.get().getDirCode("lntris");
if(!new File(ESB_Folder_Path).exists()) {
new File(ESB_Folder_Path).mkdirs();
}
File src = new File(zipFilePath);
File dst = new File(ESB_Folder_Path+"/"+linkFileMaker.getZipFileName());
src.renameTo(dst);
Crdn crdn = new Crdn();
crdn.setCrdnId(crdnID);
crdn.setModifiedBy(currentUser().getId());
int effected = crdnUpdtMapper.updateNxrpCrdnLinkYn(crdn);
if(effected != 1) {
rtnMsg += "세외수입 연계 여부 변경 중 오류가 발생하였습니다.";
throw new RuntimeException(rtnMsg);
}
} catch (Exception e) {
throw new RuntimeException("[F]"+e);
}
}
rtnMsg = "[S]처리되었습니다.";
return rtnMsg;
}
}

@ -4,452 +4,240 @@ import cokr.xit.foundation.AbstractEntity;
import lombok.Getter;
import lombok.Setter;
/**
*
/**
* @author JoJH
*/
@Getter
@Setter
public class SndngDtl extends AbstractEntity {
/**
* ID
*/
/**발송 상세 ID */
private String sndngDtlId;
/**
* ID
*/
/**발송 ID */
private String sndngId;
/**
* ID
*/
/**단속 ID */
private String crdnId;
/**
* ID
*/
/**공시송달 ID */
private String svbtcId;
/**
*
*/
/**연계 대상 코드 */
private String linkTrgtCd;
/**
*
*/
/**연계 관리 키 */
private String linkMngKey;
/**
*
*/
/**발송 구분 코드 */
private String sndngSeCd;
/**
*
*/
/**발송 일자 */
private String sndngYmd;
/**
*
*/
/**발송 종료 일자 */
private String sndngEndYmd;
/**
*
*/
/**수령인 명 */
private String rcpnNm;
/**
*
*/
/**수령인 생년월일 */
private String rcpnBrdt;
/**
*
*/
/**수령인 주소 */
private String rcpnAddr;
/**
*
*/
/**수령인 상세 주소 */
private String rcpnDtlAddr;
/**
*
*/
/**수령인 우편번호 */
private String rcpnZip;
/**
*
*/
/**외부연계식별키 */
private String conKey;
/**
*
*/
/**등기 번호 */
private String rgNo;
/**
*
*/
/**배달 일자 */
private String dlvrYmd;
/**
*
*/
/**배달 시각 */
private String dlvrTm;
/**
*
*/
/**미배달 사유 코드 */
private String undlvrRsnCd;
/**
*
*/
/**미배달 사유 명 */
private String undlvrRsnNm;
/**
*
*/
/**실제 수령인 명 */
private String actlRcpnNm;
/**
*
*/
/**수령인 관계 명 */
private String rcpnRelNm;
/**
*
*/
/**발송 상세 상태 코드 */
private String sndngDtlSttsCd;
/**
*
*/
/**전 발송 상세 상태 코드 */
private String bfrSndngDtlSttsCd;
/**
*
*/
/**전 배달 일자 */
private String bfrDlvrYmd;
/**
*
*/
/**전 배달 시각 */
private String bfrDlvrTm;
/**
*
*/
/**발송 수납 코드 */
private String sndngRcvmtCd;
/**
*
*/
/**주소 변경 코드 */
private String addrChgCd;
/**
*
*/
/**단속 일시 */
private String crdnDt;
/**
*
*/
/**차량번호 */
private String vhrno;
/**
*
*/
/**단속 법정동 명 */
private String crdnStdgNm;
/**
*
*/
/**단속 장소 */
private String crdnPlc;
/**
*
*/
/**회계연도 */
private String fyr;
/**
*
*/
/**부과 번호 */
private String levyNo;
/**
*
*/
/**부과 일자 */
private String levyYmd;
/**
*
*/
/**납기 일자 */
private String dudtYmd;
/**
*
*/
/**납기 후 일자 */
private String dudtAftrYmd;
/**
*
*/
/**과태료 금액 */
private Integer ffnlgAmt;
/**
*
*/
/**본세 */
private Integer pcptax;
/**
*
*/
/**가산금 */
private Integer adamt;
/**
*
*/
/**최종 금액 */
private Integer lastAmt;
/**
*
*/
/**납기 후 금액 */
private Integer dudtAftrAmt;
/**
*
*/
/**납세 번호 */
private String taxNo;
/**
*
*/
/**전자납부번호 */
private String epayno;
/**
*
*/
/**은행 명 */
private String bankNm;
/**
*
*/
/**가상 계좌번호 */
private String vrActno;
/**
* 2
*/
/**은행 명2 */
private String bankNm2;
/**
* 2
*/
/**가상 계좌번호2 */
private String vrActno2;
/**
* 3
*/
/**은행 명3 */
private String bankNm3;
/**
* 3
*/
/**가상 계좌번호3 */
private String vrActno3;
/**
* 4
*/
/**은행 명4 */
private String bankNm4;
/**
* 4
*/
/**가상 계좌번호4 */
private String vrActno4;
/**
* 5
*/
/**은행 명5 */
private String bankNm5;
/**
* 5
*/
/**가상 계좌번호5 */
private String vrActno5;
/**
* 6
*/
/**은행 명6 */
private String bankNm6;
/**
* 6
*/
/**가상 계좌번호6 */
private String vrActno6;
/**
* 7
*/
/**은행 명7 */
private String bankNm7;
/**
* 7
*/
/**가상 계좌번호7 */
private String vrActno7;
/**
* 8
*/
/**은행 명8 */
private String bankNm8;
/**
* 8
*/
/**가상 계좌번호8 */
private String vrActno8;
/**
* 9
*/
/**은행 명9 */
private String bankNm9;
/**
* 9
*/
/**가상 계좌번호9 */
private String vrActno9;
/**
* 10
*/
/**은행 명10 */
private String bankNm10;
/**
* 10
*/
/**가상 계좌번호10 */
private String vrActno10;
/**
* 11
*/
/**은행 명11 */
private String bankNm11;
/**
* 11
*/
/**가상 계좌번호11 */
private String vrActno11;
/**
* 12
*/
/**은행 명12 */
private String bankNm12;
/**
* 12
*/
/**가상 계좌번호12 */
private String vrActno12;
/**
* 13
*/
/**은행 명13 */
private String bankNm13;
/**
* 13
*/
/**가상 계좌번호13 */
private String vrActno13;
/**
* 14
*/
/**은행 명14 */
private String bankNm14;
/**
* 14
*/
/**가상 계좌번호14 */
private String vrActno14;
/**
* 15
*/
/**은행 명15 */
private String bankNm15;
/**
* 15
*/
/**가상 계좌번호15 */
private String vrActno15;
/**
* 16
*/
/**은행 명16 */
private String bankNm16;
/**
* 16
*/
/**가상 계좌번호16 */
private String vrActno16;
/**
* 17
*/
/**은행 명17 */
private String bankNm17;
/**
* 17
*/
/**가상 계좌번호17 */
private String vrActno17;
/**
* 18
*/
/**은행 명18 */
private String bankNm18;
/**
* 18
*/
/**가상 계좌번호18 */
private String vrActno18;
/**
* 19
*/
/**은행 명19 */
private String bankNm19;
/**
* 19
*/
/**가상 계좌번호19 */
private String vrActno19;
/**
* 20
*/
/**은행 명20 */
private String bankNm20;
/**
* 20
*/
/**가상 계좌번호20 */
private String vrActno20;
/**
*
*/
/**삭제 여부 */
private String delYn;
/**
*
*/
/**삭제 사유 */
private String delRsn;
// 추가 /////////////////////////////////////////////////////////////////////
/**
* Ids
*/
/**발송 상세 Ids */
private String[] sndngDtlIds;
/**
*
*/
/**시군구 코드 */
private String sggCd;
/** 업무구분 코드 */
private String taskSeCd;
public void setBankAccount(String bank, String accountNo) {
String bankNm = "전용계좌(" + bank + ")";
switch (bank) {
case "신한":
setBankNm(bankNm);
setVrActno(accountNo);
break;
case "우리":
setBankNm2(bankNm);
setVrActno2(accountNo);
break;
case "하나":
setBankNm3(bankNm);
setVrActno3(accountNo);
break;
case "국민":
setBankNm4(bankNm);
setVrActno4(accountNo);
break;
case "기업":
setBankNm5(bankNm);
setVrActno5(accountNo);
break;
case "우체국":
setBankNm6(bankNm);
setVrActno6(accountNo);
break;
case "씨티":
setBankNm7(bankNm);
setVrActno7(accountNo);
break;
case "농협":
setBankNm8(bankNm);
setVrActno8(accountNo);
break;
case "수협":
setBankNm9(bankNm);
setVrActno9(accountNo);
break;
case "카카오":
setBankNm10(bankNm);
setVrActno10(accountNo);
break;
case "K뱅크":
setBankNm11(bankNm);
setVrActno11(accountNo);
break;
default: break;
}
}
}

@ -4,11 +4,11 @@ import java.util.List;
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
import cokr.xit.foundation.component.AbstractMapper;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.crdn.Crdn;
import cokr.xit.fims.sndb.SndbQuery;
import cokr.xit.fims.sndb.SndngDtl;
import cokr.xit.foundation.component.AbstractMapper;
import cokr.xit.foundation.data.DataObject;
/** DAO
*
@ -22,7 +22,6 @@ import cokr.xit.fims.sndb.SndngDtl;
*/
@Mapper("sndngDtlMapper")
public interface SndngDtlMapper extends AbstractMapper {
/** .<br />
* @param req
* @return
@ -50,7 +49,6 @@ public interface SndngDtlMapper extends AbstractMapper {
}
List<DataObject> sndngDtls = selectSndngDtls(req);
return !sndngDtls.isEmpty() ? sndngDtls.get(0) : null;
}
@ -60,6 +58,8 @@ public interface SndngDtlMapper extends AbstractMapper {
*/
List<DataObject> selectSndngTrgtDtlIds(SndbQuery req);
List<SndngDtl> selectSndngDetails(SndbQuery req);
/** .
* @param params
* <ul><li>"sndngDtl" - </li>
@ -216,5 +216,4 @@ public interface SndngDtlMapper extends AbstractMapper {
* @return
*/
int deleteSndngDtlSvbtc(SndngDtl sndngDtl);
}
}

@ -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;
* </pre>
*/
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 {
* </ul>
*/
String removeSndbk(SndngDtl sndngDtl);
}
}

@ -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 {
* </ul>
*/
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 {
* </ul>
*/
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 {
* </ul>
*/
public String createSndbkList(SndbQuery req) {
// 변수 선언
String rtnMsg = ""; // 처리 결과 메시지
List<DataObject> 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 {
* </ul>
*/
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] 작업이 정상 처리 되었습니다.";
}
}
}

@ -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);
}
}
}

@ -56,7 +56,7 @@ import cokr.xit.fims.task.Task;
import cokr.xit.foundation.UserInfo;
import cokr.xit.foundation.data.DataObject;
/**
/**
*
* <p> :
*
@ -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
* <pre><code> {
* "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 {
* }</pre>
*/
@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
* <pre><code> {
* "saved": true, false
@ -331,7 +331,7 @@ public class Sndb01Controller extends ApplicationController {
/** .
* {@link SndngService#getWarningSendingList(SndngQuery)}
* @param req
* @param req
* @return jsonView
* <pre><code> {
* "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
* <pre><code> {
* "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
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@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
* <pre><code> {
* "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 {
* }</pre>
*/
@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
* <pre><code> {
* "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
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@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
* <pre><code> {
* "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
* <pre><code> {
* "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 {
* }</code></pre>
*/
@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
* <pre><code> {
* "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
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@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
* <pre><code> {
* "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
* <pre><code> {
* "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
* <pre><code> {
* "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
* <pre><code> {
* "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
* <pre><code> {
* "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 {
* }</pre>
*/
@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<DataObject> dataObjectList = new ArrayList<DataObject>();
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<DataObject> fileInfoList = fileBean.getFileList(fileQuery);
if (fileInfoList != null && fileInfoList.size() > 0) {
for (int j=0; j<fileInfoList.size(); j++) {
dataObject.set("CRDN_PHOTO"+(j+1), fileInfoList.get(j).string("URL"));
dataObject.set("CRDN_PHOTO"+(j+1)+"KEY", fileInfoList.get(j).string("FILE_ID"));
for (int j = 0; j < fileInfoList.size(); j++) {
DataObject fileInfo = fileInfoList.get(j);
dataObject.set("CRDN_PHOTO"+(j+1), fileInfo.string("URL"));
String fileID = fileInfo.string("FILE_ID");
dataObject.set("CRDN_PHOTO"+(j+1)+"KEY", fileID);
List<DataObject> mosSet = mediaBean.getMosaicList(fileInfoList.get(j).string("FILE_ID"));
List<DataObject> 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<DataObject> otptArtclStngList = otptStngMapper.selectOtptArtclStngList(otptStngQuery);
@ -1968,7 +1967,7 @@ public class Sndb01Controller extends ApplicationController {
DataObject deptStngInfo = stngBean.getStng("dept");
//
Map<String, String> globalVariable = printOption.getGlobalVariable();
if(globalVariable == null) {
if (globalVariable == null) {
globalVariable = new HashMap<String, String>();
}
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<DataObject> 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<DataObject> 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<DataObject> 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<DataObject> 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<String, String> globalVariable = printOption.getGlobalVariable();
if(globalVariable == null) {
if (globalVariable == null) {
globalVariable = new HashMap<String, String>();
}
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<DataObject> 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<DataObject> mosSet = mediaBean.getMosaicList(fileInfo.string("FILE_ID"));
List<DataObject> 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<DataObject> printStngItems = outsourcingStngBean.getArtclStngList(stngQuery);
OutsourcingFileMaker osMaker = new OutsourcingFileMaker("고지서", printOption, printStngItems, dataObjectList);
Map<String, Object> result = osMaker.makeFile();
Map<String, Object> result = new OutsourcingFileMaker("고지서", printOption, printStngItems, dataObjectList).makeFile();
return new ModelAndView("downloadView").addAllObjects(result);
}
/** .
* @param req
/** .
* @param req
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@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
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@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
* <pre><code> {
* "saved": true, false

@ -518,7 +518,7 @@
WHERE A01_ID = #{nisIndivA01.a01Id}
</update>
<select id="selectCrdnInfo" parameterType="string" resultType="dataobject">/* 단속 객체 가져오기(sndngDtlMapper.selectCrdnInfo) */
<select id="selectCrdnList" parameterType="map" resultType="dataobject">/* 단속 목록 가져오기(nisIndivA01Mapper.selectCrdnList) */
SELECT C.CRDN_ID <!-- 단속 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 <!-- 감경 사유 코드 -->
, <include refid="utility.today" /> AS TODAY
,<include refid="utility.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} <!-- 단속 ID -->
WHERE C.CRDN_ID IN <foreach collection="crdnIds" item="crdnId" separator=",">#{crdnId}</foreach><!-- 단속 ID -->
AND C.DEL_YN = 'N' <!-- 삭제 여부 -->
</select>
</mapper>
</mapper>

@ -101,6 +101,12 @@
<result property="removedBy" column="DLTR" /> <!-- 삭제자 -->
<result property="delRsn" column="DEL_RSN" /> <!-- 삭제 사유 -->
</resultMap>
<select id="selectSndngDetails" parameterType="map" resultMap="sndngDtlRow">/* 발송상세 객체 조회(sndngDtlMapper.selectSndngDetails) */
SELECT *
FROM TB_SNDNG_DTL
WHERE SNDNG_DTL_ID IN (<foreach collection="sndngDtlIds" item="sndngDtlId" separator=",">#{sndngDtlId}</foreach>)
</select>
<sql id="selectList">
SELECT SD.SNDNG_DTL_ID <!-- 발송 상세 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} <!-- 가산금 -->

Loading…
Cancel
Save