개별총정보 - 납부자 수정 추가.

main
jjh 1 year ago
parent ffd697507e
commit cb357efd0e

@ -43,6 +43,11 @@ public interface LevyExclMapper extends AbstractMapper {
* @return * @return
*/ */
default DataObject selectLevyExclInfo(ExclQuery req) { default DataObject selectLevyExclInfo(ExclQuery req) {
// 기본 정렬
if (req.getOrderBy() == null) {
req.setOrderBy("LE.LEVY_EXCL_ID DESC");
}
List<DataObject> levyExcls = selectLevyExcls(req); List<DataObject> levyExcls = selectLevyExcls(req);
return !levyExcls.isEmpty() ? levyExcls.get(0) : null; return !levyExcls.isEmpty() ? levyExcls.get(0) : null;

@ -41,6 +41,11 @@ public interface OpnnSbmsnMapper extends AbstractMapper {
* @return * @return
*/ */
default DataObject selectOpnnSbmsnInfo(ExclQuery req) { default DataObject selectOpnnSbmsnInfo(ExclQuery req) {
// 기본 정렬
if (req.getOrderBy() == null) {
req.setOrderBy("OS.OPNN_ID DESC");
}
List<DataObject> opnnSbmsns = selectOpnnSbmsns(req); List<DataObject> opnnSbmsns = selectOpnnSbmsns(req);
return !opnnSbmsns.isEmpty() ? opnnSbmsns.get(0) : null; return !opnnSbmsns.isEmpty() ? opnnSbmsns.get(0) : null;

@ -54,7 +54,7 @@ public class Excl01Bean extends AbstractComponent {
*/ */
public List<DataObject> getLevyExcls(ExclQuery req) { public List<DataObject> getLevyExcls(ExclQuery req) {
if (req.getOrderBy() == null) { if (req.getOrderBy() == null) {
req.setOrderBy("REG_DT DESC, LEVY_EXCL_ID DESC"); req.setOrderBy("LE.REG_DT DESC, LE.LEVY_EXCL_ID DESC");
} }
return levyExclMapper.selectLevyExcls(req); return levyExclMapper.selectLevyExcls(req);

@ -67,7 +67,7 @@ public class Excl02Bean extends AbstractComponent {
*/ */
public List<DataObject> getOpnnSbmsns(ExclQuery req) { public List<DataObject> getOpnnSbmsns(ExclQuery req) {
if (req.getOrderBy() == null) { if (req.getOrderBy() == null) {
req.setOrderBy("REG_DT DESC, OPNN_ID DESC"); req.setOrderBy("OS.REG_DT DESC, OS.OPNN_ID DESC");
} }
return opnnSbmsnMapper.selectOpnnSbmsns(req); return opnnSbmsnMapper.selectOpnnSbmsns(req);

@ -63,7 +63,7 @@ public class Excl03Bean extends AbstractComponent {
*/ */
public List<DataObject> getCrdnReRegs(ExclQuery req) { public List<DataObject> getCrdnReRegs(ExclQuery req) {
if (req.getOrderBy() == null) { if (req.getOrderBy() == null) {
req.setOrderBy("REG_DT DESC, RE_REG_ID DESC"); req.setOrderBy("CRR.REG_DT DESC, CRR.RE_REG_ID DESC");
} }
return crdnReRegMapper.selectCrdnReRegs(req); return crdnReRegMapper.selectCrdnReRegs(req);

@ -43,6 +43,10 @@ public interface RductMapper extends AbstractMapper {
* @return * @return
*/ */
default DataObject selectRductInfo(LevyQuery req) { default DataObject selectRductInfo(LevyQuery req) {
if (req.getOrderBy() == null) {
req.setOrderBy("R.RDUCT_ID DESC");
}
List<DataObject> rducts = selectRducts(req); List<DataObject> rducts = selectRducts(req);
return !rducts.isEmpty() ? rducts.get(0) : null; return !rducts.isEmpty() ? rducts.get(0) : null;

@ -45,24 +45,6 @@ public class Levy02Bean extends AbstractComponent {
} }
return rductMapper.selectRductList(req); return rductMapper.selectRductList(req);
// List<DataObject> dataObjectList = rductMapper.selectRductList(req);
//
// Iterator<DataObject> iterator = dataObjectList.iterator();
// while(iterator.hasNext()) {
// DataObject dataObject = iterator.next();
// String state = dataObject.string("CRDN_STTS_CD");
// int advntceAmt = dataObject.number("ADVNTCE_AMT").intValue();
// int ffnlgAmt = dataObject.number("FFNLG_AMT").intValue();
// int minusAmt = dataObject.number("MINUS_AMT").intValue();
// int adtnAmt = dataObject.number("ADTN_AMT").intValue();
// int rcvmtAmt = dataObject.number("RCVMT_AMT").intValue();
//
// dataObject.set("BLNC", crdnStngBean.getBalance(state,advntceAmt,ffnlgAmt,minusAmt,adtnAmt,rcvmtAmt));
// }
//
// return dataObjectList;
} }
/** . /** .
@ -71,7 +53,7 @@ public class Levy02Bean extends AbstractComponent {
*/ */
public List<DataObject> getRducts(LevyQuery req) { public List<DataObject> getRducts(LevyQuery req) {
if (req.getOrderBy() == null) { if (req.getOrderBy() == null) {
req.setOrderBy("REG_DT DESC, RDUCT_ID DESC"); req.setOrderBy("R.REG_DT DESC, R.RDUCT_ID DESC");
} }
return rductMapper.selectRducts(req); return rductMapper.selectRducts(req);

@ -16,13 +16,21 @@ public class PayerQuery extends QueryRequest {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
* ID * IDs
*/ */
private String[] rtpyrIds; private String[] rtpyrIds;
/** 차량번호 */ /** 차량번호 */
private String vhrno; private String vhrno;
/** 납부자번호 */ /** 납부자번호 */
private String rtpyrNo; private String rtpyrNo;
/** 납부자 ID */
private String rtpyrId;
/** 단속 ID */
private String crdnId;
/** 삭제 여부 */
private String delYn;
/** 호출 용도 */
private String callPurpose;
/** ID . /** ID .
* @return ID * @return ID
@ -44,7 +52,7 @@ public class PayerQuery extends QueryRequest {
* @return ID * @return ID
*/ */
public String getRtpyrId() { public String getRtpyrId() {
return !isEmpty(rtpyrIds) ? rtpyrIds[0] : null; return !isEmpty(rtpyrIds) ? rtpyrIds[0] : rtpyrId;
} }
/** ID . /** ID .
@ -86,4 +94,35 @@ public class PayerQuery extends QueryRequest {
this.rtpyrNo = rtpyrNo; this.rtpyrNo = rtpyrNo;
return this; return this;
} }
}
public String getCrdnId() {
return ifEmpty(crdnId, () -> null);
}
public <T extends PayerQuery> T setCrdnId(String crdnId) {
this.crdnId = crdnId;
return self();
}
public String getDelYn() {
return ifEmpty(delYn, () -> null);
}
public <T extends PayerQuery> T setDelYn(String delYn) {
this.delYn = delYn;
return self();
}
public String getCallPurpose() {
return ifEmpty(callPurpose, () -> null);
}
public <T extends PayerQuery> T setCallPurpose(String callPurpose) {
this.callPurpose = callPurpose;
return self();
}
}

@ -115,4 +115,31 @@ public interface PayerMapper extends AbstractMapper {
* @return , * @return ,
*/ */
DataObject selectAddrInfo(Map<String, Object> params); DataObject selectAddrInfo(Map<String, Object> params);
/** 1 .
* @param levyExclId ID
* @return
*/
List<DataObject> selectCrdnPayers(PayerQuery req);
default DataObject selectCrdnPayerInfo(PayerQuery req) {
if (req.getOrderBy() == null) {
req.setOrderBy("P.RTPYR_ID DESC");
}
List<DataObject> crdnPayers = selectCrdnPayers(req);
return !crdnPayers.isEmpty() ? crdnPayers.get(0) : null;
}
/** .
* @param crdnId ID
* @return ,
*/
DataObject selectCrdn(PayerQuery req);
default DataObject selectCrdnInfo(String rtpyrId) {
return selectCrdn(new PayerQuery().setRtpyrId(rtpyrId));
}
} }

@ -59,4 +59,11 @@ public interface PayerService {
* @return () * @return ()
*/ */
Payer getVehicleOwner(BasicInfoRequest req); Payer getVehicleOwner(BasicInfoRequest req);
/** .<br />
* @param req
* @return
*/
DataObject getCrdnPayerInfo(PayerQuery req);
} }

@ -147,4 +147,27 @@ public class PayerBean extends AbstractComponent {
result.setVehicleInfo(basicInfo); result.setVehicleInfo(basicInfo);
return result; return result;
} }
/** ID .<br />
* @param req
* @return
*/
public DataObject getCrdnPayerInfo(PayerQuery req) {
return payerMapper.selectCrdnPayerInfo(req);
}
/** ID .<br />
* @param crndId ID
* @return
*/
public DataObject getCrdnInfo(PayerQuery req) {
DataObject dataCrdn = payerMapper.selectCrdn(req); // 단속 조회
if (req.getCallPurpose().equals("create")) {
dataCrdn.set("LEVY_EXCL_YMD", dataCrdn.get("TODAY")); // 부과 제외 일자
}
return dataCrdn;
}
} }

@ -59,4 +59,19 @@ public class PayerServiceBean extends AbstractServiceBean implements PayerServic
List<Payer> payers = payerBean.getVehicleOwners(List.of(req)); List<Payer> payers = payerBean.getVehicleOwners(List.of(req));
return !payers.isEmpty() ? payers.get(0) : null; return !payers.isEmpty() ? payers.get(0) : null;
} }
@Override
public DataObject getCrdnPayerInfo(PayerQuery req) {
if (req.getCallPurpose() == null) {
req.setCallPurpose("view");
}
if (req.getCallPurpose().equals("create")) {
return payerBean.getCrdnInfo(req);
} else {
return payerBean.getCrdnPayerInfo(req);
}
}
} }

@ -1,6 +1,7 @@
package cokr.xit.fims.payer.web; package cokr.xit.fims.payer.web;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -9,10 +10,12 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import cokr.xit.base.code.CommonCode;
import cokr.xit.base.web.ApplicationController;
import cokr.xit.fims.payer.Payer; import cokr.xit.fims.payer.Payer;
import cokr.xit.fims.payer.PayerQuery; import cokr.xit.fims.payer.PayerQuery;
import cokr.xit.fims.payer.service.PayerService; import cokr.xit.fims.payer.service.PayerService;
import cokr.xit.foundation.web.AbstractController; import cokr.xit.foundation.data.DataObject;
import cokr.xit.interfaces.lvis.service.reg.BasicInfoRequest; import cokr.xit.interfaces.lvis.service.reg.BasicInfoRequest;
/** /**
@ -26,8 +29,16 @@ import cokr.xit.interfaces.lvis.service.reg.BasicInfoRequest;
* </pre> * </pre>
*/ */
@Controller @Controller
@RequestMapping(name = "납부자", value = "/payer") public class PayerController extends ApplicationController {
public class PayerController extends AbstractController {
public class METHOD_URL {
public static final String
update = "/update.do" // 납부자 수정
, remove = "/remove.do" // 납부자 제거
, getCrdnPayerInfo = "/info.do" // 납부자 정보 조회
;
}
/**납부자 서비스*/ /**납부자 서비스*/
@Resource(name = "payerService") @Resource(name = "payerService")
private PayerService payerService; private PayerService payerService;
@ -113,4 +124,31 @@ public class PayerController extends AbstractController {
.addObject("rtpyrId", found ? payer.getRtpyrId() : null) .addObject("rtpyrId", found ? payer.getRtpyrId() : null)
.addObject("vehicle", found ? payer.getVehicleInfo() : null); .addObject("vehicle", found ? payer.getVehicleInfo() : null);
} }
}
/** .
* @param
* @return fims/payer/payer01020-info jsonView
* <pre>{
* "payerInfo":
* }</pre>
*/
public ModelAndView getCrdnPayerInfo(PayerQuery req) {
DataObject payerInfo = payerService.getCrdnPayerInfo(req);
boolean json = jsonResponse();
ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/payer/payer01020-info");
// View(jsp)에서 사용할 공통코드를 조회
Map<String, List<CommonCode>> commonCodes = getCodesOf("FIM011", "FIM014", "FIM054");
return mav
.addObject("pageName", "payer01020")
.addObject("FIM011List", commonCodes.get("FIM011")) // 납부자 구분 코드(RTPYR_SE_CD)
.addObject("FIM014List", commonCodes.get("FIM014")) // 납부자 상태 코드(RTPYR_STTS_CD)
.addObject("FIM054List", commonCodes.get("FIM054")) // 업무 구분 코드(TASK_SE_CD)
.addObject("payerInfo", json ? payerInfo : toJson(payerInfo)) // 납부자 정보
;
}
}

@ -40,6 +40,10 @@ public interface CvlcptDscsnCnMapper extends AbstractMapper {
* @return * @return
*/ */
default DataObject selectCvlcptDscsnCnInfo(SprtQuery req) { default DataObject selectCvlcptDscsnCnInfo(SprtQuery req) {
if (req.getOrderBy() == null) {
req.setOrderBy("CDC.CVLCPT_DSCSN_ID DESC");
}
List<DataObject> cvlcptDscsnCns = selectCvlcptDscsnCns(req); List<DataObject> cvlcptDscsnCns = selectCvlcptDscsnCns(req);
return !cvlcptDscsnCns.isEmpty() ? cvlcptDscsnCns.get(0) : null; return !cvlcptDscsnCns.isEmpty() ? cvlcptDscsnCns.get(0) : null;

@ -1,7 +1,6 @@
package cokr.xit.fims.sprt.service; package cokr.xit.fims.sprt.service;
import java.util.List; import java.util.List;
import java.util.Map;
import cokr.xit.base.file.FileInfo; import cokr.xit.base.file.FileInfo;
import cokr.xit.fims.crdn.Crdn; import cokr.xit.fims.crdn.Crdn;

@ -34,6 +34,10 @@ public class Sprt04Bean extends AbstractComponent {
* @return * @return
*/ */
public List<DataObject> getCvlcptDscsnCnList(SprtQuery req) { public List<DataObject> getCvlcptDscsnCnList(SprtQuery req) {
if (req.getOrderBy() == null) {
req.setOrderBy("CDC.REG_DT");
}
return cvlcptDscsnCnMapper.selectCvlcptDscsnCnList(req); return cvlcptDscsnCnMapper.selectCvlcptDscsnCnList(req);
} }
@ -43,7 +47,7 @@ public class Sprt04Bean extends AbstractComponent {
*/ */
public List<DataObject> getCvlcptDscsnCns(SprtQuery req) { public List<DataObject> getCvlcptDscsnCns(SprtQuery req) {
if (req.getOrderBy() == null) { if (req.getOrderBy() == null) {
req.setOrderBy("CDC.REG_DT DESC"); req.setOrderBy("CDC.REG_DT DESC, CDC.CVLCPT_DSCSN_ID DESC");
} }
return cvlcptDscsnCnMapper.selectCvlcptDscsnCns(req); return cvlcptDscsnCnMapper.selectCvlcptDscsnCns(req);

@ -9,7 +9,6 @@ import org.springframework.web.servlet.ModelAndView;
import cokr.xit.fims.crdn.Crdn; import cokr.xit.fims.crdn.Crdn;
import cokr.xit.fims.crdn.CrdnQuery; import cokr.xit.fims.crdn.CrdnQuery;
import cokr.xit.fims.crdn.web.Crdn06Controller.METHOD_URL;
import cokr.xit.fims.cvlc.CrdnCvlcpt; import cokr.xit.fims.cvlc.CrdnCvlcpt;
import cokr.xit.fims.excl.CrdnReReg; import cokr.xit.fims.excl.CrdnReReg;
import cokr.xit.fims.excl.ExclQuery; import cokr.xit.fims.excl.ExclQuery;
@ -17,6 +16,7 @@ import cokr.xit.fims.excl.LevyExcl;
import cokr.xit.fims.excl.OpnnSbmsn; import cokr.xit.fims.excl.OpnnSbmsn;
import cokr.xit.fims.levy.LevyQuery; import cokr.xit.fims.levy.LevyQuery;
import cokr.xit.fims.levy.Rduct; import cokr.xit.fims.levy.Rduct;
import cokr.xit.fims.payer.PayerQuery;
import cokr.xit.fims.sprt.CvlcptDscsnCn; import cokr.xit.fims.sprt.CvlcptDscsnCn;
import cokr.xit.fims.sprt.SprtQuery; import cokr.xit.fims.sprt.SprtQuery;
@ -559,4 +559,16 @@ public class BpvController {
} }
@Controller
@RequestMapping(name="전용차로과태료업무 납부자", value=CLASS_URL+"/payer")
class PayerController extends cokr.xit.fims.payer.web.PayerController {
@Override
@RequestMapping(name="전용차로과태료업무 납부자 정보 조회", value=METHOD_URL.getCrdnPayerInfo)
public ModelAndView getCrdnPayerInfo(PayerQuery req) {
return super.getCrdnPayerInfo(req);
}
}
} }

@ -258,7 +258,7 @@ public class CmnController {
* @return fims/sprt/sprt01010-main * @return fims/sprt/sprt01010-main
*/ */
@Override @Override
@RequestMapping(name = "통합조회 메인", value = "/010/main.do") @RequestMapping(name="통합조회 메인", value="/010/main.do")
public ModelAndView unityInquireMain() { public ModelAndView unityInquireMain() {
return super.unityInquireMain(); return super.unityInquireMain();
} }
@ -266,7 +266,7 @@ public class CmnController {
} }
@Controller @Controller
@RequestMapping(name = "개별 총정보", value = "/sprt/sprt02") @RequestMapping(name="개별 총정보", value="/sprt/sprt02")
class Sprt02Controller extends cokr.xit.fims.sprt.web.Sprt02Controller { class Sprt02Controller extends cokr.xit.fims.sprt.web.Sprt02Controller {
} }
@ -294,18 +294,24 @@ public class CmnController {
} }
@Controller @Controller
@RequestMapping(name = "민원 상담 내용", value = "/sprt/sprt04") @RequestMapping(name="민원 상담 내용", value="/sprt/sprt04")
class Sprt04Controller extends cokr.xit.fims.sprt.web.Sprt04Controller { class Sprt04Controller extends cokr.xit.fims.sprt.web.Sprt04Controller {
/** . /** .
* @return fims/sprt/sprt04010-main * @return fims/sprt/sprt04010-main
*/ */
@Override @Override
@RequestMapping(name = "민원 상담 내용 메인", value = "/010/main.do") @RequestMapping(name="민원 상담 내용 메인", value="/010/main.do")
public ModelAndView civilComplaintDiscussionContentMain() { public ModelAndView civilComplaintDiscussionContentMain() {
return super.civilComplaintDiscussionContentMain(); return super.civilComplaintDiscussionContentMain();
} }
} }
@Controller
@RequestMapping(name="납부자", value="/payer")
class PayerController extends cokr.xit.fims.payer.web.PayerController {
}
} }

@ -16,6 +16,7 @@ import cokr.xit.fims.excl.LevyExcl;
import cokr.xit.fims.excl.OpnnSbmsn; import cokr.xit.fims.excl.OpnnSbmsn;
import cokr.xit.fims.levy.LevyQuery; import cokr.xit.fims.levy.LevyQuery;
import cokr.xit.fims.levy.Rduct; import cokr.xit.fims.levy.Rduct;
import cokr.xit.fims.payer.PayerQuery;
import cokr.xit.fims.sprt.CvlcptDscsnCn; import cokr.xit.fims.sprt.CvlcptDscsnCn;
import cokr.xit.fims.sprt.SprtQuery; import cokr.xit.fims.sprt.SprtQuery;
@ -580,4 +581,16 @@ public class DpvController {
} }
@Controller
@RequestMapping(name="장애인과태료업무 납부자", value=CLASS_URL+"/payer")
class PayerController extends cokr.xit.fims.payer.web.PayerController {
@Override
@RequestMapping(name="장애인과태료업무 납부자 정보 조회", value=METHOD_URL.getCrdnPayerInfo)
public ModelAndView getCrdnPayerInfo(PayerQuery req) {
return super.getCrdnPayerInfo(req);
}
}
} }

@ -16,6 +16,7 @@ import cokr.xit.fims.excl.LevyExcl;
import cokr.xit.fims.excl.OpnnSbmsn; import cokr.xit.fims.excl.OpnnSbmsn;
import cokr.xit.fims.levy.LevyQuery; import cokr.xit.fims.levy.LevyQuery;
import cokr.xit.fims.levy.Rduct; import cokr.xit.fims.levy.Rduct;
import cokr.xit.fims.payer.PayerQuery;
import cokr.xit.fims.sprt.CvlcptDscsnCn; import cokr.xit.fims.sprt.CvlcptDscsnCn;
import cokr.xit.fims.sprt.SprtQuery; import cokr.xit.fims.sprt.SprtQuery;
@ -552,4 +553,16 @@ public class EcaController {
} }
@Controller
@RequestMapping(name="전기차과태료업무 납부자", value=CLASS_URL+"/payer")
class PayerController extends cokr.xit.fims.payer.web.PayerController {
@Override
@RequestMapping(name="전기차과태료업무 납부자 정보 조회", value=METHOD_URL.getCrdnPayerInfo)
public ModelAndView getCrdnPayerInfo(PayerQuery req) {
return super.getCrdnPayerInfo(req);
}
}
} }

@ -16,6 +16,7 @@ import cokr.xit.fims.excl.LevyExcl;
import cokr.xit.fims.excl.OpnnSbmsn; import cokr.xit.fims.excl.OpnnSbmsn;
import cokr.xit.fims.levy.LevyQuery; import cokr.xit.fims.levy.LevyQuery;
import cokr.xit.fims.levy.Rduct; import cokr.xit.fims.levy.Rduct;
import cokr.xit.fims.payer.PayerQuery;
import cokr.xit.fims.sprt.CvlcptDscsnCn; import cokr.xit.fims.sprt.CvlcptDscsnCn;
import cokr.xit.fims.sprt.SprtQuery; import cokr.xit.fims.sprt.SprtQuery;
@ -570,4 +571,16 @@ public class PvsController {
} }
@Controller
@RequestMapping(name="주정차과태료업무 납부자", value=CLASS_URL+"/payer")
class PayerController extends cokr.xit.fims.payer.web.PayerController {
@Override
@RequestMapping(name="주정차과태료업무 납부자 정보 조회", value=METHOD_URL.getCrdnPayerInfo)
public ModelAndView getCrdnPayerInfo(PayerQuery req) {
return super.getCrdnPayerInfo(req);
}
}
} }

