서울 세외수입 연계 추가(작업 중)
parent
2fa3861890
commit
9434c4feaf
@ -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()
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -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]처리되었습니다.";
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue