계고장 발송대상, 계고장 발송현황 수정.

main
jjh 1 year ago
parent 4859ab0b7a
commit f37a1f9999

@ -29,58 +29,89 @@ public interface SndngMapper extends AbstractMapper {
* @param req
* @return
*/
List<DataObject> selectWrngSndngTrgtList(SndbQuery req);
List<DataObject> selectWrngTrgtList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> selectWrngSndngTrgts(SndbQuery req);
List<DataObject> selectWrngTrgts(SndbQuery req);
default DataObject selectWrngSndngTrgtInfo(String crdnId) {
List<DataObject> InfoSndngTrgt = selectWrngSndngTrgts(new SndbQuery().setCrdnId(crdnId));
default DataObject selectWrngTrgtInfo(String crdnId) {
List<DataObject> wrngTrgtInfo = selectWrngTrgts(new SndbQuery().setCrdnId(crdnId));
return !InfoSndngTrgt.isEmpty() ? InfoSndngTrgt.get(0) : null;
return !wrngTrgtInfo.isEmpty() ? wrngTrgtInfo.get(0) : null;
}
/** .<br />
/** .<br />
* @param req
* @return
*/
List<DataObject> selectAdvntceSndngTrgtList(SndbQuery req);
List<DataObject> selectSndngList(SndbQuery req);
/** .
/** .
* @param req
* @return
*/
List<DataObject> selectAdvntceSndngTrgts(SndbQuery req);
List<DataObject> selectSndngs(SndbQuery req);
default DataObject selectAdvntceSndngTrgtInfo(String crdnId) {
List<DataObject> InfoSndngTrgt = selectAdvntceSndngTrgts(new SndbQuery().setCrdnId(crdnId));
default DataObject selectSndngInfo(String sndngId) {
List<DataObject> InfoSndng = selectSndngs(new SndbQuery().setSndngId(sndngId).setDelYn("N").setOrderBy("S.SNDNG_ID DESC"));
return !InfoSndngTrgt.isEmpty() ? InfoSndngTrgt.get(0) : null;
return !InfoSndng.isEmpty() ? InfoSndng.get(0) : null;
}
/** .<br />
/** .<br />
* @param req
* @return
*/
List<DataObject> selectSndngDtlList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> selectSndngDtls(SndbQuery req);
default DataObject selectSndngDtlInfo(String sndngDtlId) {
List<DataObject> sndngDtlInfo = selectSndngDtls(new SndbQuery().setSndngDtlId(sndngDtlId).setDelYn("N").setOrderBy("SD.SNDNG_DTL_ID DESC"));
return !sndngDtlInfo.isEmpty() ? sndngDtlInfo.get(0) : null;
}
/** .<br />
* @param req
* @return
*/
List<DataObject> selectSndngList(SndbQuery req);
List<DataObject> selectAdvntceSndngTrgtList(SndbQuery req);
/** .
/** .
* @param req
* @return
*/
List<DataObject> selectSndngs(SndbQuery req);
List<DataObject> selectAdvntceSndngTrgts(SndbQuery req);
default DataObject selectSndngInfo(String sndngId) {
List<DataObject> InfoSndng = selectSndngs(new SndbQuery().setSndngId(sndngId)
.setDelYn("N")
.setOrderBy("S.SNDNG_ID DESC"));
default DataObject selectAdvntceSndngTrgtInfo(String crdnId) {
List<DataObject> InfoSndngTrgt = selectAdvntceSndngTrgts(new SndbQuery().setCrdnId(crdnId));
return !InfoSndng.isEmpty() ? InfoSndng.get(0) : null;
return !InfoSndngTrgt.isEmpty() ? InfoSndngTrgt.get(0) : null;
}
/** .
* @param req
* @return
@ -89,24 +120,12 @@ public interface SndngMapper extends AbstractMapper {
default DataObject selectSndngTrgtInfo(String crdnId) {
List<DataObject> InfoSndngTrgt = selectSndngTrgts(new SndbQuery().setCrdnId(crdnId)
.setCrdnDelYn("N")
.setOrderBy("C.CRDN_ID DESC"));
.setCrdnDelYn("N")
.setOrderBy("C.CRDN_ID DESC"));
return !InfoSndngTrgt.isEmpty() ? InfoSndngTrgt.get(0) : null;
}
/** .
* @param req
* @return
*/
List<DataObject> selectSndngDtls(SndbQuery req);
default DataObject selectSndngDtlInfo(String sndngDtlId) {
List<DataObject> sndngDtlInfo = selectSndngDtls(new SndbQuery().setSndngDtlId(sndngDtlId));
return !sndngDtlInfo.isEmpty() ? sndngDtlInfo.get(0) : null;
}
/**
* @param req
* @return
@ -242,11 +261,6 @@ public interface SndngMapper extends AbstractMapper {
/** .<br />
* @param req
* @return
*/
List<DataObject> selectSndngDtlList(SndbQuery req);
/** .
* @param params

@ -24,15 +24,56 @@ public interface SndngService {
* @param req
* @return
*/
List<DataObject> getWrngSndngTrgtList(SndbQuery req);
List<DataObject> getWrngTrgtList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getWrngSndngTrgts(SndbQuery req);
List<DataObject> getWrngTrgts(SndbQuery req);
/** .
* @param sndng
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String createWarningSndng(Sndng sndng);
/** .
* @param req
* @return
*/
List<DataObject> getWrngSndngList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getWrngSndngDtls(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getAdvntceSndngTrgtList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getAdvntceSndngTrgts(SndbQuery req);
@ -62,17 +103,6 @@ public interface SndngService {
/** .
* @param req
* @return
*/
List<DataObject> getAdvntceSndngTrgtList(SndbQuery req);
/** .
* @param req
* @return
*/
List<DataObject> getAdvntceSndngTrgts(SndbQuery req);
/** .
* @param req

@ -77,22 +77,49 @@ public class SndngBean extends AbstractComponent {
* @param req
* @return
*/
public List<DataObject> getWrngSndngTrgtList(SndbQuery req) {
return sndngMapper.selectWrngSndngTrgtList(req);
public List<DataObject> getWrngTrgtList(SndbQuery req) {
return sndngMapper.selectWrngTrgtList(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getWrngSndngTrgts(SndbQuery req) {
public List<DataObject> getWrngTrgts(SndbQuery req) {
if (req.getOrderBy() == null) {
req.setOrderBy("CRDN_YMD_TM");
}
return sndngMapper.selectWrngSndngTrgts(req);
return sndngMapper.selectWrngTrgts(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getSndngList(SndbQuery req) {
return sndngMapper.selectSndngList(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getSndngDtls(SndbQuery req) {
return sndngMapper.selectSndngDtls(req);
}
/** .
* @param req
* @return
@ -113,14 +140,6 @@ public class SndngBean extends AbstractComponent {
return sndngMapper.selectAdvntceSndngTrgts(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getSndngList(SndbQuery req) {
return sndngMapper.selectSndngList(req);
}
/** .
* @param req
* @return
@ -129,14 +148,6 @@ public class SndngBean extends AbstractComponent {
return sndngMapper.selectSndngTrgts(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getSndngDtls(SndbQuery req) {
return sndngMapper.selectSndngDtls(req);
}
/** .
* @param req
* @return
@ -154,7 +165,10 @@ public class SndngBean extends AbstractComponent {
/** . ()
/** .()
* @param sndng
* @return
* <ul><li> true</li>
@ -226,9 +240,9 @@ public class SndngBean extends AbstractComponent {
// 발송 상세 등록
SndngDtl sndngDtl = new SndngDtl();
if (sndng.getSndngSeCd().equals("11") || sndng.getSndngSeCd().equals("12")) { // 계고장
if (sndng.getSndngSeCd().equals("11") || sndng.getSndngSeCd().equals("12")) { // 계고장
ffnlgAmt = crdnPayerInfo.number("FFNLG_CRDN_AMT").intValue(); // 과태료 최초 단속 금액
pcptax = 0;
pcptax = crdnPayerInfo.number("FFNLG_CRDN_AMT").intValue(); // 과태료 최초 단속 금액
adamt = 0;
sumAmt = 0;
} else if (sndng.getSndngSeCd().equals("01") || sndng.getSndngSeCd().equals("02")) { // 사전통지
@ -236,10 +250,10 @@ public class SndngBean extends AbstractComponent {
if (crdnPayerInfo.string("LEVY_ID").equals("")) {
// 세외수입에 등록 후 세외수입에서 감경해야 하므로 사전통보액 80,000 원이 아닌 본 부과액 100,000 원으로 등록한다.
// 세외수입에서 가상계좌를 부여 받은 후 다시 금액이 80,000 원으로 업데이트 된다.
ffnlgAmt = crdnPayerInfo.number("FFNLG_AMT").intValue(); // 과태료 금액
pcptax = crdnPayerInfo.number("FFNLG_AMT").intValue(); // 부과 본세
adamt = 0; // 부과 가산금
sumAmt = crdnPayerInfo.number("FFNLG_AMT").intValue(); // 부과 합계 금액
ffnlgAmt = crdnPayerInfo.number("FFNLG_AMT").intValue(); // 과태료 금액
pcptax = crdnPayerInfo.number("FFNLG_AMT").intValue(); // 본세
adamt = 0; // 가산금
sumAmt = crdnPayerInfo.number("FFNLG_AMT").intValue(); // 합계 금액
// 부과 대장(TB_LEVY)
Levy levy = new Levy();
@ -356,9 +370,6 @@ public class SndngBean extends AbstractComponent {
return retMessage;
}
/** .
* @param sndng
* @return

@ -32,15 +32,44 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic
private SndngBean sndngBean;
@Override
public List<DataObject> getWrngSndngTrgtList(SndbQuery req) {
return sndngBean.getWrngSndngTrgtList(req);
public List<DataObject> getWrngTrgtList(SndbQuery req) {
return sndngBean.getWrngTrgtList(req);
}
@Override
public List<DataObject> getWrngSndngTrgts(SndbQuery req) {
return sndngBean.getWrngSndngTrgts(req);
public List<DataObject> getWrngTrgts(SndbQuery req) {
return sndngBean.getWrngTrgts(req);
}
@Override
public String createWarningSndng(Sndng sndng) {
// 세외수입시스템과 연계하는 업무인지 확인
if ("DPV,ECA,TPV".contains(sndng.getTaskSeCd())) {
return sndngBean.createSndngNxrpLink(sndng);
} else {
return sndngBean.createSndng(sndng);
}
}
@Override
public List<DataObject> getWrngSndngList(SndbQuery req) {
return sndngBean.getSndngList(req);
}
@Override
public List<DataObject> getWrngSndngDtls(SndbQuery req) {
return sndngBean.getSndngDtls(req);
}
@Override
public List<DataObject> getAdvntceSndngTrgtList(SndbQuery req) {
return sndngBean.getAdvntceSndngTrgtList(req);
@ -71,16 +100,6 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic
return sndngBean.getSndngDtls(req);
}
@Override
public String createSndng(Sndng sndng) {
// 세외수입시스템과 연계하는 업무인지 확인
if ("DPV,ECA,TPV".contains(sndng.getTaskSeCd())) {
return sndngBean.createSndngNxrpLink(sndng);
} else {
return sndngBean.createSndng(sndng);
}
}
@Override
public boolean updateSndng(Sndng sndng) {
return sndngBean.updateSndng(sndng);
@ -91,6 +110,16 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic
return sndngBean.removeSndng(sndng);
}
@Override
public String createSndng(Sndng sndng) {
// 세외수입시스템과 연계하는 업무인지 확인
if ("DPV,ECA,TPV".contains(sndng.getTaskSeCd())) {
return sndngBean.createSndngNxrpLink(sndng);
} else {
return sndngBean.createSndng(sndng);
}
}
@Override
public String createSndngLink(Sndng sndng) {
return sndngBean.createEPost(sndng);

@ -135,9 +135,9 @@ public class Sndb01Controller extends ApplicationController {
* }</code></pre>
*/
public ModelAndView getWarningTargetList(SndbQuery req) {
List<?> result = sndngService.getWrngSndngTrgtList(setFetchSize(req));
List<?> result = sndngService.getWrngTrgtList(setFetchSize(req));
return setCollectionInfo(new ModelAndView("jsonView"), result, "wrngSndngTrgt");
return setCollectionInfo(new ModelAndView("jsonView"), result, "wrngTrgt");
}
/** (sndb/sndb01/020-info) .
@ -148,7 +148,7 @@ public class Sndb01Controller extends ApplicationController {
* }</pre>
*/
public ModelAndView getWarningTargetInfo(SndbQuery req) {
List<DataObject> wrngSndngTrgts = sndngService.getWrngSndngTrgts(req);
List<DataObject> wrngTrgts = sndngService.getWrngTrgts(req);
boolean json = jsonResponse();
@ -157,9 +157,9 @@ public class Sndb01Controller extends ApplicationController {
return mav.addObject("pageName", "sndb01020")
.addObject("sggCd", req.getSggCd())
.addObject("taskSeCd", req.getTaskSeCd())
.addObject("sndngSeCd", req.getSndngSeCd()) // 발송 구분 코드
.addObject("vltnCd", req.getVltnCd()) // 위반 코드
.addObject("wrngSndngTrgtDtl", json ? wrngSndngTrgts : toJson(wrngSndngTrgts)) // 계고장 발송 대상 정보
.addObject("sndngSeCd", req.getSndngSeCd()) // 발송 구분 코드
.addObject("vltnCd", req.getVltnCd()) // 위반 코드
.addObject("wrngTrgtDtl", json ? wrngTrgts : toJson(wrngTrgts)) // 계고장 발송 대상 정보
;
}
@ -172,7 +172,7 @@ public class Sndb01Controller extends ApplicationController {
*/
public ModelAndView createWarningSndng(Sndng sndng) {
boolean saved = false;
String retMessage = sndngService.createSndng(sndng);
String retMessage = sndngService.createWarningSndng(sndng);
if (retMessage.contains("[S]")) {
saved = true;
@ -186,7 +186,6 @@ public class Sndb01Controller extends ApplicationController {
}
/** (sndb/sndb01/030-main) .
*
* @return /sndb/sndb01/030-main
*/
public ModelAndView warningSendingMain() {
@ -206,7 +205,7 @@ public class Sndb01Controller extends ApplicationController {
}
/** .<br />
* {@link SndngService#getSndngList(SndngQuery)}
* {@link SndngService#getWarningSendingList(SndngQuery)}
* @param req
* @return jsonView
* <pre><code> {
@ -217,7 +216,7 @@ public class Sndb01Controller extends ApplicationController {
* }</code></pre>
*/
public ModelAndView getWarningSendingList(SndbQuery req) {
List<?> result = sndngService.getSndngList(setFetchSize(req));
List<?> result = sndngService.getWrngSndngList(setFetchSize(req));
return setCollectionInfo(new ModelAndView("jsonView"), result, "wrngSndng");
}
@ -230,7 +229,7 @@ public class Sndb01Controller extends ApplicationController {
* }</pre>
*/
public ModelAndView getWarningSendingInfo(SndbQuery req) {
List<?> sndngDtls = sndngService.getSndngDtls(req);
List<?> sndngDtls = sndngService.getWrngSndngDtls(req);
boolean json = jsonResponse();
@ -245,7 +244,6 @@ public class Sndb01Controller extends ApplicationController {
}
/** (sndb/sndb01/050-main) .
*
* @return /sndb/sndb01/050-main
*/
public ModelAndView advanceNoticeTargetMain() {

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

@ -565,13 +565,6 @@ public class BpvController {
@RequestMapping(name="전용차로과태료업무 업무지원_개별총정보", value=CLASS_URL+Sprt02Controller.CLASS_URL)
class Sprt02Controller extends cokr.xit.fims.sprt.web.Sprt02Controller {
@Override
@RequestMapping(name="전용차로과태료업무 개별총정보 메인", value=METHOD_URL.indivTotalInfoMain)
public ModelAndView indivTotalInfoMain(SprtQuery req) {
return super.indivTotalInfoMain(req);
}
@Override
@RequestMapping(name="전용차로과태료업무 단속, 납부자 정보 조회", value=METHOD_URL.getCrdnPayerInfo)
public ModelAndView getCrdnPayerInfo(SprtQuery req) {

@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import cokr.xit.fims.sprt.SprtQuery;
import cokr.xit.fims.sprt.web.Sprt02Controller.METHOD_URL;
import cokr.xit.fims.stat.StatQuery;
@Controller
@ -366,6 +367,12 @@ public class CmnController {
@RequestMapping(name="개별 총정보", value="/sprt/sprt02")
class Sprt02Controller extends cokr.xit.fims.sprt.web.Sprt02Controller {
@Override
@RequestMapping(name="장애인과태료업무 개별총정보 메인", value=METHOD_URL.indivTotalInfoMain)
public ModelAndView indivTotalInfoMain(SprtQuery req) {
return super.indivTotalInfoMain(req);
}
}
@Controller

@ -574,10 +574,10 @@ public class DpvController {
public ModelAndView getAdvanceNoticeSendingInfo(SndbQuery req) {
return super.getAdvanceNoticeSendingInfo(req);
}
@Override
@RequestMapping(name="고지서 발송 현황 목록 조회", value=METHOD_URL.getNoticeSheetSendingList)
@ -689,7 +689,6 @@ public class DpvController {
}
@Controller
@RequestMapping(name="장애인과태료업무 업무지원_통합조회", value=CLASS_URL+"/sprt/sprt01")
class Sprt01Controller extends cokr.xit.fims.sprt.web.Sprt01Controller {}
@ -698,12 +697,6 @@ public class DpvController {
@RequestMapping(name="장애인과태료업무 업무지원_개별총정보", value=CLASS_URL+Sprt02Controller.CLASS_URL)
class Sprt02Controller extends cokr.xit.fims.sprt.web.Sprt02Controller {
@Override
@RequestMapping(name="장애인과태료업무 개별총정보 메인", value=METHOD_URL.indivTotalInfoMain)
public ModelAndView indivTotalInfoMain(SprtQuery req) {
return super.indivTotalInfoMain(req);
}
@Override
@RequestMapping(name="장애인과태료업무 단속, 납부자 정보 조회", value=METHOD_URL.getCrdnPayerInfo)
public ModelAndView getCrdnPayerInfo(SprtQuery req) {

@ -472,13 +472,6 @@ public class EcaController {
@RequestMapping(name="전기차과태료업무 업무지원_개별총정보", value=CLASS_URL+Sprt02Controller.CLASS_URL)
class Sprt02Controller extends cokr.xit.fims.sprt.web.Sprt02Controller {
@Override
@RequestMapping(name="전기차과태료업무 개별총정보 메인", value=METHOD_URL.indivTotalInfoMain)
public ModelAndView indivTotalInfoMain(SprtQuery req) {
return super.indivTotalInfoMain(req);
}
@Override
@RequestMapping(name="전기차과태료업무 단속, 납부자 정보 조회", value=METHOD_URL.getCrdnPayerInfo)
public ModelAndView getCrdnPayerInfo(SprtQuery req) {

@ -535,13 +535,6 @@ public class PvsController {
@RequestMapping(name="주정차과태료업무 업무지원_개별총정보", value=CLASS_URL+Sprt02Controller.CLASS_URL)
class Sprt02Controller extends cokr.xit.fims.sprt.web.Sprt02Controller {
@Override
@RequestMapping(name="주정차과태료업무 개별총정보 메인", value=METHOD_URL.indivTotalInfoMain)
public ModelAndView indivTotalInfoMain(SprtQuery req) {
return super.indivTotalInfoMain(req);
}
@Override
@RequestMapping(name="주정차과태료업무 단속, 납부자 정보 조회", value=METHOD_URL.getCrdnPayerInfo)
public ModelAndView getCrdnPayerInfo(SprtQuery req) {

@ -41,6 +41,7 @@
</resultMap>
<resultMap id="sndngDtlRow" type="cokr.xit.fims.sndb.SndngDtl">
<!-- TB_SNDNG_DTL 발송 상세 대장 -->
<result property="sndngDtlId" column="SNDNG_DTL_ID" /> <!-- 발송 상세 ID -->
<result property="sndngId" column="SNDNG_ID" /> <!-- 발송 ID -->
<result property="crdnId" column="CRDN_ID" /> <!-- 단속 ID -->
@ -112,7 +113,7 @@
<result property="delRsn" column="DEL_RSN" /> <!-- 삭제 사유 -->
</resultMap>
<sql id="selectWrngSndngTrgt">
<sql id="selectWrngTrgt">
, C.SGG_CD <!-- 시군구 코드 -->
, C.TASK_SE_CD <!-- 업무 구분 코드 -->
, (SELECT GET_CODE_NM('FIM054', C.TASK_SE_CD) FROM DUAL) AS TASK_SE_NM <!-- 업무 구분 명 -->
@ -327,213 +328,19 @@
</if>
</sql>
<select id="selectWrngSndngTrgtList" parameterType="map" resultType="dataobject">/* 계고장 발송 대상 목록 조회(sndngMapper.selectWrngSndngTrgtList) */
<select id="selectWrngTrgtList" parameterType="map" resultType="dataobject">/* 계고장 발송 대상 목록 조회(sndngMapper.selectWrngTrgtList) */
<include refid="utility.paging-prefix" />
SELECT C.CRDN_ID <!-- 단속 ID -->
<include refid="selectWrngSndngTrgt" />
<include refid="selectWrngTrgt" />
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" />
</select>
<select id="selectWrngSndngTrgts" parameterType="map" resultType="dataobject">/* 계고장 발송 대상 객체 가져오기(sndngMapper.selectWrngSndngTrgts) */
<select id="selectWrngTrgts" parameterType="map" resultType="dataobject">/* 계고장 발송 대상 객체 가져오기(sndngMapper.selectWrngTrgts) */
SELECT COUNT(*) OVER() AS TNOCS <!-- 총건수 -->
, SUM(C.FFNLG_AMT) OVER() AS GRAMT <!-- 총금액 -->
, C.CRDN_ID <!-- 단속 ID -->
<include refid="selectWrngSndngTrgt" />
<include refid="utility.orderBy" />
</select>
<sql id="selectAdvntceSndngTrgt">
, C.SGG_CD <!-- 시군구 코드 -->
, C.TASK_SE_CD <!-- 업무 구분 코드 -->
, (SELECT GET_CODE_NM('FIM054', C.TASK_SE_CD) FROM DUAL) AS TASK_SE_NM <!-- 업무 구분 명 -->
, C.CRDN_INPT_SE_CD <!-- 단속 입력 구분 코드 -->
, (SELECT GET_CODE_NM('FIM003', C.CRDN_INPT_SE_CD) FROM DUAL) AS CRDN_INPT_SE_NM <!-- 단속 입력 구분 명 -->
, C.CRDN_YMD <!-- 단속 일자 -->
, C.CRDN_TM <!-- 단속 시각 -->
, (CONCAT(C.CRDN_YMD, C.CRDN_TM)) AS CRDN_YMD_TM <!-- 단속 일시 -->
, C.VHRNO <!-- 차량번호 -->
, C.CRDN_STDG_NM <!-- 단속 법정동 명 -->
, C.CRDN_ROAD_NM <!-- 단속 도로 명 -->
, C.CRDN_PLC <!-- 단속 장소 -->
, C.FFNLG_CRDN_AMT <!-- 과태료 단속 금액 -->
, C.FFNLG_AMT <!-- 과태료 금액 -->
, C.ADVNTCE_AMT <!-- 사전통지 금액 -->
, C.CRDN_STTS_CD <!-- 단속 상태 코드 -->
, (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM <!-- 단속 상태 명 -->
, C.REG_DT <!-- 등록 일시 -->
, C.RGTR <!-- 등록자 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = C.RGTR) AS RGTR_NM <!-- 등록자 명 -->
, C.MDFCN_DT <!-- 수정 일시 -->
, C.MDFR <!-- 수정자 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = C.MDFR) AS MDFR_NM <!-- 수정자 명 -->
, CA.CRDN_SE_CD <!-- 단속 구분 코드 -->
, (SELECT GET_CODE_NM('FIM002', CA.CRDN_SE_CD) FROM DUAL) AS CRDN_SE_NM <!-- 단속 구분 명 -->
, CA.DTL_CRDN_PLC <!-- 상세 단속 장소 -->
, CA.CRDN_SPAREA_CD <!-- 단속 특별구역 코드 -->
, (SELECT GET_CODE_NM('FIM007', CA.CRDN_SPAREA_CD) FROM DUAL) AS CRDN_SPAREA_NM <!-- 단속 특별구역 명 -->
, CA.CRDN_BGNG_TM <!-- 단속 시작 시각 -->
, CA.CRDN_END_TM <!-- 단속 종료 시각 -->
, CA.CRDN_SN <!-- 단속 일련번호 -->
, CA.USE_FUEL_CD <!-- 사용 연료 코드 -->
, (SELECT GET_CODE_NM('LVS005', CA.USE_FUEL_CD) FROM DUAL) AS USE_FUEL_NM <!-- 사용 연료 명 -->
, CA.FFNLG_CARMDL_CD <!-- 과태료 차종 코드 -->
, (SELECT GET_CODE_NM('FIM009', CA.FFNLG_CARMDL_CD) FROM DUAL) AS FFNLG_CARMDL_NM <!-- 과태료 차종 명 -->
, CA.PARKNG_PSBLTY_RSLT_CD <!-- 주차 가능 결과 코드 -->
, (SELECT GET_CODE_NM('FIM034', CA.PARKNG_PSBLTY_RSLT_CD) FROM DUAL) AS PARKNG_PSBLTY_RSLT_NM<!-- 주차 가능 결과 명 -->
, CA.VLTN_NMTM <!-- 위반 횟수 -->
, CA.OVTIME_YN <!-- 시간외 여부 -->
, VI.VLTN_ID <!-- 위반 ID -->
, VI.VLTN_CD <!-- 위반 코드 -->
, VI.VLTN_ARTCL <!-- 위반 항목 -->
, CC.CVLCPT_LINK_ID <!-- 민원 연계 ID -->
, CC.CVLCPT_RCPT_YMD <!-- 민원 접수 일자 -->
, CC.CVLCPT_APLY_NO <!-- 민원 신청 번호 -->
, CC.CVLCPT_RCPT_NO <!-- 민원 접수 번호 -->
, CC.CVLCPT_APLCNT_NM <!-- 민원 신청인 명 -->
, CC.CVLCPT_APLY_DT <!-- 민원 신청 일시 -->
, CC.CVLCPT_PRCS_PIC_NM <!-- 민원 처리 담당자 명 -->
, CC.CVLCPT_PRCS_CD <!-- 민원 처리 코드 -->
, (SELECT GET_CODE_NM('FIM017', CC.CVLCPT_PRCS_CD) FROM DUAL) AS CVLCPT_PRCS_NM <!-- 민원 처리 명 -->
, CC.CVLCPT_PRCS_CMPTN_DT <!-- 민원 처리 완료 일시 -->
, P.RTPYR_ID <!-- 납부자 ID -->
, P.RTPYR_NO <!-- 납부자 번호 -->
, P.RTPYR_NM <!-- 납부자 명 -->
, P.RTPYR_BRDT <!-- 납부자 생년월일 -->
, P.ZIP <!-- 우편번호 -->
, P.ADDR <!-- 주소 -->
, P.DTL_ADDR <!-- 상세 주소 -->
FROM TB_CRDN C
INNER JOIN TB_CRDN_ADI CA ON (C.CRDN_ID = CA.CRDN_ID)
INNER JOIN TB_VLTN_INFO VI ON (C.VLTN_ID = VI.VLTN_ID AND C.SGG_CD = VI.SGG_CD AND C.TASK_SE_CD = VI.TASK_SE_CD)
LEFT OUTER JOIN TB_CRDN_CVLCPT CC ON (C.LINK_ID = CC.CVLCPT_LINK_ID AND C.CVLCPT_LINK_YN = 'Y' AND CC.DEL_YN = 'N')
LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
WHERE C.SGG_CD = #{sggCd} <!-- 시군구 코드 -->
AND C.TASK_SE_CD = #{taskSeCd} <!-- 업무 구분 코드 -->
AND (CC.CVLCPT_PRCS_CD IS NULL OR CC.CVLCPT_PRCS_CD <![CDATA[ <> ]]> '00') <!-- 민원 처리 코드 -->
<if test="crdnIDs != null">
AND C.CRDN_ID IN (
<foreach collection="crdnIDs" item="crdnId" separator=","> #{crdnId} </foreach> <!-- 단속 IDs -->
)
</if>
<if test="crdnId != null">
AND C.CRDN_ID = #{crdnId} <!-- 단속 ID -->
</if>
<choose>
<when test="taskSeCd == 'BPV' or taskSeCd == 'PVS'">
AND C.CRDN_STTS_CD BETWEEN '21' AND '41' <!-- 단속 상태 코드 -->
</when>
<otherwise>
AND C.CRDN_STTS_CD BETWEEN '21' AND '22' <!-- 단속 상태 코드 -->
</otherwise>
</choose>
<if test="schCrdnYmdFrom != null">
AND C.CRDN_YMD <![CDATA[ >= ]]> #{schCrdnYmdFrom} <!-- 단속 일자 시작 -->
</if>
<if test="schCrdnYmdTo != null">
AND C.CRDN_YMD <![CDATA[ <= ]]> #{schCrdnYmdTo} <!-- 단속 일자 종료 -->
</if>
<if test="schVltnCd != null">
AND VI.VLTN_CD = #{schVltnCd} <!-- 위반 코드 -->
</if>
<if test="schVhrno != null">
AND C.VHRNO = #{schVhrno} <!-- 차량번호 -->
</if>
<if test="schRtpyrNm != null">
AND P.RTPYR_NM = #{schRtpyrNm} <!-- 납부자 명 -->
</if>
<choose>
<when test="schDetailCrdnRegDtOpt == 'regDt'">
<if test="schDetailCrdnRegDtFrom != null">
AND SUBSTR(C.REG_DT,1,8) <![CDATA[ >= ]]> #{schDetailCrdnRegDtFrom} <!-- 등록 일자 시작 -->
</if>
<if test="schDetailCrdnRegDtTo != null">
AND SUBSTR(C.REG_DT,1,8) <![CDATA[ <= ]]> #{schDetailCrdnRegDtTo} <!-- 등록 일자 종료 -->
</if>
</when>
<when test="schDetailCrdnRegDtOpt == 'mdfcnDt'">
<if test="schDetailCrdnRegDtFrom != null">
AND SUBSTR(C.MDFCN_DT,1,8) <![CDATA[ >= ]]> #{schDetailCrdnRegDtFrom} <!-- 수정 일자 시작 -->
</if>
<if test="schDetailCrdnRegDtTo != null">
AND SUBSTR(C.MDFCN_DT,1,8) <![CDATA[ <= ]]> #{schDetailCrdnRegDtTo} <!-- 수정 일자 종료 -->
</if>
</when>
<otherwise>
</otherwise>
</choose>
<choose>
<when test="schDetailCrdnRgtrOpt == 'rgtr'">
<if test="schDetailCrdnRgtrCd != null">
AND C.RGTR = #{schDetailCrdnRgtrCd} <!-- 등록자 코드 -->
</if>
</when>
<when test="schDetailCrdnRgtrOpt == 'mdfr'">
<if test="schDetailCrdnRgtrCd != null">
AND C.MDFR = #{schDetailCrdnRgtrCd} <!-- 수정자 코드 -->
</if>
</when>
<otherwise>
</otherwise>
</choose>
AND C.DEL_YN = 'N' <!-- 삭제 여부 -->
<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 == 'crdnYmd'"> C.CRDN_YMD </when>
<when test="by == 'vhrno'"> C.VHRNO </when>
<when test="by == 'crdnStdgNm'"> C.CRDN_STDG_NM </when>
<when test="by == 'crdnPlc'"> C.CRDN_PLC </when>
<when test="by == 'ffnlgCrdnAmt'"> C.FFNLG_CRDN_AMT </when>
<when test="by == 'ffnlgAmt'"> C.FFNLG_AMT </when>
<when test="by == 'advntceAmt'"> C.ADVNTCE_AMT </when>
<when test="by == 'crdnSttsCd'"> C.CRDN_STTS_CD </when>
<when test="by == 'crdnSeCd'"> CA.CRDN_SE_CD </when>
<when test="by == 'dtlCrdnPlc'"> CA.DTL_CRDN_PLC </when>
<when test="by == 'crdnSpareaCd'"> CA.CRDN_SPAREA_CD </when>
<when test="by == 'crdnBgngTm'"> CA.CRDN_BGNG_TM </when>
<when test="by == 'crdnEndTm'"> CA.CRDN_END_TM </when>
<when test="by == 'crdnSn'"> CA.CRDN_SN </when>
<when test="by == 'useFuelCd'"> CA.USE_FUEL_CD </when>
<when test="by == 'ffnlgCarmdlCd'"> CA.FFNLG_CARMDL_CD </when>
<when test="by == 'parkngPsbltyRsltCd'"> CA.PARKNG_PSBLTY_RSLT_CD </when>
<when test="by == 'vltnNmtm'"> CA.VLTN_NMTM </when>
<when test="by == 'ovtimeYn'"> CA.OVTIME_YN </when>
<when test="by == 'vltnArtcl'"> VI.VLTN_ARTCL </when>
<when test="by == 'rtpyrNm'"> P.RTPYR_NM </when>
<when test="by == 'rtpyrNo'"> P.RTPYR_NO </when>
<when test="by == 'rtpyrBrdt'"> P.RTPYR_BRDT </when>
<when test="by == 'cvlcptAplyNo'"> CC.CVLCPT_APLY_NO </when>
<when test="by == 'cvlcptRcptNo'"> CC.CVLCPT_RCPT_NO </when>
<when test="by == 'cvlcptRcptYmd'"> CC.CVLCPT_RCPT_YMD </when>
<when test="by == 'cvlcptPrcsPicNm'"> CC.CVLCPT_PRCS_PIC_NM </when>
<when test="by == 'cvlcptPrcsCd'"> CC.CVLCPT_PRCS_CD </when>
<when test="by == 'levyExclYmd'"> LE.LEVY_EXCL_YMD </when>
<when test="by == 'levyExclRsnCd'"> LE.LEVY_EXCL_RSN_CD </when>
</choose>
<include refid="dynamicSearch.center" />#{term}<include refid="dynamicSearch.end" />
</when>
<otherwise>
</otherwise>
</choose>
</if>
</sql>
<select id="selectAdvntceSndngTrgtList" parameterType="map" resultType="dataobject">/* 사전통지 발송 대상 목록 조회(sndngMapper.selectAdvntceSndngTrgtList) */
<include refid="utility.paging-prefix" />
SELECT C.CRDN_ID <!-- 단속 ID -->
<include refid="selectAdvntceSndngTrgt" />
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" />
</select>
<select id="selectAdvntceSndngTrgts" parameterType="map" resultType="dataobject">/* 사전통지 발송 대상 객체 가져오기(sndngMapper.selectAdvntceSndngTrgts) */
SELECT COUNT(*) OVER() AS TNOCS <!-- 총건수 -->
, SUM(C.FFNLG_AMT) OVER() AS GRAMT <!-- 총금액 -->
, C.CRDN_ID <!-- 단속 ID -->
<include refid="selectAdvntceSndngTrgt" />
<include refid="selectWrngTrgt" />
<include refid="utility.orderBy" />
</select>
@ -692,107 +499,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
FROM TB_SNDNG
WHERE SNDNG_ID LIKE CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), '%')
</selectKey>
INSERT
INTO TB_SNDNG (
SNDNG_ID <!-- 발송 ID -->
, SGG_CD <!-- 시군구 코드 -->
, DEPT_CD <!-- 부서 코드 -->
, TASK_SE_CD <!-- 업무 구분 코드 -->
, SNDNG_REG_SE_CD <!-- 발송 등록 구분 코드 -->
, SNDNG_SE_CD <!-- 발송 구분 코드 -->
, VLTN_ID <!-- 위반 ID -->
, LEVY_BGNG_YMD <!-- 부과 시작 일자 -->
, LEVY_END_YMD <!-- 부과 종료 일자 -->
, SNDNG_YMD <!-- 발송 일자 -->
, DUDT_YMD <!-- 납기 일자 -->
, TTL_NM <!-- 제목 명 -->
, DOC_NO <!-- 문서 번호 -->
, ETC_CN <!-- 기타 내용 -->
, TNOCS <!-- 총건수 -->
, GRAMT <!-- 총금액 -->
, CON_KEY <!-- 외부연계식별키 -->
, DIV_KB <!-- 취급 구분 -->
, EPOST_NOTICE_ID <!-- 전자우편 안내문 ID -->
, SNDNG_STTS_CD <!-- 발송 상태 코드 -->
, RESND_YN <!-- 재발송 여부 -->
, DEL_YN <!-- 삭제 여부 -->
, REG_DT <!-- 등록 일시 -->
, RGTR <!-- 등록자 -->
, MDFCN_DT <!-- 수정 일시 -->
, MDFR <!-- 수정자 -->
)
VALUES (
#{sndng.sndngId} <!-- 발송 ID -->
, #{sndng.sggCd} <!-- 시군구 코드 -->
, #{sndng.deptCd} <!-- 부서 코드 -->
, #{sndng.taskSeCd} <!-- 업무 구분 코드 -->
, #{sndng.sndngRegSeCd} <!-- 발송 등록 구분 코드 -->
, #{sndng.sndngSeCd} <!-- 발송 구분 코드 -->
, (SELECT VLTN_ID FROM TB_VLTN_INFO
WHERE SGG_CD=#{sndng.sggCd} AND TASK_SE_CD=#{sndng.taskSeCd} AND VLTN_CD=#{sndng.vltnCd}) <!-- 위반 ID -->
, #{sndng.levyBgngYmd} <!-- 부과 시작 일자 -->
, #{sndng.levyEndYmd} <!-- 부과 종료 일자 -->
, #{sndng.sndngYmd} <!-- 발송 일자 -->
, #{sndng.dudtYmd} <!-- 납기 일자 -->
, #{sndng.ttlNm} <!-- 제목 명 -->
, #{sndng.docNo} <!-- 문서 번호 -->
, #{sndng.etcCn} <!-- 기타 내용 -->
, #{sndng.tnocs} <!-- 총건수 -->
, #{sndng.gramt} <!-- 총금액 -->
, #{sndng.conKey} <!-- 외부연계식별키 -->
, #{sndng.divKb} <!-- 취급 구분 -->
, #{sndng.epostNoticeId} <!-- 전자우편 안내문 ID -->
, #{sndng.sndngSttsCd} <!-- 발송 상태 코드 -->
, #{sndng.resndYn} <!-- 재발송 여부 -->
, #{sndng.delYn} <!-- 삭제 여부 -->
, <include refid="utility.now" /> <!-- 등록 일시 -->
, #{sndng.createdBy} <!-- 등록자 -->
, <include refid="utility.now" /> <!-- 수정 일시 -->
, #{sndng.modifiedBy} <!-- 수정자 -->
)
</insert>
<update id="updateSndng" parameterType="map">/* 발송 대장 수정(sndngMapper.updateSndng) */
UPDATE TB_SNDNG
SET SNDNG_REG_SE_CD = #{sndng.sndngRegSeCd} <!-- 발송 등록 구분 코드 -->
, SNDNG_SE_CD = #{sndng.sndngSeCd} <!-- 발송 구분 코드 -->
, LEVY_BGNG_YMD = #{sndng.levyBgngYmd} <!-- 부과 시작 일자 -->
, LEVY_END_YMD = #{sndng.levyEndYmd} <!-- 부과 종료 일자 -->
, VLTN_ID = #{sndng.vltnId} <!-- 위반 ID -->
, SNDNG_YMD = #{sndng.sndngYmd} <!-- 발송 일자 -->
, DUDT_YMD = #{sndng.dudtYmd} <!-- 납기 일자 -->
, TTL_NM = #{sndng.ttlNm} <!-- 제목 명 -->
, DOC_NO = #{sndng.docNo} <!-- 문서 번호 -->
, ETC_CN = #{sndng.etcCn} <!-- 기타 내용 -->
, TNOCS = #{sndng.tnocs} <!-- 총건수 -->
, GRAMT = #{sndng.gramt} <!-- 총금액 -->
, CON_KEY = #{sndng.conKey} <!-- 외부연계식별키 -->
, DIV_KB = #{sndng.divKb} <!-- 취급 구분 -->
, EPOST_NOTICE_ID = #{sndng.epostNoticeId} <!-- 전자우편 안내문 ID -->
, SNDNG_STTS_CD = #{sndng.sndngSttsCd} <!-- 발송 상태 코드 -->
, RESND_YN = #{sndng.resndYn} <!-- 재발송 여부 -->
, 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' <!-- 삭제 여부 -->
, DEL_DT = <include refid="utility.now" /> <!-- 삭제 일시 -->
, DLTR = #{sndng.modifiedBy} <!-- 삭제자 -->
, DEL_RSN = #{sndng.delRsn} <!-- 삭제 사유 -->
WHERE SNDNG_ID = #{sndng.sndngId} <!-- 발송 ID -->
AND DEL_YN = 'N'
</update>
<sql id="selectSndngDtl">
SELECT SD.SNDNG_DTL_ID <!-- 발송 상세 ID -->
, SD.SVBTC_ID <!-- 공시송달 ID -->
@ -918,6 +624,316 @@
<include refid="utility.orderBy" />
</select>
<sql id="selectAdvntceSndngTrgt">
, C.SGG_CD <!-- 시군구 코드 -->
, C.TASK_SE_CD <!-- 업무 구분 코드 -->
, (SELECT GET_CODE_NM('FIM054', C.TASK_SE_CD) FROM DUAL) AS TASK_SE_NM <!-- 업무 구분 명 -->
, C.CRDN_INPT_SE_CD <!-- 단속 입력 구분 코드 -->
, (SELECT GET_CODE_NM('FIM003', C.CRDN_INPT_SE_CD) FROM DUAL) AS CRDN_INPT_SE_NM <!-- 단속 입력 구분 명 -->
, C.CRDN_YMD <!-- 단속 일자 -->
, C.CRDN_TM <!-- 단속 시각 -->
, (CONCAT(C.CRDN_YMD, C.CRDN_TM)) AS CRDN_YMD_TM <!-- 단속 일시 -->
, C.VHRNO <!-- 차량번호 -->
, C.CRDN_STDG_NM <!-- 단속 법정동 명 -->
, C.CRDN_ROAD_NM <!-- 단속 도로 명 -->
, C.CRDN_PLC <!-- 단속 장소 -->
, C.FFNLG_CRDN_AMT <!-- 과태료 단속 금액 -->
, C.FFNLG_AMT <!-- 과태료 금액 -->
, C.ADVNTCE_AMT <!-- 사전통지 금액 -->
, C.CRDN_STTS_CD <!-- 단속 상태 코드 -->
, (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM <!-- 단속 상태 명 -->
, C.REG_DT <!-- 등록 일시 -->
, C.RGTR <!-- 등록자 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = C.RGTR) AS RGTR_NM <!-- 등록자 명 -->
, C.MDFCN_DT <!-- 수정 일시 -->
, C.MDFR <!-- 수정자 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = C.MDFR) AS MDFR_NM <!-- 수정자 명 -->
, CA.CRDN_SE_CD <!-- 단속 구분 코드 -->
, (SELECT GET_CODE_NM('FIM002', CA.CRDN_SE_CD) FROM DUAL) AS CRDN_SE_NM <!-- 단속 구분 명 -->
, CA.DTL_CRDN_PLC <!-- 상세 단속 장소 -->
, CA.CRDN_SPAREA_CD <!-- 단속 특별구역 코드 -->
, (SELECT GET_CODE_NM('FIM007', CA.CRDN_SPAREA_CD) FROM DUAL) AS CRDN_SPAREA_NM <!-- 단속 특별구역 명 -->
, CA.CRDN_BGNG_TM <!-- 단속 시작 시각 -->
, CA.CRDN_END_TM <!-- 단속 종료 시각 -->
, CA.CRDN_SN <!-- 단속 일련번호 -->
, CA.USE_FUEL_CD <!-- 사용 연료 코드 -->
, (SELECT GET_CODE_NM('LVS005', CA.USE_FUEL_CD) FROM DUAL) AS USE_FUEL_NM <!-- 사용 연료 명 -->
, CA.FFNLG_CARMDL_CD <!-- 과태료 차종 코드 -->
, (SELECT GET_CODE_NM('FIM009', CA.FFNLG_CARMDL_CD) FROM DUAL) AS FFNLG_CARMDL_NM <!-- 과태료 차종 명 -->
, CA.PARKNG_PSBLTY_RSLT_CD <!-- 주차 가능 결과 코드 -->
, (SELECT GET_CODE_NM('FIM034', CA.PARKNG_PSBLTY_RSLT_CD) FROM DUAL) AS PARKNG_PSBLTY_RSLT_NM<!-- 주차 가능 결과 명 -->
, CA.VLTN_NMTM <!-- 위반 횟수 -->
, CA.OVTIME_YN <!-- 시간외 여부 -->
, VI.VLTN_ID <!-- 위반 ID -->
, VI.VLTN_CD <!-- 위반 코드 -->
, VI.VLTN_ARTCL <!-- 위반 항목 -->
, CC.CVLCPT_LINK_ID <!-- 민원 연계 ID -->
, CC.CVLCPT_RCPT_YMD <!-- 민원 접수 일자 -->
, CC.CVLCPT_APLY_NO <!-- 민원 신청 번호 -->
, CC.CVLCPT_RCPT_NO <!-- 민원 접수 번호 -->
, CC.CVLCPT_APLCNT_NM <!-- 민원 신청인 명 -->
, CC.CVLCPT_APLY_DT <!-- 민원 신청 일시 -->
, CC.CVLCPT_PRCS_PIC_NM <!-- 민원 처리 담당자 명 -->
, CC.CVLCPT_PRCS_CD <!-- 민원 처리 코드 -->
, (SELECT GET_CODE_NM('FIM017', CC.CVLCPT_PRCS_CD) FROM DUAL) AS CVLCPT_PRCS_NM <!-- 민원 처리 명 -->
, CC.CVLCPT_PRCS_CMPTN_DT <!-- 민원 처리 완료 일시 -->
, P.RTPYR_ID <!-- 납부자 ID -->
, P.RTPYR_NO <!-- 납부자 번호 -->
, P.RTPYR_NM <!-- 납부자 명 -->
, P.RTPYR_BRDT <!-- 납부자 생년월일 -->
, P.ZIP <!-- 우편번호 -->
, P.ADDR <!-- 주소 -->
, P.DTL_ADDR <!-- 상세 주소 -->
FROM TB_CRDN C
INNER JOIN TB_CRDN_ADI CA ON (C.CRDN_ID = CA.CRDN_ID)
INNER JOIN TB_VLTN_INFO VI ON (C.VLTN_ID = VI.VLTN_ID AND C.SGG_CD = VI.SGG_CD AND C.TASK_SE_CD = VI.TASK_SE_CD)
LEFT OUTER JOIN TB_CRDN_CVLCPT CC ON (C.LINK_ID = CC.CVLCPT_LINK_ID AND C.CVLCPT_LINK_YN = 'Y' AND CC.DEL_YN = 'N')
LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
WHERE C.SGG_CD = #{sggCd} <!-- 시군구 코드 -->
AND C.TASK_SE_CD = #{taskSeCd} <!-- 업무 구분 코드 -->
AND (CC.CVLCPT_PRCS_CD IS NULL OR CC.CVLCPT_PRCS_CD <![CDATA[ <> ]]> '00') <!-- 민원 처리 코드 -->
<if test="crdnIDs != null">
AND C.CRDN_ID IN (
<foreach collection="crdnIDs" item="crdnId" separator=","> #{crdnId} </foreach> <!-- 단속 IDs -->
)
</if>
<if test="crdnId != null">
AND C.CRDN_ID = #{crdnId} <!-- 단속 ID -->
</if>
<choose>
<when test="taskSeCd == 'BPV' or taskSeCd == 'PVS'">
AND C.CRDN_STTS_CD BETWEEN '21' AND '41' <!-- 단속 상태 코드 -->
</when>
<otherwise>
AND C.CRDN_STTS_CD BETWEEN '21' AND '22' <!-- 단속 상태 코드 -->
</otherwise>
</choose>
<if test="schCrdnYmdFrom != null">
AND C.CRDN_YMD <![CDATA[ >= ]]> #{schCrdnYmdFrom} <!-- 단속 일자 시작 -->
</if>
<if test="schCrdnYmdTo != null">
AND C.CRDN_YMD <![CDATA[ <= ]]> #{schCrdnYmdTo} <!-- 단속 일자 종료 -->
</if>
<if test="schVltnCd != null">
AND VI.VLTN_CD = #{schVltnCd} <!-- 위반 코드 -->
</if>
<if test="schVhrno != null">
AND C.VHRNO = #{schVhrno} <!-- 차량번호 -->
</if>
<if test="schRtpyrNm != null">
AND P.RTPYR_NM = #{schRtpyrNm} <!-- 납부자 명 -->
</if>
<choose>
<when test="schDetailCrdnRegDtOpt == 'regDt'">
<if test="schDetailCrdnRegDtFrom != null">
AND SUBSTR(C.REG_DT,1,8) <![CDATA[ >= ]]> #{schDetailCrdnRegDtFrom} <!-- 등록 일자 시작 -->
</if>
<if test="schDetailCrdnRegDtTo != null">
AND SUBSTR(C.REG_DT,1,8) <![CDATA[ <= ]]> #{schDetailCrdnRegDtTo} <!-- 등록 일자 종료 -->
</if>
</when>
<when test="schDetailCrdnRegDtOpt == 'mdfcnDt'">
<if test="schDetailCrdnRegDtFrom != null">
AND SUBSTR(C.MDFCN_DT,1,8) <![CDATA[ >= ]]> #{schDetailCrdnRegDtFrom} <!-- 수정 일자 시작 -->
</if>
<if test="schDetailCrdnRegDtTo != null">
AND SUBSTR(C.MDFCN_DT,1,8) <![CDATA[ <= ]]> #{schDetailCrdnRegDtTo} <!-- 수정 일자 종료 -->
</if>
</when>
<otherwise>
</otherwise>
</choose>
<choose>
<when test="schDetailCrdnRgtrOpt == 'rgtr'">
<if test="schDetailCrdnRgtrCd != null">
AND C.RGTR = #{schDetailCrdnRgtrCd} <!-- 등록자 코드 -->
</if>
</when>
<when test="schDetailCrdnRgtrOpt == 'mdfr'">
<if test="schDetailCrdnRgtrCd != null">
AND C.MDFR = #{schDetailCrdnRgtrCd} <!-- 수정자 코드 -->
</if>
</when>
<otherwise>
</otherwise>
</choose>
AND C.DEL_YN = 'N' <!-- 삭제 여부 -->
<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 == 'crdnYmd'"> C.CRDN_YMD </when>
<when test="by == 'vhrno'"> C.VHRNO </when>
<when test="by == 'crdnStdgNm'"> C.CRDN_STDG_NM </when>
<when test="by == 'crdnPlc'"> C.CRDN_PLC </when>
<when test="by == 'ffnlgCrdnAmt'"> C.FFNLG_CRDN_AMT </when>
<when test="by == 'ffnlgAmt'"> C.FFNLG_AMT </when>
<when test="by == 'advntceAmt'"> C.ADVNTCE_AMT </when>
<when test="by == 'crdnSttsCd'"> C.CRDN_STTS_CD </when>
<when test="by == 'crdnSeCd'"> CA.CRDN_SE_CD </when>
<when test="by == 'dtlCrdnPlc'"> CA.DTL_CRDN_PLC </when>
<when test="by == 'crdnSpareaCd'"> CA.CRDN_SPAREA_CD </when>
<when test="by == 'crdnBgngTm'"> CA.CRDN_BGNG_TM </when>
<when test="by == 'crdnEndTm'"> CA.CRDN_END_TM </when>
<when test="by == 'crdnSn'"> CA.CRDN_SN </when>
<when test="by == 'useFuelCd'"> CA.USE_FUEL_CD </when>
<when test="by == 'ffnlgCarmdlCd'"> CA.FFNLG_CARMDL_CD </when>
<when test="by == 'parkngPsbltyRsltCd'"> CA.PARKNG_PSBLTY_RSLT_CD </when>
<when test="by == 'vltnNmtm'"> CA.VLTN_NMTM </when>
<when test="by == 'ovtimeYn'"> CA.OVTIME_YN </when>
<when test="by == 'vltnArtcl'"> VI.VLTN_ARTCL </when>
<when test="by == 'rtpyrNm'"> P.RTPYR_NM </when>
<when test="by == 'rtpyrNo'"> P.RTPYR_NO </when>
<when test="by == 'rtpyrBrdt'"> P.RTPYR_BRDT </when>
<when test="by == 'cvlcptAplyNo'"> CC.CVLCPT_APLY_NO </when>
<when test="by == 'cvlcptRcptNo'"> CC.CVLCPT_RCPT_NO </when>
<when test="by == 'cvlcptRcptYmd'"> CC.CVLCPT_RCPT_YMD </when>
<when test="by == 'cvlcptPrcsPicNm'"> CC.CVLCPT_PRCS_PIC_NM </when>
<when test="by == 'cvlcptPrcsCd'"> CC.CVLCPT_PRCS_CD </when>
<when test="by == 'levyExclYmd'"> LE.LEVY_EXCL_YMD </when>
<when test="by == 'levyExclRsnCd'"> LE.LEVY_EXCL_RSN_CD </when>
</choose>
<include refid="dynamicSearch.center" />#{term}<include refid="dynamicSearch.end" />
</when>
<otherwise>
</otherwise>
</choose>
</if>
</sql>
<select id="selectAdvntceSndngTrgtList" parameterType="map" resultType="dataobject">/* 사전통지 발송 대상 목록 조회(sndngMapper.selectAdvntceSndngTrgtList) */
<include refid="utility.paging-prefix" />
SELECT C.CRDN_ID <!-- 단속 ID -->
<include refid="selectAdvntceSndngTrgt" />
<include refid="utility.orderBy" />
<include refid="utility.paging-suffix" />
</select>
<select id="selectAdvntceSndngTrgts" parameterType="map" resultType="dataobject">/* 사전통지 발송 대상 객체 가져오기(sndngMapper.selectAdvntceSndngTrgts) */
SELECT COUNT(*) OVER() AS TNOCS <!-- 총건수 -->
, SUM(C.FFNLG_AMT) OVER() AS GRAMT <!-- 총금액 -->
, C.CRDN_ID <!-- 단속 ID -->
<include refid="selectAdvntceSndngTrgt" />
<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
FROM TB_SNDNG
WHERE SNDNG_ID LIKE CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), '%')
</selectKey>
INSERT
INTO TB_SNDNG (
SNDNG_ID <!-- 발송 ID -->
, SGG_CD <!-- 시군구 코드 -->
, DEPT_CD <!-- 부서 코드 -->
, TASK_SE_CD <!-- 업무 구분 코드 -->
, SNDNG_REG_SE_CD <!-- 발송 등록 구분 코드 -->
, SNDNG_SE_CD <!-- 발송 구분 코드 -->
, VLTN_ID <!-- 위반 ID -->
, LEVY_BGNG_YMD <!-- 부과 시작 일자 -->
, LEVY_END_YMD <!-- 부과 종료 일자 -->
, SNDNG_YMD <!-- 발송 일자 -->
, DUDT_YMD <!-- 납기 일자 -->
, TTL_NM <!-- 제목 명 -->
, DOC_NO <!-- 문서 번호 -->
, ETC_CN <!-- 기타 내용 -->
, TNOCS <!-- 총건수 -->
, GRAMT <!-- 총금액 -->
, CON_KEY <!-- 외부연계식별키 -->
, DIV_KB <!-- 취급 구분 -->
, EPOST_NOTICE_ID <!-- 전자우편 안내문 ID -->
, SNDNG_STTS_CD <!-- 발송 상태 코드 -->
, RESND_YN <!-- 재발송 여부 -->
, DEL_YN <!-- 삭제 여부 -->
, REG_DT <!-- 등록 일시 -->
, RGTR <!-- 등록자 -->
, MDFCN_DT <!-- 수정 일시 -->
, MDFR <!-- 수정자 -->
)
VALUES (
#{sndng.sndngId} <!-- 발송 ID -->
, #{sndng.sggCd} <!-- 시군구 코드 -->
, #{sndng.deptCd} <!-- 부서 코드 -->
, #{sndng.taskSeCd} <!-- 업무 구분 코드 -->
, #{sndng.sndngRegSeCd} <!-- 발송 등록 구분 코드 -->
, #{sndng.sndngSeCd} <!-- 발송 구분 코드 -->
, (SELECT VLTN_ID FROM TB_VLTN_INFO
WHERE SGG_CD=#{sndng.sggCd} AND TASK_SE_CD=#{sndng.taskSeCd} AND VLTN_CD=#{sndng.vltnCd}) <!-- 위반 ID -->
, #{sndng.levyBgngYmd} <!-- 부과 시작 일자 -->
, #{sndng.levyEndYmd} <!-- 부과 종료 일자 -->
, #{sndng.sndngYmd} <!-- 발송 일자 -->
, #{sndng.dudtYmd} <!-- 납기 일자 -->
, #{sndng.ttlNm} <!-- 제목 명 -->
, #{sndng.docNo} <!-- 문서 번호 -->
, #{sndng.etcCn} <!-- 기타 내용 -->
, #{sndng.tnocs} <!-- 총건수 -->
, #{sndng.gramt} <!-- 총금액 -->
, #{sndng.conKey} <!-- 외부연계식별키 -->
, #{sndng.divKb} <!-- 취급 구분 -->
, #{sndng.epostNoticeId} <!-- 전자우편 안내문 ID -->
, #{sndng.sndngSttsCd} <!-- 발송 상태 코드 -->
, #{sndng.resndYn} <!-- 재발송 여부 -->
, #{sndng.delYn} <!-- 삭제 여부 -->
, <include refid="utility.now" /> <!-- 등록 일시 -->
, #{sndng.createdBy} <!-- 등록자 -->
, <include refid="utility.now" /> <!-- 수정 일시 -->
, #{sndng.modifiedBy} <!-- 수정자 -->
)
</insert>
<update id="updateSndng" parameterType="map">/* 발송 대장 수정(sndngMapper.updateSndng) */
UPDATE TB_SNDNG
SET SNDNG_REG_SE_CD = #{sndng.sndngRegSeCd} <!-- 발송 등록 구분 코드 -->
, SNDNG_SE_CD = #{sndng.sndngSeCd} <!-- 발송 구분 코드 -->
, LEVY_BGNG_YMD = #{sndng.levyBgngYmd} <!-- 부과 시작 일자 -->
, LEVY_END_YMD = #{sndng.levyEndYmd} <!-- 부과 종료 일자 -->
, VLTN_ID = #{sndng.vltnId} <!-- 위반 ID -->
, SNDNG_YMD = #{sndng.sndngYmd} <!-- 발송 일자 -->
, DUDT_YMD = #{sndng.dudtYmd} <!-- 납기 일자 -->
, TTL_NM = #{sndng.ttlNm} <!-- 제목 명 -->
, DOC_NO = #{sndng.docNo} <!-- 문서 번호 -->
, ETC_CN = #{sndng.etcCn} <!-- 기타 내용 -->
, TNOCS = #{sndng.tnocs} <!-- 총건수 -->
, GRAMT = #{sndng.gramt} <!-- 총금액 -->
, CON_KEY = #{sndng.conKey} <!-- 외부연계식별키 -->
, DIV_KB = #{sndng.divKb} <!-- 취급 구분 -->
, EPOST_NOTICE_ID = #{sndng.epostNoticeId} <!-- 전자우편 안내문 ID -->
, SNDNG_STTS_CD = #{sndng.sndngSttsCd} <!-- 발송 상태 코드 -->
, RESND_YN = #{sndng.resndYn} <!-- 재발송 여부 -->
, 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' <!-- 삭제 여부 -->
, DEL_DT = <include refid="utility.now" /> <!-- 삭제 일시 -->
, DLTR = #{sndng.modifiedBy} <!-- 삭제자 -->
, DEL_RSN = #{sndng.delRsn} <!-- 삭제 사유 -->
WHERE SNDNG_ID = #{sndng.sndngId} <!-- 발송 ID -->
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 -->

@ -86,9 +86,6 @@
</if>
<if test="sndngId != null">
AND SD.SNDNG_ID = #{sndngId} <!-- 발송 ID -->
</if>
<if test="crdnId != null">
AND SD.CRDN_ID = #{crdnId} <!-- 단속 ID -->
</if>
<if test="delYn != null">
AND SV.DEL_YN = #{delYn} <!-- 삭제 여부 -->
@ -169,6 +166,18 @@
<if test="svbtcId != null">
AND SV.SVBTC_ID = #{svbtcId} <!-- 공시송달 ID -->
</if>
<if test="sndngDtlId != null">
AND SD.SNDNG_DTL_ID = #{sndngDtlId} <!-- 발송 상세 ID -->
</if>
<if test="sndngId != null">
AND SD.SNDNG_ID = #{sndngId} <!-- 발송 ID -->
</if>
<if test="crdnId != null">
AND SD.CRDN_ID = #{crdnId} <!-- 단속 ID -->
</if>
<if test="delYn != null">
AND SV.DEL_YN = #{delYn} <!-- 삭제 여부 -->
</if>
</where>
<include refid="utility.orderBy" />
</select>

@ -155,10 +155,10 @@
</div>
<span class="container-window-btn-right">
<!-- 업무 버튼 -->
<button type="button" class="btn btn-primary w-px-120" id="btnWrngSndngTrgtInfo--${pageName}" title="발송대상 등록" onclick="${infoPrefix}Info${pageName}();">
<button type="button" class="btn btn-primary w-px-120" id="btnWrngTrgtInfo--${pageName}" title="발송대상 등록" onclick="fnWrngTrgtInfo${pageName}();">
발송대상 등록
</button>
<button type="button" class="btn btn-primary w-px-120" id="btnLevyExclInfo--${pageName}" title="계고 정보" onclick="levyExclInfo${pageName}();">
<button type="button" class="btn btn-primary w-px-120" id="btnLevyExclInfo--${pageName}" title="계고 정보" onclick="fnLevyExclInfo${pageName}();">
계고 정보
</button>
</span>
@ -292,13 +292,16 @@
* DatasetControl
**************************************************************************/
var ${pageName}Control = new DatasetControl({
prefix : "wrngSndngTrgt"
prefix : "wrngTrgt"
, prefixName : "계고장 발송 대상"
, infoSize : "xxl"
, keymapper : info => info ? info.CRDN_ID : ""
, dataGetter : obj => obj.wrngSndngTrgtList
, dataGetter : obj => obj.wrngTrgtList
, appendData : true
, tableRenderComplete : false // dataTables 에 자료 추가 완료 여부
, urls : {
getInfo : wctx.url("/sprt/sprt02/010/main.do") // 개별총정보
}
, formats : {
CVLCPT_RCPT_YMD : dateFormat
, LEVY_EXCL_YMD : dateFormat
@ -400,7 +403,7 @@
}
// 계고장 발송 등록 dialog -> callback 추가
getInfo${pageName} = (params) => {
getWrngTrgtInfo${pageName} = (params) => {
if (!params) return;
ajax.get({
@ -408,7 +411,7 @@
, data : params || {}
, success : resp => {
dialog.open({
id : "wrngSndngTrgtDtlDialog"
id : "wrngTrgtDtlDialog"
, title : ${pageName}Control.prefixName + " 정보"
, content : resp
, size : "xl"
@ -431,7 +434,7 @@
, title : "부과제외 정보"
, content : resp
, size : "lg"
, onClose : () => { ${pageName}Control.load(${pageName}Control.query.pageNum); } // callback
, onClose : () => { ${pageName}Control.load(${pageName}Control.query.pageNum); } // callback
});
}
});
@ -556,7 +559,6 @@
// URL 설정
setURL${pageName} = (taskSeCd) => {
${pageName}Control.urls.load = wctx.url("/" + taskSeCd + ${pageName}PrefixUrl + "/010/list.do"); // 조회
${pageName}Control.urls.getInfo = wctx.url("/" + taskSeCd + "/sprt/sprt02/010/main.do"); // 개별총정보
}
/**************************************************************************
@ -599,17 +601,22 @@
}
// 계고장 발송 대상 등록 버튼 이벤트
${infoPrefix}Info${pageName} = () => {
fnWrngTrgtInfo${pageName} = () => {
let params = ${pageName}Fields.get();
params.callPurpose = "create";
params.sndngSeCd = "11"; // 발송 구분 코드 - 11 계고장
getInfo${pageName}(params);
if (params.taskSeCd == "DPV" && params.schVltnId == "05") {
params.sndngSeCd = "12"; // 발송 구분 코드 - 12 계고장 구형표지
} else {
params.sndngSeCd = "11"; // 발송 구분 코드 - 11 계고장
}
getWrngTrgtInfo${pageName}(params);
}
// 계고 수정 버튼 이벤트
levyExclInfo${pageName} = () => {
fnLevyExclInfo${pageName} = () => {
let levyExclId = ${pageName}Control.dataset.getValue("LEVY_EXCL_ID");
let levyExclSeCd = ${pageName}Control.dataset.getValue("LEVY_EXCL_SE_CD");

@ -167,12 +167,15 @@
* DatasetControl
**************************************************************************/
var ${pageName}Control = new DatasetControl({
prefix : "wrngSndngTrgtDtl"
prefix : "wrngTrgtDtl"
, prefixName : "계고장 발송 대상"
, keymapper : info => info ? info.CRDN_ID : ""
, dataGetter : obj => obj.wrngSndngTrgtDtlList
, dataGetter : obj => obj.wrngTrgtDtlList
, appendData : true
, tableRenderComplete : false // dataTables 에 자료 추가 완료 여부
, urls : {
getInfo : wctx.url("/sprt/sprt02/010/main.do") // 개별총정보
}
, formats : {
TNOCS : numberFormat
, GRAMT : numberFormat
@ -381,7 +384,7 @@
setForm${pageName}();
// Dataset 셋팅 - 화면이 열리면서 조회하는 경우 addData 하여 자료를 추가
${pageName}Control.addData(${wrngSndngTrgtDtl});
${pageName}Control.addData(${wrngTrgtDtl});
$("#tnocs--${pageName}").val(${pageName}Control.dataset.getValue("TNOCS")); // 총건수
$("#gramt--${pageName}").val(${pageName}Control.dataset.getValue("GRAMT")); // 총금액

@ -268,8 +268,8 @@
, data : params
, success : resp => {
dialog.open({
id : ${pageName}Control.prefixed("Dialog")
, title : "계고장 세부 내용"
id : "wrngSndngDtlDialog"
, title : "계고장 발송 상세 정보"
, content : resp
, size : ${pageName}Control.infoSize
});
@ -411,7 +411,8 @@
${pageName}Control.query = ${pageName}Fields.get();
${pageName}Control.query.fetchSize = FETCH_XS; // 한번에 조회되는 자료 건수 FETCH_XS = 30
${pageName}Control.query.sndngSeCd = "11"; // 발송 구분 코드 - 11 계고장
${pageName}Control.query.sndngSeCdFrom = "11"; // 발송 구분 코드 - 11 계고장
${pageName}Control.query.sndngSeCdTo = "12"; // 발송 구분 코드 - 12 계고장 구형표지
${pageName}Control.query.delYn = "N"; // 삭제 여부
${pageName}Control.load();

@ -118,11 +118,14 @@
**************************************************************************/
var ${pageName}Control = new DatasetControl({
prefix : "wrngSndngDtl"
, prefixName : "발송 상"
, prefixName : "계고장 발송 상세 정보"
, keymapper : info => info ? info.SNDNG_DTL_ID : ""
, dataGetter : obj => obj.wrngSndngDtlList
, appendData : true
, tableRenderComplete : false // dataTables 에 자료 추가 완료 여부
, urls : {
getInfo : wctx.url("/sprt/sprt02/010/main.do") // 개별총정보
}
, formats : {
SNDNG_YMD : dateFormat
, DUDT_YMD : dateFormat
@ -154,8 +157,6 @@
let key = item.data.SNDNG_DTL_ID;
$("#tbody--${pageName}").setCurrentRow(key);
${pageName}Control.urls.getInfo = wctx.url("/" + item.data.TASK_SE_CD + "/sprt/sprt02/010/main.do"); // 개별총정보
};
// 선택(체크) 변경 이벤트

Loading…
Cancel
Save