1. 반송 등록 수정.

2. 기타 수정.
main
jjh 11 months ago
parent 22070214db
commit 98e78c4a47

@ -0,0 +1,80 @@
package cokr.xit.fims.epst;
import cokr.xit.foundation.AbstractEntity;
import lombok.Getter;
import lombok.Setter;
/**
*
* @author JoJH
*/
@Getter
@Setter
public class EpostDlvrRslt extends AbstractEntity {
/**
* ID
*/
private String dlvrRsltId;
/**
*
*/
private String conKey;
/**
*
*/
private String outsiduserid;
/**
*
*/
private String reletcdata;
/**
*
*/
private String regino;
/**
*
*/
private String delivymd;
/**
*
*/
private String delivhhmi;
/**
*
*/
private String delivrsltcd;
/**
*
*/
private String nondelivreasncd;
/**
*
*/
private String nondelivreasncdnm;
/**
*
*/
private String subrecprsnnm;
/**
*
*/
private String relrecprsncd;
/**
*
*/
private String relrecprsncdnm;
}

@ -30,6 +30,7 @@ public class EpostQuery extends CmmnQuery {
private String[] rcptRsltIDs; // 접수 결과 IDs
private String rcptRsltId; // 접수 결과 ID
private String conKey; // 외부연계식별키
private String regino; // 등기번호
// 검색 조건
private String schLevyExclYmdFrom; // 부과제외_부과제외 일자 시작
private String schLevyExclYmdTo; // 부과제외_부과제외 일자 종료
@ -182,6 +183,16 @@ public class EpostQuery extends CmmnQuery {
return self();
}
public String getRegino() {
return ifEmpty(regino, () -> null);
}
public <T extends EpostQuery> T setRegino(String regino) {
this.regino = regino;
return self();
}
// 검색 조건 //////////////////////////////////////////////////////////////////
public String getSchLevyExclYmdFrom() {
return ifEmpty(schLevyExclYmdFrom, () -> null);
}
@ -327,6 +338,7 @@ public class EpostQuery extends CmmnQuery {
this.schSndngSeCd = schSndngSeCd;
return self();
}
// 검색 조건 //////////////////////////////////////////////////////////////////
// 상세 검색 조건 ///////////////////////////////////////////////////////////////

@ -0,0 +1,110 @@
package cokr.xit.fims.epst.dao;
import java.util.List;
import java.util.Map;
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
import cokr.xit.foundation.component.AbstractMapper;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.epst.EpostDlvrRslt;
import cokr.xit.fims.epst.EpostQuery;
/** DAO
*
* <p> :
*
* <pre>
* ============ ============
* 2024-01-05 JoJH
* ================================
* </pre>
*/
@Mapper("epostDlvrRsltMapper")
public interface EpostDlvrRsltMapper extends AbstractMapper {
/** .<br />
* @param req
* @return
*/
List<DataObject> selectEpostDlvrRsltList(EpostQuery req);
/** .
* @param req
* @return
*/
List<DataObject> selectEpostDlvrRslts(EpostQuery req);
default DataObject selectEpostDlvrRsltInfo(EpostQuery req) {
// 기본 정렬
if (req.getOrderBy() == null) {
req.setOrderBy("DLVR_RSLT_ID DESC");
}
List<DataObject> epostDlvrRslts = selectEpostDlvrRslts(req);
return !epostDlvrRslts.isEmpty() ? epostDlvrRslts.get(0) : null;
}
/** .
* @param params
* <ul><li>"epostDlvrRslt" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int insertEpostDlvrRslt(Map<String, Object> params);
/** .
* @param epostDlvrRslt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
default boolean insert(EpostDlvrRslt epostDlvrRslt) {
return epostDlvrRslt != null && insertEpostDlvrRslt(params().set("epostDlvrRslt", epostDlvrRslt)) == 1;
}
/** .
* @param params
* <ul><li>"epostDlvrRslt" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int updateEpostDlvrRslt(Map<String, Object> params);
/** .
* @param epostDlvrRslt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
default boolean update(EpostDlvrRslt epostDlvrRslt) {
return epostDlvrRslt != null && updateEpostDlvrRslt(params().set("epostDlvrRslt", epostDlvrRslt)) == 1;
}
/** .
* @param params
* <ul><li>"epostDlvrRslt" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int deleteEpostDlvrRslt(Map<String, ?> params);
/** .
* @param epostDlvrRslt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
default boolean delete(EpostDlvrRslt epostDlvrRslt) {
return epostDlvrRslt != null && deleteEpostDlvrRslt(params().set("epostDlvrRslt", epostDlvrRslt)) == 1;
}
}

@ -0,0 +1,61 @@
package cokr.xit.fims.epst.service;
import java.util.List;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.epst.EpostDlvrRslt;
import cokr.xit.fims.epst.EpostQuery;
/** .
*
* <p> :
*
* <pre>
* ============ ============
* 2024-01-05 JoJH
* ================================
* </pre>
*/
public interface EpostDlvrRsltService {
/** .
* @param req
* @return
*/
List<DataObject> getEpostDlvrRsltList(EpostQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getEpostDlvrRslts(EpostQuery req);
/** .
* @param epostDlvrRslt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
boolean create(EpostDlvrRslt epostDlvrRslt);
/** .
* @param epostDlvrRslt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
boolean update(EpostDlvrRslt epostDlvrRslt);
/** .
* @param epostDlvrRslt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
boolean remove(EpostDlvrRslt epostDlvrRslt);
}

@ -0,0 +1,82 @@
package cokr.xit.fims.epst.service.bean;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import cokr.xit.foundation.AbstractComponent;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.epst.EpostDlvrRslt;
import cokr.xit.fims.epst.EpostQuery;
import cokr.xit.fims.epst.dao.EpostDlvrRsltMapper;
/** Bean
*
* <p> :
*
* <pre>
* ============ ============
* 2024-01-05 JoJH
* ================================
* </pre>
*/
@Component("epostDlvrRsltBean")
public class EpostDlvrRsltBean extends AbstractComponent {
/** 전자우편 배달 결과 정보 DAO */
@Resource(name = "epostDlvrRsltMapper")
private EpostDlvrRsltMapper epostDlvrRsltMapper;
/** .
* @param req
* @return
*/
public List<DataObject> getEpostDlvrRsltList(EpostQuery req) {
return epostDlvrRsltMapper.selectEpostDlvrRsltList(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getEpostDlvrRslts(EpostQuery req) {
return epostDlvrRsltMapper.selectEpostDlvrRslts(req);
}
/** .
* @param epostDlvrRslt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public boolean create(EpostDlvrRslt epostDlvrRslt) {
return epostDlvrRsltMapper.insert(epostDlvrRslt);
}
/** .
* @param epostDlvrRslt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public boolean update(EpostDlvrRslt epostDlvrRslt) {
return epostDlvrRsltMapper.update(epostDlvrRslt);
}
/** .
* @param epostDlvrRslt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public boolean remove(EpostDlvrRslt epostDlvrRslt) {
return epostDlvrRsltMapper.delete(epostDlvrRslt);
}
}

@ -0,0 +1,58 @@
package cokr.xit.fims.epst.service.bean;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import cokr.xit.foundation.component.AbstractServiceBean;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.epst.EpostDlvrRslt;
import cokr.xit.fims.epst.EpostQuery;
import cokr.xit.fims.epst.service.EpostDlvrRsltService;
/** .
*
* <p> :
*
* <pre>
* ============ ============
* 2024-01-05 JoJH
* ================================
* </pre>
*/
@Service("epostDlvrRsltService")
public class EpostDlvrRsltServiceBean extends AbstractServiceBean implements EpostDlvrRsltService {
/** 전자우편 배달 결과 정보 Bean */
@Resource(name = "epostDlvrRsltBean")
private EpostDlvrRsltBean epostDlvrRsltBean;
@Override
public List<DataObject> getEpostDlvrRsltList(EpostQuery req) {
return epostDlvrRsltBean.getEpostDlvrRsltList(req);
}
@Override
public List<DataObject> getEpostDlvrRslts(EpostQuery req) {
return epostDlvrRsltBean.getEpostDlvrRslts(req);
}
@Override
public boolean create(EpostDlvrRslt epostDlvrRslt) {
return epostDlvrRsltBean.create(epostDlvrRslt);
}
@Override
public boolean update(EpostDlvrRslt epostDlvrRslt) {
return epostDlvrRsltBean.update(epostDlvrRslt);
}
@Override
public boolean remove(EpostDlvrRslt epostDlvrRslt) {
return epostDlvrRsltBean.remove(epostDlvrRslt);
}
}

@ -90,57 +90,60 @@ public class NxrpMtchgBean extends AbstractComponent {
// 세외수입 연계관련 정보 확인
// 발송상세 대상를 조회
List<DataObject> sndngDtlIDs = sndngDtlMapper.selectSndngTrgtDtlIDs(new SndbQuery().setSndngId(req.getSndngId())
.setDelYN("N"));
List<DataObject> sndngDtlIDs = sndngDtlMapper.selectSndngTrgtDtlIDs(new SndbQuery().setSndngId(req.getSndngId()));
// 발송상세 대상 자료로 세외수입 매핑 내역 등록한다.
for (int iLoop = 0; iLoop < sndngDtlIDs.size(); iLoop++) {
// 단속 자료 조회
DataObject sndngDtlLevyInfo = sndngDtlMapper.selectSndngDtlLevyInfo(sndngDtlIDs.get(iLoop).string("SNDNG_DTL_ID"));
if (sndngDtlLevyInfo == null) {
throw new RuntimeException("세외수입 매칭 내역 등록 작업중 단속자료가 존재하지 않습니다."); // 예외를 발생시켜서 DB Rollback
}
// 세외수입 연계 등록 서비스 호출 //////////////////////////////////////////////
String linkRsltId = "0000000000";
// 세외수입 매칭 내역 정보 조회
DataObject nxrpMtchgInfo = nxrpMtchgMapper.selectNxrpMtchgInfo(new NxrpMtchgQuery().setCrdnId(sndngDtlLevyInfo.string("CRDN_ID"))
.setDelYN("N"));
NxrpMtchg nxrpMtchg = new NxrpMtchg();
if (nxrpMtchgInfo == null) {
nxrpMtchg.setCrdnId(sndngDtlLevyInfo.string("CRDN_ID")); // 단속 ID
nxrpMtchg.setCrdnDt(sndngDtlLevyInfo.string("CRDN_YMD_TM_MASK")); // 단속 일시
nxrpMtchg.setStdgNm(sndngDtlLevyInfo.string("CRDN_STDG_NM")); // 법정동 명
nxrpMtchg.setCrdnPlc(sndngDtlLevyInfo.string("CRDN_PLC")); // 단속 장소
nxrpMtchg.setLinkRsltId(linkRsltId); // 연계 결과 ID
nxrpMtchg.setAcntgYr(sndngDtlLevyInfo.string("FYR")); // 회계 연도
nxrpMtchg.setLevyNo(sndngDtlLevyInfo.string("LEVY_NO")); // 부과 번호
nxrpMtchg.setLevyAmt(sndngDtlLevyInfo.number("PCPTAX").intValue()); // 부과 금액
nxrpMtchg.setAdtnAmt(sndngDtlLevyInfo.number("ADAMT").intValue()); // 가산 금액
nxrpMtchg.setSumAmt(sndngDtlLevyInfo.number("SUM_AMT").intValue()); // 합계 금액
nxrpMtchg.setNxrpMtchgSttsCd("01"); // FIM073(세외수입 매칭 상태 코드) - 01 처리전
rtnScs = nxrpMtchgMapper.insert(nxrpMtchg); // 세외수입 매칭 내역 등록
} else {
nxrpMtchg.setMtchgId(nxrpMtchgInfo.string("MTCHG_ID")); // 매칭 ID
nxrpMtchg.setLinkRsltId(linkRsltId); // 연계 결과 ID
nxrpMtchg.setNxrpMtchgSttsCd("01"); // FIM073(세외수입 매칭 상태 코드) - 01 처리전
rtnScs = nxrpMtchgMapper.updateLinkRsltId(nxrpMtchg); // 세외수입 매칭 내역 수정
//
if (sndngDtlLevyInfo == null) {
throw new RuntimeException("세외수입 등록 작업중 단속자료가 존재하지 않습니다."); // 예외를 발생시켜서 DB Rollback
}
// 발송 상세 상태 코드 수정.
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setMtchgId(nxrpMtchg.getMtchgId()); // 매칭 ID
sndngDtl.setSndngDtlSttsCd("01"); // FIM050(발송 상세 상태 코드) - 01 세외수입부과
sndngDtl.setSndngDtlId(sndngDtlIDs.get(iLoop).string("SNDNG_DTL_ID")); // 발송 상세 ID
rtnScs = sndngDtlMapper.updateSndngDtlSttsCd(sndngDtl);
if (!rtnScs) {
throw new RuntimeException("세외수입 매칭 정보를 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
// 발송 상세 상태 코드 확인.
if ("00,01,02".contains(sndngDtlLevyInfo.string("SNDNG_DTL_STTS_CD"))) {
// 세외수입 연계 등록 서비스 호출 //////////////////////////////////////////////
String linkRsltId = "0000000000";
// 세외수입 매칭 내역 정보 조회
DataObject nxrpMtchgInfo = nxrpMtchgMapper.selectNxrpMtchgInfo(new NxrpMtchgQuery().setCrdnId(sndngDtlLevyInfo.string("CRDN_ID")));
NxrpMtchg nxrpMtchg = new NxrpMtchg();
if (nxrpMtchgInfo == null) {
nxrpMtchg.setCrdnId(sndngDtlLevyInfo.string("CRDN_ID")); // 단속 ID
nxrpMtchg.setCrdnDt(sndngDtlLevyInfo.string("CRDN_YMD_TM_MASK")); // 단속 일시
nxrpMtchg.setStdgNm(sndngDtlLevyInfo.string("CRDN_STDG_NM")); // 법정동 명
nxrpMtchg.setCrdnPlc(sndngDtlLevyInfo.string("CRDN_PLC")); // 단속 장소
nxrpMtchg.setLinkRsltId(linkRsltId); // 연계 결과 ID
nxrpMtchg.setAcntgYr(sndngDtlLevyInfo.string("FYR")); // 회계 연도
nxrpMtchg.setLevyNo(sndngDtlLevyInfo.string("LEVY_NO")); // 부과 번호
nxrpMtchg.setLevyAmt(sndngDtlLevyInfo.number("PCPTAX").intValue()); // 부과 금액
nxrpMtchg.setAdtnAmt(sndngDtlLevyInfo.number("ADAMT").intValue()); // 가산 금액
nxrpMtchg.setSumAmt(sndngDtlLevyInfo.number("SUM_AMT").intValue()); // 합계 금액
nxrpMtchg.setNxrpMtchgSttsCd("01"); // FIM073(세외수입 매칭 상태 코드) - 01 처리전
rtnScs = nxrpMtchgMapper.insert(nxrpMtchg); // 세외수입 매칭 내역 등록
} else {
nxrpMtchg.setMtchgId(nxrpMtchgInfo.string("MTCHG_ID")); // 매칭 ID
nxrpMtchg.setLinkRsltId(linkRsltId); // 연계 결과 ID
nxrpMtchg.setNxrpMtchgSttsCd("01"); // FIM073(세외수입 매칭 상태 코드) - 01 처리전
rtnScs = nxrpMtchgMapper.updateLinkRsltId(nxrpMtchg); // 세외수입 매칭 내역 수정
}
// 발송 상세 상태 코드 수정.
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setMtchgId(nxrpMtchg.getMtchgId()); // 매칭 ID
sndngDtl.setSndngDtlSttsCd("01"); // FIM050(발송 상세 상태 코드) - 01 세외수입부과
sndngDtl.setSndngDtlId(sndngDtlIDs.get(iLoop).string("SNDNG_DTL_ID")); // 발송 상세 ID
rtnScs = sndngDtlMapper.updateSndngDtlSttsCd(sndngDtl);
if (!rtnScs) {
throw new RuntimeException("세외수입 매칭 정보를 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
}

@ -7,7 +7,6 @@ import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
import cokr.xit.foundation.component.AbstractMapper;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.sndb.SndngDtl;
import cokr.xit.fims.sndb.SndbQuery;
@ -23,6 +22,7 @@ import cokr.xit.fims.sndb.SndbQuery;
*/
@Mapper("sndngDtlMapper")
public interface SndngDtlMapper extends AbstractMapper {
/** .<br />
* @param req
* @return
@ -36,17 +36,18 @@ public interface SndngDtlMapper extends AbstractMapper {
List<DataObject> selectSndngDtls(SndbQuery req);
default DataObject selectSndngDtlInfo(SndbQuery req) {
// 기본 정렬
// 삭제여부
if (req.getDelYN() == null) {
req.setDelYN("N");
}
// 기본 정렬
if (req.getOrderBy() == null) {
req.setOrderBy("SD.SNDNG_DTL_ID DESC");
}
List<DataObject> sndngDtlInfo = selectSndngDtls(req);
List<DataObject> sndngDtls = selectSndngDtls(req);
return !sndngDtlInfo.isEmpty() ? sndngDtlInfo.get(0) : null;
return !sndngDtls.isEmpty() ? sndngDtls.get(0) : null;
}
/** ID ID .
@ -147,4 +148,108 @@ public interface SndngDtlMapper extends AbstractMapper {
return sndngDtl != null && deleteSndngDtl(params().set("sndngDtl", sndngDtl)) == 1;
}
/** .
* @param req
* @return
*/
List<DataObject> selectSndbkList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> selectSndbks(SndbQuery req);
/** 1 .
* @param req
* @return
*/
default DataObject selectSndbkInfo(SndbQuery req) {
// 삭제여부
if (req.getDelYN() == null) {
req.setDelYN("N");
}
// 기본 정렬
if (req.getOrderBy() == null) {
req.setOrderBy("SD.SNDNG_DTL_ID DESC");
}
List<DataObject> sndbks = selectSndbks(req);
return !sndbks.isEmpty() ? sndbks.get(0) : null;
}
/** .
* @param sndngDtl
* @return
*/
int createSndbk(Map<String, Object> params);
default boolean createSndbk(SndngDtl sndngDtl) {
return sndngDtl != null && createSndbk(params().set("sndngDtl", sndngDtl)) == 1;
}
/** .
* @param sndngDtl
* @return
*/
int updateSndbk(Map<String, Object> params);
default boolean updateSndbk(SndngDtl sndngDtl) {
return sndngDtl != null && updateSndbk(params().set("sndngDtl", sndngDtl)) == 1;
}
/** .
* @param sndngDtl
* @return
*/
int deleteSndbk(Map<String, Object> params);
default boolean deleteSndbk(SndngDtl sndngDtl) {
return sndngDtl != null && deleteSndbk(params().set("sndngDtl", sndngDtl)) == 1;
}
/** ID
* @param svbtcId ID
* @return
*/
int selectTnocsSndngDtlSvbtc(String svbtcId);
/** .
* @param params
* <ul><li>"sndngDtl" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int updateSndngDtlSvbtc(Map<String, Object> params);
default boolean updateSndngDtlSvbtc(SndngDtl sndngDtl) {
return sndngDtl != null && updateSndngDtlSvbtc(params().set("sndngDtl", sndngDtl)) == 1;
}
/** .
* @param params
* <ul><li>"sndngDtl" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int deleteSndngDtlSvbtc(Map<String, ?> params);
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
default boolean deleteSndngDtlSvbtc(SndngDtl sndngDtl) {
return sndngDtl != null && deleteSndngDtlSvbtc(params().set("sndngDtl", sndngDtl)) >= 1;
}
}

@ -8,7 +8,6 @@ import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
import cokr.xit.foundation.component.AbstractMapper;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.sndb.Sndng;
import cokr.xit.fims.sndb.SndngDtl;
import cokr.xit.fims.sndb.SndbQuery;
/** DAO
@ -37,17 +36,18 @@ public interface SndngMapper extends AbstractMapper {
List<DataObject> selectSndngs(SndbQuery req);
default DataObject selectSndngInfo(SndbQuery req) {
// 기본 정렬
// 삭제여부
if (req.getDelYN() == null) {
req.setDelYN("N");
}
// 기본 정렬
if (req.getOrderBy() == null) {
req.setOrderBy("S.SNDNG_ID DESC");
}
List<DataObject> sndngInfo = selectSndngs(req);
List<DataObject> sndngs = selectSndngs(req);
return !sndngInfo.isEmpty() ? sndngInfo.get(0) : null;
return !sndngs.isEmpty() ? sndngs.get(0) : null;
}
/** .<br />
@ -100,8 +100,23 @@ public interface SndngMapper extends AbstractMapper {
*/
List<DataObject> selectAdvntceTrgtCrdnIDs(SndbQuery req);
/** , , .
* @param req
* @return
*/
List<DataObject> selectCrdnPayerTrgts(SndbQuery req);
default DataObject selectCrdnPayerInfo(String crdnId) {
List<DataObject> crdnPayerInfo = selectCrdnPayerTrgts(new SndbQuery().setCrdnId(crdnId));
return !crdnPayerInfo.isEmpty() ? crdnPayerInfo.get(0) : null;
}
/** ID .
* @param req
* @return
*/
List<DataObject> selectSndngTrgts(String sndngId);
/** .
* @param params
@ -176,109 +191,6 @@ public interface SndngMapper extends AbstractMapper {
return sndng != null && updateSndngSttsCd(params().set("sndng", sndng)) == 1;
}
/** , , .
* @param req
* @return
*/
List<DataObject> selectCrdnPayerTrgts(SndbQuery req);
default DataObject selectCrdnPayerInfo(String crdnId) {
List<DataObject> crdnPayerInfo = selectCrdnPayerTrgts(new SndbQuery().setCrdnId(crdnId));
return !crdnPayerInfo.isEmpty() ? crdnPayerInfo.get(0) : null;
}
/** ID .
* @param req
* @return
*/
List<DataObject> selectSndngTrgts(String sndngId);
/** .
* @param req
* @return
*/
List<DataObject> selectSndbkList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> selectSndbks(SndbQuery req);
/** 1 .
* @param req
* @return
*/
default DataObject selectSndbkInfo(SndbQuery req) {
// 기본 정렬
if (req.getOrderBy() == null) {
req.setOrderBy("SD.SNDNG_DTL_ID DESC");
}
List<DataObject> sndbkInfo = selectSndbks(req);
return !sndbkInfo.isEmpty() ? sndbkInfo.get(0) : null;
}
/** .
* @param sndngDtl
* @return
*/
int createSndbk(Map<String, Object> params);
default boolean createSndbk(SndngDtl sndngDtl) {
return sndngDtl != null && createSndbk(params().set("sndngDtl", sndngDtl)) == 1;
}
/** .
* @param sndngDtl
* @return
*/
int updateSndbk(Map<String, Object> params);
default boolean updateSndbk(SndngDtl sndngDtl) {
return sndngDtl != null && updateSndbk(params().set("sndngDtl", sndngDtl)) == 1;
}
/** .
* @param sndngDtl
* @return
*/
int deleteSndbk(Map<String, Object> params);
default boolean deleteSndbk(SndngDtl sndngDtl) {
return sndngDtl != null && deleteSndbk(params().set("sndngDtl", sndngDtl)) == 1;
}
/** ID
* @param svbtcId ID
* @return
*/
int selectTnocsSndngDtlSvbtc(String svbtcId);
/** .
* @param params
* <ul><li>"sndngDtl" - </li>
@ -292,39 +204,4 @@ public interface SndngMapper extends AbstractMapper {
return sndng != null && updateEPostSndng(params().set("sndng", sndng)) == 1;
}
/** .
* @param params
* <ul><li>"sndngDtl" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int updateSndngDtlSvbtc(Map<String, Object> params);
default boolean updateSndngDtlSvbtc(SndngDtl sndngDtl) {
return sndngDtl != null && updateSndngDtlSvbtc(params().set("sndngDtl", sndngDtl)) == 1;
}
/** .
* @param params
* <ul><li>"sndngDtl" - </li>
* <li>"currentUser" - </li>
* </ul>
* @return
*/
int deleteSndngDtlSvbtc(Map<String, ?> params);
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
default boolean deleteSndngDtlSvbtc(SndngDtl sndngDtl) {
return sndngDtl != null && deleteSndngDtlSvbtc(params().set("sndngDtl", sndngDtl)) >= 1;
}
}

@ -5,6 +5,7 @@ import java.util.List;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.sndb.SndngDtl;
import cokr.xit.fims.sndb.Svbtc;
import cokr.xit.fims.sndb.SndbQuery;
/** .
@ -19,19 +20,19 @@ import cokr.xit.fims.sndb.SndbQuery;
*/
public interface SndngDtlService {
/** .
/** .
* @param req
* @return
*/
List<DataObject> getSndngDtlList(SndbQuery req);
/** .
/** .
* @param req
* @return
*/
List<DataObject> getSndngDtls(SndbQuery req);
/** .
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
@ -40,7 +41,7 @@ public interface SndngDtlService {
*/
boolean create(SndngDtl sndngDtl);
/** .
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
@ -49,7 +50,7 @@ public interface SndngDtlService {
*/
boolean update(SndngDtl sndngDtl);
/** .
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
@ -58,4 +59,131 @@ public interface SndngDtlService {
*/
boolean remove(SndngDtl sndngDtl);
/** ID .<br />
* @param sndngDtlId ID
* @return
*/
DataObject getSndbkInfo(SndbQuery req);
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String createSndbkList(SndbQuery req);
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String createSndbk(String... sndngDtlIDs);
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String updateSndbk(SndngDtl sndngDtl);
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String deleteSndbk(SndngDtl sndngDtl);
/** .
* @param req
* @return
*/
List<DataObject> getSndbkList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getSvbtcList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getSvbtcs(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getSvbtcDtls(SndbQuery req);
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String createSvbtc(Svbtc svbtc);
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String updateSvbtc(Svbtc svbtc);
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String removeSvbtc(Svbtc svbtc);
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String removeSvbtcList(SndbQuery req);
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String removeSvbtcEach(Svbtc svbtc);
}

@ -4,8 +4,6 @@ import java.util.List;
import cokr.xit.fims.sndb.SndbQuery;
import cokr.xit.fims.sndb.Sndng;
import cokr.xit.fims.sndb.SndngDtl;
import cokr.xit.fims.sndb.Svbtc;
import cokr.xit.foundation.data.DataObject;
/** .
@ -20,6 +18,18 @@ import cokr.xit.foundation.data.DataObject;
*/
public interface SndngService {
/** .
* @param req
* @return
*/
List<DataObject> getSndngList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getSndngs(SndbQuery req);
/** .
* @param req
* @return
@ -78,17 +88,6 @@ public interface SndngService {
/** .
* @param sndng
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String createSndng(Sndng sndng);
/**(EPost) .
* @param sndng
* @return
@ -137,119 +136,5 @@ public interface SndngService {
/** .
* @param req
* @return
*/
List<DataObject> getSndngList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getSndbkList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getSvbtcList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getSvbtcs(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getSvbtcDtls(SndbQuery req);
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String createSndbk(SndngDtl sndngDtl);
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String updateSndbk(SndngDtl sndngDtl);
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String deleteSndbk(SndngDtl sndngDtl);
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String createSvbtc(Svbtc svbtc);
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String updateSvbtc(Svbtc svbtc);
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String removeSvbtc(Svbtc svbtc);
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String removeSvbtcList(SndbQuery req);
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String removeSvbtcEach(Svbtc svbtc);
/** ID .<br />
* @param sndngDtlId ID
* @return
*/
DataObject getSndbkInfo(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getSndngs(SndbQuery req);
}

@ -25,10 +25,8 @@ import cokr.xit.fims.nxrp.dao.NxrpMtchgMapper;
import cokr.xit.fims.sndb.SndbQuery;
import cokr.xit.fims.sndb.Sndng;
import cokr.xit.fims.sndb.SndngDtl;
import cokr.xit.fims.sndb.Svbtc;
import cokr.xit.fims.sndb.dao.SndngDtlMapper;
import cokr.xit.fims.sndb.dao.SndngMapper;
import cokr.xit.fims.sndb.dao.SvbtcMapper;
import cokr.xit.foundation.AbstractComponent;
import cokr.xit.foundation.data.DataObject;
@ -53,10 +51,6 @@ public class SndngBean extends AbstractComponent {
@Resource(name = "sndngDtlMapper")
private SndngDtlMapper sndngDtlMapper;
/** 공시송달 대장 정보 DAO */
@Resource(name = "svbtcMapper")
private SvbtcMapper svbtcMapper;
/** 세외수입 매칭 내역 정보 DAO */
@Resource(name = "nxrpMtchgMapper")
private NxrpMtchgMapper nxrpMtchgMapper;
@ -180,7 +174,7 @@ public class SndngBean extends AbstractComponent {
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
List<DataObject> wrngTrgtList = sndngMapper.selectWrngTrgtCrdnIDs(req);;
List<DataObject> wrngTrgtList = sndngMapper.selectWrngTrgtCrdnIDs(req);
// 조회 건수 확인
if (wrngTrgtList == null || wrngTrgtList.size() < 1) {
@ -624,242 +618,6 @@ public class SndngBean extends AbstractComponent {
return rtnMsg;
}
/** .
* @param req
* @return
*/
public List<DataObject> getSndbkList(SndbQuery req) {
return sndngMapper.selectSndbkList(req);
}
/** .
* @param sndng
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createSndng(Sndng sndng) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
String newCrdnSttsCd = ""; // 단속 상태 코드
int ffnlgAmt = 0; // 과태료 금액
int pcptax = 0; // 본세
int adamt = 0; // 가산금
int sumAmt = 0; // 합계 금액
// 사용자 정보
DataObject userInfo = userBean.getUserInfo(currentUser().getId());
sndng.setDeptCd(userInfo.string("DEPT_CD")); // 부서 코드
sndng.setVltnId(sndng.getVltnId()); // 위반 ID
if (sndng.getSndngSeCd().equals("11") || sndng.getSndngSeCd().equals("12")) { // 계고장
sndng.setLevyBgngYmd(null); // 부과 시작 일자
sndng.setLevyEndYmd(null); // 부과 종료 일자
sndng.setSndngEndYmd(null); // 발송 종료 일자
newCrdnSttsCd = "84"; // 단속 상태 코드 - 84 계고장 출력 완료
} else if (sndng.getSndngSeCd().equals("01") || sndng.getSndngSeCd().equals("02")) { // 사전통지
sndng.setLevyBgngYmd(null); // 부과 시작 일자
sndng.setLevyEndYmd(null); // 부과 종료 일자
newCrdnSttsCd = "42"; // 단속 상태 코드 - 42 사전통지 발송
} else {
newCrdnSttsCd = "";
}
if (sndng.getTnocs() == 1) {
sndng.setSndngRegSeCd("02"); // 발송 등록 구분 코드 - 개별
} else {
sndng.setSndngRegSeCd("01"); // 발송 등록 구분 코드 - 일괄
}
if (sndng.getResndYN() == null) {
sndng.setResndYN("N"); // 재발송 여부
}
if (sndng.getDelYN() == null) {
sndng.setDelYN("N"); // 삭제 여부
}
sndng.setSndngSttsCd("00"); // 발송 상태 코드(FIM049) - 00 발송 준비
// 발송 등록
rtnScs = sndngMapper.insert(sndng);
if (!rtnScs) {
throw new RuntimeException("발송 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
for (int iLoop = 0; iLoop < sndng.getCrdnIDs().length; iLoop++) {
// 단속, 납부자 정보 조회
DataObject crdnPayerInfo = sndngMapper.selectCrdnPayerInfo(sndng.getCrdnIDs()[iLoop]);
if (crdnPayerInfo == null) {
throw new RuntimeException("발송상세 등록 작업중 단속 정보가 확인되지 않았습니다." + "<p>단속ID : " + sndng.getCrdnIDs()[iLoop]); // 예외를 발생시켜서 DB Rollback
}
if (crdnPayerInfo.string("RTPYR_ID").equals("")) {
throw new RuntimeException("발송상세 등록 작업중 납부자 정보가 확인되지 않았습니다." + "<p>차량번호 : " + crdnPayerInfo.string("VHRNO")); // 예외를 발생시켜서 DB Rollback
}
if (sndng.getSndngSeCd().equals("11") || sndng.getSndngSeCd().equals("12")) { // 계고장
ffnlgAmt = crdnPayerInfo.number("FFNLG_CRDN_AMT").intValue(); // 과태료 최초 단속 금액
pcptax = crdnPayerInfo.number("FFNLG_CRDN_AMT").intValue(); // 과태료 최초 단속 금액
adamt = 0;
sumAmt = 0;
} else if (sndng.getSndngSeCd().equals("01") || sndng.getSndngSeCd().equals("02")) { // 사전통지
// 부과 ID가 없다면 부과대장 등록
if (crdnPayerInfo.string("LEVY_ID").equals("")) {
Levy levy = new Levy();
levy.setCrdnId(crdnPayerInfo.string("CRDN_ID")); // 단속 ID
levy.setLevyYmd(sndng.getSndngYmd()); // 부과 일자
levy.setFrstDudtYmd(sndng.getSndngEndYmd()); // 최초 납기 일자
levy.setDudtYmd(sndng.getSndngEndYmd()); // 납기 일자
rtnMsg = levyBean.createRductLevy(levy);
if (rtnMsg.contains("[F]")) {
throw new RuntimeException("발송 상세 등록 작업중 부과대장 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 단속, 납부자 정보 재조회 /////////////////////////////////////////
crdnPayerInfo = sndngMapper.selectCrdnPayerInfo(sndng.getCrdnIDs()[iLoop]);
} else {
if ("BPV,PVS".contains(crdnPayerInfo.string("TASK_SE_CD"))) {
// 부과일자, 최초납기일자, 납기일자를 변경한다.
Levy levy = new Levy();
levy.setLevyId(crdnPayerInfo.string("LEVY_ID")); // 부과 ID
levy.setLevyYmd(sndng.getSndngYmd()); // 부과 일자
levy.setFrstDudtYmd(sndng.getSndngEndYmd()); // 최초 납기 일자
levy.setDudtYmd(sndng.getSndngEndYmd()); // 납기 일자
levy.setFfnlgAmt(crdnPayerInfo.number("FFNLG_AMT").intValue()); // 과태료 금액
levy.setLevyPcptax(crdnPayerInfo.number("ADVNTCE_AMT").intValue()); // 본세 금액
levy.setSumAmt(crdnPayerInfo.number("ADVNTCE_AMT").intValue()); // 합계 금액
rtnMsg = levyBean.updateRductLevyYmd(levy);
if (rtnMsg.contains("[F]")) {
throw new RuntimeException("발송 상세 등록 작업중 부과대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
}
ffnlgAmt = crdnPayerInfo.number("FFNLG_AMT").intValue(); // 과태료 금액
pcptax = crdnPayerInfo.number("PCPTAX").intValue(); // 부과 본세
adamt = 0; // 부과 가산금
sumAmt = crdnPayerInfo.number("SUM_AMT").intValue(); // 부과 합계 금액
} else {
ffnlgAmt = crdnPayerInfo.number("FFNLG_AMT").intValue(); // 과태료 금액
pcptax = crdnPayerInfo.number("PCPTAX").intValue(); // 부과본세 - 수납본세 - 감액본세
adamt = crdnPayerInfo.number("ADAMT").intValue(); // 부과가산금 - 수납가산금 - 감액가산금
sumAmt = crdnPayerInfo.number("SUM_AMT").intValue(); // 합계 금액
}
// 발송 상세(TB_SNDNG_DTL) 대장에 등록한다.
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setSndngId(sndng.getSndngId()); // 발송 ID
sndngDtl.setCrdnId(crdnPayerInfo.string("CRDN_ID")); // 단속 ID
sndngDtl.setSndngSeCd(sndng.getSndngSeCd()); // 발송 구분 코드
sndngDtl.setSndngYmd(sndng.getSndngYmd()); // 발송 일자
sndngDtl.setSndngEndYmd(sndng.getSndngEndYmd()); // 발송 종료 일자
sndngDtl.setRtpyrNm(crdnPayerInfo.string("RTPYR_NM")); // 납부자 명
sndngDtl.setRtpyrBrdt(crdnPayerInfo.string("RTPYR_BRDT")); // 납부자 생년월일
sndngDtl.setRtpyrAddr(crdnPayerInfo.string("ADDR")); // 납부자 주소
sndngDtl.setRtpyrDtlAddr(crdnPayerInfo.string("DTL_ADDR")); // 납부자 상세 주소
sndngDtl.setRtpyrZip(crdnPayerInfo.string("ZIP")); // 납부자 우편번호
sndngDtl.setSndngDtlSttsCd("00"); // 발송 상세 상태 코드 - 00 처리전
sndngDtl.setVhrno(crdnPayerInfo.string("VHRNO")); // 차량번호
sndngDtl.setCrdnDt(crdnPayerInfo.string("CRDN_YMD_TM_MASK")); // 단속 일시
sndngDtl.setCrdnStdgNm(crdnPayerInfo.string("CRDN_STDG_NM")); // 단속 법정동 명
sndngDtl.setCrdnPlc(crdnPayerInfo.string("CRDN_PLC")); // 단속 장소
sndngDtl.setFyr(crdnPayerInfo.string("FYR")); // 회계연도
sndngDtl.setLevyNo(crdnPayerInfo.string("LEVY_NO")); // 부과 번호
sndngDtl.setLevyYmd(crdnPayerInfo.string("LEVY_YMD")); // 부과 일자
sndngDtl.setDudtYmd(crdnPayerInfo.string("DUDT_YMD")); // 납기 일자
sndngDtl.setFfnlgAmt(ffnlgAmt); // 과태료 금액
sndngDtl.setPcptax(pcptax); // 본세
sndngDtl.setAdamt(adamt); // 가산금
sndngDtl.setSumAmt(sumAmt); // 합계 금액
sndngDtl.setDudtAftrAmt(crdnPayerInfo.number("DUDT_AFTR_AMT").intValue()); // 납기 후 금액
sndngDtl.setEpayno(crdnPayerInfo.string("TAX_NO")); // 납세 번호
sndngDtl.setEpayno(crdnPayerInfo.string("EPAYNO")); // 전자납부번호
sndngDtl.setBankNm(crdnPayerInfo.string("BANK_NM")); // 은행 명
sndngDtl.setVrActno(crdnPayerInfo.string("VR_ACTNO")); // 가상 계좌번호
sndngDtl.setBankNm2(crdnPayerInfo.string("BANK_NM2")); // 은행 명2
sndngDtl.setVrActno2(crdnPayerInfo.string("VR_ACTNO2")); // 가상 계좌번호2
sndngDtl.setBankNm3(crdnPayerInfo.string("BANK_NM3")); // 은행 명3
sndngDtl.setVrActno3(crdnPayerInfo.string("VR_ACTNO3")); // 가상 계좌번호3
sndngDtl.setBankNm4(crdnPayerInfo.string("BANK_NM4")); // 은행 명4
sndngDtl.setVrActno4(crdnPayerInfo.string("VR_ACTNO4")); // 가상 계좌번호4
sndngDtl.setBankNm5(crdnPayerInfo.string("BANK_NM5")); // 은행 명5
sndngDtl.setVrActno5(crdnPayerInfo.string("VR_ACTNO5")); // 가상 계좌번호5
sndngDtl.setBankNm6(crdnPayerInfo.string("BANK_NM6")); // 은행 명6
sndngDtl.setVrActno6(crdnPayerInfo.string("VR_ACTNO6")); // 가상 계좌번호6
sndngDtl.setBankNm7(crdnPayerInfo.string("BANK_NM7")); // 은행 명7
sndngDtl.setVrActno7(crdnPayerInfo.string("VR_ACTNO7")); // 가상 계좌번호7
sndngDtl.setBankNm8(crdnPayerInfo.string("BANK_NM8")); // 은행 명8
sndngDtl.setVrActno8(crdnPayerInfo.string("VR_ACTNO8")); // 가상 계좌번호8
sndngDtl.setBankNm9(crdnPayerInfo.string("BANK_NM9")); // 은행 명9
sndngDtl.setVrActno9(crdnPayerInfo.string("VR_ACTNO9")); // 가상 계좌번호9
sndngDtl.setBankNm10(crdnPayerInfo.string("BANK_NM10")); // 은행 명10
sndngDtl.setVrActno10(crdnPayerInfo.string("VR_ACTNO10")); // 가상 계좌번호10
sndngDtl.setBankNm11(crdnPayerInfo.string("BANK_NM11")); // 은행 명11
sndngDtl.setVrActno11(crdnPayerInfo.string("VR_ACTNO11")); // 가상 계좌번호11
sndngDtl.setDelYN("N"); // 삭제 여부
rtnScs = sndngDtlMapper.insert(sndngDtl); // 발송 상세 등록
if (!rtnScs) {
throw new RuntimeException("발송 상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 단속 상태 코드를 수정한다.
if (!newCrdnSttsCd.equals("")) {
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
crdnSttsHstry.setCrdnId(crdnPayerInfo.string("CRDN_ID"));
crdnSttsHstry.setBfrSttsCd(crdnPayerInfo.string("CRDN_STTS_CD"));
crdnSttsHstry.setBfrSttsChgDt(crdnPayerInfo.string("CRDN_STTS_CHG_DT"));
crdnSttsHstry.setCrdnSttsCd(newCrdnSttsCd);
crdnSttsHstry.setTaskDtlId(sndngDtl.getSndngDtlId());
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs) {
throw new RuntimeException("발송 상세 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param sndng
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public boolean create(Sndng sndng) {
return sndngMapper.insert(sndng);
}
/** .
* @param sndng
* @return
@ -1727,292 +1485,4 @@ public class SndngBean extends AbstractComponent {
return retCode;
}
/** ID .<br />
* @param sndngDtlId ID
* @return
*/
public DataObject getSndbkInfo(SndbQuery req) {
return sndngMapper.selectSndbkInfo(req);
}
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createSndbk(SndngDtl sndngDtl) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 반송 내역 조회
DataObject sndbkInfo = sndngMapper.selectSndbkInfo(new SndbQuery().setSndngDtlId(sndngDtl.getSndngDtlId())
.setDelYN("N"));
// 반송 등록이 가능한지 확인.
//
sndngDtl.setBfrSndngDtlSttsCd(sndbkInfo.string("SNDNG_DTL_STTS_CD")); // 전 발송 상세 상태 코드
sndngDtl.setSndngDtlSttsCd("05"); // 발송 상세 상태 코드 FIM050 - 05:반송
// 발송 상세(TB_SNDNG_DTL) 대장에 반송 정보를 등록 한다.
rtnScs = sndngMapper.createSndbk(sndngDtl);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("발송상세의 반송 정보 등록에 실패하였습니다.");
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String updateSndbk(SndngDtl sndngDtl) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 발송 상세(TB_SNDNG_DTL) 대장에 반송 정보를 등록 한다.
rtnScs = sndngMapper.updateSndbk(sndngDtl);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("발송상세의 반송 정보 수정에 실패하였습니다.");
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String deleteSndbk(SndngDtl sndngDtl) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 반송 내역 조회
DataObject sndbkInfo = sndngMapper.selectSndbkInfo(new SndbQuery().setSndngDtlId(sndngDtl.getSndngDtlId())
.setDelYN("N"));
// 반송 삭제가 가능한지 확인.
//
sndngDtl.setBfrSndngDtlSttsCd(sndbkInfo.string("SNDNG_DTL_STTS_CD")); // 전 발송 상세 상태 코드 <- 발송 상세 상태 코드
sndngDtl.setSndngDtlSttsCd(sndbkInfo.string("BFR_SNDNG_DTL_STTS_CD")); // 발송 상세 상태 코드 <- 전 발송 상세 상태 코드
// 발송 상세(TB_SNDNG_DTL) 대장에 반송 정보를 등록 한다.
rtnScs = sndngMapper.deleteSndbk(sndngDtl);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("발송상세의 반송 정보 삭제에 실패하였습니다.");
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param req
* @return
*/
public List<DataObject> getSvbtcList(SndbQuery req) {
return svbtcMapper.selectSvbtcList(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getSvbtcs(SndbQuery req) {
return svbtcMapper.selectSvbtcs(req);
}
/** .
* @param req
* @return
*/
public DataObject getSvbtcInfo(SndbQuery req) {
return svbtcMapper.selectSvbtcInfo(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getSvbtcDtls(SndbQuery req) {
return svbtcMapper.selectSvbtcDtls(req);
}
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createSvbtc(Svbtc svbtc) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 공시송달(TB_SNDNG_DTL) 대장에 공시송달 정보를 등록 한다.
rtnScs = svbtcMapper.insert(svbtc);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("공시송달 정보 등록에 실패하였습니다.");
}
// 발송 상세 대장에 공시송달 정보 수정
for (int iLoop = 0; iLoop < svbtc.getSndngDtlIDs().length; iLoop++) {
// 발송 상세
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setSvbtcId(svbtc.getSvbtcId());
sndngDtl.setSndngDtlSttsCd("06");
sndngDtl.setSndngDtlId(svbtc.getSndngDtlIDs()[iLoop]);
rtnScs = sndngMapper.updateSndngDtlSvbtc(sndngDtl);
if (!rtnScs) {
throw new RuntimeException("발송상세 대장에 공시송달 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String updateSvbtc(Svbtc svbtc) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 공시송달(TB_SNDNG_DTL) 대장에 공시송달 정보를 수정 한다.
rtnScs = svbtcMapper.update(svbtc);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("공시송달 정보 수정에 실패하였습니다.");
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String removeSvbtc(Svbtc svbtc) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 공시송달(TB_SVBTC) 대장을 삭제 한다.
rtnScs = svbtcMapper.delete(svbtc);
if (!rtnScs) {
throw new RuntimeException("공시송달 대장 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/**ID .
* @param req
* @return
*/
public int selectTnocsSndngDtlSvbtc(String svbtcId) {
return sndngMapper.selectTnocsSndngDtlSvbtc(svbtcId);
}
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String removeSndngDtlSvbtc(SndngDtl sndngDtl) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 발송 상세(TB_SNDNG_DTL) 대장에 공시송달 정보를 삭제 한다.
rtnScs = sndngMapper.deleteSndngDtlSvbtc(sndngDtl);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("발송상세의 공시송달 정보 삭제에 실패하였습니다.");
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String removeSvbtcSndngDtl(Svbtc svbtc) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 공시송달(TB_SVBTC) 대장을 삭제 한다.
rtnScs = svbtcMapper.delete(svbtc);
if (!rtnScs) {
throw new RuntimeException("공시송달 대장 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 발송 상세(TB_SNDNG_DTL) 대장에서 공시송달 정보를 삭제 한다.
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setSvbtcId(svbtc.getSvbtcId());
sndngDtl.setSndngDtlSttsCd("05");
rtnScs = sndngMapper.deleteSndngDtlSvbtc(sndngDtl);
if (!rtnScs) {
throw new RuntimeException("발송상세 대장에 공시송달 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
}

@ -10,9 +10,13 @@ import cokr.xit.foundation.AbstractComponent;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.sndb.SndngDtl;
import cokr.xit.fims.sndb.Svbtc;
import cokr.xit.fims.cmmn.CmmnUtil;
import cokr.xit.fims.epst.EpostQuery;
import cokr.xit.fims.epst.dao.EpostDlvrRsltMapper;
import cokr.xit.fims.sndb.SndbQuery;
import cokr.xit.fims.sndb.dao.SndngDtlMapper;
import cokr.xit.fims.sndb.dao.SvbtcMapper;
/** Bean
*
@ -31,6 +35,14 @@ public class SndngDtlBean extends AbstractComponent {
@Resource(name = "sndngDtlMapper")
private SndngDtlMapper sndngDtlMapper;
/** 전자우편 배달 결과 정보 DAO */
@Resource(name = "epostDlvrRsltMapper")
private EpostDlvrRsltMapper epostDlvrRsltMapper;
/** 공시송달 대장 정보 DAO */
@Resource(name = "svbtcMapper")
private SvbtcMapper svbtcMapper;
/** .
* @param req
* @return
@ -101,4 +113,389 @@ public class SndngDtlBean extends AbstractComponent {
return sndngDtlMapper.delete(sndngDtl);
}
/** .
* @param req
* @return
*/
public List<DataObject> getSndbkList(SndbQuery req) {
return sndngDtlMapper.selectSndbkList(req);
}
/** ID .<br />
* @param sndngDtlId ID
* @return
*/
public DataObject getSndbkInfo(SndbQuery req) {
return sndngDtlMapper.selectSndbkInfo(req);
}
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createSndbkList(SndbQuery req) {
// 변수 선언
String rtnMsg = "[F] "; // 처리 결과 메시지
List<DataObject> sndngDtlList = sndngDtlMapper.selectSndngTrgtDtlIDs(req);
// 조회 건수 확인
if (sndngDtlList == null || sndngDtlList.size() < 1) {
rtnMsg = "[F] 작업 중 대상 자료가 존재하지 않습니다.";
return rtnMsg;
}
// 발송상세(TB_SNDNG_DTL)에 반송 정보를 등록한다.
for (int iLoop = 0; iLoop < sndngDtlList.size(); iLoop++) {
//
rtnMsg = createSndbk(sndngDtlList.get(iLoop).string("SNDNG_DTL_ID"));
// 메시지 확인
if (rtnMsg.contains("[F]")) {
throw new RuntimeException("반송 확인 작업중 반송 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createSndbk(String... sndngDtlIDs) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
for (int iLoop = 0; iLoop < sndngDtlIDs.length; iLoop++) {
// 반송 내역 조회
DataObject sndbkInfo = sndngDtlMapper.selectSndbkInfo(new SndbQuery().setSndngDtlId(sndngDtlIDs[iLoop]));
// 반송 등록이 가능한지 확인.
if (!("03,05".contains(sndbkInfo.string("SNDNG_DTL_STTS_CD")))) {
rtnMsg = "[N] 반송 등록 대상자료가 아닙니다.";
return rtnMsg;
}
// 등기 번호가 있는지 확인
if (sndbkInfo.string("RG_NO").equals("")) {
rtnMsg = "[N] 등기번호가 존재하지 않습니다.";
return rtnMsg;
}
// 등기 번호가 13자리인지 확인
if (sndbkInfo.string("RG_NO").length() != 13) {
rtnMsg = "[N] 등기번호 자릿수(13)가 맞지 않습니다.";
return rtnMsg;
}
// 전자우편 배달 결과 조회
DataObject epostDlvrRsltInfo = epostDlvrRsltMapper.selectEpostDlvrRsltInfo(new EpostQuery().setConKey(sndbkInfo.string("CON_KEY"))
.setRegino(sndbkInfo.string("RG_NO")));
// 조회 건수 확인
if (epostDlvrRsltInfo == null) {
rtnMsg = "[N] 반송 자료가 존재하지 않습니다.";
return rtnMsg;
}
// 발송 상세(TB_SNDNG_DTL) 대장에 반송 정보를 등록 한다.
SndngDtl sndngDtl = new SndngDtl();
if (epostDlvrRsltInfo.string("DELIVRSLTCD").equals("1")) {
sndngDtl.setSndngDtlId(sndbkInfo.string("SNDNG_DTL_ID"));
sndngDtl.setDlvrYmd(epostDlvrRsltInfo.string("DELIVYMD")); // 배달일자
sndngDtl.setDlvrTm(epostDlvrRsltInfo.string("DELIVHHMI")); // 배달시간
// sndngDtl.setUndlvrRsnCd(epostDlvrRsltInfo.string("NONDELIVREASNCD")); // 미배달 사유 코드
// sndngDtl.setUndlvrRsnNm(epostDlvrRsltInfo.string("NONDELIVREASNCDNM")); // 미배달 사유 명
sndngDtl.setRcpnNm(epostDlvrRsltInfo.string("SUBRECPRSNNM")); // 수령인 명
sndngDtl.setRcpnRelNm(epostDlvrRsltInfo.string("RELRECPRSNCDNM")); // 수령인 관계 명
sndngDtl.setSndngDtlSttsCd("04"); // 발송 상세 상태 코드 FIM050 - 04:발송확인
sndngDtl.setBfrSndngDtlSttsCd(sndbkInfo.string("SNDNG_DTL_STTS_CD")); // 전 발송 상세 상태 코드
} else {
sndngDtl.setSndngDtlId(sndbkInfo.string("SNDNG_DTL_ID"));
sndngDtl.setDlvrYmd(epostDlvrRsltInfo.string("DELIVYMD")); // 배달일자
sndngDtl.setDlvrTm(epostDlvrRsltInfo.string("DELIVHHMI")); // 배달시간
sndngDtl.setUndlvrRsnCd(epostDlvrRsltInfo.string("NONDELIVREASNCD")); // 미배달 사유 코드
sndngDtl.setUndlvrRsnNm(epostDlvrRsltInfo.string("NONDELIVREASNCDNM")); // 미배달 사유 명
// sndngDtl.setRcpnNm(epostDlvrRsltInfo.string("SUBRECPRSNNM")); // 수령인 명
// sndngDtl.setRcpnRelNm(epostDlvrRsltInfo.string("RELRECPRSNCDNM")); // 수령인 관계 명
sndngDtl.setSndngDtlSttsCd("05"); // 발송 상세 상태 코드 FIM050 - 05:반송
sndngDtl.setBfrSndngDtlSttsCd(sndbkInfo.string("SNDNG_DTL_STTS_CD")); // 전 발송 상세 상태 코드
}
rtnScs = sndngDtlMapper.createSndbk(sndngDtl);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("발송상세의 반송 정보 등록에 실패하였습니다.");
}
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String updateSndbk(SndngDtl sndngDtl) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 발송 상세(TB_SNDNG_DTL) 대장에 반송 정보를 등록 한다.
rtnScs = sndngDtlMapper.updateSndbk(sndngDtl);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("발송상세의 반송 정보 수정에 실패하였습니다.");
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String deleteSndbk(SndngDtl sndngDtl) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 반송 내역 조회
DataObject sndbkInfo = sndngDtlMapper.selectSndbkInfo(new SndbQuery().setSndngDtlId(sndngDtl.getSndngDtlId())
.setDelYN("N"));
// 반송 삭제가 가능한지 확인.
//
sndngDtl.setBfrSndngDtlSttsCd(sndbkInfo.string("SNDNG_DTL_STTS_CD")); // 전 발송 상세 상태 코드 <- 발송 상세 상태 코드
sndngDtl.setSndngDtlSttsCd(sndbkInfo.string("BFR_SNDNG_DTL_STTS_CD")); // 발송 상세 상태 코드 <- 전 발송 상세 상태 코드
// 발송 상세(TB_SNDNG_DTL) 대장에 반송 정보를 등록 한다.
rtnScs = sndngDtlMapper.deleteSndbk(sndngDtl);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("발송상세의 반송 정보 삭제에 실패하였습니다.");
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param req
* @return
*/
public List<DataObject> getSvbtcList(SndbQuery req) {
return svbtcMapper.selectSvbtcList(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getSvbtcs(SndbQuery req) {
return svbtcMapper.selectSvbtcs(req);
}
/** .
* @param req
* @return
*/
public DataObject getSvbtcInfo(SndbQuery req) {
return svbtcMapper.selectSvbtcInfo(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getSvbtcDtls(SndbQuery req) {
return svbtcMapper.selectSvbtcDtls(req);
}
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createSvbtc(Svbtc svbtc) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 공시송달(TB_SNDNG_DTL) 대장에 공시송달 정보를 등록 한다.
rtnScs = svbtcMapper.insert(svbtc);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("공시송달 정보 등록에 실패하였습니다.");
}
// 발송 상세 대장에 공시송달 정보 수정
for (int iLoop = 0; iLoop < svbtc.getSndngDtlIDs().length; iLoop++) {
// 발송 상세
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setSvbtcId(svbtc.getSvbtcId());
sndngDtl.setSndngDtlSttsCd("06");
sndngDtl.setSndngDtlId(svbtc.getSndngDtlIDs()[iLoop]);
rtnScs = sndngDtlMapper.updateSndngDtlSvbtc(sndngDtl);
if (!rtnScs) {
throw new RuntimeException("발송상세 대장에 공시송달 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String updateSvbtc(Svbtc svbtc) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 공시송달(TB_SNDNG_DTL) 대장에 공시송달 정보를 수정 한다.
rtnScs = svbtcMapper.update(svbtc);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("공시송달 정보 수정에 실패하였습니다.");
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String removeSvbtc(Svbtc svbtc) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 공시송달(TB_SVBTC) 대장을 삭제 한다.
rtnScs = svbtcMapper.delete(svbtc);
if (!rtnScs) {
throw new RuntimeException("공시송달 대장 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/**ID .
* @param req
* @return
*/
public int selectTnocsSndngDtlSvbtc(String svbtcId) {
return sndngDtlMapper.selectTnocsSndngDtlSvbtc(svbtcId);
}
/** .
* @param sndngDtl
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String removeSndngDtlSvbtc(SndngDtl sndngDtl) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 발송 상세(TB_SNDNG_DTL) 대장에 공시송달 정보를 삭제 한다.
rtnScs = sndngDtlMapper.deleteSndngDtlSvbtc(sndngDtl);
if (!rtnScs) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("발송상세의 공시송달 정보 삭제에 실패하였습니다.");
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param svbtc
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String removeSvbtcSndngDtl(Svbtc svbtc) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
// 공시송달(TB_SVBTC) 대장을 삭제 한다.
rtnScs = svbtcMapper.delete(svbtc);
if (!rtnScs) {
throw new RuntimeException("공시송달 대장 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 발송 상세(TB_SNDNG_DTL) 대장에서 공시송달 정보를 삭제 한다.
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setSvbtcId(svbtc.getSvbtcId());
sndngDtl.setSndngDtlSttsCd("05");
rtnScs = sndngDtlMapper.deleteSndngDtlSvbtc(sndngDtl);
if (!rtnScs) {
throw new RuntimeException("발송상세 대장에 공시송달 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
}

@ -10,6 +10,7 @@ import cokr.xit.foundation.component.AbstractServiceBean;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.sndb.SndngDtl;
import cokr.xit.fims.sndb.Svbtc;
import cokr.xit.fims.sndb.SndbQuery;
import cokr.xit.fims.sndb.service.SndngDtlService;
@ -55,4 +56,165 @@ public class SndngDtlServiceBean extends AbstractServiceBean implements SndngDtl
return sndngDtlBean.remove(sndngDtl);
}
@Override
public List<DataObject> getSndbkList(SndbQuery req) {
return sndngDtlBean.getSndbkList(req);
}
@Override
public DataObject getSndbkInfo(SndbQuery req) {
if (req.getCallPurpose() == null) {
req.setCallPurpose("view");
}
return sndngDtlBean.getSndbkInfo(req);
}
@Override
public String createSndbkList(SndbQuery req) {
return sndngDtlBean.createSndbkList(req);
}
@Override
public String createSndbk(String... sndngDtlIDs) {
return sndngDtlBean.createSndbk(sndngDtlIDs);
}
@Override
public String updateSndbk(SndngDtl sndngDtl) {
return sndngDtlBean.updateSndbk(sndngDtl);
}
@Override
public String deleteSndbk(SndngDtl sndngDtl) {
return sndngDtlBean.deleteSndbk(sndngDtl);
}
@Override
public List<DataObject> getSvbtcList(SndbQuery req) {
return sndngDtlBean.getSvbtcList(req);
}
@Override
public List<DataObject> getSvbtcs(SndbQuery req) {
return sndngDtlBean.getSvbtcs(req);
}
@Override
public List<DataObject> getSvbtcDtls(SndbQuery req) {
return sndngDtlBean.getSvbtcDtls(req);
}
@Override
public String createSvbtc(Svbtc svbtc) {
return sndngDtlBean.createSvbtc(svbtc);
}
@Override
public String updateSvbtc(Svbtc svbtc) {
return sndngDtlBean.updateSvbtc(svbtc);
}
@Override
public String removeSvbtc(Svbtc svbtc) {
return sndngDtlBean.removeSvbtc(svbtc);
}
@Override
public String removeSvbtcList(SndbQuery req) {
// 변수 선언
String retMessage = ""; // 처리 결과 메시지
// 공시송달 IDs 건수를 확인하여 1건이하면.. 종료
if (req.getSvbtcIDs().length < 1) {
retMessage = "작업 중 선택 자료가 존재하지 않습니다.";
return retMessage;
}
// 공시송달 IDs 만큼 반복..
for (int iLoop = 0; iLoop < req.getSvbtcIDs().length; iLoop++) {
Svbtc svbtc = new Svbtc();
svbtc.setSvbtcId(req.getSvbtcIDs()[iLoop]); // 공시송달 ID
svbtc.setDelRsn(req.getDelRsn()); // 삭제 사유
// 공시송달 삭제 호출
retMessage = sndngDtlBean.removeSvbtcSndngDtl(svbtc);
// 오류가 발생하였으면 종료..
if (retMessage.contains("[F]")) {
return retMessage;
}
}
return retMessage;
}
@Override
public String removeSvbtcEach(Svbtc svbtc) {
// 변수 선언
String retMessage = ""; // 처리 결과 메시지
// 공시송달 IDs 건수를 확인하여 1건이하면.. 종료
if (svbtc.getSndngDtlIDs().length < 1) {
retMessage = "작업 중 선택 자료가 존재하지 않습니다.";
return retMessage;
}
// 공시송달 IDs 만큼 반복..
for (int iLoop = 0; iLoop < svbtc.getSndngDtlIDs().length; iLoop++) {
// 발송 상세(TB_SNDNG_DTL) 대장에서 공시송달 정보를 삭제 한다.
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setSndngDtlId(svbtc.getSndngDtlIDs()[iLoop]);
sndngDtl.setSvbtcId(svbtc.getSvbtcId());
sndngDtl.setSndngDtlSttsCd("05");
retMessage = sndngDtlBean.removeSndngDtlSvbtc(sndngDtl);
if (retMessage.contains("[F]")) {
throw new RuntimeException("발송상세 대장에 공시송달 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
// 공시송달 총건수 수정 호출
int svbtcTnocs = sndngDtlBean.selectTnocsSndngDtlSvbtc(svbtc.getSvbtcId());
if (svbtcTnocs == 0) { // 총건수가 0건이라면 공시송달 대장에서 삭제
retMessage = sndngDtlBean.removeSvbtc(svbtc);
} else { // 총건수를 확인하여 공시송달 대장에서 수정
// 공시송달 정보 호출
DataObject svbtcInfo = sndngDtlBean.getSvbtcInfo(new SndbQuery().setSvbtcId(svbtc.getSvbtcId())
.setDelYN("N"));
Svbtc mdfSvbtc = new Svbtc();
mdfSvbtc.setSvbtcYmd(svbtcInfo.string("SVBTC_YMD"));
mdfSvbtc.setTtlNm(svbtcInfo.string("TTL_NM"));
mdfSvbtc.setDocNo(svbtcInfo.string("DOC_NO"));
mdfSvbtc.setEtcCn(svbtcInfo.string("ETC_CN"));
mdfSvbtc.setTnocs(svbtcTnocs);
mdfSvbtc.setSvbtcId(svbtc.getSvbtcId());
retMessage = sndngDtlBean.updateSvbtc(mdfSvbtc);
}
// 오류가 발생하였으면 종료..
if (retMessage.contains("[F]")) {
return retMessage;
}
retMessage = "[S] 작업이 정상 처리 되었습니다.";
return retMessage;
}
}

@ -8,8 +8,6 @@ import org.springframework.stereotype.Service;
import cokr.xit.fims.sndb.SndbQuery;
import cokr.xit.fims.sndb.Sndng;
import cokr.xit.fims.sndb.SndngDtl;
import cokr.xit.fims.sndb.Svbtc;
import cokr.xit.fims.sndb.service.SndngService;
import cokr.xit.foundation.component.AbstractServiceBean;
import cokr.xit.foundation.data.DataObject;
@ -35,6 +33,16 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic
@Resource(name = "sndngDtlBean")
private SndngDtlBean sndngDtlBean;
@Override
public List<DataObject> getSndngList(SndbQuery req) {
return sndngBean.getSndngList(req);
}
@Override
public List<DataObject> getSndngs(SndbQuery req) {
return sndngBean.getSndngs(req);
}
@Override
public List<DataObject> getWrngTrgtList(SndbQuery req) {
return sndngBean.getWrngTrgtList(req);
@ -78,22 +86,6 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic
@Override
public List<DataObject> getSndbkList(SndbQuery req) {
return sndngBean.getSndbkList(req);
}
@Override
public List<DataObject> getSndngList(SndbQuery req) {
return sndngBean.getSndngList(req);
}
@Override
public String createSndng(Sndng sndng) {
return sndngBean.createSndng(sndng);
}
@Override
public String createSndngLink(Sndng sndng) {
return sndngBean.createEPost(sndng);
@ -114,155 +106,4 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic
return sndngBean.removeSndng(sndng);
}
@Override
public DataObject getSndbkInfo(SndbQuery req) {
if (req.getCallPurpose() == null) {
req.setCallPurpose("view");
}
return sndngBean.getSndbkInfo(req);
}
@Override
public String createSndbk(SndngDtl sndngDtl) {
return sndngBean.createSndbk(sndngDtl);
}
@Override
public String updateSndbk(SndngDtl sndngDtl) {
return sndngBean.updateSndbk(sndngDtl);
}
@Override
public String deleteSndbk(SndngDtl sndngDtl) {
return sndngBean.deleteSndbk(sndngDtl);
}
@Override
public List<DataObject> getSndngs(SndbQuery req) {
return sndngBean.getSndngs(req);
}
@Override
public List<DataObject> getSvbtcList(SndbQuery req) {
return sndngBean.getSvbtcList(req);
}
@Override
public List<DataObject> getSvbtcs(SndbQuery req) {
return sndngBean.getSvbtcs(req);
}
@Override
public List<DataObject> getSvbtcDtls(SndbQuery req) {
return sndngBean.getSvbtcDtls(req);
}
@Override
public String createSvbtc(Svbtc svbtc) {
return sndngBean.createSvbtc(svbtc);
}
@Override
public String updateSvbtc(Svbtc svbtc) {
return sndngBean.updateSvbtc(svbtc);
}
@Override
public String removeSvbtc(Svbtc svbtc) {
return sndngBean.removeSvbtc(svbtc);
}
@Override
public String removeSvbtcList(SndbQuery req) {
// 변수 선언
String retMessage = ""; // 처리 결과 메시지
// 공시송달 IDs 건수를 확인하여 1건이하면.. 종료
if (req.getSvbtcIDs().length < 1) {
retMessage = "작업 중 선택 자료가 존재하지 않습니다.";
return retMessage;
}
// 공시송달 IDs 만큼 반복..
for (int iLoop = 0; iLoop < req.getSvbtcIDs().length; iLoop++) {
Svbtc svbtc = new Svbtc();
svbtc.setSvbtcId(req.getSvbtcIDs()[iLoop]); // 공시송달 ID
svbtc.setDelRsn(req.getDelRsn()); // 삭제 사유
// 공시송달 삭제 호출
retMessage = sndngBean.removeSvbtcSndngDtl(svbtc);
// 오류가 발생하였으면 종료..
if (retMessage.contains("[F]")) {
return retMessage;
}
}
return retMessage;
}
@Override
public String removeSvbtcEach(Svbtc svbtc) {
// 변수 선언
String retMessage = ""; // 처리 결과 메시지
// 공시송달 IDs 건수를 확인하여 1건이하면.. 종료
if (svbtc.getSndngDtlIDs().length < 1) {
retMessage = "작업 중 선택 자료가 존재하지 않습니다.";
return retMessage;
}
// 공시송달 IDs 만큼 반복..
for (int iLoop = 0; iLoop < svbtc.getSndngDtlIDs().length; iLoop++) {
// 발송 상세(TB_SNDNG_DTL) 대장에서 공시송달 정보를 삭제 한다.
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setSndngDtlId(svbtc.getSndngDtlIDs()[iLoop]);
sndngDtl.setSvbtcId(svbtc.getSvbtcId());
sndngDtl.setSndngDtlSttsCd("05");
retMessage = sndngBean.removeSndngDtlSvbtc(sndngDtl);
if (retMessage.contains("[F]")) {
throw new RuntimeException("발송상세 대장에 공시송달 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
// 공시송달 총건수 수정 호출
int svbtcTnocs = sndngBean.selectTnocsSndngDtlSvbtc(svbtc.getSvbtcId());
if (svbtcTnocs == 0) { // 총건수가 0건이라면 공시송달 대장에서 삭제
retMessage = sndngBean.removeSvbtc(svbtc);
} else { // 총건수를 확인하여 공시송달 대장에서 수정
// 공시송달 정보 호출
DataObject svbtcInfo = sndngBean.getSvbtcInfo(new SndbQuery().setSvbtcId(svbtc.getSvbtcId())
.setDelYN("N"));
Svbtc mdfSvbtc = new Svbtc();
mdfSvbtc.setSvbtcYmd(svbtcInfo.string("SVBTC_YMD"));
mdfSvbtc.setTtlNm(svbtcInfo.string("TTL_NM"));
mdfSvbtc.setDocNo(svbtcInfo.string("DOC_NO"));
mdfSvbtc.setEtcCn(svbtcInfo.string("ETC_CN"));
mdfSvbtc.setTnocs(svbtcTnocs);
mdfSvbtc.setSvbtcId(svbtc.getSvbtcId());
retMessage = sndngBean.updateSvbtc(mdfSvbtc);
}
// 오류가 발생하였으면 종료..
if (retMessage.contains("[F]")) {
return retMessage;
}
retMessage = "[S] 작업이 정상 처리 되었습니다.";
return retMessage;
}
}

@ -45,43 +45,39 @@ public class Sndb01Controller extends ApplicationController {
public class METHOD_URL {
public static final String
warningTargetMain = "/010/main.do" // 계고장 발송 대상 메인 화면
, getWarningTargetList = "/010/list.do" // 계고장 발송 대상 목록 조회
, getWarningTargetInfo = "/020/info.do" // 계고장 발송 대상 조회
, createWarningSendingList = "/020/createList.do" // 계고장 발송 등록
, warningSendingMain = "/030/main.do" // 계고장 발송 현황 메인 화면
, getWarningSendingList = "/030/list.do" // 계고장 발송 현황 목록 조회
, getWarningSendingInfo = "/040/info.do" // 계고장 발송 현황 상세 화면
, getWarningSendingDetailsList = "/040/list.do" // 계고장 발송 현황 상세 목록 조회
, advanceNoticeTargetMain = "/050/main.do" // 사전통지 발송 대상 메인 화면
, getAdvanceNoticeTargetList = "/050/list.do" // 사전통지 발송 대상 목록 조회
, getAdvanceNoticeTargetInfo = "/060/info.do" // 사전통지 발송 대상 조회
, createAdvanceNoticeSendingList = "/060/createList.do" // 사전통지 발송 등록
, advanceNoticeSendingMain = "/070/main.do" // 사전통지 발송 현황 메인 화면
, getAdvanceNoticeSendingList = "/070/list.do" // 사전통지 발송 대상 목록 조회
, getAdvanceNoticeSendingInfo = "/080/info.do" // 사전통지 발송 현황 상세 화면
, getAdvanceNoticeSendingDetailsList= "/080/list.do" // 사전통지 발송 현황 상세 목록 조회
, noticeSheetSendingMain = "/090/main.do" // 고지서 발송 현황 메인 화면
, getNoticeSheetSendingList = "/090/list.do" // 고지서 발송 대상 목록 조회
, getNoticeSheetSendingInfo = "/100/info.do" // 고지서 발송 현황 상세 화면
, getNoticeSheetSendingDetailsList = "/100/list.do" // 고지서 발송 현황 상세 목록 조회
, noticeSheetSendingTargetInfo = "/110/info.do" // 고지서 발송 대상 화면
, createSending = "/020/createSndng.do" // 발송 대상 등록
, createSendingLink = "/080/createSndngLink.do" // 우편 통합 발송 연계 등록
warningTargetMain = "/010/main.do" // 계고장발송 대상 메인 화면
, getWarningTargetList = "/010/list.do" // 계고장발송 대상 목록 조회
, getWarningTargetInfo = "/020/info.do" // 계고장발송 대상 조회
, createWarningSendingList = "/020/createList.do" // 계고장발송 대상 목록의 발송 등록
, warningSendingMain = "/030/main.do" // 계고장발송 현황 메인 화면
, getWarningSendingList = "/030/list.do" // 계고장발송 현황 목록 조회
, getWarningSendingInfo = "/040/info.do" // 계고장발송 현황 상세 화면
, getWarningSendingDetailsList = "/040/list.do" // 계고장발송 현황 상세 목록 조회
, advanceNoticeTargetMain = "/050/main.do" // 사전통지발송 대상 메인 화면
, getAdvanceNoticeTargetList = "/050/list.do" // 사전통지발송 대상 목록 조회
, getAdvanceNoticeTargetInfo = "/060/info.do" // 사전통지발송 대상 조회
, createAdvanceNoticeSendingList = "/060/createList.do" // 사전통지발송 대상 목록의 발송 등록
, advanceNoticeSendingMain = "/070/main.do" // 사전통지발송 현황 메인 화면
, getAdvanceNoticeSendingList = "/070/list.do" // 사전통지발송 대상 목록 조회
, getAdvanceNoticeSendingInfo = "/080/info.do" // 사전통지발송 현황 상세 화면
, getAdvanceNoticeSendingDetailsList= "/080/list.do" // 사전통지발송 현황 상세 목록 조회
, createSendingLink = "/080/createSndngLink.do" // 발송상세 목록의 우편통합 발송 연계 등록
, createSendBackList = "/080/createSndbkList.do" // 발송상세 목록의 반송 확인(등록)
, noticeSheetSendingMain = "/090/main.do" // 고지서발송 현황 메인 화면
, getNoticeSheetSendingList = "/090/list.do" // 고지서발송 대상 목록 조회
, getNoticeSheetSendingInfo = "/100/info.do" // 고지서발송 현황 상세 화면
, getNoticeSheetSendingDetailsList = "/100/list.do" // 고지서발송 현황 상세 목록 조회
, noticeSheetSendingTargetInfo = "/110/info.do" // 고지서발송 대상 화면
, unitySendBackTargetMain = "/210/main.do" // 통합 반송 등록 메인
, getSendBackInfo = "/220/info.do" // 발송상세의 반송 정보 조회
, createSendBack = "/220/create.do" // 발송상세의 반송 등록
, updateSendBack = "/220/update.do" // 발송상세의 반송 수정
, deleteSendBack = "/210/delete.do" // 발송상세의 반송 삭제
, unitySendBackTargetMain = "/210/main.do" // 통합 반송 등록 메인
, getSendBackInfo = "/220/info.do" // 반송 정보 조회
, createSendBack = "/220/create.do" // 반송 등록
, updateSendBack = "/220/update.do" // 반송 수정
, deleteSendBack = "/210/delete.do" // 반송 삭제
, sendBackMain = "/230/main.do" // 반송 현황 메인 화면
, getSendBackList = "/230/list.do" // 반송 현황 목록 조회
, serviceByPublicNoticeMain = "/240/main.do" // 공시송달 현황 메인 화면
, getServiceByPublicNoticeList = "/240/list.do" // 공시송달 현황 목록 조회
, createServiceByPublicNotice = "/240/create.do" // 공시송달 등록
@ -406,7 +402,7 @@ public class Sndb01Controller extends ApplicationController {
, Map.entry("우편번호", xlsx.style("RTPYR_ZIP", center))
, Map.entry("주소", "RTPYR_ADDR")
, Map.entry("상세주소", "RTPYR_DTL_ADDR")
, Map.entry("배달일자", xlsx.style("DLVR_YMD", center))
, Map.entry("배달일자", xlsx.format(o -> xlsx.str2date(o.get("DLVR_YMD"))).style(dateYMD))
, Map.entry("배달시각", xlsx.style("DLVR_TM", center))
, Map.entry("미배달사유", "UNDLVR_RSN_NM")
, Map.entry("수령인", "RCPN_NM")
@ -740,7 +736,7 @@ public class Sndb01Controller extends ApplicationController {
, Map.entry("우편번호", xlsx.style("RTPYR_ZIP", center))
, Map.entry("주소", "RTPYR_ADDR")
, Map.entry("상세주소", "RTPYR_DTL_ADDR")
, Map.entry("배달일자", xlsx.style("DLVR_YMD", center))
, Map.entry("배달일자", xlsx.format(o -> xlsx.str2date(o.get("DLVR_YMD"))).style(dateYMD))
, Map.entry("배달시각", xlsx.style("DLVR_TM", center))
, Map.entry("미배달사유", "UNDLVR_RSN_NM")
, Map.entry("수령인", "RCPN_NM")
@ -895,7 +891,7 @@ public class Sndb01Controller extends ApplicationController {
public ModelAndView getNoticeSheetSendingDetailsList(SndbQuery req) {
if (!"xls".equals(req.getDownload())) {
List<?> result = sndngDtlService.getSndngDtlList(setFetchSize(req));
return setCollectionInfo(new ModelAndView("jsonView"), result, "advntceSndngDtl");
return setCollectionInfo(new ModelAndView("jsonView"), result, "nhtSndngDtl");
} else {
// 현재 날짜 구하기
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
@ -925,7 +921,7 @@ public class Sndb01Controller extends ApplicationController {
, Map.entry("우편번호", xlsx.style("RTPYR_ZIP", center))
, Map.entry("주소", "RTPYR_ADDR")
, Map.entry("상세주소", "RTPYR_DTL_ADDR")
, Map.entry("배달일자", xlsx.style("DLVR_YMD", center))
, Map.entry("배달일자", xlsx.format(o -> xlsx.str2date(o.get("DLVR_YMD"))).style(dateYMD))
, Map.entry("배달시각", xlsx.style("DLVR_TM", center))
, Map.entry("미배달사유", "UNDLVR_RSN_NM")
, Map.entry("수령인", "RCPN_NM")
@ -994,28 +990,6 @@ public class Sndb01Controller extends ApplicationController {
/** .
* @param sndng
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
public ModelAndView createSending(Sndng sndng) {
boolean saved = false;
String rtnMsg = sndngService.createSndng(sndng);
if (rtnMsg.contains("[S]")) {
saved = true;
} else {
saved = false;
}
return new ModelAndView("jsonView")
.addObject("saved", saved)
.addObject("rtnMsg", rtnMsg);
}
/** .
* @param sndng
* @return jsonView
@ -1046,7 +1020,7 @@ public class Sndb01Controller extends ApplicationController {
* }</pre>
*/
public ModelAndView getSendBackInfo(SndbQuery req) {
DataObject sndbkInfo = sndngService.getSndbkInfo(req);
DataObject sndbkInfo = sndngDtlService.getSndbkInfo(req);
// 등록을 호출하였지만 등록된 미배달 사유가 있는지 확인.
if (req.getCallPurpose().equals("create") && !sndbkInfo.string("UNDLVR_RSN_NM").equals("")) {
@ -1072,16 +1046,38 @@ public class Sndb01Controller extends ApplicationController {
}
}
/** .
/** .
* @param sndngDtl
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
public ModelAndView createSendBackList(SndbQuery req) {
boolean saved = false;
String rtnMsg = sndngDtlService.createSndbkList(req);
if (rtnMsg.contains("[S]")) {
saved = true;
} else {
saved = false;
}
return new ModelAndView("jsonView")
.addObject("saved", saved)
.addObject("rtnMsg", rtnMsg);
}
/** .
* @param sndngDtl
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
public ModelAndView createSendBack(SndngDtl sndngDtl) {
public ModelAndView createSendBack(String... sndngDtlIDs) {
boolean saved = false;
String rtnMsg = sndngService.createSndbk(sndngDtl);
String rtnMsg = sndngDtlService.createSndbk(sndngDtlIDs);
if (rtnMsg.contains("[S]")) {
saved = true;
@ -1094,7 +1090,7 @@ public class Sndb01Controller extends ApplicationController {
.addObject("rtnMsg", rtnMsg);
}
/** .
/** .
* @param sndngDtl
* @return jsonView
* <pre><code> {
@ -1103,7 +1099,7 @@ public class Sndb01Controller extends ApplicationController {
*/
public ModelAndView updateSendBack(SndngDtl sndngDtl) {
boolean saved = false;
String rtnMsg = sndngService.updateSndbk(sndngDtl);
String rtnMsg = sndngDtlService.updateSndbk(sndngDtl);
if (rtnMsg.contains("[S]")) {
saved = true;
@ -1116,7 +1112,7 @@ public class Sndb01Controller extends ApplicationController {
.addObject("rtnMsg", rtnMsg);
}
/** .
/** .
* @param sndngDtl
* @return jsonView
* <pre><code> {
@ -1125,7 +1121,7 @@ public class Sndb01Controller extends ApplicationController {
*/
public ModelAndView deleteSendBack(SndngDtl sndngDtl) {
boolean saved = false;
String rtnMsg = sndngService.deleteSndbk(sndngDtl);
String rtnMsg = sndngDtlService.deleteSndbk(sndngDtl);
if (rtnMsg.contains("[S]")) {
saved = true;
@ -1178,7 +1174,7 @@ public class Sndb01Controller extends ApplicationController {
* }</code></pre>
*/
public ModelAndView getSendBackList(SndbQuery req) {
List<?> result = sndngService.getSndbkList(setFetchSize(req));
List<?> result = sndngDtlService.getSndbkList(setFetchSize(req));
return setCollectionInfo(new ModelAndView("jsonView"), result, "sndbk");
}
@ -1216,7 +1212,7 @@ public class Sndb01Controller extends ApplicationController {
* }</code></pre>
*/
public ModelAndView getServiceByPublicNoticeList(SndbQuery req) {
List<?> result = sndngService.getSvbtcList(setFetchSize(req));
List<?> result = sndngDtlService.getSvbtcList(setFetchSize(req));
return setCollectionInfo(new ModelAndView("jsonView"), result, "svbtc");
}
@ -1229,7 +1225,7 @@ public class Sndb01Controller extends ApplicationController {
* }</pre>
*/
public ModelAndView getServiceByPublicNoticeInfo(SndbQuery req) {
List<?> sndngDtls = sndngService.getSvbtcDtls(req);
List<?> sndngDtls = sndngDtlService.getSvbtcDtls(req);
boolean json = jsonResponse();
@ -1251,7 +1247,7 @@ public class Sndb01Controller extends ApplicationController {
*/
public ModelAndView createServiceByPublicNotice(Svbtc svbtc) {
boolean saved = false;
String rtnMsg = sndngService.createSvbtc(svbtc);
String rtnMsg = sndngDtlService.createSvbtc(svbtc);
if (rtnMsg.contains("[S]")) {
saved = true;
@ -1273,7 +1269,7 @@ public class Sndb01Controller extends ApplicationController {
*/
public ModelAndView updateServiceByPublicNotice(Svbtc svbtc) {
boolean saved = false;
String rtnMsg = sndngService.updateSvbtc(svbtc);
String rtnMsg = sndngDtlService.updateSvbtc(svbtc);
if (rtnMsg.contains("[S]")) {
saved = true;
@ -1296,7 +1292,7 @@ public class Sndb01Controller extends ApplicationController {
*/
public ModelAndView removeServiceByPublicNotice(Svbtc svbtc) {
boolean saved = false;
String rtnMsg = sndngService.removeSvbtc(svbtc);
String rtnMsg = sndngDtlService.removeSvbtc(svbtc);
if (rtnMsg.contains("[S]")) {
saved = true;
@ -1319,7 +1315,7 @@ public class Sndb01Controller extends ApplicationController {
*/
public ModelAndView removeServiceByPublicNoticeList(SndbQuery req) {
boolean saved = false;
String rtnMsg = sndngService.removeSvbtcList(req);
String rtnMsg = sndngDtlService.removeSvbtcList(req);
if (rtnMsg.contains("[S]")) {
saved = true;
@ -1342,7 +1338,7 @@ public class Sndb01Controller extends ApplicationController {
*/
public ModelAndView removeServiceByPublicNoticeEach(Svbtc svbtc) {
boolean saved = false;
String rtnMsg = sndngService.removeSvbtcEach(svbtc);
String rtnMsg = sndngDtlService.removeSvbtcEach(svbtc);
if (rtnMsg.contains("[S]")) {
saved = true;

@ -304,7 +304,7 @@ public class Sprt02Controller extends ApplicationController {
sndb01Query.setDelYN(req.getDelYN());
sndb01Query.setOrderBy("SV.REG_DT DESC, SV.SVBTC_ID DESC");
List<?> svbtc = sndngService.getSvbtcDtls(sndb01Query);
List<?> svbtc = sndngDtlService.getSvbtcDtls(sndb01Query);
boolean json = jsonResponse();

@ -631,12 +631,6 @@ public class DpvController {
return super.noticeSheetSendingTargetInfo(req);
}
@Override
@RequestMapping(name="발송 등록", value=METHOD_URL.createSending)
public ModelAndView createSending(Sndng sndng) {
return super.createSending(sndng);
}
@Override
@RequestMapping(name="우편통합 발송 연계 등록", value=METHOD_URL.createSendingLink)
public ModelAndView createSendingLink(Sndng sndng) {
@ -650,19 +644,25 @@ public class DpvController {
}
@Override
@RequestMapping(name="발송상세의 반송(미배달) 정보 등록", value=METHOD_URL.createSendBack)
public ModelAndView createSendBack(SndngDtl sndngDtl) {
return super.createSendBack(sndngDtl);
@RequestMapping(name="발송상세 목록의 반송 정보 등록 ", value=METHOD_URL.createSendBackList)
public ModelAndView createSendBackList(SndbQuery req) {
return super.createSendBackList(req);
}
@Override
@RequestMapping(name="발송상세의 반송 정보 등록", value=METHOD_URL.createSendBack)
public ModelAndView createSendBack(String... sndngDtlIDs) {
return super.createSendBack(sndngDtlIDs);
}
@Override
@RequestMapping(name="발송상세의 반송(미배달) 정보 수정", value=METHOD_URL.updateSendBack)
@RequestMapping(name="발송상세의 반송 정보 수정", value=METHOD_URL.updateSendBack)
public ModelAndView updateSendBack(SndngDtl sndngDtl) {
return super.updateSendBack(sndngDtl);
}
@Override
@RequestMapping(name="발송상세의 반송(미배달) 정보 삭제", value=METHOD_URL.deleteSendBack)
@RequestMapping(name="발송상세의 반송 정보 삭제", value=METHOD_URL.deleteSendBack)
public ModelAndView deleteSendBack(SndngDtl sndngDtl) {
return super.deleteSendBack(sndngDtl);
}

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cokr.xit.fims.epst.dao.EpostDlvrRsltMapper">
<!-- 전자우편 배달 결과 정보 매퍼
========== 변경 이력 ==========
2024-01-05 JoJH 최초 작성
============================ -->
<resultMap id="epostDlvrRsltRow" type="cokr.xit.fims.epst.EpostDlvrRslt"> <!-- 전자우편 배달 결과 -->
<result property="dlvrRsltId" column="DLVR_RSLT_ID" /> <!-- 배달 결과 ID -->
<result property="conKey" column="CON_KEY" /> <!-- 외부연계식별키 -->
<result property="outsiduserid" column="OUTSIDUSERID" /> <!-- 외부기관구분코드 -->
<result property="reletcdata" column="RELETCDATA" /> <!-- 발송인별추가데이터 -->
<result property="regino" column="REGINO" /> <!-- 등기번호 -->
<result property="delivymd" column="DELIVYMD" /> <!-- 배달일자 -->
<result property="delivhhmi" column="DELIVHHMI" /> <!-- 배달시분 -->
<result property="delivrsltcd" column="DELIVRSLTCD" /> <!-- 배달결과코드 -->
<result property="nondelivreasncd" column="NONDELIVREASNCD" /> <!-- 미배달사유코드 -->
<result property="nondelivreasncdnm" column="NONDELIVREASNCDNM" /> <!-- 미배달사유명 -->
<result property="subrecprsnnm" column="SUBRECPRSNNM" /> <!-- 수령인명 -->
<result property="relrecprsncd" column="RELRECPRSNCD" /> <!-- 수령인관계코드 -->
<result property="relrecprsncdnm" column="RELRECPRSNCDNM" /> <!-- 수령인관계명 -->
<result property="createdAt" column="REG_DT" /> <!-- 등록 일시 -->
<result property="createdBy" column="RGTR" /> <!-- 등록자 -->
<result property="lastModified" column="MDFCN_DT" /> <!-- 수정 일시 -->
<result property="modifiedBy" column="MDFR" /> <!-- 수정자 -->
</resultMap>
<sql id="select">
SELECT DLVR_RSLT_ID <!-- 배달 결과 ID -->
, CON_KEY <!-- 외부연계식별키 -->
, OUTSIDUSERID <!-- 외부기관구분코드 -->
, RELETCDATA <!-- 발송인별추가데이터 -->
, REGINO <!-- 등기번호 -->
, DELIVYMD <!-- 배달일자 -->
, DELIVHHMI <!-- 배달시분 -->
, DELIVRSLTCD <!-- 배달결과코드 -->
, NONDELIVREASNCD <!-- 미배달사유코드 -->
, NONDELIVREASNCDNM <!-- 미배달사유명 -->
, SUBRECPRSNNM <!-- 수령인명 -->
, RELRECPRSNCD <!-- 수령인관계코드 -->
, RELRECPRSNCDNM <!-- 수령인관계명 -->
, REG_DT <!-- 등록 일시 -->
, RGTR <!-- 등록자 -->
, MDFCN_DT <!-- 수정 일시 -->
, MDFR <!-- 수정자 -->
FROM TB_EPOST_DLVR_RSLT
</sql>
<select id="selectEpostDlvrRsltList" parameterType="map" resultType="dataobject">/* 전자우편 배달 결과 목록 조회(epostDlvrRsltMapper.selectEpostDlvrRsltList) */
<include refid="utility.paging-prefix" />
<include refid="select" />
<where>
<if test="conKey != null">
AND CON_KEY = #{conKey} /* 외부연계식별키 */
</if>
<if test="regino != null">
AND REGINO = #{regino} /* 등기번호 */
</if>
</where>
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" />
</select>
<select id="selectEpostDlvrRslts" parameterType="map" resultType="dataobject">/* 전자우편 배달 결과 객체 가져오기(epostDlvrRsltMapper.selectEpostDlvrRslts) */
<include refid="select" />
<where>
<if test="conKey != null">
AND CON_KEY = #{conKey} /* 외부연계식별키 */
</if>
<if test="regino != null">
AND REGINO = #{regino} /* 등기번호 */
</if>
</where>
<include refid="utility.orderBy" />
</select>
<insert id="insertEpostDlvrRslt" parameterType="map">/* 전자우편 배달 결과 등록(epostDlvrRsltMapper.insertEpostDlvrRslt) */
INSERT INTO TB_EPOST_DLVR_RSLT (
DLVR_RSLT_ID <!-- 배달 결과 ID -->
, CON_KEY <!-- 외부연계식별키 -->
, OUTSIDUSERID <!-- 외부기관구분코드 -->
, RELETCDATA <!-- 발송인별추가데이터 -->
, REGINO <!-- 등기번호 -->
, DELIVYMD <!-- 배달일자 -->
, DELIVHHMI <!-- 배달시분 -->
, DELIVRSLTCD <!-- 배달결과코드 -->
, NONDELIVREASNCD <!-- 미배달사유코드 -->
, NONDELIVREASNCDNM <!-- 미배달사유명 -->
, SUBRECPRSNNM <!-- 수령인명 -->
, RELRECPRSNCD <!-- 수령인관계코드 -->
, RELRECPRSNCDNM <!-- 수령인관계명 -->
, REG_DT <!-- 등록 일시 -->
, RGTR <!-- 등록자 -->
, MDFCN_DT <!-- 수정 일시 -->
, MDFR <!-- 수정자 -->
) VALUES (
#{epostDlvrRslt.dlvrRsltId} <!-- 배달 결과 ID -->
, #{epostDlvrRslt.conKey} <!-- 외부연계식별키 -->
, #{epostDlvrRslt.outsiduserid} <!-- 외부기관구분코드 -->
, #{epostDlvrRslt.reletcdata} <!-- 발송인별추가데이터 -->
, #{epostDlvrRslt.regino} <!-- 등기번호 -->
, #{epostDlvrRslt.delivymd} <!-- 배달일자 -->
, #{epostDlvrRslt.delivhhmi} <!-- 배달시분 -->
, #{epostDlvrRslt.delivrsltcd} <!-- 배달결과코드 -->
, #{epostDlvrRslt.nondelivreasncd} <!-- 미배달사유코드 -->
, #{epostDlvrRslt.nondelivreasncdnm} <!-- 미배달사유명 -->
, #{epostDlvrRslt.subrecprsnnm} <!-- 수령인명 -->
, #{epostDlvrRslt.relrecprsncd} <!-- 수령인관계코드 -->
, #{epostDlvrRslt.relrecprsncdnm} <!-- 수령인관계명 -->
, <include refid="utility.now" /> <!-- 등록 일시 -->
, #{currentUser.id} <!-- 등록자 -->
, <include refid="utility.now" /> <!-- 수정 일시 -->
, #{currentUser.id} <!-- 수정자 -->
)
</insert>
<update id="updateEpostDlvrRslt" parameterType="map">/* 전자우편 배달 결과 수정(epostDlvrRsltMapper.updateEpostDlvrRslt) */
UPDATE TB_EPOST_DLVR_RSLT SET
CON_KEY = #{epostDlvrRslt.conKey} <!-- 외부연계식별키 -->
, OUTSIDUSERID = #{epostDlvrRslt.outsiduserid} <!-- 외부기관구분코드 -->
, RELETCDATA = #{epostDlvrRslt.reletcdata} <!-- 발송인별추가데이터 -->
, REGINO = #{epostDlvrRslt.regino} <!-- 등기번호 -->
, DELIVYMD = #{epostDlvrRslt.delivymd} <!-- 배달일자 -->
, DELIVHHMI = #{epostDlvrRslt.delivhhmi} <!-- 배달시분 -->
, DELIVRSLTCD = #{epostDlvrRslt.delivrsltcd} <!-- 배달결과코드 -->
, NONDELIVREASNCD = #{epostDlvrRslt.nondelivreasncd} <!-- 미배달사유코드 -->
, NONDELIVREASNCDNM = #{epostDlvrRslt.nondelivreasncdnm} <!-- 미배달사유명 -->
, SUBRECPRSNNM = #{epostDlvrRslt.subrecprsnnm} <!-- 수령인명 -->
, RELRECPRSNCD = #{epostDlvrRslt.relrecprsncd} <!-- 수령인관계코드 -->
, RELRECPRSNCDNM = #{epostDlvrRslt.relrecprsncdnm} <!-- 수령인관계명 -->
, MDFCN_DT = <include refid="utility.now" /> <!-- 수정 일시 -->
, MDFR = #{currentUser.id} <!-- 수정자 -->
WHERE DLVR_RSLT_ID = #{epostDlvrRslt.dlvrRsltId}
</update>
<update id="deleteEpostDlvrRslt" parameterType="map">/* 전자우편 배달 결과 삭제(epostDlvrRsltMapper.deleteEpostDlvrRslt) */
UPDATE TB_EPOST_DLVR_RSLT SET
USE_YN = 'N'
, MDFCN_DT =<include refid="utility.now" />
, MDFR = #{currentUser.id}
WHERE DLVR_RSLT_ID = #{epostDlvrRslt.dlvrRsltId}
</update>
</mapper>

@ -757,13 +757,6 @@
<include refid="utility.orderBy" />
</select>
<insert id="insertSndng" parameterType="map">/* 발송 대장 등록(sndngMapper.insertSndng) */
<selectKey resultType="string" keyProperty="sndng.sndngId" keyColumn="NEW_ID" order="BEFORE">
SELECT CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), LPAD(CAST(IFNULL(MAX(SUBSTRING(SNDNG_ID, 5)) + 1, 1) AS INT), 16, '0')) AS NEW_ID
@ -856,15 +849,6 @@
AND DEL_YN = 'N'
</update>
<update id="updateSndngSttsCd" parameterType="map">/* 발송 대장 정보의 발송 상태 코드를 수정(sndngMapper.updateSndngSttsCd) */
UPDATE TB_SNDNG
SET SNDNG_STTS_CD = #{sndng.sndngSttsCd} /* 발송 상태 코드 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndng.modifiedBy} /* 수정자 */
WHERE SNDNG_ID = #{sndng.sndngId} /* 발송 ID */
AND DEL_YN = 'N'
</update>
<update id="deleteSndng" parameterType="map">/* 발송 대장 삭제(sndngMapper.deleteSndng) */
UPDATE TB_SNDNG
SET DEL_YN = 'Y' /* 삭제 여부 */
@ -875,29 +859,13 @@
AND DEL_YN = 'N'
</update>
<update id="updateSndngDtlSvbtc" parameterType="map">/* 발송 상세의 공시송달 정보를 수정(sndngMapper.updateSndngDtlSvbtc) */
UPDATE TB_SNDNG_DTL
SET SVBTC_ID = #{sndngDtl.svbtcId} /* 공시송달 ID */
, BFR_SNDNG_DTL_STTS_CD = SNDNG_DTL_STTS_CD /* 이전 발송 상세 상태 코드 */
, SNDNG_DTL_STTS_CD = #{sndngDtl.sndngDtlSttsCd} /* 발송 상세 상태 코드 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndngDtl.modifiedBy} /* 수정자 */
WHERE SNDNG_DTL_ID = #{sndngDtl.sndngDtlId}
AND DEL_YN = 'N'
</update>
<update id="deleteSndngDtlSvbtc" parameterType="map">/* 발송 상세의 공시송달 정보를 삭제(sndngMapper.deleteSndngDtlSvbtc) */
UPDATE TB_SNDNG_DTL
SET SVBTC_ID = NULL /* 공시송달 ID */
, BFR_SNDNG_DTL_STTS_CD = SNDNG_DTL_STTS_CD /* 이전 발송 상세 상태 코드 */
, SNDNG_DTL_STTS_CD = #{sndngDtl.sndngDtlSttsCd} /* 발송 상세 상태 코드 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndngDtl.modifiedBy} /* 수정자 */
WHERE SVBTC_ID = #{sndngDtl.svbtcId} /* 공시송달 ID */
<if test="sndngDtl.sndngDtlId != null">
AND SNDNG_DTL_ID = #{sndngDtl.sndngDtlId}
</if>
AND DEL_YN = 'N'
<update id="updateSndngSttsCd" parameterType="map">/* 발송 대장 정보의 발송 상태 코드를 수정(sndngMapper.updateSndngSttsCd) */
UPDATE TB_SNDNG
SET SNDNG_STTS_CD = #{sndng.sndngSttsCd} /* 발송 상태 코드 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndng.modifiedBy} /* 수정자 */
WHERE SNDNG_ID = #{sndng.sndngId} /* 발송 ID */
AND DEL_YN = 'N'
</update>
<update id="updateEPostSndng" parameterType="map">/* 전자우편 발송 내역 수정(sndngMapper.updateEPostSndng) */
@ -909,298 +877,4 @@
AND DEL_YN = 'N'
</update>
<select id="selectSndbkList" parameterType="map" resultType="dataobject">/* 반송 목록 조회(sndngMapper.selectSndbkList) */
<include refid="utility.paging-prefix" />
SELECT SD.SNDNG_DTL_ID /* 발송 상세 ID */
, SD.SVBTC_ID /* 공시송달 ID */
, SD.SNDNG_SE_CD /* 발송 구분 코드 */
, SD.SNDNG_YMD /* 발송 일자 */
, SD.SNDNG_END_YMD /* 발송 종료 일자 */
, SD.RTPYR_NM /* 납부자 명 */
, SD.RTPYR_BRDT /* 납부자 생년월일 */
, SD.RTPYR_ADDR /* 납부자 주소 */
, SD.RTPYR_DTL_ADDR /* 납부자 상세 주소 */
, SD.RTPYR_ZIP /* 납부자 우편번호 */
, SD.CON_KEY /* 외부연계식별키 */
, SD.RG_NO /* 등기 번호 */
, SD.DLVR_YMD /* 배달 일자 */
, SD.DLVR_TM /* 배달 시각 */
, SD.UNDLVR_RSN_CD /* 미배달 사유 코드 */
, SD.UNDLVR_RSN_NM /* 미배달 사유 명 */
, SD.RCPN_NM /* 수령인 명 */
, SD.RCPN_REL_NM /* 수령인 관계 명 */
, SD.SNDNG_DTL_STTS_CD /* 발송 상세 상태 코드 */
, SD.SNDNG_RCVMT_CD /* 발송 수납 코드 */
, SD.ADDR_CHG_CD /* 주소 변경 코드 */
, SD.LEVY_YMD /* 부과 일자 */
, SD.DUDT_YMD /* 납기 일자 */
, SD.FFNLG_AMT /* 과태료 금액 */
, SD.SUM_AMT /* 합계 금액 */
, SD.REG_DT /* 등록 일시 */
, SD.RGTR /* 등록자 */
, SD.MDFCN_DT /* 수정 일시 */
, SD.MDFR /* 수정자 */
, SD.DEL_DT /* 삭제 일시 */
, SD.DLTR /* 삭제자 */
, SD.DEL_RSN /* 삭제 사유 */
, C.CRDN_ID /* 단속 ID */
, C.SGG_CD /* 시군구 코드 */
, C.TASK_SE_CD /* 업무 구분 코드 */
, C.CRDN_REG_SE_CD /* 단속 등록 구분 코드 */
, C.CRDN_INPT_SE_CD /* 단속 입력 구분 코드 */
, C.VHRNO /* 차량번호 */
, C.CRDN_YMD /* 단속 일자 */
, C.CRDN_TM /* 단속 시각 */
, C.CRDN_STDG_NM /* 단속 법정동 명 */
, C.CRDN_ROAD_NM /* 단속 도로 명 */
, C.CRDN_PLC /* 단속 장소 */
, C.CRDN_STTS_CD /* 단속 상태 코드 */
, S.SNDNG_ID /* 발송 ID */
, S.DEPT_CD /* 부서 코드 */
, S.SNDNG_REG_SE_CD /* 발송 등록 구분 코드 */
, S.EPOST_NOTICE_ID /* 전자우편 안내문 ID */
, S.SNDNG_STTS_CD /* 발송 상태 코드 */
, S.RESND_YN /* 재발송 여부 */
, P.RTPYR_ID /* 납부자 ID */
, P.RTPYR_SE_CD AS P_RTPYR_SE_CD /* 납부자 구분 코드 */
, P.RTPYR_NO AS P_RTPYR_NO /* 납부자 번호 */
, P.RTPYR_NM AS P_RTPYR_NM /* 납부자 명 */
, P.RTPYR_BRDT AS P_RTPYR_BRDT /* 납부자 생년월일 */
, P.ZIP AS P_ZIP /* 우편번호 */
, P.ADDR AS P_ADDR /* 주소 */
, P.DTL_ADDR AS P_DTL_ADDR /* 상세 주소 */
, CONCAT(C.CRDN_YMD, C.CRDN_TM) AS CRDN_YMD_TM /* 단속 일시 */
, CONCAT(SD.FYR, '-', SD.LEVY_NO) AS GOJI_NO /* 고지 번호 */
, (SELECT GET_MASK_DATE(SD.DUDT_YMD, 'K') FROM DUAL) AS DUDT_YMD_MASK_KOR /* 납기 일자(한글표기) */
, (SELECT GET_MASK_DATE(SD.DUDT_YMD, '.') FROM DUAL) AS DUDT_YMD_MASK /* 납기 일자 */
, (SELECT GET_CODE_NM('FIM047', SD.SNDNG_SE_CD) FROM DUAL) AS SNDNG_SE_NM /* 발송 구분 명 */
, (SELECT GET_CODE_NM('FIM050', SD.SNDNG_DTL_STTS_CD) FROM DUAL) AS SNDNG_DTL_STTS_NM /* 발송 상세 상태 명 */
, (SELECT GET_CODE_NM('FIM051', SD.SNDNG_RCVMT_CD) FROM DUAL) AS SNDNG_RCVMT_NM /* 발송 수납 명 */
, (SELECT GET_CODE_NM('FIM054', C.TASK_SE_CD) FROM DUAL) AS TASK_SE_NM /* 업무 구분 명 */
, (SELECT GET_CODE_NM('FIM026', C.CRDN_REG_SE_CD) FROM DUAL) AS CRDN_REG_SE_NM /* 단속 등록 구분 명 */
, (SELECT GET_CODE_NM('FIM003', C.CRDN_INPT_SE_CD) FROM DUAL) AS CRDN_INPT_SE_NM /* 단속 입력 구분 명 */
, (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM /* 단속 상태 명 */
, (SELECT GET_CODE_NM('FIM011', P.RTPYR_SE_CD) FROM DUAL) AS P_RTPYR_SE_NM /* 납부자 구분 명 */
, (SELECT GET_CODE_NM('FIM067', S.SNDNG_REG_SE_CD) FROM DUAL) AS SNDNG_REG_SE_NM /* 발송 등록 구분 명 */
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.RGTR) AS RGTR_NM /* 등록자 명 */
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.MDFR) AS MDFR_NM /* 수정자 명 */
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.DLTR) AS DLTR_NM /* 삭제자 명 */
FROM TB_SNDNG_DTL SD
INNER JOIN TB_CRDN C ON (SD.CRDN_ID = C.CRDN_ID)
LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
LEFT OUTER JOIN TB_SNDNG S ON (SD.SNDNG_ID = S.SNDNG_ID)
LEFT OUTER JOIN TB_EPOST_DLVR_RSLT EDR ON (SD.CON_KEY = EDR.CON_KEY AND SD.RG_NO = EDR.REGINO)
WHERE C.SGG_CD = #{sggCd}
AND C.TASK_SE_CD = #{taskSeCd}
AND (SD.SVBTC_ID IS NULL OR SD.SVBTC_ID = '')
AND (SD.SNDNG_RCVMT_CD IS NULL OR SD.SNDNG_RCVMT_CD = '')
AND (S.RESND_YN IS NULL OR S.RESND_YN = 'N')
<choose>
<when test='schChcRgIndct == "Y"'>
AND ( (SD.SNDNG_DTL_STTS_CD = #{sndngDtlSttsCd})
OR (EDR.RELRECPRSNCD BETWEEN '13' AND '16')
OR (RCPN_REL_NM IN (#{rcpnRelNm1}, #{rcpnRelNm2}, #{rcpnRelNm3}, #{rcpnRelNm4})) )
</when>
<otherwise>
AND SD.SNDNG_DTL_STTS_CD = #{sndngDtlSttsCd}
</otherwise>
</choose>
<if test="schDlvrYmdFrom != null">
AND SD.DLVR_YMD <![CDATA[>=]]> #{schDlvrYmdFrom} /* 발송 일자 시작 */
</if>
<if test="schDlvrYmdTo != null">
AND SD.DLVR_YMD <![CDATA[<=]]> #{schDlvrYmdTo} /* 발송 일자 종료 */
</if>
<if test="schSndngYmdFrom != null">
AND SD.SNDNG_YMD <![CDATA[>=]]> #{schSndngYmdFrom} /* 발송 일자 시작 */
</if>
<if test="schSndngYmdTo != null">
AND SD.SNDNG_YMD <![CDATA[<=]]> #{schSndngYmdTo} /* 발송 일자 종료 */
</if>
<if test="schSndngSeCd != null">
AND SD.SNDNG_SE_CD = #{schSndngSeCd} /* 발송 구분 코드 */
</if>
<if test="schCrdnYmdFrom != null">
AND C.CRDN_YMD <![CDATA[>=]]> #{schCrdnYmdFrom} /* 단속 일자 시작 */
</if>
<if test="schCrdnYmdTo != null">
AND C.CRDN_YMD <![CDATA[<=]]> #{schCrdnYmdTo} /* 단속 일자 종료 */
</if>
<if test="schVhrno != null">
AND C.VHRNO = #{schVhrno} /* 차량번호 */
</if>
<if test="delYN != null">
AND SD.DEL_YN = #{delYN} /* 삭제 여부 */
</if>
AND C.DEL_YN = 'N' /* 단속 삭제 여부 */
<choose>
<when test="schRegDateOpt == 'regDt'">
<if test="schRegDateFrom != null">
AND SD.REG_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000') /* 등록 일자 시작 */
</if>
<if test="schRegDateTo != null">
AND SD.REG_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959') /* 등록 일자 종료 */
</if>
</when>
<when test="schRegDateOpt == 'mdfcnDt'">
<if test="schRegDateFrom != null">
AND SD.MDFCN_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000') /* 수정 일자 시작 */
</if>
<if test="schRegDateTo != null">
AND SD.MDFCN_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959') /* 수정 일자 종료 */
</if>
</when>
<otherwise>
</otherwise>
</choose>
<choose>
<when test="schRgtrOpt == 'rgtr'">
<if test="schRgtrCd != null">
AND SD.RGTR = #{schRgtrCd} /* 등록자 코드 */
</if>
</when>
<when test="schRgtrOpt == 'mdfr'">
<if test="schRgtrCd != null">
AND SD.MDFR = #{schRgtrCd} /* 수정자 코드 */
</if>
</when>
<otherwise>
</otherwise>
</choose>
<if test="by != null and by != '' and term != null">
<choose>
<when test="mainOption == 'codeValue' or mainOption == 'match' or mainOption == 'ymd'">
<include refid="dynamicSearch.start" />
<choose>
<when test="by == 'taskSeCd'"> S.TASK_SE_CD </when>
<when test="by == 'sndngRegSeCd'"> S.SNDNG_REG_SE_CD </when>
<when test="by == 'sndngSeCd'"> S.SNDNG_SE_CD </when>
<when test="by == 'levyBgngYmd'"> S.LEVY_BGNG_YMD </when>
<when test="by == 'levyEndYmd'"> S.LEVY_END_YMD </when>
<when test="by == 'sndngYmd'"> S.SNDNG_YMD </when>
<when test="by == 'dudtYmd'"> S.DUDT_YMD </when>
<when test="by == 'ttlNm'"> S.TTL_NM </when>
<when test="by == 'docNo'"> S.DOC_NO </when>
<when test="by == 'etcCn'"> S.ETC_CN </when>
<when test="by == 'tnocs'"> S.TNOCS </when>
<when test="by == 'gramt'"> S.GRAMT </when>
<when test="by == 'sndngSttsCd'"> S.SNDNG_STTS_CD </when>
</choose>
<include refid="dynamicSearch.center" />#{term}<include refid="dynamicSearch.end" />
</when>
<otherwise>
</otherwise>
</choose>
</if>
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" />
</select>
<sql id="selectSndbk">
SELECT SD.SNDNG_DTL_ID /* 발송 상세 ID */
, SD.CRDN_ID /* 단속 ID */
, SD.SVBTC_ID /* 공시송달 ID */
, SD.RG_NO /* 등기 번호 */
, SD.DLVR_YMD /* 배달 일자 */
, SD.DLVR_TM /* 배달 시각 */
, SD.UNDLVR_RSN_CD /* 미배달 사유 코드 */
, SD.UNDLVR_RSN_NM /* 미배달 사유 명 */
, SD.RCPN_NM /* 수령인 명 */
, SD.RCPN_REL_NM /* 수령인 관계 명 */
, SD.SNDNG_DTL_STTS_CD /* 발송 상세 상태 코드 */
, SD.BFR_SNDNG_DTL_STTS_CD /* 전 발송 상세 상태 코드 */
, SD.BFR_DLVR_YMD /* 전 배달 일자 */
, SD.BFR_DLVR_HR /* 전 배달 시간 */
, S.SNDNG_ID /* 발송 ID */
, S.SGG_CD /* 시군구 코드 */
, S.TASK_SE_CD /* 업무 구분 코드 */
FROM TB_SNDNG_DTL SD
INNER JOIN TB_SNDNG S ON (SD.SNDNG_ID = S.SNDNG_ID)
</sql>
<select id="selectSndbks" parameterType="map" resultType="dataobject">/* 반송 정보 조회(sndngMapper.selectSndbks) */
<include refid="selectSndbk" />
<where>
<if test="sndngDtlIDs != null">
AND SD.SNDNG_DTL_ID IN ( /* 발송 상세 IDs */
<foreach collection="sndngDtlIDs" item="sndngDtlId" separator=","> #{sndngDtlId} </foreach>
)
</if>
<if test="sndngDtlId != null">
AND SD.SNDNG_DTL_ID = #{sndngDtlId} /* 발송 상세 ID */
</if>
<if test="sndngIDs != null">
AND SD.SNDNG_ID IN ( /* 발송 IDs */
<foreach collection="sndngIDs" item="sndngId" separator=","> #{sndngId} </foreach>
)
</if>
<if test="sndngId != null">
AND SD.SNDNG_ID = #{sndngId} /* 발송 ID */
</if>
<if test="crdnIDs != null">
AND SD.CRDN_ID IN ( /* 단속 IDs */
<foreach collection="crdnIDs" item="crdnId" separator=","> #{crdnId} </foreach>
)
</if>
<if test="crdnId != null">
AND SD.CRDN_ID = #{crdnId} /* 단속 ID */
</if>
<if test="svbtcIDs != null">
AND SD.SVBTC_ID IN ( /* 공시송달 IDs */
<foreach collection="svbtcIDs" item="svbtcId" separator=","> #{svbtcId} </foreach>
)
</if>
<if test="svbtcId != null">
AND SD.SVBTC_ID = #{svbtcId} /* 공시송달 ID */
</if>
</where>
AND SD.DEL_YN = 'N'
<include refid="utility.orderBy" />
</select>
<update id="createSndbk" parameterType="map">/* 발송상세의 반송 정보 수정(sndngMapper.createSndbk) */
UPDATE TB_SNDNG_DTL
SET DLVR_YMD = #{sndngDtl.dlvrYmd} /* 배달 일자 */
, DLVR_TM = #{sndngDtl.dlvrTm} /* 배달 시각 */
, UNDLVR_RSN_CD = #{sndngDtl.undlvrRsnCd} /* 미배달 사유 코드 */
, UNDLVR_RSN_NM = #{sndngDtl.undlvrRsnNm} /* 미배달 사유 명 */
, SNDNG_DTL_STTS_CD = #{sndngDtl.sndngDtlSttsCd} /* 발송 상세 상태 코드 */
, BFR_SNDNG_DTL_STTS_CD = #{sndngDtl.bfrSndngDtlSttsCd} /* 전 발송 상세 상태 코드 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndngDtl.modifiedBy} /* 수정자 */
WHERE SNDNG_DTL_ID = #{sndngDtl.sndngDtlId}
AND DEL_YN = 'N'
</update>
<update id="updateSndbk" parameterType="map">/* 발송상세의 반송 정보 수정(sndngMapper.updateSndbk) */
UPDATE TB_SNDNG_DTL
SET DLVR_YMD = #{sndngDtl.dlvrYmd} /* 배달 일자 */
, DLVR_TM = #{sndngDtl.dlvrTm} /* 배달 시각 */
, UNDLVR_RSN_CD = #{sndngDtl.undlvrRsnCd} /* 미배달 사유 코드 */
, UNDLVR_RSN_NM = #{sndngDtl.undlvrRsnNm} /* 미배달 사유 명 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndngDtl.modifiedBy} /* 수정자 */
WHERE SNDNG_DTL_ID = #{sndngDtl.sndngDtlId} /* 발송 상세 ID */
AND DEL_YN = 'N'
</update>
<update id="deleteSndbk" parameterType="map">/* 발송상세의 반송 정보 삭제(sndngMapper.deleteSndbk) */
UPDATE TB_SNDNG_DTL
SET UNDLVR_RSN_CD = NULL /* 미배달 사유 코드 */
, UNDLVR_RSN_NM = NULL /* 미배달 사유 명 */
, SNDNG_DTL_STTS_CD = #{sndngDtl.sndngDtlSttsCd} /* 발송 상세 상태 코드 */
, BFR_SNDNG_DTL_STTS_CD = #{sndngDtl.bfrSndngDtlSttsCd} /* 전 발송 상세 상태 코드 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndngDtl.modifiedBy} /* 수정자 */
WHERE SNDNG_DTL_ID = #{sndngDtl.sndngDtlId} /* 발송 상세 ID */
AND DEL_YN = 'N'
</update>
<select id="selectTnocsSndngDtlSvbtc" parameterType="map" resultType="int">/* 발송상세 대장에 공시송달ID에 해당하는 총건수 가져오기(sndngMapper.selectTnocsSndngDtlSvbtc) */
SELECT COUNT(*) TNOCS
FROM TB_SNDNG_DTL
WHERE SVBTC_ID = #{sndngDtl.svbtcId} /* 공시송달 ID */
AND DEL_YN = 'N'
</select>
</mapper>

@ -240,7 +240,7 @@
<include refid="utility.orderBy" />
</select>
<select id="selectSndngTrgtDtlIDs" parameterType="String" resultType="dataobject">/* 발송ID로 발송상세ID를 가져오기(sndngDtlMapper.selectSndngTrgtDtlIDs) */
<select id="selectSndngTrgtDtlIDs" parameterType="String" resultType="dataobject">/* 발송 ID로 발송상세 ID를 가져오기(sndngDtlMapper.selectSndngTrgtDtlIDs) */
SELECT SNDNG_DTL_ID /* 발송 상세 ID */
FROM TB_SNDNG_DTL
WHERE SNDNG_ID = #{sndngId} /* 발송 ID */
@ -638,4 +638,327 @@
AND DEL_YN = 'N'
</update>
<select id="selectSndbkList" parameterType="map" resultType="dataobject">/* 반송 목록 조회(sndngDtlMapper.selectSndbkList) */
<include refid="utility.paging-prefix" />
SELECT SD.SNDNG_DTL_ID /* 발송 상세 ID */
, SD.SVBTC_ID /* 공시송달 ID */
, SD.SNDNG_SE_CD /* 발송 구분 코드 */
, SD.SNDNG_YMD /* 발송 일자 */
, SD.SNDNG_END_YMD /* 발송 종료 일자 */
, SD.RTPYR_NM /* 납부자 명 */
, SD.RTPYR_BRDT /* 납부자 생년월일 */
, SD.RTPYR_ADDR /* 납부자 주소 */
, SD.RTPYR_DTL_ADDR /* 납부자 상세 주소 */
, SD.RTPYR_ZIP /* 납부자 우편번호 */
, SD.CON_KEY /* 외부연계식별키 */
, SD.RG_NO /* 등기 번호 */
, SD.DLVR_YMD /* 배달 일자 */
, SD.DLVR_TM /* 배달 시각 */
, SD.UNDLVR_RSN_CD /* 미배달 사유 코드 */
, SD.UNDLVR_RSN_NM /* 미배달 사유 명 */
, SD.RCPN_NM /* 수령인 명 */
, SD.RCPN_REL_NM /* 수령인 관계 명 */
, SD.SNDNG_DTL_STTS_CD /* 발송 상세 상태 코드 */
, SD.SNDNG_RCVMT_CD /* 발송 수납 코드 */
, SD.ADDR_CHG_CD /* 주소 변경 코드 */
, SD.LEVY_YMD /* 부과 일자 */
, SD.DUDT_YMD /* 납기 일자 */
, SD.FFNLG_AMT /* 과태료 금액 */
, SD.SUM_AMT /* 합계 금액 */
, SD.REG_DT /* 등록 일시 */
, SD.RGTR /* 등록자 */
, SD.MDFCN_DT /* 수정 일시 */
, SD.MDFR /* 수정자 */
, SD.DEL_DT /* 삭제 일시 */
, SD.DLTR /* 삭제자 */
, SD.DEL_RSN /* 삭제 사유 */
, C.CRDN_ID /* 단속 ID */
, C.SGG_CD /* 시군구 코드 */
, C.TASK_SE_CD /* 업무 구분 코드 */
, C.CRDN_REG_SE_CD /* 단속 등록 구분 코드 */
, C.CRDN_INPT_SE_CD /* 단속 입력 구분 코드 */
, C.VHRNO /* 차량번호 */
, C.CRDN_YMD /* 단속 일자 */
, C.CRDN_TM /* 단속 시각 */
, C.CRDN_STDG_NM /* 단속 법정동 명 */
, C.CRDN_ROAD_NM /* 단속 도로 명 */
, C.CRDN_PLC /* 단속 장소 */
, C.CRDN_STTS_CD /* 단속 상태 코드 */
, S.SNDNG_ID /* 발송 ID */
, S.DEPT_CD /* 부서 코드 */
, S.SNDNG_REG_SE_CD /* 발송 등록 구분 코드 */
, S.EPOST_NOTICE_ID /* 전자우편 안내문 ID */
, S.SNDNG_STTS_CD /* 발송 상태 코드 */
, S.RESND_YN /* 재발송 여부 */
, P.RTPYR_ID /* 납부자 ID */
, P.RTPYR_SE_CD AS P_RTPYR_SE_CD /* 납부자 구분 코드 */
, P.RTPYR_NO AS P_RTPYR_NO /* 납부자 번호 */
, P.RTPYR_NM AS P_RTPYR_NM /* 납부자 명 */
, P.RTPYR_BRDT AS P_RTPYR_BRDT /* 납부자 생년월일 */
, P.ZIP AS P_ZIP /* 우편번호 */
, P.ADDR AS P_ADDR /* 주소 */
, P.DTL_ADDR AS P_DTL_ADDR /* 상세 주소 */
, CONCAT(C.CRDN_YMD, C.CRDN_TM) AS CRDN_YMD_TM /* 단속 일시 */
, CONCAT(SD.FYR, '-', SD.LEVY_NO) AS GOJI_NO /* 고지 번호 */
, (SELECT GET_MASK_DATE(SD.DUDT_YMD, 'K') FROM DUAL) AS DUDT_YMD_MASK_KOR /* 납기 일자(한글표기) */
, (SELECT GET_MASK_DATE(SD.DUDT_YMD, '.') FROM DUAL) AS DUDT_YMD_MASK /* 납기 일자 */
, (SELECT GET_CODE_NM('FIM047', SD.SNDNG_SE_CD) FROM DUAL) AS SNDNG_SE_NM /* 발송 구분 명 */
, (SELECT GET_CODE_NM('FIM050', SD.SNDNG_DTL_STTS_CD) FROM DUAL) AS SNDNG_DTL_STTS_NM /* 발송 상세 상태 명 */
, (SELECT GET_CODE_NM('FIM051', SD.SNDNG_RCVMT_CD) FROM DUAL) AS SNDNG_RCVMT_NM /* 발송 수납 명 */
, (SELECT GET_CODE_NM('FIM054', C.TASK_SE_CD) FROM DUAL) AS TASK_SE_NM /* 업무 구분 명 */
, (SELECT GET_CODE_NM('FIM026', C.CRDN_REG_SE_CD) FROM DUAL) AS CRDN_REG_SE_NM /* 단속 등록 구분 명 */
, (SELECT GET_CODE_NM('FIM003', C.CRDN_INPT_SE_CD) FROM DUAL) AS CRDN_INPT_SE_NM /* 단속 입력 구분 명 */
, (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM /* 단속 상태 명 */
, (SELECT GET_CODE_NM('FIM011', P.RTPYR_SE_CD) FROM DUAL) AS P_RTPYR_SE_NM /* 납부자 구분 명 */
, (SELECT GET_CODE_NM('FIM067', S.SNDNG_REG_SE_CD) FROM DUAL) AS SNDNG_REG_SE_NM /* 발송 등록 구분 명 */
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.RGTR) AS RGTR_NM /* 등록자 명 */
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.MDFR) AS MDFR_NM /* 수정자 명 */
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.DLTR) AS DLTR_NM /* 삭제자 명 */
FROM TB_SNDNG_DTL SD
INNER JOIN TB_CRDN C ON (SD.CRDN_ID = C.CRDN_ID)
LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
LEFT OUTER JOIN TB_SNDNG S ON (SD.SNDNG_ID = S.SNDNG_ID)
LEFT OUTER JOIN TB_EPOST_DLVR_RSLT EDR ON (SD.CON_KEY = EDR.CON_KEY AND SD.RG_NO = EDR.REGINO)
WHERE C.SGG_CD = #{sggCd}
AND C.TASK_SE_CD = #{taskSeCd}
AND (SD.SVBTC_ID IS NULL OR SD.SVBTC_ID = '')
AND (SD.SNDNG_RCVMT_CD IS NULL OR SD.SNDNG_RCVMT_CD = '')
AND (S.RESND_YN IS NULL OR S.RESND_YN = 'N')
<choose>
<when test='schChcRgIndct == "Y"'>
AND ( (SD.SNDNG_DTL_STTS_CD = #{sndngDtlSttsCd})
OR (EDR.RELRECPRSNCD BETWEEN '13' AND '16')
OR (RCPN_REL_NM IN (#{rcpnRelNm1}, #{rcpnRelNm2}, #{rcpnRelNm3}, #{rcpnRelNm4})) )
</when>
<otherwise>
AND SD.SNDNG_DTL_STTS_CD = #{sndngDtlSttsCd}
</otherwise>
</choose>
<if test="schDlvrYmdFrom != null">
AND SD.DLVR_YMD <![CDATA[>=]]> #{schDlvrYmdFrom} /* 발송 일자 시작 */
</if>
<if test="schDlvrYmdTo != null">
AND SD.DLVR_YMD <![CDATA[<=]]> #{schDlvrYmdTo} /* 발송 일자 종료 */
</if>
<if test="schSndngYmdFrom != null">
AND SD.SNDNG_YMD <![CDATA[>=]]> #{schSndngYmdFrom} /* 발송 일자 시작 */
</if>
<if test="schSndngYmdTo != null">
AND SD.SNDNG_YMD <![CDATA[<=]]> #{schSndngYmdTo} /* 발송 일자 종료 */
</if>
<if test="schSndngSeCd != null">
AND SD.SNDNG_SE_CD = #{schSndngSeCd} /* 발송 구분 코드 */
</if>
<if test="schCrdnYmdFrom != null">
AND C.CRDN_YMD <![CDATA[>=]]> #{schCrdnYmdFrom} /* 단속 일자 시작 */
</if>
<if test="schCrdnYmdTo != null">
AND C.CRDN_YMD <![CDATA[<=]]> #{schCrdnYmdTo} /* 단속 일자 종료 */
</if>
<if test="schVhrno != null">
AND C.VHRNO = #{schVhrno} /* 차량번호 */
</if>
<if test="delYN != null">
AND SD.DEL_YN = #{delYN} /* 삭제 여부 */
</if>
AND C.DEL_YN = 'N' /* 단속 삭제 여부 */
<choose>
<when test="schRegDateOpt == 'regDt'">
<if test="schRegDateFrom != null">
AND SD.REG_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000') /* 등록 일자 시작 */
</if>
<if test="schRegDateTo != null">
AND SD.REG_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959') /* 등록 일자 종료 */
</if>
</when>
<when test="schRegDateOpt == 'mdfcnDt'">
<if test="schRegDateFrom != null">
AND SD.MDFCN_DT <![CDATA[>=]]> CONCAT(#{schRegDateFrom},'000000') /* 수정 일자 시작 */
</if>
<if test="schRegDateTo != null">
AND SD.MDFCN_DT <![CDATA[<=]]> CONCAT(#{schRegDateTo},'235959') /* 수정 일자 종료 */
</if>
</when>
<otherwise>
</otherwise>
</choose>
<choose>
<when test="schRgtrOpt == 'rgtr'">
<if test="schRgtrCd != null">
AND SD.RGTR = #{schRgtrCd} /* 등록자 코드 */
</if>
</when>
<when test="schRgtrOpt == 'mdfr'">
<if test="schRgtrCd != null">
AND SD.MDFR = #{schRgtrCd} /* 수정자 코드 */
</if>
</when>
<otherwise>
</otherwise>
</choose>
<if test="by != null and by != '' and term != null">
<choose>
<when test="mainOption == 'codeValue' or mainOption == 'match' or mainOption == 'ymd'">
<include refid="dynamicSearch.start" />
<choose>
<when test="by == 'taskSeCd'"> S.TASK_SE_CD </when>
<when test="by == 'sndngRegSeCd'"> S.SNDNG_REG_SE_CD </when>
<when test="by == 'sndngSeCd'"> S.SNDNG_SE_CD </when>
<when test="by == 'levyBgngYmd'"> S.LEVY_BGNG_YMD </when>
<when test="by == 'levyEndYmd'"> S.LEVY_END_YMD </when>
<when test="by == 'sndngYmd'"> S.SNDNG_YMD </when>
<when test="by == 'dudtYmd'"> S.DUDT_YMD </when>
<when test="by == 'ttlNm'"> S.TTL_NM </when>
<when test="by == 'docNo'"> S.DOC_NO </when>
<when test="by == 'etcCn'"> S.ETC_CN </when>
<when test="by == 'tnocs'"> S.TNOCS </when>
<when test="by == 'gramt'"> S.GRAMT </when>
<when test="by == 'sndngSttsCd'"> S.SNDNG_STTS_CD </when>
</choose>
<include refid="dynamicSearch.center" />#{term}<include refid="dynamicSearch.end" />
</when>
<otherwise>
</otherwise>
</choose>
</if>
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" />
</select>
<sql id="selectSndbk">
SELECT SD.SNDNG_DTL_ID /* 발송 상세 ID */
, SD.CRDN_ID /* 단속 ID */
, SD.SVBTC_ID /* 공시송달 ID */
, SD.CON_KEY /* 외부연계식별키 */
, SD.RG_NO /* 등기 번호 */
, SD.DLVR_YMD /* 배달 일자 */
, SD.DLVR_TM /* 배달 시각 */
, SD.UNDLVR_RSN_CD /* 미배달 사유 코드 */
, SD.UNDLVR_RSN_NM /* 미배달 사유 명 */
, SD.RCPN_NM /* 수령인 명 */
, SD.RCPN_REL_NM /* 수령인 관계 명 */
, SD.SNDNG_DTL_STTS_CD /* 발송 상세 상태 코드 */
, SD.BFR_SNDNG_DTL_STTS_CD /* 전 발송 상세 상태 코드 */
, SD.BFR_DLVR_YMD /* 전 배달 일자 */
, SD.BFR_DLVR_HR /* 전 배달 시간 */
, S.SNDNG_ID /* 발송 ID */
, S.SGG_CD /* 시군구 코드 */
, S.TASK_SE_CD /* 업무 구분 코드 */
FROM TB_SNDNG_DTL SD
INNER JOIN TB_SNDNG S ON (SD.SNDNG_ID = S.SNDNG_ID)
</sql>
<select id="selectSndbks" parameterType="map" resultType="dataobject">/* 반송 정보 조회(sndngDtlMapper.selectSndbks) */
<include refid="selectSndbk" />
<where>
<if test="sndngDtlIDs != null">
AND SD.SNDNG_DTL_ID IN ( /* 발송 상세 IDs */
<foreach collection="sndngDtlIDs" item="sndngDtlId" separator=","> #{sndngDtlId} </foreach>
)
</if>
<if test="sndngDtlId != null">
AND SD.SNDNG_DTL_ID = #{sndngDtlId} /* 발송 상세 ID */
</if>
<if test="sndngIDs != null">
AND SD.SNDNG_ID IN ( /* 발송 IDs */
<foreach collection="sndngIDs" item="sndngId" separator=","> #{sndngId} </foreach>
)
</if>
<if test="sndngId != null">
AND SD.SNDNG_ID = #{sndngId} /* 발송 ID */
</if>
<if test="crdnIDs != null">
AND SD.CRDN_ID IN ( /* 단속 IDs */
<foreach collection="crdnIDs" item="crdnId" separator=","> #{crdnId} </foreach>
)
</if>
<if test="crdnId != null">
AND SD.CRDN_ID = #{crdnId} /* 단속 ID */
</if>
<if test="svbtcIDs != null">
AND SD.SVBTC_ID IN ( /* 공시송달 IDs */
<foreach collection="svbtcIDs" item="svbtcId" separator=","> #{svbtcId} </foreach>
)
</if>
<if test="svbtcId != null">
AND SD.SVBTC_ID = #{svbtcId} /* 공시송달 ID */
</if>
</where>
AND SD.DEL_YN = 'N'
<include refid="utility.orderBy" />
</select>
<update id="createSndbk" parameterType="map">/* 발송상세의 반송 정보 수정(sndngDtlMapper.createSndbk) */
UPDATE TB_SNDNG_DTL
SET DLVR_YMD = #{sndngDtl.dlvrYmd} /* 배달 일자 */
, DLVR_TM = #{sndngDtl.dlvrTm} /* 배달 시각 */
, UNDLVR_RSN_CD = #{sndngDtl.undlvrRsnCd} /* 미배달 사유 코드 */
, UNDLVR_RSN_NM = #{sndngDtl.undlvrRsnNm} /* 미배달 사유 명 */
, SNDNG_DTL_STTS_CD = #{sndngDtl.sndngDtlSttsCd} /* 발송 상세 상태 코드 */
, BFR_SNDNG_DTL_STTS_CD = #{sndngDtl.bfrSndngDtlSttsCd} /* 전 발송 상세 상태 코드 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndngDtl.modifiedBy} /* 수정자 */
WHERE SNDNG_DTL_ID = #{sndngDtl.sndngDtlId}
AND DEL_YN = 'N'
</update>
<update id="updateSndbk" parameterType="map">/* 발송상세의 반송 정보 수정(sndngDtlMapper.updateSndbk) */
UPDATE TB_SNDNG_DTL
SET DLVR_YMD = #{sndngDtl.dlvrYmd} /* 배달 일자 */
, DLVR_TM = #{sndngDtl.dlvrTm} /* 배달 시각 */
, UNDLVR_RSN_CD = #{sndngDtl.undlvrRsnCd} /* 미배달 사유 코드 */
, UNDLVR_RSN_NM = #{sndngDtl.undlvrRsnNm} /* 미배달 사유 명 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndngDtl.modifiedBy} /* 수정자 */
WHERE SNDNG_DTL_ID = #{sndngDtl.sndngDtlId} /* 발송 상세 ID */
AND DEL_YN = 'N'
</update>
<update id="deleteSndbk" parameterType="map">/* 발송상세의 반송 정보 삭제(sndngDtlMapper.deleteSndbk) */
UPDATE TB_SNDNG_DTL
SET UNDLVR_RSN_CD = NULL /* 미배달 사유 코드 */
, UNDLVR_RSN_NM = NULL /* 미배달 사유 명 */
, SNDNG_DTL_STTS_CD = #{sndngDtl.sndngDtlSttsCd} /* 발송 상세 상태 코드 */
, BFR_SNDNG_DTL_STTS_CD = #{sndngDtl.bfrSndngDtlSttsCd} /* 전 발송 상세 상태 코드 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndngDtl.modifiedBy} /* 수정자 */
WHERE SNDNG_DTL_ID = #{sndngDtl.sndngDtlId} /* 발송 상세 ID */
AND DEL_YN = 'N'
</update>
<select id="selectTnocsSndngDtlSvbtc" parameterType="map" resultType="int">/* 발송상세 대장에 공시송달ID에 해당하는 총건수 가져오기(sndngDtlMapper.selectTnocsSndngDtlSvbtc) */
SELECT COUNT(*) TNOCS
FROM TB_SNDNG_DTL
WHERE SVBTC_ID = #{sndngDtl.svbtcId} /* 공시송달 ID */
AND DEL_YN = 'N'
</select>
<update id="updateSndngDtlSvbtc" parameterType="map">/* 발송상세의 공시송달 정보를 수정(sndngDtlMapper.updateSndngDtlSvbtc) */
UPDATE TB_SNDNG_DTL
SET SVBTC_ID = #{sndngDtl.svbtcId} /* 공시송달 ID */
, BFR_SNDNG_DTL_STTS_CD = SNDNG_DTL_STTS_CD /* 이전 발송 상세 상태 코드 */
, SNDNG_DTL_STTS_CD = #{sndngDtl.sndngDtlSttsCd} /* 발송 상세 상태 코드 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndngDtl.modifiedBy} /* 수정자 */
WHERE SNDNG_DTL_ID = #{sndngDtl.sndngDtlId}
AND DEL_YN = 'N'
</update>
<update id="deleteSndngDtlSvbtc" parameterType="map">/* 발송상세의 공시송달 정보를 삭제(sndngDtlMapper.deleteSndngDtlSvbtc) */
UPDATE TB_SNDNG_DTL
SET SVBTC_ID = NULL /* 공시송달 ID */
, BFR_SNDNG_DTL_STTS_CD = SNDNG_DTL_STTS_CD /* 이전 발송 상세 상태 코드 */
, SNDNG_DTL_STTS_CD = #{sndngDtl.sndngDtlSttsCd} /* 발송 상세 상태 코드 */
, MDFCN_DT = <include refid="utility.now" /> /* 수정 일시 */
, MDFR = #{sndngDtl.modifiedBy} /* 수정자 */
WHERE SVBTC_ID = #{sndngDtl.svbtcId} /* 공시송달 ID */
<if test="sndngDtl.sndngDtlId != null">
AND SNDNG_DTL_ID = #{sndngDtl.sndngDtlId}
</if>
AND DEL_YN = 'N'
</update>
</mapper>

@ -38,7 +38,7 @@
<!-- DataTables(그리드) -->
<div class="card-datatable text-nowrap">
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
<div class="table-responsive" id="table-responsive--${pageName}" style="overflow-x:scroll; height:400px; overflow-y:scroll;" >
<div class="table-responsive" id="table-responsive--${pageName}" style="overflow-x:scroll; height:460px; overflow-y:scroll;" >
<table class="table-layout-fixed dataTable datatables-ajax table table-bordered no-footer" id="DataTables_Table_0--${pageName}" aria-describedby="DataTables_Table_0_info">
<thead class="sticky-thead">
<tr id="theadTr--${pageName}"

@ -172,6 +172,7 @@
, formats : {
SNDNG_YMD : dateFormat
, SNDNG_END_YMD : dateFormat
, DLVR_YMD : dateFormat
, LEVY_YMD : dateFormat
, DUDT_YMD : dateFormat
, FFNLG_AMT : numberFormat
@ -213,15 +214,6 @@
/**************************************************************************
* DataTables 이벤트
**************************************************************************/
// 단속 ID
getCrdnKeys = (status) => {
let dataset = ${pageName}Control.dataset.getDataset(status);
return dataset.map(info => {
return info ? info.CRDN_ID : null;
});
}
// DataTables에 click, dbclick 이벤트
renderList${pageName} = (totalSize) => {
let ${infoPrefix}List = ${pageName}Control.dataset;
@ -359,18 +351,17 @@
// 종적결과 등록
createSndbk${pageName} = (params) => {
// 선택된 자료의 발송 상세 ID 추가
let selected = ${pageName}Control.dataset.getKeys("selected");
if (selected.length < 1) return;
params.sndngDtlIDs = selected.join(","); // 발송 상세 IDs
params.delYn = "N"; // 삭제 여부
if (!params) return;
ajax.post({
url : wctx.url("/" + params.taskSeCd + ${pageName}PrefixUrl + "/createSndbk.do")
url : wctx.url(params.taskSeCd + ${pageName}PrefixUrl + "/080/createSndbkList.do")
, data : params || {}
, success : resp => { }
, success : resp => {
// S 또는 F 를 버튼 title 로 변경하여 메시지 출력
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, $("#btnCreateSndbk--${pageName}").attr("title"));
dialog.alert(showMessage);
}
});
}
@ -489,7 +480,7 @@
dialog.alert({
content : "종적결과를 확인하시겠습니까?"
, onOK : () => {
createSndbk${pageName}(${pageName}Fields.get());
createSndbk${pageName}(${pageName}Query);
}
});
}

@ -274,7 +274,7 @@
, data : params
, success : resp => {
dialog.open({
id : ${pageName}Control.prefixed("Dialog")
id : "nhtSndngDtlDialog"
, title : "고지서 세부 내용"
, content : resp
, size : ${pageName}Control.infoSize

@ -17,6 +17,12 @@
<!-- 업무 버튼 및 건수 표시 -->
<div>
<span class="container-page-btn">
<!-- 건수, 페이지 표시 -->
<div class="d-flex flex-row justify-content-between">
<label class="dataTables_info" id="paging--${pageName}PagingInfo" role="status" aria-live="polite"></label>
<ul class="pagination pagination-primary" id="paging--${pageName}">
</ul>
</div>
<span class="container-window-btn-right">
<!-- 업무 버튼 -->
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀 저장" onclick="fnExcel${pageName}();">
@ -42,7 +48,7 @@
<!-- DataTables(그리드) -->
<div class="card-datatable text-nowrap">
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
<div class="table-responsive" id="table-responsive--${pageName}" style="overflow-x:scroll; height:400px; overflow-y:scroll;" >
<div class="table-responsive" id="table-responsive--${pageName}" style="overflow-x:scroll; height:460px; overflow-y:scroll;" >
<table class="table-layout-fixed dataTable datatables-ajax table table-bordered no-footer" id="DataTables_Table_0--${pageName}" aria-describedby="DataTables_Table_0_info">
<thead class="sticky-thead">
<tr id="theadTr--${pageName}"
@ -139,9 +145,12 @@
**************************************************************************/
// URL
var ${pageName}PrefixUrl = "/sndb/sndb01";
// infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정)
var ${pageName}CallPurpose = "${callPurpose}";
// FormFields
var ${pageName}Fields = new FimsFormFields("#frmEdit--${pageName}");
// main 의 검색 조건을 그대로 유지
var ${pageName}Query = ${query};
/**************************************************************************
* DatasetControl
**************************************************************************/
@ -151,10 +160,8 @@
, keymapper : info => info ? info.SNDNG_DTL_ID : ""
, dataGetter : obj => obj.nhtSndngDtlList
, appendData : true
, tableRenderComplete : false // dataTables 에 자료 추가 완료 여부
, urls : {
getInfo : wctx.url("/sprt/sprt02/010/main.do") // 개별총정보
}
, untilPageNum : 0 // 현재 페이지 번호
, tableRenderComplete : false // dataTables 에 자료 추가 완료 여부
, formats : {
SNDNG_YMD : dateFormat
, SNDNG_END_YMD : dateFormat
@ -172,14 +179,18 @@
**************************************************************************/
// Dataset 변경 이벤트
${pageName}Control.onDatasetChange = obj => {
renderList${pageName}();
${pageName}Control.select(true); // 전체 선택 되도록..
if (obj.length > 0) {
}
renderList${pageName}(obj.${infoPrefix}Total);
$("#paging--${pageName}").setPagingInfo({
list : ${pageName}Control.dataset
, prefix : "paging--${pageName}"
, start : obj.${infoPrefix}Start
, totalSize : obj.${infoPrefix}Total
, fetchSize : obj.${infoPrefix}Fetch
, func : "${pageName}Control.load({index})"
});
${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료
${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료
};
// 현재 선택 자료 변경 이벤트
@ -191,30 +202,65 @@
$("#tbody--${pageName}").setCurrentRow(key);
};
// 선택(체크) 변경 이벤트
${pageName}Control.onSelectionChange = selected => {
/**************************************************************************
* DataTables 이벤트
**************************************************************************/
// DataTables에 click, dbclick 이벤트
renderList${pageName} = (totalSize) => {
let ${infoPrefix}List = ${pageName}Control.dataset;
let keys = selected.map(e => ${infoPrefix}List.getKey(e));
let empty = ${infoPrefix}List.empty;
let trs = empty ?
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
${infoPrefix}List.inStrings(
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
(str, dataItem) => str
.replace(/{onclick}/gi, "${pageName}Control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');")
.replace(/{ondblclick}/gi, "getTotalInfo${pageName}('" + dataItem.getValue("CRDN_ID") + "');")
);
$("#tbody--${pageName} input[type='checkbox']").each(function() {
let checkbox = $(this);
let noMore = (totalSize == ${infoPrefix}List.length);
let initScroll = (${pageName}Control.query.pageNum < 2) && (${pageName}Control.untilPageNum == 0);
checkbox.prop("checked", keys.includes(checkbox.val()));
});
};
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
if (${pageName}Control.untilPageNum != 0) {
${pageName}Control.query.fetchSize = ${pageName}Control.defaultFetchSize;
${pageName}Control.query.pageNum = ${pageName}Control.untilPageNum;
${pageName}Control.untilPageNum = 0;
}
//보안모드
$("th input[type='checkbox']").prop("checked", false);
//보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked"));
}
// DataTables에 스크롤이 맨 밑으로 이동했을 때 이벤트
scrollDataList${pageName} = () => {
${pageName}Control.tableRenderComplete = false; // dataTables 에 자료 추가 false
${pageName}Control.load(${pageName}Control.query.pageNum + 1);
}
/**************************************************************************
* 사용자 함수(function)
**************************************************************************/
// 개별총정보 dialog
${pageName}Control.getInfo = (crdnId) => {
getTotalInfo${pageName} = (crdnId) => {
if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return;
let params = {
callControlName : "${pageName}Control"
, callPurpose : "view"
, sggCd : $("#sggCd--${pageName}").val()
, taskSeCd : $("#taskSeCd--${pageName}").val()
, crdnId : crdnId
}
ajax.get({
url : ${pageName}Control.urls.getInfo
url : wctx.url(params.taskSeCd + "/sprt/sprt02/010/main.do")
, data : params
, success : resp => {
dialog.open({
@ -227,28 +273,70 @@
});
}
// 종적결과 등록
createSndbk${pageName} = (params) => {
if (!params) return;
ajax.post({
url : wctx.url(params.taskSeCd + ${pageName}PrefixUrl + "/080/createSndbkList.do")
, data : params || {}
, success : resp => {
// S 또는 F 를 버튼 title 로 변경하여 메시지 출력
let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, $("#btnCreateSndbk--${pageName}").attr("title"));
dialog.alert(showMessage);
}
});
}
/**************************************************************************
*
* 버튼 clickEvent
**************************************************************************/
// DataTables에 click, dbclick 이벤트
renderList${pageName} = () => {
let ${infoPrefix}List = ${pageName}Control.dataset;
let empty = ${infoPrefix}List.empty;
// 엑셀 버튼 이벤트
fnExcel${pageName} = () => {
if (${pageName}Control.dataset.empty) {
dialog.alert({
content : "검색된 자료가 없습니다."
, onOK : () => { }
});
let trs = empty ?
[document.getElementById("${infoPrefix}NotFound--${pageName}").innerHTML] : <%-- from template#${infoPrefix}NotFound --%>
${infoPrefix}List.inStrings(
document.getElementById("${infoPrefix}Row--${pageName}").innerHTML, <%-- from template#${infoPrefix}Row --%>
(str, dataItem) => str
.replace(/{onclick}/gi, "${pageName}Control.setCurrent('" + dataItem.getValue("SNDNG_DTL_ID") + "');")
.replace(/{ondblclick}/gi, "${pageName}Control.getInfo('" + dataItem.getValue("CRDN_ID") + "');")
);
return;
}
$("#tbody--${pageName}").html(trs.join());
$("th input[type='checkbox']").prop("checked", false);
// DataTables(그리드)
let cellDefs = getCellDefs($("#theadTr--${pageName} th").not(".dummy-th")
, $($("#${infoPrefix}Row--${pageName}")[0].content).find("td").not(".dummy-td"));
${pageName}Control.query.cellDefs = cellDefs;
//보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked"));
${pageName}Control.download();
}
// 파일 출력
fnCreateTextFile${pageName} = () => {
}
// 고지서 출력
fnPrintNht${pageName} = () => {
}
// 중복자료 삭제
fnRemoveDpcnData${pageName} = () => {
}
// 반송(종적결과) 확인
fnCreateSndbk${pageName} = () => {
// validate 확인
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
dialog.alert({
content : "종적결과를 확인하시겠습니까?"
, onOK : () => {
createSndbk${pageName}(${pageName}Query);
}
});
}
/**************************************************************************
@ -271,60 +359,66 @@
// DataTables width 변경 조정
$("#DataTables_Table_0--${pageName}").find("th").resizable( {handles : "e"} );
}
/**************************************************************************
* 버튼 clickEvent
**************************************************************************/
// 엑셀 저장
fnExcel${pageName} = () => {
// DataTables 스크롤 이벤트 생성
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], scrollDataList${pageName});
// DataTables 스크롤을 위해서 다이얼로그 화면이 생성된 후 Dataset을 설정한다.
$("#${infoPrefix}Dialog").on("shown.bs.modal", function (e) {
${pageName}Control.setData({
${infoPrefix}List : ${nhtSndngDtlList}
, ${infoPrefix}Start : ${nhtSndngDtlStart}
, ${infoPrefix}Fetch : ${nhtSndngDtlFetch}
, ${infoPrefix}Total : ${nhtSndngDtlTotal}
});
});
}
// 파일 출력
fnCreateTextFile${pageName} = () => {
// 화면 초기 설정
initForm${pageName} = () => {
// 화면 초기화
$("#frmEdit--${pageName}")[0].reset();
// dataset 초기화
${pageName}Control.dataset.clear();
}
// 고지서 출력
fnPrintNht${pageName} = () => {
// 기본 데이터 설정
setFormData${pageName} = () => {
let sggCd = ${pageName}Query.sggCd;
let taskSeCd = ${pageName}Query.taskSeCd;
}
$("#sggCd--${pageName}").val(sggCd); // 시군구 코드
$("#taskSeCd--${pageName}").val(taskSeCd); // 업무 구분 코드
// 중복자료 삭제
fnRemoveDpcnData${pageName} = () => {
// 검색 조건 설정
${pageName}Control.defaultFetchSize = ${pageName}Query.fetchSize;
${pageName}Control.query = ${pageName}Query;
// URL 설정
setURL${pageName}(taskSeCd);
}
// 반송(종적결과) 확인
fnCreateSndbk${pageName} = () => {
// validate 확인
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
dialog.alert({
content : "종적결과를 확인하시겠습니까?"
, onOK : () => {
createSndbk${pageName}(${pageName}Fields.get());
}
});
// 업무구분에 따른 url 설정
setURL${pageName} = (taskSeCd) => {
${pageName}Control.urls.load = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/100/list.do"); // 조회
}
/**************************************************************************
* script 진입
**************************************************************************/
$(document).ready(function() {
// 기본 데이터
$("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드
$("#taskSeCd--${pageName}").val("${taskSeCd}"); // 업무 구분 코드
// 보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked"));
// 이벤트 설정
setEvent${pageName}();
// Dataset 셋팅 - 화면이 열리면서 조회하는 경우 addData 하여 자료를 추가
${pageName}Control.addData(${nhtSndngDtl});
// 화면 초기화
initForm${pageName}();
// 기본 데이터 설정
setFormData${pageName}();
// 보안모드
fn_securityModeToggle($("#securityMode--top").is(":checked"));
});
</script>

Loading…
Cancel
Save