@ -263,6 +263,8 @@ UPDATE TB_PAYER SET
, RTPYR_SE_CD = #{rtpyrSeCd} <!-- 납부자 구분 코드 --> , RTPYR_SE_CD = #{rtpyrSeCd} <!-- 납부자 구분 코드 -->
, RTPYR_NO = #{rtpyrNo} <!-- 납부자 번호 --> , RTPYR_NO = #{rtpyrNo} <!-- 납부자 번호 -->
, RTPYR_NM = #{rtpyrNm} <!-- 납부자 명 --> , RTPYR_NM = #{rtpyrNm} <!-- 납부자 명 -->
, RTPYR_TELNO = #{rtpyrTelno} <!-- 납부자 전화번호 -->
, RTPYR_MBL_TELNO = #{rtpyrMblTelno} <!-- 납부자 휴대 전화번호 -->
, RTPYR_EML = #{rtpyrEml} <!-- 납부자 이메일 --> , RTPYR_EML = #{rtpyrEml} <!-- 납부자 이메일 -->
, RTPYR_BRDT = #{rtpyrBrdt} <!-- 납부자 생년월일 --> , RTPYR_BRDT = #{rtpyrBrdt} <!-- 납부자 생년월일 -->
, RTPYR_STTS_CD = #{rtpyrSttsCd} <!-- 납부자 상태 코드 --> , RTPYR_STTS_CD = #{rtpyrSttsCd} <!-- 납부자 상태 코드 -->
@ -285,8 +287,6 @@ UPDATE TB_PAYER SET
, DTL_ADDR = #{dtlAddr} <!-- 상세 주소 --> , DTL_ADDR = #{dtlAddr} <!-- 상세 주소 -->
, WHOL_ADDR = #{wholAddr} <!-- 전체 주소 --> , WHOL_ADDR = #{wholAddr} <!-- 전체 주소 -->
, VHRNO = #{vhrno} <!-- 차량번호 --> , VHRNO = #{vhrno} <!-- 차량번호 -->
, RTPYR_TELNO = #{rtpyrTelno} <!-- 납부자 전화번호 -->
, RTPYR_MBL_TELNO = #{rtpyrMblTelno} <!-- 납부자 휴대 전화번호 -->
, MDFCN_DT = #{lastModified} <!-- 수정 일시 --> , MDFCN_DT = #{lastModified} <!-- 수정 일시 -->
, MDFR = #{modifiedBy} <!-- 수정자 --> , MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE RTPYR_ID = #{rtpyrId}</update> WHERE RTPYR_ID = #{rtpyrId}</update>
@ -307,4 +307,100 @@ UPDATE TB_PAYER
, MDFR = #{currentUser.id} , MDFR = #{currentUser.id}
WHERE RTPYR_ID IN (<foreach collection="rtpyrIds" item="rtpyrId" separator=",">#{rtpyrId}</foreach>)</update> WHERE RTPYR_ID IN (<foreach collection="rtpyrIds" item="rtpyrId" separator=",">#{rtpyrId}</foreach>)</update>
</mapper> <sql id="selectCrdnPayer">
SELECT P.RTPYR_ID /* 납부자 ID */
, P.SGG_CD /* 시군구 코드 */
, (CASE WHEN (P.VHRNO IS NULL OR P.VHRNO = '') THEN C.VHRNO
ELSE P.VHRNO
END) AS VHRNO /* 차량번호 */
, P.RTPYR_INPT_SE_CD /* 납부자 입력 구분 코드 */
, (SELECT FN_GET_CODE_NM('FIM015', P.RTPYR_INPT_SE_CD) FROM DUAL) AS RTPYR_INPT_SE_NM /* 납부자 입력 구분 명 */
, P.RTPYR_SE_CD /* 납부자 구분 코드 */
, (SELECT FN_GET_CODE_NM('FIM011', P.RTPYR_SE_CD) FROM DUAL) AS RTPYR_SE_NM /* 납부자 구분 명 */
, P.RTPYR_NO /* 납부자 번호 */
, P.RTPYR_NM /* 납부자 명 */
, P.RTPYR_TELNO /* 납부자 전화번호 */
, P.RTPYR_MBL_TELNO /* 납부자 휴대 전화번호 */
, P.RTPYR_EML /* 납부자 이메일 */
, P.RTPYR_BRDT /* 납부자 생년월일 */
, P.RTPYR_STTS_CD /* 납부자 상태 코드 */
, (SELECT FN_GET_CODE_NM('FIM014', P.RTPYR_STTS_CD) FROM DUAL) AS RTPYR_STTS_NM /* 납부자 구분 명 */
, P.ADDR_SE_CD /* 주소 구분 코드 */
, P.ZIP /* 우편번호 */
, P.ROAD_NM_CD /* 도로 명 코드 */
, P.UDGD_SE_CD /* 지하 구분 코드 */
, P.BMNO /* 건물본번 */
, P.BSNO /* 건물부번 */
, P.BLDG_MNG_NO /* 건물 관리 번호 */
, P.STDG_CD /* 법정동 코드 */
, P.DONG_CD /* 행정동 코드 */
, P.MTN_SE_CD /* 산 구분 코드 */
, P.MNO /* 본번 */
, P.SNO /* 부번 */
, P.SPCL_DONG /* 특수 동 */
, P.SPCL_HO /* 특수 호 */
, P.SPCL_ADDR /* 특수 주소 */
, P.ADDR /* 주소 */
, P.DTL_ADDR /* 상세 주소 */
, P.WHOL_ADDR /* 전체 주소 */
, P.REG_DT /* 등록 일시 */
, P.RGTR /* 등록자 */
, P.MDFCN_DT /* 수정 일시 */
, P.MDFR /* 수정자 */
, C.CRDN_ID /* 단속 ID */
, C.SGG_CD /* 시군구 코드 */
, C.TASK_SE_CD /* 업무 구분 코드 */
, (CONCAT(C.CRDN_YMD, C.CRDN_TM)) AS CRDN_YMD_TM /* 단속 일시 */
, C.CRDN_STTS_CD /* 단속 상태 코드 */
, (SELECT FN_GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM /* 단속 상태 명 */
FROM TB_PAYER P
LEFT OUTER JOIN TB_CRDN C ON (P.RTPYR_ID = C.RTPYR_ID)
</sql>
<select id="selectCrdnPayers" parameterType="map" resultType="dataobject">/* 납부자 대장 객체 가져오기(payerMapper.selectLevyExcl) */
<include refid="selectCrdnPayer" />
<where>
<if test="rtpyrId != null">
AND P.RTPYR_ID = #{rtpyrId} /* 납부자 ID */
</if>
<if test="crdnId != null">
AND C.CRDN_ID = #{crdnId} /* 단속 ID */
<if test="delYn != null">
AND C.DEL_YN = #{delYn} /* 삭제 여부 */
</if>
</if>
</where>
<include refid="utility.orderBy" />
</select>
<select id="selectCrdn" parameterType="map" resultType="dataobject">/* 단속 대장 객체 가져오기(payerMapper.selectCrdn) */
SELECT C.CRDN_ID /* 단속 ID */
, C.SGG_CD /* 시군구 코드 */
, C.TASK_SE_CD /* 업무 구분 코드 */
, C.VHRNO /* 차량번호 */
, (CONCAT(C.CRDN_YMD, C.CRDN_TM)) AS CRDN_YMD_TM /* 단속 일시 */
, C.FFNLG_CRDN_AMT /* 과태료 단속 금액 */
, C.FFNLG_RDUCT_RT /* 과태료 감경 율 */
, C.FFNLG_AMT /* 과태료 금액 */
, C.CRDN_STTS_CD /* 단속 상태 코드 */
, (SELECT FN_GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM /* 단속 상태 명 */
, P.RTPYR_ID /* 납부자 ID */
, P.RTPYR_NO /* 납부자 번호 */
, P.RTPYR_NM /* 납부자 명 */
, <include refid="utility.today" /> AS TODAY /* 오늘 일자 */
FROM TB_CRDN C
LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
<where>
<if test="rductId != null">
AND P.RTPYR_ID = #{rtpyrId} /* 감경 ID */
</if>
<if test="crdnId != null">
AND C.CRDN_ID = #{crdnId} /* 단속 ID */
<if test="delYn != null">
AND C.DEL_YN = #{delYn} /* 삭제 여부 */
</if>
</if>
</where>
</select>
</mapper>

@ -101,6 +101,7 @@
, (SELECT FN_GET_CODE_NM('FIM006', CA.OVTIME_PRTTN_YN) FROM DUAL) AS OVTIME_PRTTN_YN_NM /* 시간외 분할 여부 명 */ , (SELECT FN_GET_CODE_NM('FIM006', CA.OVTIME_PRTTN_YN) FROM DUAL) AS OVTIME_PRTTN_YN_NM /* 시간외 분할 여부 명 */
, P.RTPYR_ID /* 납부자 ID */ , P.RTPYR_ID /* 납부자 ID */
, P.RTPYR_INPT_SE_CD /* 납부자 입력 구분 코드 */ , P.RTPYR_INPT_SE_CD /* 납부자 입력 구분 코드 */
, (SELECT FN_GET_CODE_NM('FIM015', P.RTPYR_INPT_SE_CD) FROM DUAL) AS RTPYR_INPT_SE_NM /* 납부자 입력 구분 명 */
, P.RTPYR_SE_CD /* 납부자 구분 코드 */ , P.RTPYR_SE_CD /* 납부자 구분 코드 */
, (SELECT FN_GET_CODE_NM('FIM011', P.RTPYR_SE_CD) FROM DUAL) AS RTPYR_SE_NM /* 납부자 구분 명 */ , (SELECT FN_GET_CODE_NM('FIM011', P.RTPYR_SE_CD) FROM DUAL) AS RTPYR_SE_NM /* 납부자 구분 명 */
, P.RTPYR_NO /* 납부자 번호 */ , P.RTPYR_NO /* 납부자 번호 */

@ -207,7 +207,7 @@
<span class="container-page-btn"> <span class="container-page-btn">
<span class="container-window-btn-right"> <span class="container-window-btn-right">
<!-- 업무 버튼 --> <!-- 업무 버튼 -->
<button type="button" class="btn btn-primary" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button> <button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button>
</span> </span>
</span> </span>
</div> </div>

@ -41,7 +41,7 @@
<span class="container-page-btn"> <span class="container-page-btn">
<span class="container-window-btn-right"> <span class="container-window-btn-right">
<!-- 업무 버튼 --> <!-- 업무 버튼 -->
<button type="button" class="btn btn-primary" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button> <button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button>
</span> </span>
</span> </span>
</div> </div>

@ -205,8 +205,8 @@
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">법정동</th> <th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">법정동</th>
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th> <th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('FFNLG_AMT', this.innerText, 'match', 'part');">단속금액</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('FFNLG_AMT', this.innerText, 'match', 'part');">단속금액</th>
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_NM', this.innerText, 'codeValue', 'FIM010');">처리상태</th> <th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_NM', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th> <th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th>
<th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RTPYR_BRDT', this.innerText, 'ymd', '');">납부자생일</th> <th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RTPYR_BRDT', this.innerText, 'ymd', '');">납부자생일</th>
<th class="cmn" style="width: 180px;">등록일시</th> <th class="cmn" style="width: 180px;">등록일시</th>
<th class="cmn" style="width: 140px;">등록사용자</th> <th class="cmn" style="width: 140px;">등록사용자</th>
@ -252,7 +252,8 @@
</table> </table>
</div> </div>
</div> </div>
</div> <!-- / DataTables(그리드) --> </div>
<!-- / DataTables(그리드) -->
</div> </div>
</div> <!-- <div class="wrapper-list"> --> </div> <!-- <div class="wrapper-list"> -->
</div> <!-- <div class="card"> --> </div> <!-- <div class="card"> -->

@ -61,7 +61,7 @@
<span class="container-page-btn"> <span class="container-page-btn">
<span class="container-window-btn-right"> <span class="container-window-btn-right">
<!-- 업무 버튼 --> <!-- 업무 버튼 -->
<button type="button" class="btn btn-primary" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button> <button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button>
</span> </span>
</span> </span>
</div> </div>

@ -200,21 +200,21 @@
</th> </th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('RCPT_YMD', this.innerText, 'ymd', '');">접수일자</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('RCPT_YMD', this.innerText, 'ymd', '');">접수일자</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('RCPT_NO', this.innerText, 'match', 'part');">접수번호</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('RCPT_NO', this.innerText, 'match', 'part');">접수번호</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('RCPT_SE_NM', this.innerText, 'codeValue', 'FIM029');">접수구분</th> <th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('RCPT_SE_NM', this.innerText, 'codeValue', 'FIM029');">접수구분</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('NTFCTN_SE_NM', this.innerText, 'codeValue', 'FIM030');">통보구분</th> <th class="cmn" style="width: 120px;" onclick="searchFromGridTitle('NTFCTN_SE_NM', this.innerText, 'codeValue', 'FIM030');">통보구분</th>
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('STTR_NM', this.innerText, 'match', 'part');">진술자명</th> <th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('STTR_NM', this.innerText, 'match', 'part');">진술자명</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('OPNN_SBMSN_STTS_NM', this.innerText, 'codeValue', 'FIM031');">의견제출상태</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('OPNN_SBMSN_STTS_NM', this.innerText, 'codeValue', 'FIM031');">의견제출상태</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('OPNN_SBMSN_SE_NM', this.innerText, 'codeValue', 'FIM033');">의견제출분류</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('OPNN_SBMSN_SE_NM', this.innerText, 'codeValue', 'FIM033');">의견제출분류</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('OPNN_SBMSN_GIST', this.innerText, 'match', 'part');">의견제출요지</th> <th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('OPNN_SBMSN_GIST', this.innerText, 'match', 'part');">의견제출요지</th>
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th> <th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th>
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th> <th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('FFNLG_AMT', this.innerText, 'match', 'part');">단속금액</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('FFNLG_AMT', this.innerText, 'match', 'part');">단속금액</th>
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_NM', this.innerText, 'codeValue', 'FIM010');">처리상태</th> <th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_NM', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('DOC_NO', this.innerText, 'ymd', '');">문서번호</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('DOC_NO', this.innerText, 'ymd', '');">문서번호</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('ANS_YMD', this.innerText, 'ymd', '');">답변일자</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('ANS_YMD', this.innerText, 'ymd', '');">답변일자</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('ANS_CN', this.innerText, 'match', 'part');">답변내용</th> <th class="cmn" style="width: 240px;" onclick="searchFromGridTitle('ANS_CN', this.innerText, 'match', 'part');">답변내용</th>
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th> <th class="cmn" style="width: 200px;" onclick="searchFromGridTitle('RTPYR_NM', this.innerText, 'match', 'part');">납부자명</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('RTPYR_BRDT', this.innerText, 'ymd', '');">납부자생일</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('RTPYR_BRDT', this.innerText, 'ymd', '');">납부자생일</th>
<th class="cmn" style="width: 180px;">등록일시</th> <th class="cmn" style="width: 180px;">등록일시</th>
<th class="cmn" style="width: 140px;">등록사용자</th> <th class="cmn" style="width: 140px;">등록사용자</th>
@ -267,10 +267,8 @@
</div> </div>
<!-- / DataTables(그리드) --> <!-- / DataTables(그리드) -->
</div> </div>
</div> </div> <!-- / Wrapper-list -->
<!-- / Wrapper-list --> </div> <!-- / Card -->
</div>
<!-- / Card -->
</div> </div>
<!-- / Content --> <!-- / Content -->

@ -165,7 +165,7 @@
<span class="container-page-btn"> <span class="container-page-btn">
<span class="container-window-btn-right"> <span class="container-window-btn-right">
<!-- 업무 버튼 --> <!-- 업무 버튼 -->
<button type="button" class="btn btn-primary" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button> <button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button>
</span> </span>
</span> </span>
</div> </div>

@ -117,7 +117,7 @@
<span class="container-page-btn"> <span class="container-page-btn">
<span class="container-window-btn-right"> <span class="container-window-btn-right">
<!-- 업무 버튼 --> <!-- 업무 버튼 -->
<button type="button" class="btn btn-primary" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button> <button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button>
</span> </span>
</span> </span>
</div> </div>

@ -160,14 +160,14 @@
<input type="checkbox" class="form-check-input" onchange="${pageName}Control.select(this.checked);"> <input type="checkbox" class="form-check-input" onchange="${pageName}Control.select(this.checked);">
</th> </th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('RE_REG_YMD', this.innerText, 'ymd', '');">재등록일자</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('RE_REG_YMD', this.innerText, 'ymd', '');">재등록일자</th>
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_REG_SE_NM', this.innerText, 'codeValue', 'FIM026');">단속등록구분</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('CRDN_REG_SE_NM', this.innerText, 'codeValue', 'FIM026');">단속등록구분</th>
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ETC_CN', this.innerText, 'match', 'part');">기타내용</th> <th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('ETC_CN', this.innerText, 'match', 'part');">기타내용</th>
<th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th> <th class="cmn" style="width: 180px;" onclick="searchFromGridTitle('CRDN_YMD', this.innerText, 'ymd', '');">단속일시</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('VHRNO', this.innerText, 'match', 'part');">차량번호</th>
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">법정동</th> <th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STDG_NM', this.innerText, 'match', 'part');">법정동</th>
<th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th> <th class="cmn" style="width: 280px;" onclick="searchFromGridTitle('CRDN_PLC', this.innerText, 'match', 'part');">단속장소</th>
<th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('FFNLG_AMT', this.innerText, 'match', 'part');">단속금액</th> <th class="cmn" style="width: 140px;" onclick="searchFromGridTitle('FFNLG_AMT', this.innerText, 'match', 'part');">단속금액</th>
<th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_NM', this.innerText, 'codeValue', 'FIM010');">처리상태</th> <th class="cmn" style="width: 160px;" onclick="searchFromGridTitle('CRDN_STTS_NM', this.innerText, 'codeValue', 'FIM010');">처리상태</th>
<th class="cmn" style="width: 180px;">등록일시</th> <th class="cmn" style="width: 180px;">등록일시</th>
<th class="cmn" style="width: 140px;">등록사용자</th> <th class="cmn" style="width: 140px;">등록사용자</th>
<th class="cmn dummy-th"></th> <th class="cmn dummy-th"></th>
@ -206,10 +206,8 @@
</div> </div>
<!-- / DataTables(그리드) --> <!-- / DataTables(그리드) -->
</div> </div>
</div> </div> <!-- / Wrapper-list -->
<!-- / Wrapper-list --> </div> <!-- / Card -->
</div>
<!-- / Card -->
</div> </div>
<!-- / Content --> <!-- / Content -->

@ -70,7 +70,7 @@
<span class="container-page-btn"> <span class="container-page-btn">
<span class="container-window-btn-right"> <span class="container-window-btn-right">
<!-- 업무 버튼 --> <!-- 업무 버튼 -->
<button type="button" class="btn btn-primary" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button> <button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button>
</span> </span>
</span> </span>
</div> </div>

@ -0,0 +1,232 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<!-- inner page html -->
<div class="content-wrapper">
<!-- Content -->
<div class="container-xxl flex-grow-1 px-0">
<c:set var="prefixName" scope="request">납부자 정보</c:set>
<!-- Page Body -->
<div class="card">
<!-- 입력 영역 -->
<form id="frmEdit--${pageName}" name="frmEdit">
<!-- hidden -->
<input type="hidden" id="crdnId--${pageName}" name="crdnId" data-map="CRDN_ID" />
<input type="hidden" id="sggCd--${pageName}" name="sggCd" data-map="SGG_CD" />
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" data-map="TASK_SE_CD" />
<input type="hidden" id="rtpyrId--${pageName}" name="rtpyrId" data-map="RTPYR_ID" />
<div class="row g-1">
<!-- 단속일시 -->
<div class="col-md-6">
<label for="crdnYmdTm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">단속일시</label>
<input type="text" class="form-control w-50" id="crdnYmdTm--${pageName}" name="crdnYmdTm" data-map="CRDN_YMD_TM" readonly />
</div>
<!-- 차량번호 -->
<div class="col-md-6">
<label for="vhrno--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">차량번호</label>
<input type="text" class="form-control w-40" id="vhrno--${pageName}" name="vhrno" data-map="VHRNO" readonly />
</div>
<!-- 납부자 구분 코드 -->
<div class="col-md-6">
<label for="rtpyrSeCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납부자 구분</label>
<select class="form-select" id="rtpyrSeCd--${pageName}" name="rtpyrSeCd" data-map="RTPYR_SE_CD">
<option value="">선택하세요</option>
<c:forEach items="${FIM011List}" var="item">
<option value="${item.code}">${item.value}</option>
</c:forEach>
</select>
</div>
<!-- 납부자 상태 코드 -->
<div class="col-md-6">
<label for="rtpyrSttsCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납부자 상태</label>
<select class="form-select" id="rtpyrSttsCd--${pageName}" name="rtpyrSttsCd" data-map="RTPYR_STTS_CD">
<option value="">선택하세요</option>
<c:forEach items="${FIM014List}" var="item">
<option value="${item.code}">${item.value}</option>
</c:forEach>
</select>
</div>
<!-- 납부자 명 -->
<div class="col-md-6">
<label for="rtpyrNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납부자 성명</label>
<input type="text" class="form-control w-50" id="rtpyrNm--${pageName}" name="rtpyrNm" data-map="RTPYR_NM" />
</div>
<!-- 납부자 번호 -->
<div class="col-md-6">
<label for="rtpyrNo--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납부자 번호</label>
<input type="text" class="form-control w-50" id="rtpyrNo--${pageName}" name="rtpyrNo" data-map="RTPYR_NO" />
</div>
<!-- 납부자 전화번호 -->
<div class="col-md-6">
<label for="rtpyrTelno--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">전화번호</label>
<input type="text" class="form-control w-45" id="rtpyrTelno--${pageName}" name="rtpyrTelno" data-map="RTPYR_TELNO" />
</div>
<!-- 납부자 휴대전화번호 -->
<div class="col-md-6">
<label for="rtpyrMblTelno--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">휴대전화번호</label>
<input type="text" class="form-control w-45" id="rtpyrMblTelno--${pageName}" name="rtpyrMblTelno" data-map="RTPYR_MBL_TELNO" />
</div>
<!-- 납부자 이메일 -->
<div class="col-md-12">
<label for="rtpyrEml--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">이메일</label>
<input type="text" class="form-control w-40" id="rtpyrEml--${pageName}" name="rtpyrEml" data-map="RTPYR_EML" />
</div>
<!-- 주소 --><!-- 우편번호 -->
<div class="col-md-12">
<label for="addr--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">주소</label>
<input type="text" class="form-control w-60" id="addr--${pageName}" name="addr" data-map="ADDR" />
<input type="text" class="form-control w-px-75" id="zip--${pageName}" name="zip" data-map="ZIP" />
<button type="button" class="btn btn-sm btn-outline-dark" id="btnZip--${pageName}" title="우편번호 검색" onclick="fnZip${pageName}();">
검색
</button>
</div>
<!-- 상세주소 -->
<div class="col-md-12">
<label for="dtlAddr--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">상세 주소</label>
<input type="text" class="form-control w-80" id="dtlAddr--${pageName}" name="dtlAddr" data-map="DTL_ADDR" />
</div>
<!-- 도로명 코드 -->
<div class="col-md-12">
<label for="roadNmCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">도로명코드</label>
<input type="text" class="form-control w-px-140" id="roadNmCd--${pageName}" name="roadNmCd" data-map="ROAD_NM_CD" readonly />
<input type="text" class="form-control w-px-40" id="udgdSeCd--${pageName}" name="udgdSeCd" data-map="UDGD_SE_CD" readonly />
<input type="text" class="form-control w-px-60" id="bmno--${pageName}" name="bmno" data-map="BMNO" readonly />
<input type="text" class="form-control w-px-60" id="bsno--${pageName}" name="bsno" data-map="BSNO" readonly />
<input type="text" class="form-control w-px-160" id="bldgMngNo--${pageName}" name="bldgMngNo" data-map="BLDG_MNG_NO" readonly />
</div>
<!-- 법정동 코드 -->
<div class="col-md-6">
<label for="stdgCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">법정동코드</label>
<input type="text" class="form-control w-40" id="stdgCd--${pageName}" name="stdgCd" data-map="STDG_CD" readonly />
</div>
<!-- 행정동 코드 -->
<div class="col-md-6">
<label for="dongCd--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">행정동코드</label>
<input type="text" class="form-control w-40" id="dongCd--${pageName}" name="dongCd" data-map="DONG_CD" readonly />
</div>
</div>
</form> <!-- /입력 영역 -->
</div> <!-- <div class="card"> -->
<!-- 업무 버튼 표시 -->
<div>
<span class="container-page-btn">
<span class="container-window-btn-right">
<!-- 업무 버튼 -->
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button>
</span>
</span>
</div>
<!-- / 업무 버튼 표시 -->
</div> <!-- / Content <div class="container-xxl flex-grow-1 px-0"> -->
</div> <!-- / inner page html <div class="content-wrapper"> -->
<script>
/**************************************************************************
* Global Variable
**************************************************************************/
// URL
var ${pageName}PrefixUrl = "/payer/payer";
// FormFields
var ${pageName}Fields = new FormFields("#frmEdit--${pageName}");
/**************************************************************************
* DatasetControl
**************************************************************************/
var ${pageName}Control = new DatasetControl({
prefix : "payer"
, prefixName : "납부자"
, keymapper : info => info ? info.RTPYR_ID : ""
, dataGetter : obj => obj.payerInfo
, urls : {
update : wctx.url(${pageName}PrefixUrl + "/020/update.do") // 수정
}
, formats : {
CRDN_YMD_TM : datetimeFormat
}
});
${pageName}Control.onCurrentChange = item => {
// Dataset 셋팅
${pageName}Fields.set(item);
// 업무구분에 따른 url 변경
${pageName}Control.urls.update = wctx.url($("#taskSeCd--${pageName}").val() + ${pageName}PrefixUrl + "/020/update.do");
}
/**************************************************************************
* DatasetControl 이벤트
**************************************************************************/
// 저장 callback
${pageName}Control.onSave = (resp) => {
let dialogTitle = $("#" + ${pageName}Control.prefix + "Dialog").find("h5.modal-title").html();
let showMessage = resp.retMessage.replace(/[S]|[F]/g, dialogTitle);
dialog.alert(showMessage);
if (resp.saved) {
dialog.close(${pageName}Control.prefix + "Dialog");
}
}
// 저장
${pageName}Control.save = (info) => {
if (!info) return;
}
/**************************************************************************
* 초기 셋팅
**************************************************************************/
// 검색조건 초기값 셋팅
initForm${pageName} = () => {
// 달력 초기화
initDatepicker("frmEdit--${pageName}");
$("#rcptYmd--${pageName}").datepicker("setDate", new Date());
}
// 이벤트 설정
setEvent${pageName} = () => {
}
/**************************************************************************
* function
**************************************************************************/
// 우편번호 검색
fnZip${pageName} = () => {
}
// 저장
fnSave${pageName} = () => {
// validate 확인
if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return;
dialog.alert({
content : "현재 " + ${pageName}Control.prefixName + " 정보를 저장하시겠습니까?"
, onOK : () => {
${pageName}Control.save(${pageName}Fields.get());
}
});
}
/**************************************************************************
* script 진입
**************************************************************************/
$(document).ready(function() {
// 이벤트 설정
setEvent${pageName}();
// 화면 초기 설정
initForm${pageName}();
// Dataset 셋팅 - 단건일 경우 setData
${pageName}Control.setData([${payerInfo}]);
});
</script>

@ -220,10 +220,10 @@
<label class="w-px-120 bg-label-danger pe-2 col-form-label text-sm-center">납부자 정보</label> <label class="w-px-120 bg-label-danger pe-2 col-form-label text-sm-center">납부자 정보</label>
<!-- 버튼 우측 정렬 --> <!-- 버튼 우측 정렬 -->
<span class="container-window-btn-right"> <span class="container-window-btn-right">
<button type="button" class="btn btn-primary" id="btnPayerReset--${pageName}" title="납부자 초기화" onclick="btnPayerReset${pageName}();"> <button type="button" class="btn btn-primary" id="btnDeletePayer--${pageName}" title="납부자 초기화" onclick="fnDeletePayer${pageName}();">
납부자 초기화 납부자 초기화
</button> </button>
<button type="button" class="btn btn-primary" id="btnPayerUpdate--${pageName}" title="납부자 수정" onclick="fnBtnPayerUpdate${pageName}();"> <button type="button" class="btn btn-primary" id="btnUpdatePayer--${pageName}" title="납부자 수정" onclick="fnUpdatePayer${pageName}();">
납부자 수정 납부자 수정
</button> </button>
</span> </span>
@ -232,8 +232,8 @@
<div class="row g-1"> <div class="row g-1">
<!-- 납부자 명 --> <!-- 납부자 명 -->
<div class="col-md-4"> <div class="col-md-4">
<label for="rtpyrNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납부자 명</label> <label for="rtpyrNm--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end">납부자 명</label>
<input type="text" class="form-control w-40" id="rtpyrNm--${pageName}" name="rtpyrNm" data-map="RTPYR_NM" readonly /> <input type="text" class="form-control w-50" id="rtpyrNm--${pageName}" name="rtpyrNm" data-map="RTPYR_NM" readonly />
</div> </div>
<!-- 납부자 구분 코드 --> <!-- 납부자 구분 코드 -->
<div class="col-md-4"> <div class="col-md-4">
@ -668,7 +668,29 @@
// 납부자 정보 수정 // 납부자 정보 수정
updatePayer${pageName} = (params) => { updatePayer${pageName} = (params) => {
if (!params) return;
let dialogTitle = "납부자 정보";
if (params.rtpyrId == null || params.rtpyrId == "") {
dialogTitle = dialogTitle + " 등록";
} else {
dialogTitle = dialogTitle + " 수정";
}
ajax.get({
url : wctx.url(params.taskSeCd + "/payer/info.do")
, data : params || {}
, success : resp => {
dialog.open({
id : "payerDialog"
, title : dialogTitle
, content : resp
, size : "lg"
, onClose : () => { refreshDataInfo${pageName}(); } // callback 자료 조회
});
}
});
} }
// 자료 재조회 // 자료 재조회
@ -942,6 +964,34 @@
getInfoCrdnSttsCd${pageName}(params); getInfoCrdnSttsCd${pageName}(params);
} }
// 납부자 초기화
fnDeletePayer${pageName} = () => {
}
// 납부자 수정
fnUpdatePayer${pageName} = () => {
let crdnId = ${pageName}Control.dataset.getValue("CRDN_ID");
let sggCd = ${pageName}Control.dataset.getValue("SGG_CD");
let taskSeCd = ${pageName}Control.dataset.getValue("TASK_SE_CD");
let rtpyrId = ${pageName}Control.dataset.getValue("RTPYR_ID");
// 단속 ID 가 없다면.. return
if (crdnId == undefined || crdnId == "") {
return;
}
let params = {
callPurpose : "update"
, crdnId : crdnId
, sggCd : sggCd
, taskSeCd : taskSeCd
, rtpyrId : rtpyrId
};
updatePayer${pageName}(params);
}
/************************************************************************** /**************************************************************************
* script 진입 * script 진입
**************************************************************************/ **************************************************************************/

@ -45,7 +45,7 @@
<span class="container-page-btn"> <span class="container-page-btn">
<span class="container-window-btn-right"> <span class="container-window-btn-right">
<!-- 업무 버튼 --> <!-- 업무 버튼 -->
<button type="button" class="btn btn-primary" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button> <button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="저장" onclick="fnSave${pageName}()">저장</button>
</span> </span>
</span> </span>
</div> </div>

Loading…
Cancel
Save