자망 파일연계에 의한 단속정보 수정

main
mjkhan21 6 months ago
parent 2e9bd98f8a
commit 28c7ea517d

@ -42,6 +42,7 @@ public class FimsConf extends AbstractComponent {
private String disabledParkingDemonYn; // 장애인표지조회연계 별도 프로세스 여부
private String disabledParkingDemonUrl;// 장애인표지조회연계 API 아이피,포트
private String violationFileDir; // 단속파일 디렉토리
private String txtCharset;
public String violationFileDir(String dir) {
String root = blankIfEmpty(violationFileDir).replace("\\", "/");

@ -1,6 +1,5 @@
package cokr.xit.fims.cmmn.service.bean;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.annotation.Resource;
@ -25,7 +24,6 @@ import cokr.xit.foundation.data.DataObject;
*/
@Component("crdnSttsHstryBean")
public class CrdnSttsHstryBean extends AbstractBean {
/** 단속 상태 이력 정보 DAO */
@Resource(name = "crdnSttsHstryMapper")
private CrdnSttsHstryMapper crdnSttsHstryMapper;
@ -110,30 +108,22 @@ public class CrdnSttsHstryBean extends AbstractBean {
* </ul>
*/
public boolean createHstryUpdateCrdnSttsCd(CrdnSttsHstry crdnSttsHstry) {
// 변수 선언
int rtnNocs = -1;
// 사용 여부
if (crdnSttsHstry.getUseYn() == null) {
crdnSttsHstry.setUseYn("Y");
}
// 단속 상태 변경 일시
if (crdnSttsHstry.getCrdnSttsChgDt() == null || crdnSttsHstry.getCrdnSttsChgDt().equals("")) {
// 현재 날짜 구하기
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
crdnSttsHstry.setCrdnSttsChgDt(dateFormat.format(System.currentTimeMillis()));
}
if (isEmpty(crdnSttsHstry.getCrdnSttsChgDt()))
crdnSttsHstry.setCrdnSttsChgDt(dateFormats.format("yyyyMMddHHmmss", System.currentTimeMillis()));
// 단속상태이력(TB_CRDN_STTS_HSTRY) 대장을 등록한다.
rtnNocs = crdnSttsHstryMapper.insertCrdnSttsHstry(crdnSttsHstry);
if (rtnNocs != 1) {
throw new RuntimeException("단속상태이력 대장 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
int rtnNocs = crdnSttsHstryMapper.insertCrdnSttsHstry(crdnSttsHstry);
if (rtnNocs != 1)
throw new RuntimeException("단속상태이력 대장 등록에 실패하였습니다.");
// 단속(TB_CRDN) 대장을 수정한다.
rtnNocs = crdnSttsHstryMapper.updateCrdnSttsCd(crdnSttsHstry);
if (rtnNocs != 1) {
throw new RuntimeException("단속상태이력 정보 등록 중 오류가 발생하였습니다."); // 예외를 발생시켜서 DB Rollback
}
if (rtnNocs != 1)
throw new RuntimeException("단속상태이력 정보 등록 중 오류가 발생하였습니다.");
return true;
}
@ -146,9 +136,6 @@ public class CrdnSttsHstryBean extends AbstractBean {
* </ul>
*/
public boolean removeHstryUpdateCrdnSttsCd(CrdnSttsHstry crdnSttsHstry) {
// 변수 선언
int rtnNocs = -1;
// 단속 ID에 해당하는 단속상태코드의 단속상태이력(TB_CRDN_STTS_HSTRY) 대장을 조회 한다.
CrdnSttsHstryQuery req = new CrdnSttsHstryQuery();
req.setCrdnId(crdnSttsHstry.getCrdnId());
@ -156,20 +143,16 @@ public class CrdnSttsHstryBean extends AbstractBean {
req.setOrderBy("CSH.STTS_HSTRY_ID DESC");
DataObject hstryInfo = crdnSttsHstryMapper.selectCrdnSttsHstryInfo(req);
if (hstryInfo == null) {
throw new RuntimeException("단속 상태 이력 자료가 존재하지 않습니다."); // 예외를 발생시켜서 DB Rollback
}
if (!crdnSttsHstry.getCrdnSttsCd().equals(hstryInfo.string("CRDN_STTS_CD"))) {
throw new RuntimeException("현재 단속 상태와 마지막 단속 상태 이력 정보가 다릅니다."); // 예외를 발생시켜서 DB Rollback
}
if (hstryInfo == null)
throw new RuntimeException("단속 상태 이력 자료가 존재하지 않습니다.");
if (!crdnSttsHstry.getCrdnSttsCd().equals(hstryInfo.string("CRDN_STTS_CD")))
throw new RuntimeException("현재 단속 상태와 마지막 단속 상태 이력 정보가 다릅니다.");
// 단속상태이력(TB_CRDN_STTS_HSTRY) 대장을 삭제한다.
crdnSttsHstry.setSttsHstryId(hstryInfo.string("STTS_HSTRY_ID")); // 상태 이력 ID
rtnNocs = crdnSttsHstryMapper.updateCrdnSttsHstry(crdnSttsHstry);
if (rtnNocs != 1) {
throw new RuntimeException("단속상태이력 대장에 이력 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
if (crdnSttsHstryMapper.updateCrdnSttsHstry(crdnSttsHstry) != 1)
throw new RuntimeException("단속상태이력 대장에 이력 수정에 실패하였습니다.");
// 단속(TB_CRDN) 대장을 수정한다.
CrdnSttsHstry updtHstry = new CrdnSttsHstry();
@ -177,10 +160,8 @@ public class CrdnSttsHstryBean extends AbstractBean {
updtHstry.setCrdnSttsCd(hstryInfo.string("BFR_STTS_CD")); // 단속 상태 코드
updtHstry.setCrdnSttsChgDt(hstryInfo.string("BFR_STTS_CHG_DT")); // 단속 상태 변경 일시
rtnNocs = crdnSttsHstryMapper.updateCrdnSttsCd(updtHstry);
if (rtnNocs != 1) {
throw new RuntimeException("단속상태이력 정보 등록 중 오류가 발생하였습니다."); // 예외를 발생시켜서 DB Rollback
}
if (crdnSttsHstryMapper.updateCrdnSttsCd(updtHstry) != 1)
throw new RuntimeException("단속상태이력 정보 등록 중 오류가 발생하였습니다.");
return true;
}
@ -194,49 +175,38 @@ public class CrdnSttsHstryBean extends AbstractBean {
* </ul>
*/
public boolean removeHstryUpdateCrdnSttsCd(String crdnId, String crdnSttsCd, String deltSttsCd, String deltEtcCn, boolean insertBfrSttsYn) {
// 변수 선언
int rtnNocs = -1;
// 단속 ID에 해당하는 단속상태코드의 단속상태이력(TB_CRDN_STTS_HSTRY) 대장을 조회 한다.
DataObject hstryInfo = crdnSttsHstryMapper.selectCrdnSttsHstryInfo(crdnId, crdnSttsCd, "Y");
if (hstryInfo == null)
throw new RuntimeException("단속상태이력 자료가 존재하지 않습니다.");
if (hstryInfo == null) {
throw new RuntimeException("단속상태이력 자료가 존재하지 않습니다."); // 예외를 발생시켜서 DB Rollback
}
if (!crdnSttsCd.equals("")) {
if (!isEmpty(crdnSttsCd)) {
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
crdnSttsHstry.setSttsHstryId(hstryInfo.string("STTS_HSTRY_ID")); // 상태 이력 ID
if (deltSttsCd.equals("")) {
if (isEmpty(deltSttsCd))
crdnSttsHstry.setEtcCn(deltEtcCn); // 기타 내용
}
crdnSttsHstry.setUseYn("N"); // 사용 여부
rtnNocs = crdnSttsHstryMapper.updateCrdnSttsHstry(crdnSttsHstry);
if (rtnNocs != 1) {
throw new RuntimeException("단속상태이력 대장에 이력 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
if (crdnSttsHstryMapper.updateCrdnSttsHstry(crdnSttsHstry) != 1)
throw new RuntimeException("단속상태이력 대장에 이력 수정에 실패하였습니다.");
}
// 삭제 단속상태코드가 있다면.. 단속상태이력(TB_CRDN_STTS_HSTRY) 대장을 등록한다.
if (!deltSttsCd.equals("")) {
if (!isEmpty(deltSttsCd)) {
// 단속상태가 의견제출접수(31)가 아니면서, 삭제상태코드가 의견제출삭제(92)나 경찰서이첩삭제(97) 일 경우
if (!crdnSttsCd.equals("31") && "92,97".contains(deltSttsCd)) {
// 단속상태이력(TB_CRDN_STTS_HSTRY) 대장에서 의견제출접수(31) 이력을 조회후 사용여부를 미사용("N")으로 수정.
hstryInfo = crdnSttsHstryMapper.selectCrdnSttsHstryInfo(crdnId, "31", "Y");
if (hstryInfo == null) {
throw new RuntimeException("단속상태이력에 의견제출 접수 이력이 존재하지 않습니다."); // 예외를 발생시켜서 DB Rollback
}
if (hstryInfo == null)
throw new RuntimeException("단속상태이력에 의견제출 접수 이력이 존재하지 않습니다.");
CrdnSttsHstry opnnSttsHstry = new CrdnSttsHstry();
opnnSttsHstry.setSttsHstryId(hstryInfo.string("STTS_HSTRY_ID"));
opnnSttsHstry.setUseYn("N");
rtnNocs = crdnSttsHstryMapper.updateCrdnSttsHstry(opnnSttsHstry);
if (rtnNocs != 1) {
throw new RuntimeException("단속상태이력 대장에 의견제출접수 이력 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
if (crdnSttsHstryMapper.updateCrdnSttsHstry(opnnSttsHstry) != 1)
throw new RuntimeException("단속상태이력 대장에 의견제출접수 이력 수정에 실패하였습니다.");
}
CrdnSttsHstry deleteSttsHstry = new CrdnSttsHstry();
@ -247,33 +217,24 @@ public class CrdnSttsHstryBean extends AbstractBean {
deleteSttsHstry.setEtcCn(deltEtcCn);
deleteSttsHstry.setUseYn("N");
rtnNocs = crdnSttsHstryMapper.insertCrdnSttsHstry(deleteSttsHstry);
if (rtnNocs != 1) {
throw new RuntimeException("삭제 단속상태이력 정보 등록 중 오류가 발생하였습니다."); // 예외를 발생시켜서 DB Rollback
}
if (crdnSttsHstryMapper.insertCrdnSttsHstry(deleteSttsHstry) != 1)
throw new RuntimeException("삭제 단속상태이력 정보 등록 중 오류가 발생하였습니다.");
}
if (insertBfrSttsYn) {
// 단속상태이력(TB_CRDN_STTS_HSTRY) 대장을 등록한다.
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
crdnSttsHstry.setCrdnId(hstryInfo.string("CRDN_ID"));
if (deltSttsCd.equals("")) {
crdnSttsHstry.setBfrSttsCd(crdnSttsCd);
} else {
crdnSttsHstry.setBfrSttsCd(deltSttsCd);
}
crdnSttsHstry.setBfrSttsCd(ifEmpty(deltSttsCd, crdnSttsCd));
crdnSttsHstry.setBfrSttsChgDt(crdnSttsHstry.getCreatedAt());
crdnSttsHstry.setCrdnSttsCd(hstryInfo.string("BFR_STTS_CD"));
crdnSttsHstry.setCrdnSttsChgDt(hstryInfo.string("BFR_STTS_CHG_DT"));
crdnSttsHstry.setUseYn("Y");
boolean rtnScs = createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs) {
throw new RuntimeException("단속상태이력 정보 등록 중 오류가 발생하였습니다."); // 예외를 발생시켜서 DB Rollback
}
if (!createHstryUpdateCrdnSttsCd(crdnSttsHstry))
throw new RuntimeException("단속상태이력 정보 등록 중 오류가 발생하였습니다.");
}
return true;
}
}
}

@ -2,9 +2,12 @@ package cokr.xit.fims.crdn;
import java.util.List;
import cokr.xit.fims.payer.Payer;
import cokr.xit.foundation.AbstractEntity;
import cokr.xit.foundation.Assert;
import cokr.xit.foundation.data.Convert;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.interfaces.lvis.LvisA01;
import lombok.Getter;
import lombok.Setter;
@ -193,4 +196,45 @@ public class Crdn extends AbstractEntity {
.toList()
);
}
}
public void setInfo(Payer payer) {
LvisA01.BasicInfo vehicle = payer.getVehicleInfo();
setSggCd(payer.getSggCd()); // 시군구 데이터 정리되면 지울 것
setRtpyrId(!Assert.isEmpty(vehicle.getErsr_regist_de()) ? "" : payer.getRtpyrId());
setRtpyrNm(payer.getRtpyrNm());
setRtpyrSeCd(payer.getRtpyrSeCd());
setRtpyrNo(payer.getRtpyrNo());
setZip(payer.getZip());
setAddr(payer.getAddr());
setDtlAddr(payer.getDtlAddr());
setAddrSn(payer.getAddrSn());
setVin(vehicle.getVin());
setVhclNm(vehicle.getCnm());
setVhclColr(vehicle.getColor_nm());
setVhclCpct(vehicle.getTkcar_pscap_co());
setUseFuelCd(vehicle.getUse_fuel_code());
setFfnlgCarmdlCd(fineCarModel(vehicle.getVhcty_asort_code(), vehicle.getMxmm_ldg()));
setErsrRegYmd(vehicle.getErsr_regist_de());
}
private static final String fineCarModel(String vhctyAsortCd, String mxmmLdg) {
if (Assert.isEmpty(vhctyAsortCd)) return null;
if ("3".equals(vhctyAsortCd)) {
int weight = Convert.toInt(mxmmLdg);
if (weight < 1) return null;
vhctyAsortCd = weight <= 4000 ? "3-1" : "3-2";
}
return switch (vhctyAsortCd) {
case "1" -> "11"; // 승용
case "2" -> "12"; // 승합
case "3-1" -> "13"; // 화물
case "3-2" -> "14"; // 화물
case "4" -> "15"; // 특수
default -> throw new IllegalArgumentException("vhctyAsortCd: " + vhctyAsortCd);
};
}
}

@ -1,7 +1,10 @@
package cokr.xit.fims.crdn.dao;
import java.util.List;
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
import cokr.xit.fims.crdn.Crdn;
import cokr.xit.foundation.component.AbstractMapper;
import cokr.xit.foundation.data.DataObject;
@ -14,6 +17,17 @@ public interface CrdnInfoMapper extends AbstractMapper {
* @param crdnId
* @return
*/
DataObject selectCrdnInfo(String crdnId);
List<DataObject> selectCrdnList(List<String> crdnIds);
default DataObject selectCrdnInfo(String crdnId) {
List<DataObject> list = selectCrdnList(List.of(crdnId));
return !list.isEmpty() ? list.get(0) : null;
}
List<Crdn> selectCrdns(List<String> crdnIds);
default Crdn selectCrdn(String crdnId) {
List<Crdn> list = selectCrdns(List.of(crdnId));
return !list.isEmpty() ? list.get(0) : null;
}
}

@ -9,6 +9,7 @@ import java.util.Arrays;
import org.apache.commons.io.IOUtils;
import cokr.xit.fims.FimsConf;
import cokr.xit.foundation.data.DataObject;
import net.minidev.json.JSONArray;
import net.minidev.json.JSONObject;
@ -28,7 +29,8 @@ public class AttachedTxtParser extends LayoutParser{
boolean isMetaData = dataObject.string("FILE_EXTENSION").toUpperCase().equals("TXT");
if (isMetaData) {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),Charset.forName("EUC-KR")));
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),Charset.forName(ifEmpty(FimsConf.get().getTxtCharset(), "UTF-8"))));
String content = IOUtils.toString(br);
String[] contentDivision = null;
String part = "";

@ -1,5 +1,6 @@
package cokr.xit.fims.crdn.service;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
@ -9,7 +10,6 @@ import cokr.xit.fims.crdn.CrdnQuery;
import cokr.xit.foundation.data.DataObject;
public interface CrdnService {
/** .
* @param query
* <ul><li>pageNum: </li>
@ -19,6 +19,16 @@ public interface CrdnService {
*/
List<DataObject> getCrackdownList(CrdnQuery query);
/** .
* @param query
* @return
*/
DataObject getCrackdownInfo(CrdnQuery query);
List<Crdn> getCrackdowns(List<String> crdnIds);
Crdn getCrackdown(String crdnId);
/** .
* @param crdnIds ID
* @return
@ -31,6 +41,8 @@ public interface CrdnService {
*/
String create(Map<String, Object> nonQueryRequest, Crdn crdn, List<FileInfo> newFileInfoList);
String updateVehicleOwners(InputStream upload, List<String> crdnIds);
/** , .
* @param chgAmtSe , crdnId ID
* @return
@ -43,12 +55,6 @@ public interface CrdnService {
*/
String updateTagInfo(Crdn crdn);
/** .
* @param query
* @return
*/
DataObject getCrackdownInfo(CrdnQuery query);
/** .
* @param crdn
* @return
@ -90,6 +96,4 @@ public interface CrdnService {
* @return
*/
int countCrdn(CrdnQuery crdnQuery);
}
}

@ -92,7 +92,7 @@ public class CrdnBean extends AbstractBean {
} else { //민원연계자료가 아닐 경우
crdn.setCrdnSttsCd(isEmpty(crdn.getRtpyrId()) ? "01" : "21"); // 01: 초기상태 21: 납부자등록완료
}
crdn.setCrdnSttsChgDt(dateFormats.format("yyyyMMddHHmmss", System.currentTimeMillis()));
crdn.setCrdnSttsChgDt(dateFormats.now());
}
//단속 대장 등록
@ -188,18 +188,28 @@ public class CrdnBean extends AbstractBean {
crdn.setAdvntceAmt(basicAmt[1]);
// 단속(TB_CRDN) 대장을 수정한다.
int affected = crdnUpdtMapper.updateEditCrdn(crdn);
if (affected != 1)
throw new RuntimeException("단속 대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
if (crdnUpdtMapper.updateEditCrdn(crdn) != 1)
throw new RuntimeException("단속 대장 수정에 실패하였습니다.");
// 단속 부가 정보(TB_CRDN_ADI) 대장을 수정한다.
affected = crdnUpdtMapper.updateCrdnAddition(crdn);
if (affected != 1)
throw new RuntimeException("단속 부가 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
if (crdnUpdtMapper.updateCrdnAddition(crdn) != 1)
throw new RuntimeException("단속 부가 정보 수정에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}
public String updateCrdnPayer(Crdn crdn) {
updateCrackdown(crdn);
CrdnPayerAddrHstry crdnPayerAddrHstry = new CrdnPayerAddrHstry();
crdnPayerAddrHstry.setCrdnId(crdn.getCrdnId());
crdnPayerAddrHstry.setRtpyrId(crdn.getRtpyrId());
crdnPayerAddrHstry.setAddrSn(crdn.getAddrSn());
crdnPayerAddrHstryBean.updateCrdnPayerAddr(crdnPayerAddrHstry);
return "[S] 작업이 정상 처리 되었습니다.";
}
/** .
* @param crdn
* @return
@ -221,7 +231,7 @@ public class CrdnBean extends AbstractBean {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록한다.
boolean rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs)
throw new RuntimeException("단속 삭제 중 단속 대장의 단속상태코드 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("단속 삭제 중 단속 대장의 단속상태코드 변경에 실패하였습니다.");
Map<String, Object> paramMap = new HashMap<String, Object>();
List<String> crdnIdList = Arrays.asList(crdn.getCrdnId());
@ -232,12 +242,12 @@ public class CrdnBean extends AbstractBean {
// 단속(TB_CRDN) 대장을 삭제한다.
int affected = crdnUpdtMapper.deleteCrdn(paramMap);
if (affected != 1)
throw new RuntimeException("단속 대장 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("단속 대장 삭제에 실패하였습니다.");
// 단속(TB_CRDN) 대장을 삭제한다.
affected = crdnUpdtMapper.deleteCrdnAdi(paramMap);
if (affected != 1)
throw new RuntimeException("단속 부가 정보 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("단속 부가 정보 삭제에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}
@ -250,22 +260,14 @@ public class CrdnBean extends AbstractBean {
* </ul>
*/
public String removeCrackdownPayer(Crdn crdn) {
// 단속 ID로 단속 정보 조회
DataObject crdnInfo = crdnInfoMapper.selectCrdnInfo(crdn.getCrdnId());
String rtnMsg = ""; // 처리 결과 메시지
if (crdnInfo == null)
rtnMsg = "[F] 작업중 단속 자료가 조회되지 않습니다.";
return "[F] 작업중 단속 자료가 조회되지 않습니다.";
if (!"21,22".contains(crdnInfo.string("CRDN_STTS_CD")))
rtnMsg = "[F] 작업은 단속 처리상태가 납부자등록, 사전부과대상 자료만 가능합니다.";
// 오류메세지가 발생하면 종료..
if (rtnMsg.contains("[F]"))
return rtnMsg;
return "[F] 작업은 단속 처리상태가 납부자등록, 사전부과대상 자료만 가능합니다.";
// 단속(TB_CRDN) 대장에 납부자 ID를 삭제한다.
int rtnNocs = crdnUpdtMapper.deleteCrdnPayer(crdn);
if (rtnNocs != 1)
throw new RuntimeException("단속 대장에 납부자 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
if (crdnUpdtMapper.deleteCrdnPayer(crdn) != 1)
throw new RuntimeException("단속 대장에 납부자 삭제에 실패하였습니다.");
// 단속 상태 코드 변경
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
@ -276,9 +278,8 @@ public class CrdnBean extends AbstractBean {
crdnSttsHstry.setCrdnSttsCd("01"); // 초기상태
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록한다.
boolean rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs)
throw new RuntimeException("단속 대장의 단속상태코드 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
if (!crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry))
throw new RuntimeException("단속 대장의 단속상태코드 변경에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}
@ -291,6 +292,8 @@ public class CrdnBean extends AbstractBean {
* </ul>
*/
public String updateCrackdownStatus(Crdn crdn) {
crdnUpdtMapper.updateCrdnStatus(crdn);
// 단속 ID로 단속 정보 조회
DataObject crdnInfo = crdnInfoMapper.selectCrdnInfo(crdn.getCrdnId());
@ -299,13 +302,14 @@ public class CrdnBean extends AbstractBean {
crdnSttsHstry.setCrdnId(crdnInfo.string("CRDN_ID"));
crdnSttsHstry.setBfrSttsCd(crdnInfo.string("CRDN_STTS_CD"));
crdnSttsHstry.setBfrSttsChgDt(crdnInfo.string("CRDN_STTS_CHG_DT"));
crdnSttsHstry.setEtcCn("[개별총정보-단속상태변경] " + crdn.getEtcCn());
String etcCn = crdn.getEtcCn();
crdnSttsHstry.setEtcCn("[개별총정보-단속상태변경] " + etcCn);
crdnSttsHstry.setCrdnSttsCd(crdn.getCrdnSttsCd());
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록한다.
boolean rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs)
throw new RuntimeException("단속 대장의 단속상태코드 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("단속 대장의 단속상태코드 변경에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}

@ -1,5 +1,6 @@
package cokr.xit.fims.crdn.service.bean;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
@ -26,10 +27,13 @@ import cokr.xit.fims.cvlc.dao.CrdnCvlcptMapper;
import cokr.xit.fims.cvlc.service.bean.CrdnCvlcptMainBean;
import cokr.xit.fims.mngt.dao.TaskMapper;
import cokr.xit.fims.mngt.service.bean.TaskProcessor;
import cokr.xit.fims.payer.Payer;
import cokr.xit.fims.payer.service.bean.PayerBean;
import cokr.xit.fims.sprt.dao.TotalInfoMapper;
import cokr.xit.fims.sprt.service.bean.MediaBean;
import cokr.xit.foundation.component.AbstractServiceBean;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.interfaces.lvis.LvisA01;
@Service("crdnService")
public class CrdnServiceBean extends AbstractServiceBean implements CrdnService {
@ -67,6 +71,8 @@ public class CrdnServiceBean extends AbstractServiceBean implements CrdnService
private CrdnCvlcptMainBean crdnCvlcptMainBean;
@Resource(name="crdnBean")
private CrdnBean crdnBean;
@Resource(name = "payerBean")
private PayerBean payerBean;
@Override
public List<DataObject> getCrackdownList(CrdnQuery query) {
@ -152,6 +158,21 @@ public class CrdnServiceBean extends AbstractServiceBean implements CrdnService
return dataObjectList;
}
@Override
public DataObject getCrackdownInfo(CrdnQuery query) {
return crdnInfoMapper.selectCrdnInfo(query.getCrdnId());
}
@Override
public List<Crdn> getCrackdowns(List<String> crdnIds) {
return crdnInfoMapper.selectCrdns(crdnIds);
}
@Override
public Crdn getCrackdown(String crdnId) {
return crdnInfoMapper.selectCrdn(crdnId);
}
@Override
public String remove(String... crdnIds) {
return crdnBean.remove(crdnIds) ? "[S]" : "[F]단속 자료 삭제 중 오류가 발생하였습니다.";
@ -162,6 +183,42 @@ public class CrdnServiceBean extends AbstractServiceBean implements CrdnService
return crdnBean.create(nonQueryRequest, crdn, fileInfoList) ? "[S]" : "[F]단속 자료 등록 중 오류가 발생하였습니다.";
}
@Override
public String updateVehicleOwners(InputStream upload, List<String> crdnIds) {
List<Crdn> crdns = getCrackdowns(crdnIds);
if (crdns.isEmpty())
return "[F] 단속정보를 찾지 못했습니다.";
LvisA01.A01Request req = new LvisA01.A01Request();
Crdn first = crdns.get(0);
req.setClient(TaskProcessor.get().getLvisConfig(first.getTaskSeCd()));
try (InputStream input = upload) {
List<DataObject> payerList = payerBean.getPayers(req, input);
for (Crdn crdn: crdns) {
String vhrno = crdn.getVhrno(),
crdnYmd = crdn.getCrdnYmd();
for (DataObject info: payerList) {
if (!vhrno.equals(info.get("vhrno"))
|| !crdnYmd.equals(info.get("levy_stdde"))
) continue;
Payer payer = (Payer)info.get("payer");
crdn.setInfo(payer);
boolean statusChange = "01".equals(crdn.getCrdnSttsCd());
if (statusChange) {// 초기상태 -> 납부자등록
crdn.setCrdnSttsCd("21");
crdnBean.updateCrackdownStatus(crdn);
}
crdnBean.updateCrdnPayer(crdn);
};
}
return "[S] 저장됐습니다.";
} catch (Exception e) {
throw runtimeException(e);
}
}
@Override
public String updateOverTimeInfo(String chgAmtSe, String crdnId) {
DataObject crdnInfo = crdnInfoMapper.selectCrdnInfo(crdnId);
@ -189,9 +246,8 @@ public class CrdnServiceBean extends AbstractServiceBean implements CrdnService
default: throw new RuntimeException("2시간 초과 처리 중 오류가 발생하였습니다.");
}
if (crdnUpdtMapper.updateOverTimeInfo(crdn) != 1) {
if (crdnUpdtMapper.updateOverTimeInfo(crdn) != 1)
return "[F]2시간초과여부 변경 중 오류가 발생하였습니다.";
}
if (chgAmtSe.equals("0") || chgAmtSe.equals("1")) {
int[] basicAmt = crdnStngBean.getBasicAmt(crdn);
@ -216,11 +272,6 @@ public class CrdnServiceBean extends AbstractServiceBean implements CrdnService
return crdnUpdtMapper.updateTagInfo(crdn) == 1 ? "[S]" : "[F]";
}
@Override
public DataObject getCrackdownInfo(CrdnQuery query) {
return crdnInfoMapper.selectCrdnInfo(query.getCrdnId());
}
@Override
public String updateCrackdown(Crdn crdn) {
return crdnBean.updateCrackdown(crdn);
@ -254,15 +305,13 @@ public class CrdnServiceBean extends AbstractServiceBean implements CrdnService
int order = 0;
for (Map<String, Object> process : processList) {
if ("insert".equals(process.get("process"))) {
created += fileBean.create(List.of((FileInfo)process.get("obj")));
}
if ("delete".equals(process.get("process"))) {
deleted += fileBean.deleteByIDs((String)process.get("key"));
}
if ("order".equals(process.get("process"))) {
switch ((String)process.get("process")) {
case "insert": created += fileBean.create(List.of((FileInfo)process.get("obj"))); break;
case "delete": deleted += fileBean.deleteByIDs((String)process.get("key")); break;
case "order":
mediaBean.reorder((String)process.get("key"), order++);
orderChange = true;
break;
}
}

@ -207,24 +207,7 @@ public class ImportBean extends AbstractBean {
Payer payer = payers.get(req);
if (payer == null) return;
LvisA01.BasicInfo vehicle = payer.getVehicleInfo();
crdn.setSggCd(payer.getSggCd()); // 시군구 데이터 정리되면 지울 것
crdn.setRtpyrId(!isEmpty(vehicle.getErsr_regist_de()) ? "" : payer.getRtpyrId());
crdn.setRtpyrNm(payer.getRtpyrNm());
crdn.setRtpyrSeCd(payer.getRtpyrSeCd());
crdn.setRtpyrNo(payer.getRtpyrNo());
crdn.setZip(payer.getZip());
crdn.setAddr(payer.getAddr());
crdn.setDtlAddr(payer.getDtlAddr());
crdn.setAddrSn(blankIfEmpty(payer.getAddrSn()));
crdn.setVin(vehicle.getVin());
crdn.setVhclNm(vehicle.getCnm());
crdn.setVhclColr(vehicle.getColor_nm());
crdn.setVhclCpct(vehicle.getTkcar_pscap_co());
crdn.setUseFuelCd(vehicle.getUse_fuel_code());
crdn.setFfnlgCarmdlCd(getCarModel.apply(vehicle.getVhcty_asort_code(), vehicle.getMxmm_ldg()));
crdn.setErsrRegYmd(vehicle.getErsr_regist_de());
crdn.setInfo(payer);
});
/*
Map<String, Payer> payerMap = new HashMap<String, Payer>();

@ -44,6 +44,8 @@ import cokr.xit.fims.sprt.Sprt;
import cokr.xit.fims.sprt.service.bean.MediaBean;
import cokr.xit.fims.task.Task;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.interfaces.lvis.LvisA01;
import cokr.xit.interfaces.lvis.service.VehicleInfoService;
/** .<br />
* { }/crdn/crdn06 .
@ -184,40 +186,33 @@ public class Crdn06Controller extends ApplicationController {
return setPagingInfo(new ModelAndView("jsonView"), crdnService.getCrackdownList(query),"");
}
@Resource(name = "vehicleInfoService")
private VehicleInfoService vehicleInfoService;
@RequestMapping(name="차적조회조건", value="/010/vehicleReqs.do")
public ModelAndView downloadVehicleReqs(String... crdnIds) {
List<DataObject> list = crdnService.getCrackdownList(new CrdnQuery().setCrdnIds(crdnIds)).stream()
.map(row -> {
Object vhrno = row.remove("VHRNO");
Object crdnYmd = row.remove("CRDN_YMD");
row.clear();
row.set("VHRNO", vhrno)
.set("CRDN_YMD", crdnYmd);
return row;
})
.toList();
XLSWriter xlsx = new XLSWriter().worksheet(0).cell(0, 0).values(list);
List<DataObject> crdnList = crdnService.getCrackdownList(new CrdnQuery().setCrdnIds(crdnIds));
LvisA01.A01Request req = new LvisA01.A01Request();
req.setClient(TaskProcessor.get().getLvisConfig(crdnList.get(0).string("TASK_SE_CD")));
crdnList.forEach(row -> req.add(row.string("CRDN_YMD"), row.string("VHRNO"), null));
return new ModelAndView("downloadView")
.addObject("download", xlsx.getDownloadable().setFilename("차적조회조건-" + dateFormats.format("yyyyMMdd-HHmmss", System.currentTimeMillis()) + ".xlsx"));
.addObject("download",
vehicleInfoService.getBasicInfoReq(req)
.setFilename("차적요청정보-" + dateFormats.format("yyyyMMdd-HHmmss", System.currentTimeMillis()) + ".txt")
);
}
@PostMapping(name="차적정보 업데이트", value="/010/uploadVehicles.do")
public ModelAndView uploadVehicles(MultipartFile upload, String... crdnIds) {
List<DataObject> list = crdnService.getCrackdownList(new CrdnQuery().setCrdnIds(crdnIds)).stream()
.map(row -> {
Object vhrno = row.remove("VHRNO");
Object crdnYmd = row.remove("CRDN_YMD");
row.clear();
row.set("VHRNO", vhrno)
.set("CRDN_YMD", crdnYmd);
return row;
})
.toList();
XLSWriter xlsx = new XLSWriter().worksheet(0).cell(0, 0).values(list);
return new ModelAndView("jsonView")
.addObject("download", xlsx.getDownloadable().setFilename("차적조회조건-" + dateFormats.format("yyyyMMdd-HHmmss", System.currentTimeMillis()) + ".xlsx"));
try {
String rtnMsg = crdnService.updateVehicleOwners(upload.getInputStream(), List.of(crdnIds));
return new ModelAndView("jsonView")
.addObject("saved", rtnMsg.contains("[S]"))
.addObject("rtnMsg", rtnMsg.replace("[S] ", "").replace("[F] ", ""));
} catch (Exception e) {
throw runtimeException(e);
}
}
/** ID .

@ -309,13 +309,14 @@ public class CrdnCvlcptServiceBean extends AbstractServiceBean implements CrdnCv
for(int i=0; i < targetDataList.size(); i++) {
//단속상태 변경(차적조회완료 -> 부과대상)
if (targetDataList.get(i).string("CRDN_STTS_CD").equals("21")) {
DataObject targetInfo = targetDataList.get(i);
if (targetInfo.string("CRDN_STTS_CD").equals("21")) {
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
crdnSttsHstry.setCrdnId(targetDataList.get(i).string("CRDN_ID"));
crdnSttsHstry.setBfrSttsCd(targetDataList.get(i).string("CRDN_STTS_CD"));
crdnSttsHstry.setBfrSttsChgDt(targetDataList.get(i).string("CRDN_STTS_CHG_DT"));
crdnSttsHstry.setCrdnId(targetInfo.string("CRDN_ID"));
crdnSttsHstry.setBfrSttsCd(targetInfo.string("CRDN_STTS_CD"));
crdnSttsHstry.setBfrSttsChgDt(targetInfo.string("CRDN_STTS_CHG_DT"));
crdnSttsHstry.setCrdnSttsCd("21");
crdnSttsHstry.setTaskDtlId(targetDataList.get(i).string("CRDN_ID"));
crdnSttsHstry.setTaskDtlId(targetInfo.string("CRDN_ID"));
crdnSttsHstry.setEtcCn("민원답변등록");
boolean retSuccess = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!retSuccess) {
@ -324,11 +325,11 @@ public class CrdnCvlcptServiceBean extends AbstractServiceBean implements CrdnCv
}
CrdnCvlcpt crdnCvlcpt = new CrdnCvlcpt();
crdnCvlcpt.setCvlcptLinkId(targetDataList.get(i).string("CVLCPT_LINK_ID"));
crdnCvlcpt.setCvlcptLinkId(targetInfo.string("CVLCPT_LINK_ID"));
if (processType.equals("answerExecute")) {
crdnCvlcpt.setCvlcptTrsmCd("04");
if (ifEmpty(targetDataList.get(i).string("CVLCPT_PRCS_RSLT_CN"), () -> "").equals("")) {
String answerWords = crdnCvlcptMainBean.mappingAnswerWords(targetDataList.get(i).string("CRDN_ID"), currentSggCd, currentUserAcnt);
if (ifEmpty(targetInfo.string("CVLCPT_PRCS_RSLT_CN"), () -> "").equals("")) {
String answerWords = crdnCvlcptMainBean.mappingAnswerWords(targetInfo.string("CRDN_ID"), currentSggCd, currentUserAcnt);
crdnCvlcpt.setCvlcptPrcsRsltCn(answerWords);
}
} else if (processType.equals("answerComplete")){
@ -341,9 +342,9 @@ public class CrdnCvlcptServiceBean extends AbstractServiceBean implements CrdnCv
throw new RuntimeException("민원 전송 상태 변경 중 오류가 발생하였습니다.");
if (processType.equals("answerExecute")) {
if (targetDataList.get(i).string("LINK_TBL_NM").equals("TB_ESB_INTERFACE")
|| targetDataList.get(i).string("LINK_TBL_NM").equals("TB_SAEOL_CVLCPT_DTL")) {
boolean result = crdnCvlcptMainBean.insertTransmitInfo(false, targetDataList.get(i).string("CVLCPT_LINK_ID"));
if (targetInfo.string("LINK_TBL_NM").equals("TB_ESB_INTERFACE")
|| targetInfo.string("LINK_TBL_NM").equals("TB_SAEOL_CVLCPT_DTL")) {
boolean result = crdnCvlcptMainBean.insertTransmitInfo(false, targetInfo.string("CVLCPT_LINK_ID"));
if (!result)
throw new RuntimeException("민원 전송 상태 변경 중 전송자료 등록에 실패하였습니다.");
}

@ -1,7 +1,6 @@
package cokr.xit.fims.cvlc.service.bean;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -121,7 +120,6 @@ public class CrdnCvlcptSubBean extends AbstractBean {
*/
public boolean saveWarningWordsInfo(CrdnCvlcpt crdnCvlcpt) {
if (isEmpty(crdnCvlcpt.getAnsWordsId())) {
CodeQuery codeQuery = new CodeQuery()
.setGroupIDs("FIM022")
.setCodes(crdnCvlcpt.getAnsRsnCd());
@ -187,10 +185,8 @@ public class CrdnCvlcptSubBean extends AbstractBean {
excl01.setLevyExclRsnCd(crdn.getLevyExclRsnCd());
excl01.setEtcCn(crdn.getEtcCn());
boolean success = levyExclMapper.insertLevyExcl(excl01) == 1;
if (!success) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
if (!success)
throw new RuntimeException("부과제외 대장 등록에 실패하였습니다.");
}
dtlTaskId = excl01.getLevyExclId();
} else {
@ -204,7 +200,7 @@ public class CrdnCvlcptSubBean extends AbstractBean {
//단속 납부자 주소 변경 이력 등록
if ("Y".equals(nonQueryRequest.get("changePayerYn")) ||
"Y".equals(nonQueryRequest.get("changePayerAddrYn"))) {
"Y".equals(nonQueryRequest.get("changePayerAddrYn"))) {
CrdnPayerAddrHstry crdnPayerAddrHstry = new CrdnPayerAddrHstry();
crdnPayerAddrHstry.setCrdnId(crdn.getCrdnId());
@ -225,11 +221,7 @@ public class CrdnCvlcptSubBean extends AbstractBean {
crdnSttsHstry.setBfrSttsChgDt(crdnInfo.string("CRDN_STTS_CHG_DT"));
crdnSttsHstry.setCrdnSttsCd(crdn.getCrdnSttsCd());
crdnSttsHstry.setTaskDtlId(dtlTaskId);
if (crdn.getCrdnSttsCd().equals("81") || crdn.getCrdnSttsCd().equals("83")) {
crdnSttsHstry.setEtcCn("부과제외 대장 등록");
} else {
crdnSttsHstry.setEtcCn("민원 요청 수용");
}
crdnSttsHstry.setEtcCn("81,83".contains(crdn.getCrdnSttsCd()) ? "부과제외 대장 등록" : "민원 요청 수용");
int rtnNocs = crdnSttsHstryMapper.insertCrdnSttsHstry(crdnSttsHstry);
if (rtnNocs != 1)
@ -251,7 +243,7 @@ public class CrdnCvlcptSubBean extends AbstractBean {
if (isEmpty(newCrdnId))
throw new RuntimeException("단속민원 복사 등록 중 단속대장 등록에 실패하였습니다.");
if (!orgnlCrdnFileList.isEmpty() && orgnlCrdnFileList.size() > 0) {
if (!orgnlCrdnFileList.isEmpty()) {
List<FileInfo> fileInfoList = new ArrayList<FileInfo>();
List<File> files = new ArrayList<>();
@ -268,10 +260,9 @@ public class CrdnCvlcptSubBean extends AbstractBean {
oldFileIdList.add(orgnlCrdnFileList.get(iLoop).string("FILE_ID"));
fileInfoList.get(iLoop).setName(orgnlCrdnFileList.get(iLoop).string("FILE_NM"));
}
int effected = fileBean.create(fileInfoList);
if (effected == 0) {
int affected = fileBean.create(fileInfoList);
if (affected == 0)
throw new RuntimeException("단속민원 복사 등록 중 파일복사에 실패하였습니다.");
}
try {
for (int iLoop = 0; iLoop < fileInfoList.size(); iLoop++) {
@ -294,10 +285,10 @@ public class CrdnCvlcptSubBean extends AbstractBean {
String etcCn = "";
DataObject crdnInfo = crdnInfoMapper.selectCrdnInfo(crdnId);
if (trigger.equals("sendBack")) { //반송으로 인한 서손
if ("sendBack".equals(trigger)) { //반송으로 인한 서손
levyExclRsnCd = "191";
etcCn = "이송(이첩)";
} else if (trigger.equals("inquireTag")) { //표지조회실행으로 인한 서손
} else if ("inquireTag".equals(trigger)) { //표지조회실행으로 인한 서손
levyExclRsnCd = "103";
etcCn = "표지조회실행";
} else {
@ -308,7 +299,7 @@ public class CrdnCvlcptSubBean extends AbstractBean {
LevyExcl excl01 = new LevyExcl();
excl01.setCrdnId(crdnInfo.string("CRDN_ID"));
excl01.setSggCd(crdnInfo.string("SGG_CD"));
excl01.setLevyExclYmd((new SimpleDateFormat("yyyyMMdd")).format(new Date()));
excl01.setLevyExclYmd(dateFormats.format("yyyyMMdd", new Date()));
excl01.setLevyExclSeCd("1");
excl01.setLevyExclRsnCd(levyExclRsnCd);
excl01.setEtcCn(etcCn);

@ -107,51 +107,39 @@ public class LevyExclBean extends AbstractBean {
req.setDelYn("N");
DataObject levyExclInfo = levyExclMapper.selectLevyExclInfo(req);
String rtnMsg = ""; // 처리 결과 메시지
// 등록 대상 자료 검증
if (!levyExclInfo.string("LEVY_EXCL_ID").equals("")) { // 부과제외 ID가 있다면 이미 부과제외 자료가 존재하므로 종료..
rtnMsg = "[F] 작업중 이미 등록된 부과제외 자료가 존재합니다.";
}
if (!levyExclInfo.string("CVLCPT_LINK_ID").equals("")) { // 민원 ID
if (levyExclInfo.string("CVLCPT_PRCS_CD").equals("00")) { // 민원 처리상태 확인
rtnMsg = "[F] 작업중 단속 민원 자료가 처리 되지 않았습니다."
if (!isEmpty(levyExclInfo.string("LEVY_EXCL_ID"))) // 부과제외 ID가 있다면 이미 부과제외 자료가 존재하므로 종료..
return "[F] 작업중 이미 등록된 부과제외 자료가 존재합니다.";
if (!isEmpty(levyExclInfo.string("CVLCPT_LINK_ID"))) { // 민원 ID
if (levyExclInfo.string("CVLCPT_PRCS_CD").equals("00")) // 민원 처리상태 확인
return "[F] 작업중 단속 민원 자료가 처리 되지 않았습니다."
+ "<br>단속 민원 업무를 먼저 처리 하시기 바랍니다.";
}
}
if (levyExcl.getLevyExclSeCd().contains("1,2")) { // 부과제외(서손), 계고
if (toInt(levyExclInfo.get("CRDN_STTS_CD")) >= 51) { // 단속상태코드가 부과(51) 보다 크다면, 부과제외 또는 계고 등록을 할 수 없다.
rtnMsg = "[F] 작업 중 오류가 발생하였습니다."
if (toInt(levyExclInfo.get("CRDN_STTS_CD")) >= 51) // 단속상태코드가 부과(51) 보다 크다면, 부과제외 또는 계고 등록을 할 수 없다.
return "[F] 작업 중 오류가 발생하였습니다."
+ "<br>단속 자료의 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다";
}
} else if (levyExcl.getLevyExclSeCd().equals("3")) { // 부과취소
if (toInt(levyExclInfo.get("CRDN_STTS_CD")) < 51) { // 단속상태코드가 부과(51) 보다 작다면, 전액감액 등록 할 수 없다.
rtnMsg = "[F] 작업 중 오류가 발생하였습니다."
if (toInt(levyExclInfo.get("CRDN_STTS_CD")) < 51) // 단속상태코드가 부과(51) 보다 작다면, 전액감액 등록 할 수 없다.
return "[F] 작업 중 오류가 발생하였습니다."
+ "<br>단속 자료의 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다";
}
if (toInt(levyExclInfo.get("CRDN_STTS_CD")) > 55) { // 단속상태코드가 압류(55) 보다 크면, 전액감액 등록 할 수 없다.
rtnMsg = "[F] 작업 중 오류가 발생하였습니다."
if (toInt(levyExclInfo.get("CRDN_STTS_CD")) > 55) // 단속상태코드가 압류(55) 보다 크면, 전액감액 등록 할 수 없다.
return "[F] 작업 중 오류가 발생하였습니다."
+ "<br>단속 자료의 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다";
}
if (levyExclInfo.string("LEVY_ID").equals("")) { // 부과(TB_LEVY) 정보 확인
rtnMsg = "[F] 작업 중 오류가 발생하였습니다."
if (levyExclInfo.string("LEVY_ID").equals("")) // 부과(TB_LEVY) 정보 확인
return "[F] 작업 중 오류가 발생하였습니다."
+ "<br>부과 자료가 존재하지 않습니다."
+ "<br>부과제외로 처리하시기 바랍니다.";
}
}
// 오류메세지가 발생하면 종료..
if (rtnMsg.contains("[F]"))
return rtnMsg;
int rtnNocs = -1; // 처리 결과 건수
// 표지정보 확인여부가 미확인(0)이면 -> 조회미대상(9) 으로
if (levyExclInfo.string("PRK_PSBLTY_RSLT_CD").equals("0")) { // 주차 가능 결과 코드(FIM034) 0: 미확인
Crdn crdn = new Crdn();
crdn.setCrdnId(levyExclInfo.string("CRDN_ID")); // 단속 ID
crdn.setPrkPsbltyRsltCd("9"); // 주차 가능 결과 코드(FIM034) 9: 조회미대상
rtnNocs = levyExclMapper.updatePrkPsbltyRsltCd(crdn);
if (rtnNocs != 1)
throw new RuntimeException("부과제외 등록 작업 중 단속 대장의 표지정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
if (levyExclMapper.updatePrkPsbltyRsltCd(crdn) != 1)
throw new RuntimeException("부과제외 등록 작업 중 단속 대장의 표지정보 수정에 실패하였습니다.");
}
// 부과취소(전액감액)일 경우 부과(TB_LEVY)에 감액금액 입력이 필요..
@ -163,17 +151,16 @@ public class LevyExclBean extends AbstractBean {
rdamt.setRdamtSeCd("02"); // 감액 구분 코드 FIM085 - 02:부과취소
rdamt.setRdamtRsnCd(levyExcl.getLevyExclRsnCd()); // 감액 사유 코드
rtnMsg = rdamtBean.createRdamt(rdamt);
String rtnMsg = rdamtBean.createRdamt(rdamt);
if (!rtnMsg.contains("[S]"))
throw new RuntimeException(rtnMsg.replace("[F]", "")); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException(rtnMsg.replace("[F]", ""));
levyExcl.setRdamtId(rdamt.getRdamtId()); // 감액 ID
}
// 부과제외(TB_LEVY_EXCL) 대장을 등록한다.
rtnNocs = levyExclMapper.insertLevyExcl(levyExcl);
if (rtnNocs != 1)
throw new RuntimeException("부과제외 정보 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
if (levyExclMapper.insertLevyExcl(levyExcl) != 1)
throw new RuntimeException("부과제외 정보 등록에 실패하였습니다.");
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
// 단속 상태 이력(TB_CRDN_STTS_HSTRY)
@ -189,9 +176,8 @@ public class LevyExclBean extends AbstractBean {
});
crdnSttsHstry.setTaskDtlId(levyExcl.getLevyExclId());
boolean rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs)
throw new RuntimeException("부과제외 등록 작업 중 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
if (!crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry))
throw new RuntimeException("부과제외 등록 작업 중 단속상태 변경에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}
@ -205,9 +191,8 @@ public class LevyExclBean extends AbstractBean {
*/
public String updateLevyExcl(LevyExcl levyExcl) {
// 부과제외(TB_LEVY_EXCL) 대장을 수정한다.
int rtnNocs = levyExclMapper.updateLevyExcl(levyExcl);
if (rtnNocs != 1)
throw new RuntimeException("부과제외 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
if (levyExclMapper.updateLevyExcl(levyExcl) != 1)
throw new RuntimeException("부과제외 정보 수정에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}
@ -226,22 +211,19 @@ public class LevyExclBean extends AbstractBean {
req.setDelYn("N");
DataObject levyExclInfo = levyExclMapper.selectLevyExclInfo(req);
String rtnMsg = ""; // 처리 결과 메시지
// 삭제 대상 자료 검증
if (levyExclInfo == null)
rtnMsg = "[F] 작업 중 부과제외 자료가 조회되지 않습니다.";
return "[F] 작업 중 부과제외 자료가 조회되지 않습니다.";
if (levyExclInfo.string("LEVY_EXCL_SE_CD").equals("1") && !levyExclInfo.string("CRDN_STTS_CD").equals("81")) { // 부과제외(서손)
rtnMsg = "[F] 작업 중 오류가 발생하였습니다."
return "[F] 작업 중 오류가 발생하였습니다."
+ "<br>단속 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다.";
} else if (levyExclInfo.string("LEVY_EXCL_SE_CD").equals("2") && !("83").contains(levyExclInfo.string("CRDN_STTS_CD"))) { // 계고
rtnMsg = "[F] 작업 중 오류가 발생하였습니다."
return "[F] 작업 중 오류가 발생하였습니다."
+ "<br>단속 자료의 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다.";
} else if (levyExclInfo.string("LEVY_EXCL_SE_CD").equals("3") && !levyExclInfo.string("CRDN_STTS_CD").equals("80")) { // 부과취소
rtnMsg = "[F] 작업 중 오류가 발생하였습니다."
return "[F] 작업 중 오류가 발생하였습니다."
+ "<br>단속 자료의 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다.";
}
if (rtnMsg.contains("[F]"))
return rtnMsg;
int rtnNocs = -1; // 처리 결과 건수
// 부과제외 구분이 부과제외(서손)일 경우
@ -270,8 +252,7 @@ public class LevyExclBean extends AbstractBean {
crdnSttsHstry.setEtcCn(levyExcl.getDelRsn()); // 기타 내용 - 삭제 사유
crdnSttsHstry.setUseYn("N"); // 사용 여부
boolean rtnScs = crdnSttsHstryBean.removeHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs)
if (!crdnSttsHstryBean.removeHstryUpdateCrdnSttsCd(crdnSttsHstry))
throw new RuntimeException("부과제외 삭제 작업중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
return "[S] 작업이 정상 처리 되었습니다.";

@ -445,4 +445,12 @@ public class TaskProcessor extends AbstractBean {
public String getNoticeDelivery(String taskSeCd) {
return "eGreen";
}
/** .
* @param taskSeCd
* @return
*/
public String getLvisConfig(String taskSeCd) {
return "default";
}
}

@ -188,5 +188,4 @@ public class Payer extends AbstractEntity {
* ID
*/
private String crdnId;
}

@ -71,13 +71,6 @@ public interface PayerService {
* @return ()
*/
Payer findVehicleOwner(LvisA01.A01Request req);
// Payer findVehicleOwner(BasicInfoRequest req);
/** () .
* @param req
* @return ()
*/
// Payer findVehicleOwner(BasicInfoExtRequest req);
/** .<br />
* @param req
@ -111,5 +104,4 @@ public interface PayerService {
* @return
*/
DataObject getLastPayerAddrInfo(PayerQuery req);
}
}

@ -1,5 +1,6 @@
package cokr.xit.fims.payer.service.bean;
import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -228,20 +229,33 @@ public class PayerBean extends AbstractBean {
* @return
*/
private Payer getPayer(LvisA01.BasicInfo basicInfo, LvisA01.A01Request req) {
Payer payer = new Payer();
payer.setSggCd(req.getSigungu_code());
payer.setRtpyrInptSeCd("02");
payer.setAddrInptSeCd("02");
if (basicInfo == null) {
basicInfo = new LvisA01.BasicInfo();
basicInfo.setVhrno(req.getRecord().get(0).getVhrno());
payer.setVehicleInfo(basicInfo);
return payer;
}
return getPayer(basicInfo, req.getSigungu_code(), null);
}
public List<DataObject> getPayers(LvisA01.A01Request req, InputStream upload) {
List<DataObject> list = vehicleInfoBean.getBasicInfo(req, upload);
list.forEach(row-> {
LvisA01.BasicInfo basicInfo = (LvisA01.BasicInfo)row.get("basicInfo");
Payer payer = getPayer(basicInfo, req.getSigungu_code(), row.string("zipCode"));
row.put("payer", payer);
});
return list;
}
private Payer getPayer(LvisA01.BasicInfo basicInfo, String sggCd, String zipCode) {
Payer payer = new Payer();
payer.setSggCd(sggCd);
payer.setRtpyrInptSeCd("02");
payer.setAddrInptSeCd("02");
payer.setVhrno(basicInfo.getVhrno());
payer.setVehicleInfo(basicInfo);
payer.setRtpyrSeCd(
switch (blankIfEmpty(basicInfo.getMber_se_code())) {
case "11" -> "01";
@ -254,16 +268,23 @@ public class PayerBean extends AbstractBean {
);
String str = basicInfo.getMber_se_no();
payer.setRtpyrNo(str);
if ("01,02".contains(payer.getRtpyrSeCd())) {
if ("01,02".contains(payer.getRtpyrSeCd()))
payer.setRtpyrBrdt(str.substring(0, 6));
}
payer.setRtpyrNm(basicInfo.getMber_nm());
payer.setRtpyrTelno(basicInfo.getTelno());
payer.setRoadNmCd(basicInfo.getUse_strnghld_road_nm_code());
String telno = basicInfo.getTelno();
if (telno.startsWith("010"))
payer.setRtpyrMblTelno(telno);
else
payer.setRtpyrTelno(telno);
String use_strnghld_road_nm_code = basicInfo.getUse_strnghld_road_nm_code();
payer.setRoadNmCd(use_strnghld_road_nm_code);
payer.setUdgdSeCd(ifEmpty(basicInfo.getUsgsrhld_undgrnd_buld_se_code(), "0"));
if (!isEmpty(str = basicInfo.getUse_strnghld_buld_main_no()))
String use_strnghld_buld_main_no = basicInfo.getUse_strnghld_buld_main_no();
if (!isEmpty(str = use_strnghld_buld_main_no))
payer.setBmno(toInt(str));
if (!isEmpty(str = basicInfo.getUse_strnghld_buld_sub_no()))
String use_strnghld_buld_sub_no = basicInfo.getUse_strnghld_buld_sub_no();
if (!isEmpty(str = use_strnghld_buld_sub_no))
payer.setBsno(toInt(str));
payer.setStdgCd(basicInfo.getUse_strnghld_legaldong_code());
payer.setDongCd(basicInfo.getUse_strnghld_adstrd_code());
@ -274,22 +295,33 @@ public class PayerBean extends AbstractBean {
payer.setSno(toInt(str));
//주소 세팅
DataObject roadNameInfo = vehicleInfoMapper.selectRoadNmAdres(
basicInfo.getUse_strnghld_road_nm_code(),
basicInfo.getUse_strnghld_buld_main_no(),
basicInfo.getUse_strnghld_buld_sub_no()
);
String road_nm_adres = roadNameInfo.string("ROAD_NM_ADRES");
payer.setAddr(road_nm_adres);
payer.setDtlAddr(str = basicInfo.getUse_strnghld_adres_nm());
payer.setZip(roadNameInfo.string("ZIP"));
// 전체 주소
if (!isEmpty(str))
payer.setWholAddr(road_nm_adres + ", " + str);
else
payer.setWholAddr(road_nm_adres);
payer.setWholAddr(basicInfo.getUsgsrhld_adres_full());
if (!isEmpty(zipCode))
payer.setZip(zipCode);
if (!isEmpty(use_strnghld_road_nm_code)
&& !isEmpty(use_strnghld_buld_main_no)
&& !isEmpty(use_strnghld_buld_sub_no)
) {
DataObject roadNameInfo = vehicleInfoMapper.selectRoadNmAdres(
use_strnghld_road_nm_code,
use_strnghld_buld_main_no,
use_strnghld_buld_sub_no
);
String road_nm_adres = roadNameInfo.string("ROAD_NM_ADRES");
payer.setAddr(road_nm_adres);
payer.setDtlAddr(str = basicInfo.getUse_strnghld_adres_nm());
payer.setZip(roadNameInfo.string("ZIP"));
// 전체 주소
if (!isEmpty(str))
payer.setWholAddr(road_nm_adres + ", " + str);
else
payer.setWholAddr(road_nm_adres);
}
if (isEmpty(payer.getRtpyrNo()))
return payer;
Payer result = create(payer) ? payer : getPayerAddrInfo(payer);
if (result != null)
result.setVehicleInfo(basicInfo);

@ -282,21 +282,16 @@ public class RcvmtBean extends AbstractBean {
// 합계 금액이 0보다 크면서 완납(01) 또는 과납(04)이라면 단속 상태 코드를 수정한다.
if (levy.getLastAmt() > 0 && "01,04".contains(rcvmtInfo.string("RCVMT_SE_CD"))) {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
String newCrdnSttsCd = "";
if (levyInfo.string("CRDN_STTS_CD").equals("71")) {
newCrdnSttsCd = "42"; // 사전통보 발송
} else if (levyInfo.string("CRDN_STTS_CD").equals("72")) {
newCrdnSttsCd = "51"; // 부과
} else if (levyInfo.string("CRDN_STTS_CD").equals("73")) {
newCrdnSttsCd = "52"; // 독촉
} else if (levyInfo.string("CRDN_STTS_CD").equals("74")) {
newCrdnSttsCd = "54"; // 압류대상
} else if (levyInfo.string("CRDN_STTS_CD").equals("75")) {
newCrdnSttsCd = "55"; // 압류
}
String newCrdnSttsCd = switch (levyInfo.string("CRDN_STTS_CD")) {
case "71" -> "42"; // 사전통보 발송
case "72" -> "51"; // 부과
case "73" -> "52"; // 독촉
case "74" -> "54"; // 압류대상
case "75" -> "55"; // 압류
default -> "";
};
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
crdnSttsHstry.setCrdnId(levyInfo.string("CRDN_ID")); // 단속 ID
crdnSttsHstry.setBfrSttsCd(levyInfo.string("CRDN_STTS_CD")); // 단속 상태 코드
crdnSttsHstry.setBfrSttsChgDt(levyInfo.string("CRDN_STTS_CHG_DT")); // 단소 상태 변경 일시

@ -4,152 +4,66 @@ import cokr.xit.foundation.AbstractEntity;
import lombok.Getter;
import lombok.Setter;
/**
*
/**
* @author JoJH
*/
@Getter
@Setter
public class Sndng extends AbstractEntity {
/**
* ID
*/
/** 발송 ID */
private String sndngId;
/**
*
*/
/** 시군구 코드 */
private String sggCd;
/**
*
*/
/** 업무 구분 코드 */
private String taskSeCd;
/**
*
*/
/** 부서 코드 */
private String deptCd;
/**
*
*/
/** 발송 등록 구분 코드 */
private String sndngRegSeCd;
/**
*
*/
/** 발송 구분 코드 */
private String sndngSeCd;
/**
* ID
*/
/** 위반 ID */
private String vltnId;
/**
*
*/
/** 위반 코드 */
private String vltnCd;
/**
*
*/
/** 부과 시작 일자 */
private String levyBgngYmd;
/**
*
*/
/** 부과 종료 일자 */
private String levyEndYmd;
/**
*
*/
/** 발송 일자 */
private String sndngYmd;
/**
*
*/
/** 발송 종료 일자 */
private String sndngEndYmd;
/**
*
*/
/** 제목 명 */
private String ttlNm;
/**
*
*/
/** 문서 번호 */
private String docNo;
/**
*
*/
/** 기타 내용 */
private String etcCn;
/**
*
*/
/** 총건수 */
private Integer tnocs;
/**
*
*/
/** 총금액 */
private Long gramt;
/**
*
*/
/** 외부연계식별키 */
private String conKey;
/**
*
*/
/** 취급 구분 */
private String divKb;
/**
* ID
*/
/** 전자우편 안내문 ID */
private String epostNoticeId;
/**
*
*/
/** 발송 상태 코드 */
private String sndngSttsCd;
/**
*
*/
/** 재발송 여부 */
private String rsndYn;
/**
*
*/
/** 삭제 여부 */
private String delYn;
/**
*
*/
/** 삭제 사유 */
private String delRsn;
/**
* Ids
*/
/** 발송 Ids */
private String[] sndngIds;
/**
* Ids
*/
/** 단속 Ids */
private String[] crdnIds;
/**
* Ids
*/
/** 발송 상세 Ids */
private String[] sndngDtlIds;
/**
* - 0: 1:
*/
/** 우편 발송 구분 코드 - 0:일반 1:등기 */
private String postSndngSeCd;
}
}

@ -140,7 +140,7 @@ public class SndngBean extends AbstractBean {
SndngDtl sndngDtl = new SndngDtl(sndng).setPayerInfo(crdnPayerInfo);
int rtnNocs = sndngDtlMapper.insertSndngDtl(sndngDtl);
if (rtnNocs != 1)
throw new RuntimeException("발송상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송상세 등록에 실패하였습니다.");
// 단속 상태 코드를 수정한다.
if ("83".equals(crdnPayerInfo.string("CRDN_STTS_CD"))) {
@ -154,7 +154,7 @@ public class SndngBean extends AbstractBean {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
boolean rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs)
throw new RuntimeException("발송상세 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송상세 등록 중 단속대장의 상태변경에 실패하였습니다.");
}
return "[S] 작업이 정상 처리 되었습니다.";
@ -206,13 +206,13 @@ public class SndngBean extends AbstractBean {
// 발송(TB_SNDNG) 대장을 등록한다.
int rtnNocs = sndngMapper.insertSndng(sndng);
if (rtnNocs != 1)
throw new RuntimeException("계고장 발송 등록 작업에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("계고장 발송 등록 작업에 실패하였습니다.");
// 발송 상세(TB_SNDNG_DTL) 대장을 등록한다.
for (int i = 0; i < trgtList.size(); i++) {
String rtnMsg = createWrngSndngDtl(sndng, trgtList.get(i).string("CRDN_ID"));
if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료..
throw new RuntimeException(rtnMsg.replace("[F]", "")); // 예외를 발생시켜서 DB Rollback
if (!rtnMsg.contains("[S]"))
throw new RuntimeException(rtnMsg.replace("[F]", ""));
}
return "[S] 작업이 정상 처리 되었습니다.";
@ -235,7 +235,7 @@ public class SndngBean extends AbstractBean {
// 발송 상세 상태 코드 검증 - 00(처리전)
for (DataObject info : sndngDtlList) {
if (!"00".equals(info.string("SNDNG_DTL_STTS_CD")))
throw new RuntimeException("[F] 발송 상세 자료중 상태코드가 '처리전'이 아닌 자료가 있습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("[F] 발송 상세 자료중 상태코드가 '처리전'이 아닌 자료가 있습니다.");
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
crdnSttsHstry.setCrdnId(info.string("CRDN_ID")); // 단속 ID
@ -246,14 +246,14 @@ public class SndngBean extends AbstractBean {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장의 사용 여부를 "N"으로 처리하고, 단속(TB_CRDN) 대장의 단속 상태 코드를 수정한다.
boolean rtnScs = crdnSttsHstryBean.removeHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs)
throw new RuntimeException("[F] 발송상세 삭제 작업중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("[F] 발송상세 삭제 작업중 단속 대장의 단속상태 변경에 실패하였습니다.");
}
// 발송(TB_SNDNG), 발송 상세(TB_SNDNG_DTL) 대장을 삭제한다.
String rtnMsg = removeSndng(sndng);
// 메시지 확인
if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료..
throw new RuntimeException(rtnMsg.replace("[F]", "")); // 예외를 발생시켜서 DB Rollback
if (!rtnMsg.contains("[S]"))
throw new RuntimeException(rtnMsg.replace("[F]", ""));
return "[S] 작업이 정상 처리 되었습니다.";
}
@ -341,13 +341,13 @@ public class SndngBean extends AbstractBean {
// 발송(TB_SNDNG) 대장을 등록한다.
int rtnNocs = sndngMapper.insertSndng(sndng);
if (rtnNocs != 1)
throw new RuntimeException("사전통지 발송 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("사전통지 발송 등록에 실패하였습니다.");
// 발송 상세 대장에 등록한다.
for (int i = 0; i < trgtList.size(); i++) {
String rtnMsg = createAdvntceSndngDtl(sndng, trgtList.get(i).string("CRDN_ID"));
if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료..
throw new RuntimeException(rtnMsg.replace("[F]", "")); // 예외를 발생시켜서 DB Rollback
if (!rtnMsg.contains("[S]"))
throw new RuntimeException(rtnMsg.replace("[F]", ""));
}
return "[S] 작업이 정상 처리 되었습니다.";
@ -430,8 +430,8 @@ public class SndngBean extends AbstractBean {
// 부과(TB_LEVY) 대장에 부과일자, 최초납기일자, 납기일자를 수정한다.
rtnMsg = levyBean.updateRdctLevyYmd(levy);
if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료..
throw new RuntimeException(rtnMsg.replace("[F]", "")); // 예외를 발생시켜서 DB Rollback
if (!rtnMsg.contains("[S]"))
throw new RuntimeException(rtnMsg.replace("[F]", ""));
}
}
@ -455,7 +455,7 @@ public class SndngBean extends AbstractBean {
// 발송 상세(TB_SNDNG_DTL) 대장을 등록한다.
int rtnNocs = sndngDtlMapper.insertSndngDtl(sndngDtl);
if (rtnNocs != 1)
throw new RuntimeException("발송상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송상세 등록에 실패하였습니다.");
// 단속 대장에 사전통지 일자를 수정한다.
Crdn crdn = new Crdn();
@ -469,7 +469,7 @@ public class SndngBean extends AbstractBean {
// 단속(TB_CRDN) 대장을 수정한다.
rtnNocs = crdnUpdtMapper.updateAdvntceYmd(crdn);
if (rtnNocs != 1)
throw new RuntimeException("단속 대장에 사전통지일자 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("단속 대장에 사전통지일자 수정에 실패하였습니다.");
// 단속 상태 이력(TB_CRDN_STTS_HSTRY)을 등록한다.
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
@ -485,12 +485,12 @@ public class SndngBean extends AbstractBean {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs)
throw new RuntimeException("발송상세 등록 작업중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송상세 등록 작업중 단속 대장의 단속상태 변경에 실패하였습니다.");
} else if (crdnPayerInfo.string("CRDN_STTS_CD").equals("31")) {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록한다.
rtnScs = crdnSttsHstryBean.create(crdnSttsHstry);
if (!rtnScs)
throw new RuntimeException("발송상세 등록 작업중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송상세 등록 작업중 단속 대장의 단속상태 변경에 실패하였습니다.");
}
return "[S] 작업이 정상 처리 되었습니다.";
@ -512,7 +512,7 @@ public class SndngBean extends AbstractBean {
// 발송 상세 상태 코드 검증 - 00(처리전)
for (DataObject info: sndngDtlMapper.selectSndngDtls(req)) {
if (!"00".equals(info.string("SNDNG_DTL_STTS_CD")))
throw new RuntimeException("[F] 발송 상세 자료중 상태코드가 '처리전'이 아닌 자료가 있습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("[F] 발송 상세 자료중 상태코드가 '처리전'이 아닌 자료가 있습니다.");
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
crdnSttsHstry.setCrdnId(info.string("CRDN_ID")); // 단속 ID
@ -523,14 +523,14 @@ public class SndngBean extends AbstractBean {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장의 사용 여부를 "N"으로 처리하고, 단속(TB_CRDN) 대장의 단속 상태 코드를 수정한다.
boolean rtnScs = crdnSttsHstryBean.removeHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs)
throw new RuntimeException("[F] 발송상세 삭제 작업중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("[F] 발송상세 삭제 작업중 단속 대장의 단속상태 변경에 실패하였습니다.");
}
// 발송(TB_SNDNG), 발송 상세(TB_SNDNG_DTL) 대장을 삭제한다.
String rtnMsg = removeSndng(sndng);
// 메시지 확인
if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료..
throw new RuntimeException(rtnMsg.replace("[F]", "")); // 예외를 발생시켜서 DB Rollback
if (!rtnMsg.contains("[S]"))
throw new RuntimeException(rtnMsg.replace("[F]", ""));
return "[S] 작업이 정상 처리 되었습니다.";
}
@ -608,13 +608,13 @@ public class SndngBean extends AbstractBean {
// 발송(TB_SNDNG) 대장을 등록한다.
int rtnNocs = sndngMapper.insertSndng(sndng);
if (rtnNocs != 1)
throw new RuntimeException("고지서 발송 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("고지서 발송 등록에 실패하였습니다.");
// 발송 상세 대장에 등록한다.
for (DataObject nhtTrgt: nhtTrgtList) {
String rtnMsg = createNhtSndngDtl(sndng, nhtTrgt.string("CRDN_ID"));
if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료..
throw new RuntimeException(rtnMsg.replace("[F]", "")); // 예외를 발생시켜서 DB Rollback
if (!rtnMsg.contains("[S]"))
throw new RuntimeException(rtnMsg.replace("[F]", ""));
}
return "[S] 작업이 정상 처리 되었습니다.";
@ -650,7 +650,7 @@ public class SndngBean extends AbstractBean {
SndngDtl sndngDtl = new SndngDtl(sndng).setPayerInfo(crdnPayerInfo);
int rtnNocs = sndngDtlMapper.insertSndngDtl(sndngDtl);
if (rtnNocs != 1)
throw new RuntimeException("발송상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송상세 등록에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}
@ -710,12 +710,12 @@ public class SndngBean extends AbstractBean {
sndngDtl.setDelRsn(sndng.getDelRsn()); // 삭제 사유
int rtnNocs = sndngDtlMapper.deleteSndngDtl(sndngDtl);
if (rtnNocs < 1)
throw new RuntimeException("발송상세 정보 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송상세 정보 삭제에 실패하였습니다.");
// 발송(TB_SNDNG) 대장을 삭제한다.
rtnNocs = sndngMapper.deleteSndng(sndng);
if (rtnNocs != 1)
throw new RuntimeException("발송 정보 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("발송 정보 삭제에 실패하였습니다.");
return "[S] 작업이 정상 처리 되었습니다.";
}
@ -729,8 +729,9 @@ public class SndngBean extends AbstractBean {
*/
public String createEPost(Sndng sndng) {
//test/resources/우편통합 cs소스.txt 참고
SndbQuery sndbQuery = new SndbQuery().setSndngId(sndng.getSndngId()).setDelYn("N");
// 1. 발송 대장 조회
DataObject sndngInfo = sndngMapper.selectSndngInfo(new SndbQuery().setSndngId(sndng.getSndngId()));
DataObject sndngInfo = sndngMapper.selectSndngInfo(sndbQuery);
// 2. 사용자 정보를 조회한다.
DataObject userInfo = userBean.getUserInfo(currentUser().getId());
// 3. 자치단체 및 부서 정보를 조회한다.
@ -878,7 +879,7 @@ public class SndngBean extends AbstractBean {
int affected = sndngMapper.updateEPostSndng(updtSndng); // 전자우편 발송 내역 수정
if (affected != 1)
throw new RuntimeException("우편통합 발송 작업중 발송 내역 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("우편통합 발송 작업중 발송 내역 수정에 실패하였습니다.");
// 8. 전자우편 접수 상세 내역을 등록한다.
String infoSndngSeNm = switch (sndngSeCd) { // 약식 발송 구분 명
@ -915,18 +916,15 @@ public class SndngBean extends AbstractBean {
String recevSubj3 = deptSggInfo.string("SGG_NM");
// 9. 전자우편 접수 상세 조회
SndbQuery sndbQuery = new SndbQuery()
.setSndngId(sndng.getSndngId())
.setDelYn("N");
for (DataObject sndngTrgt: sndngDtlMapper.selectSndngTrgtDtlIds(sndbQuery)) {
for (DataObject sndngDtlInfo: sndngDtlMapper.selectSndngDtlList(sndbQuery)) {
// for (DataObject sndngTrgt: sndngDtlMapper.selectSndngTrgtDtlIds(sndbQuery)) {
// 발송 상세 및 단속, 납부자, 부과 정보 조회
DataObject sndngDtlInfo = sndngDtlMapper.selectSndngDtlInfo(new SndbQuery().setSndngDtlId(sndngTrgt.string("SNDNG_DTL_ID")));
// DataObject sndngDtlInfo = sndngDtlMapper.selectSndngDtlInfo(new SndbQuery().setSndngDtlId(sndngTrgt.string("SNDNG_DTL_ID")));
// 가상계좌취득 자료가 아니면 다음 자료로..
if (!sndngDtlInfo.string("SNDNG_DTL_STTS_CD").equals("02")) {
// continue;
throw new RuntimeException("우편통합 발송 작업중 발송상세 상태코드가 가상계좌취득이 아닌 자료를 발견되었습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("우편통합 발송 작업중 발송상세 상태코드가 가상계좌취득이 아닌 자료를 발견되었습니다.");
}
String dtlSndngSeCd = sndngDtlInfo.string("SNDNG_SE_CD");
@ -974,7 +972,7 @@ public class SndngBean extends AbstractBean {
if (dudtAftrAmt > dudtAftrPcptax) { // 납기후 금액이 본세보다 크다면..
dudtAftrAdamt = toInt(sndngDtlInfo.get("DUDT_AFTR_AMT")) - toInt(sndngDtlInfo.get("PCPTAX"));
} else if (dudtAftrAmt < dudtAftrPcptax) { // 납기후 금액이 본세보다 작다면 오류..
throw new RuntimeException("우편통합 발송 작업중 납기후 금액이 본세보다 작은 자료가 발견되었습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("우편통합 발송 작업중 납기후 금액이 본세보다 작은 자료가 발견되었습니다.");
} else {
dudtAftrAdamt = 0;
}
@ -1118,7 +1116,7 @@ public class SndngBean extends AbstractBean {
if (fileCount < 4)
setPhotoFilename.get(i).accept(fileName);
} catch (IOException e) {
throw new RuntimeException("우편통합 발송 작업중 전자우편 단속 사진 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("우편통합 발송 작업중 전자우편 단속 사진 등록에 실패하였습니다.");
}
}
}
@ -1138,7 +1136,7 @@ public class SndngBean extends AbstractBean {
affected = sndngDtlMapper.updateSndngDtlEPost(sndngDtl); // 전자우편 발송상세 내역 수정
if (affected != 1)
throw new RuntimeException("우편통합 발송 작업중 전자우편 상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
throw new RuntimeException("우편통합 발송 작업중 전자우편 상세 등록에 실패하였습니다.");
}
return "[S] 작업이 정상 처리 되었습니다.";

@ -3,95 +3,60 @@
<mapper namespace="cokr.xit.fims.crdn.dao.CrdnInfoMapper">
<resultMap id="crdnRow" type="cokr.xit.fims.crdn.Crdn">
<result property="crdnId" column="CRDN_ID" /> <!-- 단속 ID -->
<result property="sggCd" column="SGG_CD" /> <!-- 시군구 코드 -->
<result property="taskSeCd" column="TASK_SE_CD" /> <!-- 업무 구분 코드 -->
<result property="crdnRegSeCd" column="CRDN_REG_SE_CD" /> <!-- 단속 등록 구분 코드 -->
<result property="crdnInptSeCd" column="CRDN_INPT_SE_CD" /> <!-- 단속 입력 구분 코드 -->
<result property="cvlcptLinkYn" column="CVLCPT_LINK_YN" /> <!-- 민원 연계 여부 -->
<result property="cvlcptLinkTblNm" column="CVLCPT_LINK_TBL_NM" /> <!-- 민원 연계 테이블 명 -->
<result property="cvlcptLinkId" column="CVLCPT_LINK_ID" /> <!-- 민원 연계 ID -->
<result property="crdnSeCd" column="CRDN_SE_CD" /> <!-- 단속 구분 코드 -->
<result property="rtpyrId" column="RTPYR_ID" /> <!-- 납부자 ID -->
<result property="crdnYmd" column="CRDN_YMD" /> <!-- 단속 일자 -->
<result property="crdnTm" column="CRDN_TM" /> <!-- 단속 시각 -->
<result property="vhrno" column="VHRNO" /> <!-- 차량번호 -->
<result property="crdnStdgNm" column="CRDN_STDG_NM" /> <!-- 단속 법정동 명 -->
<result property="crdnRoadNm" column="CRDN_ROAD_NM" /> <!-- 단속 도로 명 -->
<result property="crdnPlc" column="CRDN_PLC" /> <!-- 단속 장소 -->
<result property="dtlCrdnPlc" column="DTL_CRDN_PLC" /> <!-- 상세 단속 장소 -->
<result property="teamId" column="TEAM_ID" /> <!-- 조 ID -->
<result property="vltnId" column="VLTN_ID" /> <!-- 위반 ID -->
<result property="crdnSpareaCd" column="CRDN_SPAREA_CD" /> <!-- 단속 특별구역 코드 -->
<result property="crdnBgngTm" column="CRDN_BGNG_TM" /> <!-- 단속 시작 시각 -->
<result property="crdnEndTm" column="CRDN_END_TM" /> <!-- 단속 종료 시간 -->
<result property="crdnSn" column="CRDN_SN" /> <!-- 단속 일련번호 -->
<result property="gpsX" column="GPS_X" /> <!-- GPS X -->
<result property="gpsY" column="GPS_Y" /> <!-- GPS Y -->
<result property="moscX" column="MOSC_X" /> <!-- 모자이크 X -->
<result property="moscY" column="MOSC_Y" /> <!-- 모자이크 Y -->
<result property="towngYn" column="TOWNG_YN" /> <!-- 견인 여부 -->
<result property="atchFileCnt" column="ATCH_FILE_CNT" /> <!-- 첨부 파일 수 -->
<result property="vin" column="VIN" /> <!-- 차대번호 -->
<result property="vhclNm" column="VHCL_NM" /> <!-- 차량 명 -->
<result property="vhclColr" column="VHCL_COLR" /> <!-- 차량 색상 -->
<result property="vhclCpct" column="VHCL_CPCT" /> <!-- 차량 승차정원 -->
<result property="useFuelCd" column="USE_FUEL_CD" /> <!-- 사용 연료 코드 -->
<result property="ffnlgCarmdlCd" column="FFNLG_CARMDL_CD" /> <!-- 과태료 차종 코드 -->
<result property="prkPsbltyRsltCd" column="PRK_PSBLTY_RSLT_CD" /> <!-- 주차 가능 결과 코드 -->
<result property="vltnNmtm" column="VLTN_NMTM" /> <!-- 위반 횟수 -->
<result property="ovtmYn" column="OVTM_YN" /> <!-- 시간외 여부 -->
<result property="ffnlgCrdnAmt" column="FFNLG_CRDN_AMT" /> <!-- 과태료 단속 금액 -->
<result property="ffnlgRdcrt" column="FFNLG_RDCRT" /> <!-- 과태료 감경 율 -->
<result property="ffnlgAmt" column="FFNLG_AMT" /> <!-- 과태료 금액 -->
<result property="advntceBgngYmd" column="ADVNTCE_BGNG_YMD" /> <!-- 사전통지 시작 일자 -->
<result property="advntceDudtYmd" column="ADVNTCE_DUDT_YMD" /> <!-- 사전통지 납기 일자 -->
<result property="advntceAmt" column="ADVNTCE_AMT" /> <!-- 사전통지 금액 -->
<result property="opnnSbmsnYn" column="OPNN_SBMSN_YN" /> <!-- 의견 제출 여부 -->
<result property="etcCn" column="ETC_CN" /> <!-- 기타 내용 -->
<result property="levyId" column="LEVY_ID" /> <!-- 부과 ID -->
<result property="crdnSttsCd" column="CRDN_STTS_CD" /> <!-- 단속 상태 코드 -->
<result property="crdnSttsChgDt" column="CRDN_STTS_CHG_DT" /> <!-- 단속 상태 변경 일시 -->
<result property="adtnAmt" column="ADTN_AMT" /> <!-- 가산 금액 -->
<result property="minusAmt" column="MINUS_AMT" /> <!-- 감경 금액 -->
<result property="rcvmtAmt" column="RCVMT_AMT" /> <!-- 수납 금액 -->
<result property="bfrCrdnId" column="BFR_CRDN_ID" /> <!-- 이전 단속 ID -->
<result property="nxrpCrdnLinkYn" column="NXRP_CRDN_LINK_YN" /> <!-- 세외수입 단속 연계 여부 -->
<result property="nxrpCrdnLinkUserId" column="NXRP_CRDN_LINK_USER_ID" /><!-- 세외수입 단속 연계 사용자 ID -->
<result property="nxrpCrdnLinkDt" column="NXRP_CRDN_LINK_DT" /> <!-- 세외수입 단속 연계 일시 -->
<result property="nxrpAcbKey" column="NXRP_ACB_KEY" /> <!-- 세외수입 대장 키 -->
<result property="dstrbncYn" column="DSTRBNC_YN" /> <!-- 방해 여부 -->
<result property="cvlcptRcptYmd" column="CVLCPT_RCPT_YMD" /> <!-- 민원 접수 일자 -->
<result property="cvlcptAplySeCd" column="CVLCPT_APLY_SE_CD" /> <!-- 민원 신청 구분 코드 -->
<result property="cvlcptAplyNo" column="CVLCPT_APLY_NO" /> <!-- 민원 신청 번호 -->
<result property="cvlcptRcptNo" column="CVLCPT_RCPT_NO" /> <!-- 민원 접수 번호 -->
<result property="cvlcptListNo" column="CVLCPT_LIST_NO" /> <!-- 민원 목록 번호 -->
<result property="cvlcptAplcntNm" column="CVLCPT_APLCNT_NM" /> <!-- 민원 신청인 명 -->
<result property="cvlcptAplyDt" column="CVLCPT_APLY_DT" /> <!-- 민원 신청 일시 -->
<result property="cvlcptAplyTtlNm" column="CVLCPT_APLY_TTL_NM" /> <!-- 민원 신청 제목 명 -->
<result property="cvlcptAplyCn" column="CVLCPT_APLY_CN" /> <!-- 민원 신청 내용 -->
<result property="cvlcptGist" column="CVLCPT_GIST" /> <!-- 민원 요지 -->
<result property="cvlcptPrcsPicNm" column="CVLCPT_PRCS_PIC_NM" /> <!-- 민원 처리 담당자 명 -->
<result property="cvlcptPrcsPrnmntDt" column="CVLCPT_PRCS_PRNMNT_DT" /> <!-- 민원 처리 예정 일시 -->
<result property="cvlcptPrcsCd" column="CVLCPT_PRCS_CD" /> <!-- 민원 처리 코드 -->
<result property="cvlcptPrcsSmry" column="CVLCPT_PRCS_SMRY" /> <!-- 민원 처리 요약 -->
<result property="cvlcptPrcsRsltCn" column="CVLCPT_PRCS_RSLT_CN" /> <!-- 민원 처리 결과 내용 -->
<result property="cvlcptPrcsCmptnDt" column="CVLCPT_PRCS_CMPTN_DT" /> <!-- 민원 처리 완료 일시 -->
<result property="cvlcptPrcsPic" column="CVLCPT_PRCS_PIC" /> <!-- 민원 처리 담당자 -->
<result property="cvlcptTrsmDt" column="CVLCPT_TRSM_DT" /> <!-- 민원 전송 일시 -->
<result property="cvlcptTrsmCd" column="CVLCPT_TRSM_CD" /> <!-- 민원 전송 코드 -->
<result property="cvlcptTrsmMsg" column="CVLCPT_TRSM_MSG" /> <!-- 민원 전송 메시지 -->
<result property="delYn" column="DEL_YN" /> <!-- 삭제 여부 -->
<result property="createdAt" column="REG_DT" /> <!-- 등록 일시 -->
<result property="createdBy" column="RGTR" /> <!-- 등록자 -->
<result property="lastModified" column="MDFCN_DT" /> <!-- 수정 일시 -->
<result property="modifiedBy" column="MDFR" /> <!-- 수정자 -->
<result property="delDt" column="DEL_DT" /> <!-- 삭제 일시 -->
<result property="dltr" column="DLTR" /> <!-- 삭제자 -->
<result property="delRsn" column="DEL_RSN" /> <!-- 삭제 사유 -->
<result property="crdnId" column="CRDN_ID" /> <!-- 단속 ID -->
<result property="sggCd" column="SGG_CD" /> <!-- 시군구 코드 -->
<result property="taskSeCd" column="TASK_SE_CD" /> <!-- 업무 구분 코드 -->
<result property="crdnRegSeCd" column="CRDN_REG_SE_CD" /> <!-- 단속 등록 구분 코드 -->
<result property="crdnInptSeCd" column="CRDN_INPT_SE_CD" /> <!-- 단속 입력 구분 코드 -->
<result property="cvlcptLinkYn" column="CVLCPT_LINK_YN" /> <!-- 민원 연계 여부 -->
<result property="cvlcptLinkTblNm" column="CVLCPT_LINK_TBL_NM" /> <!-- 민원 연계 테이블 명 -->
<result property="cvlcptLinkId" column="CVLCPT_LINK_ID" /> <!-- 민원 연계 ID -->
<result property="rtpyrId" column="RTPYR_ID" /> <!-- 납부자 ID -->
<result property="addrSn" column="ADDR_SN" /> <!-- 주소 일련번호 -->
<result property="crdnYmd" column="CRDN_YMD" /> <!-- 단속 일자 -->
<result property="crdnTm" column="CRDN_TM" /> <!-- 단속 시각 -->
<result property="vhrno" column="VHRNO" /> <!-- 차량번호 -->
<result property="crdnStdgNm" column="CRDN_STDG_NM" /> <!-- 단속 법정동 명 -->
<result property="crdnRoadNm" column="CRDN_ROAD_NM" /> <!-- 단속 도로 명 -->
<result property="crdnPlc" column="CRDN_PLC" /> <!-- 단속 장소 -->
<result property="vltnId" column="VLTN_ID" /> <!-- 위반 ID -->
<result property="gpsX" column="GPS_X" /> <!-- GPS X -->
<result property="gpsY" column="GPS_Y" /> <!-- GPS Y -->
<result property="atchFileCnt" column="ATCH_FILE_CNT" /> <!-- 첨부 파일 수 -->
<result property="vin" column="VIN" /> <!-- 차대번호 -->
<result property="vhclNm" column="VHCL_NM" /> <!-- 차량 명 -->
<result property="vhclColr" column="VHCL_COLR" />
<result property="vhclCpct" column="VHCL_CPCT" /> <!-- 승차정원 -->
<result property="ffnlgCrdnAmt" column="FFNLG_CRDN_AMT" /> <!-- 과태료 단속 금액 -->
<result property="ffnlgRdcrt" column="FFNLG_RDCRT" />
<result property="ffnlgAmt" column="FFNLG_AMT" /> <!-- 과태료 금액 -->
<result property="advntceBgngYmd" column="ADVNTCE_BGNG_YMD" /> <!-- 사전통지 시작 일자 -->
<result property="advntceDudtYmd" column="ADVNTCE_DUDT_YMD" /> <!-- 사전통지 납기 일자 -->
<result property="advntceAmt" column="ADVNTCE_AMT" /> <!-- 사전통지 금액 -->
<result property="opnnSbmsnYn" column="OPNN_SBMSN_YN" /> <!-- 의견 제출 여부 -->
<result property="etcCn" column="ETC_CN" /> <!-- 기타 내용 -->
<result property="crdnSttsCd" column="CRDN_STTS_CD" /> <!-- 단속 상태 코드 -->
<result property="crdnSttsChgDt" column="CRDN_STTS_CHG_DT" /> <!-- 단속 상태 변경 일시 -->
<result property="adtnAmt" column="ADTN_AMT" /> <!-- 가산 금액 -->
<result property="minusAmt" column="MINUS_AMT" /> <!-- 감경 금액 -->
<result property="rcvmtAmt" column="RCVMT_AMT" /> <!-- 수납 금액 -->
<result property="bfrCrdnId" column="BFR_CRDN_ID" /> <!-- 이전 단속 ID -->
<result property="nxrpCrdnLinkYn" column="NXRP_CRDN_LINK_YN" /> <!-- 세외수입 단속 연계 여부 -->
<result property="nxrpCrdnLinkUserId" column="NXRP_CRDN_LINK_USER_ID" /> <!-- 세외수입 단속 연계 사용자 ID -->
<result property="nxrpCrdnLinkDt" column="NXRP_CRDN_LINK_DT" /> <!-- 세외수입 단속 연계 일시 -->
<result property="nxrpAcbKey" column="NXRP_ACB_KEY" />
<result property="mmCode" column="MM_CODE" /> <!-- 메인 코드 -->
<result property="delYn" column="DEL_YN" /> <!-- 삭제 여부 -->
<result property="createdAt" column="REG_DT" /> <!-- 등록 일시 -->
<result property="createdBy" column="RGTR" /> <!-- 등록자 -->
<result property="lastModified" column="MDFCN_DT" /> <!-- 수정 일시 -->
<result property="modifiedBy" column="MDFR" /> <!-- 수정자 -->
<result property="removedAt" column="DEL_DT" /> <!-- 삭제 일시 -->
<result property="removedBy" column="DLTR" /> <!-- 삭제자 -->
<result property="delRsn" column="DEL_RSN" /> <!-- 삭제 사유 -->
</resultMap>
<select id="selectCrdnInfo" parameterType="string" resultType="dataobject">/* 단속정보 조회(crdnInfoMapper.selectCrdnInfo) */
<sql id="select">
SELECT C.CRDN_ID <!-- 단속 ID -->
, C.SGG_CD <!-- 시군구 코드 -->
, C.TASK_SE_CD <!-- 업무 구분 코드 -->
@ -107,6 +72,7 @@
, C.VIN VIN <!-- 차대번호 -->
, C.VHCL_NM <!-- 차량 명 -->
, C.VHCL_COLR <!-- 차량 색상 -->
, C.VHCL_CPCT <!-- 승차정원 -->
, C.FFNLG_CRDN_AMT <!-- 과태료 단속 금액 -->
, C.ETC_CN <!-- 기타 내용 -->
, C.ATCH_FILE_CNT <!-- 첨부 파일 건수 -->
@ -154,7 +120,15 @@
LEFT OUTER JOIN TB_PAYER_ADDR PA ON (C.RTPYR_ID = PA.RTPYR_ID AND C.ADDR_SN = PA.ADDR_SN)
LEFT OUTER JOIN TB_LEVY_EXCL LE ON (C.CRDN_ID = LE.CRDN_ID AND LE.DEL_YN = 'N')
WHERE C.DEL_YN = 'N'
AND C.CRDN_ID = #{crdnId}
</select>
AND C.CRDN_ID IN (<foreach collection="crdnIds" item="crdnId" separator=",">#{crdnId}</foreach>)
</sql>
</mapper>
<select id="selectCrdnList" parameterType="list" resultType="dataobject">/* 단속정보 조회(crdnInfoMapper.selectCrdnList) */
<include refid="select" />
</select>
<select id="selectCrdns" parameterType="list" resultMap="crdnRow">/* 단속정보 조회(crdnInfoMapper.selectCrdnList) */
<include refid="select" />
</select>
</mapper>

@ -75,11 +75,13 @@ SELECT #{crdnId} <!-- 단속 ID -->
, #{crdnStdgNm} <!-- 단속 법정동 명 -->
, #{crdnRoadNm} <!-- 단속 도로 명 -->
, #{crdnPlc} <!-- 단속 장소 -->
<if test='vltnId != null'> , #{vltnId}</if>
<if test='vltnId == null'>
, (SELECT A.VLTN_ID
FROM TB_VLTN A
WHERE A.SGG_CD = #{sggCd}
AND A.TASK_SE_CD = #{taskSeCd}
AND A.VLTN_CD = #{vltnCd}) <!-- 위반 ID -->
AND A.VLTN_CD = #{vltnCd})</if> <!-- 위반 ID -->
, #{gpsX} <!-- GPS X -->
, #{gpsY} <!-- GPS Y -->
, #{atchFileCnt} <!-- 첨부 파일 수 -->
@ -110,7 +112,7 @@ SELECT #{crdnId} <!-- 단속 ID -->
, #{removedBy} <!-- 삭제자 -->
, #{delRsn} <!-- 삭제 사유 -->
FROM DUAL
<if test='"RVS" == taskSeCd'>WHERE NOT EXISTS (
<if test='"XVS" == taskSeCd'>WHERE NOT EXISTS (
SELECT *
FROM TB_CRDN
WHERE VHRNO = #{vhrno}

@ -5,17 +5,16 @@
<update id="updateCrdnStatus" parameterType="cokr.xit.fims.crdn.Crdn">/* 단속 상태 수정(crdnUpdtMapper.updateCrdnStatus) */
UPDATE TB_CRDN
SET CRDN_STTS_CD = #{crdnSttsCd} /* 단속 상태 */
, CRDN_STTS_CHG_DT = <include refid="utility.now" /> /* 단속 상태 변경 일시 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정일시 */
, CRDN_STTS_CHG_DT =<include refid="utility.now" /> /* 단속 상태 변경 일시 */
, MDFCN_DT =<include refid="utility.now" /> /* 수정일시 */
, MDFR = #{modifiedBy} /* 수정자 */
WHERE CRDN_ID = #{crdnId} /* 단속 ID */
AND DEL_YN = 'N' /* 삭제 여부 */
</update>
<update id="updateCrdnAddition" parameterType="cokr.xit.fims.crdn.Crdn">
/* 단속 부가정보 수정(crdnUpdtMapper.updateCrdnAddition) */
<update id="updateCrdnAddition" parameterType="cokr.xit.fims.crdn.Crdn">/* 단속 부가정보 수정(crdnUpdtMapper.updateCrdnAddition) */
UPDATE TB_CRDN_ADI
SET MDFCN_DT = <include refid="utility.now" /> /* 수정일시 */
SET MDFCN_DT =<include refid="utility.now" /> /* 수정일시 */
, MDFR = #{modifiedBy} /* 수정자 */
<if test="taskSeCd == 'PVS'">
, OVTM_YN = #{ovtmYn} <!-- 시간외 여부 -->
@ -48,28 +47,25 @@
WHERE CRDN_ID = #{crdnId} <!-- 단속 ID -->
</update>
<update id="updateTagInfo" parameterType="cokr.xit.fims.crdn.Crdn">
/* 표지정보확인 수정(crdnUpdtMapper.updateTagInfo) */
<update id="updateTagInfo" parameterType="cokr.xit.fims.crdn.Crdn">/* 표지정보확인 수정(crdnUpdtMapper.updateTagInfo) */
UPDATE TB_CRDN_ADI
SET PRK_PSBLTY_RSLT_CD = '1'
, MDFCN_DT = <include refid="utility.now" /> /* 수정일시 */
, MDFCN_DT =<include refid="utility.now" /> /* 수정일시 */
, MDFR = #{modifiedBy} /* 수정자 */
WHERE CRDN_ID = #{crdnId} /* 단속 ID */
</update>
<update id="updateOverTimeInfo" parameterType="cokr.xit.fims.crdn.Crdn">
/* 시간초과 여부 수정(crdnUpdtMapper.overTimeInfo) */
<update id="updateOverTimeInfo" parameterType="cokr.xit.fims.crdn.Crdn">/* 시간초과 여부 수정(crdnUpdtMapper.overTimeInfo) */
UPDATE TB_CRDN_ADI
SET OVTM_YN = #{ovtmYn}
, MDFCN_DT = <include refid="utility.now" /> /* 수정일시 */
, MDFCN_DT =<include refid="utility.now" /> /* 수정일시 */
, MDFR = #{modifiedBy} /* 수정자 */
WHERE CRDN_ID = #{crdnId} /* 단속 ID */
</update>
<update id="updateCrdnAmt" parameterType="cokr.xit.fims.crdn.Crdn">
/* 단속 금액 수정(crdnUpdtMapper.updateCrdnAmt) */
<update id="updateCrdnAmt" parameterType="cokr.xit.fims.crdn.Crdn">/* 단속 금액 수정(crdnUpdtMapper.updateCrdnAmt) */
UPDATE TB_CRDN
SET MDFCN_DT = <include refid="utility.now" /> /* 수정일시 */
SET MDFCN_DT =<include refid="utility.now" /> /* 수정일시 */
, MDFR = #{modifiedBy} /* 수정자 */
, FFNLG_CRDN_AMT = #{ffnlgCrdnAmt}
, FFNLG_AMT = #{ffnlgAmt}
@ -77,98 +73,98 @@
WHERE CRDN_ID = #{crdnId} /* 단속 ID */
</update>
<update id="updateEtcCn" parameterType="cokr.xit.fims.crdn.Crdn">
/* 단속 기타사항 수정(crdnUpdtMapper.updateEtcCn) */
<update id="updateEtcCn" parameterType="cokr.xit.fims.crdn.Crdn">/* 단속 기타사항 수정(crdnUpdtMapper.updateEtcCn) */
UPDATE TB_CRDN
SET MDFCN_DT = <include refid="utility.now" /> /* 수정일시 */
SET MDFCN_DT =<include refid="utility.now" /> /* 수정일시 */
, MDFR = #{modifiedBy} /* 수정자 */
, ETC_CN = #{etcCn}
WHERE CRDN_ID = #{crdnId} /* 단속 ID */
</update>
<update id="updateEditCrdn" parameterType="cokr.xit.fims.crdn.Crdn">/* 단속 정보 수정(crdnUpdtMapper.updateEditCrdn) */
UPDATE TB_CRDN
SET CRDN_YMD = #{crdnYmd} <!-- 단속 일자 -->
, CRDN_TM = #{crdnTm} <!-- 단속 시각 -->
, VHRNO = #{vhrno} <!-- 차량번호 -->
, CRDN_STDG_NM = #{crdnStdgNm} <!-- 단속 법정동 명 -->
, CRDN_ROAD_NM = #{crdnRoadNm} <!-- 단속 도로 명 -->
, CRDN_PLC = #{crdnPlc} <!-- 단속 장소 -->
, VLTN_ID = (SELECT X.VLTN_ID
FROM TB_VLTN X
WHERE X.SGG_CD = #{sggCd} AND X.TASK_SE_CD = #{taskSeCd}
AND X.VLTN_CD = #{vltnCd}) <!-- 위반 ID -->
, GPS_X = #{gpsX} <!-- GPS X -->
, GPS_Y = #{gpsY} <!-- GPS Y -->
, VIN = #{vin} <!-- 차대번호 -->
, VHCL_NM = #{vhclNm} <!-- 차량 명 -->
, VHCL_COLR = #{vhclColr} <!-- 차량 색상 -->
, VHCL_CPCT = #{vhclCpct} <!-- 차량 승차정원 -->
, FFNLG_CRDN_AMT = #{ffnlgCrdnAmt} <!-- 과태료 단속 금액 -->
, FFNLG_AMT = #{ffnlgAmt} <!-- 과태료 금액 -->
, ADVNTCE_AMT = #{advntceAmt} <!-- 사전통지 금액 -->
, ETC_CN = #{etcCn} <!-- 기타 내용 -->
, MDFCN_DT = <include refid="utility.now" /> <!-- 수정일시 -->
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE CRDN_ID = #{crdnId} <!-- 단속 ID -->
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="updateEditCrdn" parameterType="cokr.xit.fims.crdn.Crdn">/* 단속 정보 수정(crdnUpdtMapper.updateEditCrdn) */
UPDATE TB_CRDN
SET CRDN_YMD = #{crdnYmd} <!-- 단속 일자 -->
, CRDN_TM = #{crdnTm} <!-- 단속 시각 -->
, VHRNO = #{vhrno} <!-- 차량번호 -->
, CRDN_STDG_NM = #{crdnStdgNm} <!-- 단속 법정동 명 -->
, CRDN_ROAD_NM = #{crdnRoadNm} <!-- 단속 도로 명 -->
, CRDN_PLC = #{crdnPlc} <!-- 단속 장소 -->
<if test='vltnId != null'> , VLTN_ID = #{vltnId}</if>
<if test='vltnId == null'> , VLTN_ID = (SELECT X.VLTN_ID
FROM TB_VLTN X
WHERE X.SGG_CD = #{sggCd} AND X.TASK_SE_CD = #{taskSeCd}
AND X.VLTN_CD = #{vltnCd})
</if> <!-- 위반 ID -->
, GPS_X = #{gpsX} <!-- GPS X -->
, GPS_Y = #{gpsY} <!-- GPS Y -->
, VIN = #{vin} <!-- 차대번호 -->
, VHCL_NM = #{vhclNm} <!-- 차량 명 -->
, VHCL_COLR = #{vhclColr} <!-- 차량 색상 -->
, VHCL_CPCT = #{vhclCpct} <!-- 차량 승차정원 -->
, FFNLG_CRDN_AMT = #{ffnlgCrdnAmt} <!-- 과태료 단속 금액 -->
, FFNLG_AMT = #{ffnlgAmt} <!-- 과태료 금액 -->
, ADVNTCE_AMT = #{advntceAmt} <!-- 사전통지 금액 -->
, ETC_CN = #{etcCn} <!-- 기타 내용 -->
, MDFCN_DT =<include refid="utility.now" /> <!-- 수정일시 -->
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE CRDN_ID = #{crdnId} <!-- 단속 ID -->
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="deleteCrdn" parameterType="map">/* 단속 정보 삭제(crdnUpdtMapper.deleteCrdn) */
UPDATE TB_CRDN
SET DEL_YN = 'Y'
, DEL_DT = <include refid="utility.now" /> <!-- 삭제일시 -->
, DLTR = #{removedBy} <!-- 삭제자 -->
, DEL_RSN = #{delRsn} <!-- 삭제 사유 -->
WHERE CRDN_ID IN (
<foreach collection="crdnIds" item="crdnId" separator=",">#{crdnId}</foreach>
)
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="deleteCrdn" parameterType="map">/* 단속 정보 삭제(crdnUpdtMapper.deleteCrdn) */
UPDATE TB_CRDN
SET DEL_YN = 'Y'
, DEL_DT =<include refid="utility.now" /> <!-- 삭제일시 -->
, DLTR = #{removedBy} <!-- 삭제자 -->
, DEL_RSN = #{delRsn} <!-- 삭제 사유 -->
WHERE CRDN_ID IN (
<foreach collection="crdnIds" item="crdnId" separator=",">#{crdnId}</foreach>
)
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="deleteCrdnAdi" parameterType="map">/* 단속 부가 정보 삭제(crdnUpdtMapper.deleteCrdnAdi) */
UPDATE TB_CRDN_ADI
SET DEL_YN = 'Y'
, DEL_DT = <include refid="utility.now" /> <!-- 삭제일시 -->
, DLTR = #{removedBy} <!-- 삭제자 -->
, DEL_RSN = #{delRsn} <!-- 삭제 사유 -->
WHERE CRDN_ID IN (
<foreach collection="crdnIds" item="crdnId" separator=",">#{crdnId}</foreach>
)
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="deleteCrdnAdi" parameterType="map">/* 단속 부가 정보 삭제(crdnUpdtMapper.deleteCrdnAdi) */
UPDATE TB_CRDN_ADI
SET DEL_YN = 'Y'
, DEL_DT =<include refid="utility.now" /> <!-- 삭제일시 -->
, DLTR = #{removedBy} <!-- 삭제자 -->
, DEL_RSN = #{delRsn} <!-- 삭제 사유 -->
WHERE CRDN_ID IN (
<foreach collection="crdnIds" item="crdnId" separator=",">#{crdnId}</foreach>
)
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="deleteCrdnPayer" parameterType="map">/* 단속 납부자 ID 삭제(crdnUpdtMapper.deleteCrdnPayer) */
UPDATE TB_CRDN
SET RTPYR_ID = NULL <!-- 납부자 ID -->
, ADDR_SN = NULL <!-- 주소 일련번호 -->
, MDFCN_DT = <include refid="utility.now" /> <!-- 수정일시 -->
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE CRDN_ID = #{crdnId} <!-- 단속 ID -->
AND RTPYR_ID = #{rtpyrId} <!-- 납부자 ID -->
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="deleteCrdnPayer" parameterType="map">/* 단속 납부자 ID 삭제(crdnUpdtMapper.deleteCrdnPayer) */
UPDATE TB_CRDN
SET RTPYR_ID = NULL <!-- 납부자 ID -->
, ADDR_SN = NULL <!-- 주소 일련번호 -->
, MDFCN_DT =<include refid="utility.now" /> <!-- 수정일시 -->
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE CRDN_ID = #{crdnId} <!-- 단속 ID -->
AND RTPYR_ID = #{rtpyrId} <!-- 납부자 ID -->
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="updateNxrpCrdnLinkYn" parameterType="cokr.xit.fims.crdn.Crdn">
/* 세외수입 단속 연계 여부 변경(crdnUpdtMapper.updateNxrpCrdnLinkYn) */
UPDATE TB_CRDN
SET NXRP_CRDN_LINK_YN = 'Y' <!-- 세외수입 단속 연계 여부 -->
, NXRP_CRDN_LINK_DT = <include refid="utility.now" /> <!-- 세외수입 단속 연계 일시 -->
, NXRP_CRDN_LINK_USER_ID = #{modifiedBy} <!-- 세외수입 단속 연계 사용자 ID -->
, MDFCN_DT = <include refid="utility.now" /> <!-- 수정일시 -->
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE CRDN_ID = #{crdnId} <!-- 단속 ID -->
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="updateNxrpCrdnLinkYn" parameterType="cokr.xit.fims.crdn.Crdn">/* 세외수입 단속 연계 여부 변경(crdnUpdtMapper.updateNxrpCrdnLinkYn) */
UPDATE TB_CRDN
SET NXRP_CRDN_LINK_YN = 'Y' <!-- 세외수입 단속 연계 여부 -->
, NXRP_CRDN_LINK_DT =<include refid="utility.now" /> <!-- 세외수입 단속 연계 일시 -->
, NXRP_CRDN_LINK_USER_ID = #{modifiedBy} <!-- 세외수입 단속 연계 사용자 ID -->
, MDFCN_DT =<include refid="utility.now" /> <!-- 수정일시 -->
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE CRDN_ID = #{crdnId} <!-- 단속 ID -->
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="updateAdvntceYmd" parameterType="map">/* 사전통지 일자 수정(crdnUpdtMapper.updateAdvntceYmd) */
UPDATE TB_CRDN
SET ADVNTCE_BGNG_YMD = #{advntceBgngYmd} <!-- 사전통지 시작 일자 -->
, ADVNTCE_DUDT_YMD = #{advntceDudtYmd} <!-- 사전통지 납기 일자 -->
, MDFCN_DT = <include refid="utility.now" /> <!-- 수정일시 -->
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE CRDN_ID = #{crdnId} <!-- 단속 ID -->
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="updateAdvntceYmd" parameterType="map">/* 사전통지 일자 수정(crdnUpdtMapper.updateAdvntceYmd) */
UPDATE TB_CRDN
SET ADVNTCE_BGNG_YMD = #{advntceBgngYmd} <!-- 사전통지 시작 일자 -->
, ADVNTCE_DUDT_YMD = #{advntceDudtYmd} <!-- 사전통지 납기 일자 -->
, MDFCN_DT =<include refid="utility.now" /> <!-- 수정일시 -->
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE CRDN_ID = #{crdnId} <!-- 단속 ID -->
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
</mapper>

@ -215,7 +215,11 @@
<update id="updatePayerAddr" parameterType="cokr.xit.fims.payer.Payer">/* 납부자 주소 수정(payerAddrMapper.updatePayerAddr) */
UPDATE TB_PAYER_ADDR
SET MDFCN_DT = <include refid="utility.now" /> <!-- 수정 일시 -->
SET ZIP = #{zip}
, ADDR = #{addr}
, DTL_ADDR = #{dtlAddr}
, WHOL_ADDR = #{wholAddr}
, MDFCN_DT = <include refid="utility.now" /> <!-- 수정 일시 -->
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE RTPYR_ID = #{rtpyrId}
AND ADDR_SN = #{addrSn}

Loading…
Cancel
Save