사전 감경부과 수정.

main
jjh 11 months ago
parent 7dcea6243b
commit da10b3a8e4

@ -63,7 +63,7 @@ public interface LevyMapper extends AbstractMapper {
* @param crdnId ID
* @return
*/
DataObject selectCrdnInfo(String crdnId);
DataObject selectCrdn(String crdnId);
/** ID .
* @param crdnId ID

@ -112,57 +112,6 @@ public class LevyBean extends AbstractComponent {
return levyMapper.selectMaxLevyNo(req);
}
/** .
* @param levy
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createRductLevyList(LevyQuery req) {
// 변수 선언
String rtnMsg = "[F] "; // 처리 결과 메시지
// 최초 조회
List<DataObject> rductLevyTrgtList = levyMapper.selectRductLevyTrgtList(req);
// 조회 건수와 등록 대상 건수 확인
if (!req.getTnocs().equals(rductLevyTrgtList.get(0).string("TNOCS"))) {
rtnMsg = "[F] 조회된 총건수와 감경부과 등록 대상건수가 다릅니다.";
return rtnMsg;
}
// 총 페이지 건수 확인
int totalPageCnt = rductLevyTrgtList.get(0).number("TOT_CNT").intValue() / req.getFetchSize() + ((rductLevyTrgtList.get(0).number("TOT_CNT").intValue() % req.getFetchSize() == 0) ? 0 : 1);
// 페이지 건수 + 1 만큼 반복문 실행..
for (int iLoop = 1; iLoop <= totalPageCnt; iLoop++) {
if (iLoop != 1) {
req.setPageNum(iLoop);
rductLevyTrgtList = levyMapper.selectRductLevyTrgtList(req);
}
for (int jLoop = 0; jLoop < rductLevyTrgtList.size(); jLoop++) {
Levy levy = new Levy();
levy.setCrdnId(rductLevyTrgtList.get(jLoop).string("CRDN_ID")); // 단속 ID
levy.setLevyYmd(req.getLevyYmd()); // 부과 일자
levy.setFrstDudtYmd(req.getDudtYmd()); // 최초 납기 일자
levy.setDudtYmd(req.getDudtYmd()); // 납기 일자
rtnMsg = createRductLevy(levy);
if (rtnMsg.contains("[F]")) {
throw new RuntimeException(rtnMsg);
}
}
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** .
* @param levy
* @return
@ -179,7 +128,7 @@ public class LevyBean extends AbstractComponent {
ManagedUser managedUser = (ManagedUser)currentUser().getUser();
// 단속 정보
DataObject crdnInfo = levyMapper.selectCrdnInfo(levy.getCrdnId());
DataObject crdnInfo = levyMapper.selectCrdn(levy.getCrdnId());
if (!crdnInfo.string("LEVY_ID").equals("")) {
throw new RuntimeException("감경부과 등록 중 이미 감경부과된 자료가 있습니다."); // 예외를 발생시켜서 DB Rollback
@ -191,9 +140,9 @@ public class LevyBean extends AbstractComponent {
// 전용차로위반, 주정차위반 과태료
if ("BPV,PVS".contains(crdnInfo.string("TASK_SE_CD"))) {
String maxLevyNo = levyMapper.selectMaxLevyNo(new LevyQuery().setFyr(crdnInfo.string("TODAY").substring(0, 4))
.setAcntgSeCd(crdnInfo.string("ACNTG_SE_CD"))
.setTxitmCd(crdnInfo.string("TXITM_CD"))
.setSggCd(crdnInfo.string("SGG_CD"))); // 최종 부과번호+1 을 조회 한다.
.setAcntgSeCd(crdnInfo.string("ACNTG_SE_CD"))
.setTxitmCd(crdnInfo.string("TXITM_CD"))
.setSggCd(crdnInfo.string("SGG_CD"))); // 최종 부과번호+1 을 조회 한다.
levy.setFyr(levy.getLevyYmd().substring(0, 4)); // 회계연도
levy.setLevyNo(maxLevyNo); // 부과 번호
@ -281,6 +230,58 @@ public class LevyBean extends AbstractComponent {
return rtnMsg;
}
/** .
* @param levy
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createRductLevyList(LevyQuery req) {
// 변수 선언
String rtnMsg = "[F] "; // 처리 결과 메시지
// 최초 조회
List<DataObject> rductLevyTrgtList = levyMapper.selectRductLevyTrgtList(req);
// 조회 건수와 등록 대상 건수 확인
if (!req.getTnocs().equals(rductLevyTrgtList.get(0).string("TNOCS"))) {
rtnMsg = "[F] 조회된 총건수와 감경부과 등록 대상건수가 다릅니다.";
return rtnMsg;
}
// 총 페이지 건수 확인
int totalPageCnt = rductLevyTrgtList.get(0).number("TOT_CNT").intValue() / req.getFetchSize() + ((rductLevyTrgtList.get(0).number("TOT_CNT").intValue() % req.getFetchSize() == 0) ? 0 : 1);
// 페이지 건수 + 1 만큼 반복문 실행..
for (int iLoop = 1; iLoop <= totalPageCnt; iLoop++) {
if (iLoop != 1) {
req.setPageNum(iLoop);
rductLevyTrgtList = levyMapper.selectRductLevyTrgtList(req);
}
for (int jLoop = 0; jLoop < rductLevyTrgtList.size(); jLoop++) {
Levy levy = new Levy();
levy.setCrdnId(rductLevyTrgtList.get(jLoop).string("CRDN_ID")); // 단속 ID
levy.setLevyYmd(req.getLevyYmd()); // 부과 일자
levy.setFrstDudtYmd(req.getDudtYmd()); // 최초 납기 일자
levy.setDudtYmd(req.getDudtYmd()); // 납기 일자
rtnMsg = createRductLevy(levy);
if (rtnMsg.contains("[F]")) {
throw new RuntimeException(rtnMsg);
}
}
}
rtnMsg = "[S] 작업이 정상 처리 되었습니다.";
return rtnMsg;
}
/** , , .
* @param levy
* @return

@ -43,7 +43,7 @@ public class Levy01Controller extends ApplicationController {
reductionLevyTargetMain = "/010/main.do" // 사전 감경부과 대상 메인 화면
, getReductionLevyTargetList = "/010/list.do" // 사전 감경부과 대상 대장 목록 조회
, getReductionLevyTargetInfo = "/020/info.do" // 사전 감경부과 대상 정보
, createReductionLevyList = "/020/createRductLevyList.do" // 사전 감경부과 대장 등록
, createReductionLevyList = "/020/createRductLevyList.do" // 사전 감경부과 등록
, levyMain = "/050/main.do" // 부과 관리 메인 화면
, getLevyList = "/050/list.do" // 부과 대장 목록 조회
;
@ -71,7 +71,8 @@ public class Levy01Controller extends ApplicationController {
addCodes(commonCodes, mav, "FIM004", "FIM005", "FIM006", "FIM061", "FIM064");
return mav.addObject("pageName", "levy01010") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
return mav
.addObject("pageName", "levy01010") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
.addObject("infoPrefix", "rductLevyTrgt") // prefix
.addObject("sggCd", managedUser.getOrgID()) // 시군구 코드(SGG_CD)
.addObject("FIM054List", commonCodes.get("FIM054")) // 업무 구분 코드(TASK_SE_CD)
@ -182,13 +183,14 @@ public class Levy01Controller extends ApplicationController {
ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/levy/levy01020-info");
// 이전에 조회되었던 총건수, 금액
rductLevyYmdInfo.put("TNOCS", req.getTnocs());
rductLevyYmdInfo.put("GRAMT", req.getGramt());
return mav
.addObject("pageName", "levy01020")
.addObject("callPurpose", req.getCallPurpose()) // 호출 용도
.addObject("levyQuery", json ? req : toJson(req)) // Query
.addObject("callPurpose", req.getCallPurpose()) // 호출 용도
.addObject("levyQuery", json ? req : toJson(req)) // Query
.addObject("rductLevyYmdInfo", json ? rductLevyYmdInfo : toJson(rductLevyYmdInfo))
;
}

@ -291,7 +291,7 @@ public class Sndb01Controller extends ApplicationController {
DataObject taskInfo = taskService.getTaskInfo(new CmmnQuery().setSggCd(req.getSggCd())
.setTaskSeCd(req.getTaskSeCd()));
int advntceDaycnt = taskInfo.number("ADVNTCE_DAYCNT").intValue();
int advntceDayCnt = taskInfo.number("ADVNTCE_DAY_CNT").intValue();
boolean json = jsonResponse();
@ -302,7 +302,7 @@ public class Sndb01Controller extends ApplicationController {
.addObject("taskSeCd", req.getTaskSeCd())
.addObject("sndngSeCd", req.getSndngSeCd()) // 발송 구분 코드
.addObject("vltnCd", req.getVltnCd()) // 위반 코드
.addObject("advntceDaycnt", advntceDaycnt) // 사전통지 일수
.addObject("advntceDayCnt", advntceDayCnt) // 사전통지 일수
.addObject("advntceTrgtDtl", json ? advntceTrgts : toJson(advntceTrgts)) // 사전통지 발송 대상 정보
;
}

@ -11,7 +11,7 @@
<result property="sggCd" column="SGG_CD" /> <!-- 시군구 코드 -->
<result property="taskSeCd" column="TASK_SE_CD" /> <!-- 업무 구분 코드 -->
<result property="taskSeNm" column="TASK_SE_NM" /> <!-- 업무 구분 명 -->
<result property="advntceDaycnt" column="ADVNTCE_DAYCNT" /> <!-- 사전통지 일-->
<result property="advntceDayCnt" column="ADVNTCE_DAY_CNT" /> <!-- 사전통지 일 -->
<result property="advntceRductRt" column="ADVNTCE_RDUCT_RT" /> <!-- 사전통지 감경 율 -->
<result property="wksnRductRt" column="WKSN_RDUCT_RT" /> <!-- 사회적약자 감경 율 -->
<result property="ffnlgAdtnYmd" column="FFNLG_ADTN_YMD" /> <!-- 과태료 가산 일자 -->
@ -29,7 +29,7 @@
SELECT T.SGG_CD /* 시군구 코드 */
, T.TASK_SE_CD /* 업무 구분 코드 */
, T.TASK_SE_NM /* 업무 구분 명 */
, T.ADVNTCE_DAYCNT /* 사전통지 일수 */
, T.ADVNTCE_DAY_CNT /* 사전통지 일수 */
, T.ADVNTCE_RDUCT_RT /* 사전통지 감경 율 */
, T.WKSN_RDUCT_RT /* 사회적약자 감경 율 */
, T.FFNLG_ADTN_YMD /* 과태료 가산 일자 */
@ -69,12 +69,11 @@
<select id="selectAdvntceYmdInfo" parameterType="map" resultType="dataobject">/* 사전통지 정보 객체 가져오기(taskMapper.selectAdvntceYmdInfo) */
SELECT SGG_CD /* 시군구 코드 */
, TASK_SE_CD /* 업무 구분 코드 */
, ADVNTCE_DAYCNT /* 사전통지 일수 */
, ADVNTCE_DAY_CNT /* 사전통지 일수 */
, ADVNTCE_RDUCT_RT /* 사전통지 감경 율 */
, (CONCAT(ADVNTCE_RDUCT_RT, '%')) AS RDUCT_RT /* 감경 율 */
, DATE_FORMAT(CURRENT_DATE, '%Y') AS FYR /* 회계 연도 */
, DATE_FORMAT(CURRENT_DATE, '%Y%m%d') AS LEVY_YMD /* 부과 일자 */
, DATE_FORMAT(DATE_ADD(CURRENT_DATE, INTERVAL ADVNTCE_DAYCNT DAY), '%Y%m%d') AS DUDT_YMD /* 납기 일자 */
, DATE_FORMAT(DATE_ADD(CURRENT_DATE, INTERVAL ADVNTCE_DAY_CNT DAY), '%Y%m%d') AS DUDT_YMD /* 납기 일자 */
FROM TB_TASK
WHERE SGG_CD = #{sggCd}
AND TASK_SE_CD = #{taskSeCd}
@ -88,7 +87,7 @@
SGG_CD /* 시군구 코드 */
, TASK_SE_CD /* 업무 구분 코드 */
, TASK_SE_NM /* 업무 구분 명 */
, ADVNTCE_DAYCNT /* 사전통지 일수 */
, ADVNTCE_DAY_CNT /* 사전통지 일수 */
, ADVNTCE_RDUCT_RT /* 사전통지 감경 율 */
, WKSN_RDUCT_RT /* 사회적약자 감경 율 */
, FFNLG_ADTN_YMD /* 과태료 가산 일자 */
@ -105,7 +104,7 @@
#{task.sggCd} /* 시군구 코드 */
, #{task.taskSeCd} /* 업무 구분 코드 */
, #{task.taskSeNm} /* 업무 구분 명 */
, #{task.advntceDaycnt} /* 사전통지 일수 */
, #{task.advntceDayCnt} /* 사전통지 일수 */
, #{task.advntceRductRt} /* 사전통지 감경 율 */
, #{task.wksnRductRt} /* 사회적약자 감경 율 */
, #{task.ffnlgAdtnYmd} /* 과태료 가산 일자 */
@ -123,7 +122,7 @@
<update id="updateTask" parameterType="map">/* 업무 정보 수정(taskMapper.updateTask) */
UPDATE TB_TASK
SET TASK_SE_NM = #{task.taskSeNm} /* 업무 구분 명 */
, ADVNTCE_DAYCNT = #{task.advntceDaycnt} /* 사전통지 일수 */
, ADVNTCE_DAY_CNT = #{task.advntceDayCnt} /* 사전통지 일수 */
, ADVNTCE_RDUCT_RT = #{task.advntceRductRt} /* 사전통지 감경 율 */
, WKSN_RDUCT_RT = #{task.wksnRductRt} /* 사회적약자 감경 율 */
, FFNLG_ADTN_YMD = #{task.ffnlgAdtnYmd} /* 과태료 가산 일자 */

@ -93,8 +93,8 @@
<select id="selectRductLevyTrgtList" parameterType="map" resultType="dataobject">/* 감경부과 대상 목록 조회(levyMapper.selectRductLevyTrgtList) */
<include refid="utility.paging-prefix" />
SELECT COUNT(*) OVER() AS TNOCS
, SUM(C.ADVNTCE_AMT) OVER() AS GRAMT
SELECT COUNT(*) OVER() AS TNOCS
, SUM(C.FFNLG_AMT) OVER() AS GRAMT
, C.CRDN_ID /* 단속 ID */
, C.SGG_CD /* 시군구 코드 */
, C.TASK_SE_CD /* 업무 구분 코드 */
@ -507,7 +507,7 @@
<include refid="utility.orderBy" />
</select>
<select id="selectCrdnInfo" parameterType="map" resultType="dataobject">/* 단속 정보 가져오기(levyMapper.selectCrdnInfo) */
<select id="selectCrdn" parameterType="map" resultType="dataobject">/* 단속 정보 가져오기(levyMapper.selectCrdn) */
SELECT C.CRDN_ID /* 단속 ID */
, C.SGG_CD /* 시군구 코드 */
, C.TASK_SE_CD /* 업무 구분 코드 */
@ -539,7 +539,8 @@
, C.ADTN_AMT
, C.MINUS_AMT
, C.RCVMT_AMT
, C.BFR_CRDN_ID
, (SELECT GET_MASK_DATETIME(C.CRDN_YMD, '-', C.CRDN_TM, ':') FROM DUAL) AS CRDN_YMD_TM_MASK /* 단속 일시 마스크 */
, (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM /* 단속 상태 명 */
, V.VLTN_CD /* 위반 코드 */
, V.VLTN_ARTCL /* 위반 항목 */
, V.VLTN_LAW_NM /* 위반 법 명 */
@ -550,13 +551,17 @@
, V.TXITM_CD /* 세목 코드 */
, V.OPER_ITEM_CD /* 운영 항목 코드 */
, V.SPCL_BIZ_CD /* 특별회계 사업 코드 */
, P.RTPYR_ID /* 납부자 ID */
, P.RTPYR_NO /* 납부자 번호 */
, P.RTPYR_NM /* 납부자 명 */
, P.RTPYR_STTS_CD /* 납부자 상태 코드 */
, (SELECT GET_CODE_NM('FIM014', P.RTPYR_STTS_CD) FROM DUAL) AS RTPYR_STTS_NM /* 납부자 상태 명 */
, L.LEVY_ID /* 부과 ID */
, <include refid="utility.today" /> AS TODAY /* 오늘 일자 */
, (SELECT GET_MASK_DATETIME(C.CRDN_YMD, '-', C.CRDN_TM, ':') FROM DUAL) AS CRDN_YMD_TM_MASK /* 단속 일시 마스크 */
, (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM /* 단속 상태 명 */
, <include refid="utility.today" /> AS TODAY /* 오늘 일자 */
FROM TB_CRDN C
INNER JOIN TB_VLTN V ON (C.VLTN_ID = V.VLTN_ID AND C.SGG_CD = V.SGG_CD AND C.TASK_SE_CD = V.TASK_SE_CD AND V.USE_YN = 'Y')
LEFT OUTER JOIN TB_LEVY L ON (C.CRDN_ID = L.CRDN_ID AND L.DEL_YN = 'N')
INNER JOIN TB_VLTN V ON (C.VLTN_ID = V.VLTN_ID)
LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
LEFT OUTER JOIN TB_LEVY L ON (C.CRDN_ID = L.CRDN_ID AND L.DEL_YN = 'N')
WHERE C.CRDN_ID = #{crdnId} /* 단속 ID */
AND C.DEL_YN = 'N' /* 삭제 여부 */
</select>

@ -368,7 +368,7 @@
}
ajax.get({
url : wctx.url("/" + params.taskSeCd + ${pageName}PrefixUrl + "/020/info.do?openerPageName=${pageName}")
url : ${pageName}Control.urls.getInfo + "?openerPageName=${pageName}"
, data : params || {}
, success : resp => {
dialog.open({

@ -5,7 +5,7 @@
<div class="content-wrapper">
<!-- Content -->
<div class="container-xxl flex-grow-1 px-0">
<c:set var="prefixName" scope="request">사전 감경부과 대상</c:set>
<c:set var="prefixName" scope="request">사전 감경부과</c:set>
<!-- Page Body -->
<div class="card">
@ -357,7 +357,7 @@
}
ajax.get({
url : wctx.url("/" + params.taskSeCd + ${pageName}PrefixUrl + "/020/info.do")
url : ${pageName}Control.urls.getInfo
, data : params || {}
, success : resp => {
dialog.open({
@ -516,10 +516,16 @@
return;
}
// DataTables(그리드) 타이틀
let headerInfo = $("#theadTr--${pageName} th").not(".dummy-th").not(":eq(0)").getHeaderInfo();
${pageName}Control.query.excelTitle = headerInfo.excelTitle;
${pageName}Control.query.excelTitleWidth = headerInfo.excelTitleWidth;
// DataTables(그리드) 데이터
let colDefs = getColDefs($("#theadTr--${pageName} th").not(".dummy-th").not(":eq(0)")
, $($("#${infoPrefix}Row--${pageName}")[0].content).find("td").not(".dummy-td").not(":eq(0)"));
${pageName}Control.query.colDefs = colDefs;
${pageName}Control.download();
}
@ -596,6 +602,7 @@
// URL 설정
setURL${pageName} = (taskSeCd) => {
${pageName}Control.urls.load = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/010/list.do"); // 조회
${pageName}Control.urls.getInfo = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/020/info.do"); // 등록
}
// 기본 데이터 설정

@ -14,7 +14,6 @@
<!-- hidden -->
<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="advntceDaycnt--${pageName}" name="advntceDaycnt" data-map="ADVNTCE_DAYCNT" />
<div class="row g-1">
<!-- 총건수 -->
@ -23,6 +22,11 @@
<input type="text" class="form-control w-px-80 text-end" id="tnocs--${pageName}" name="tnocs" data-map="TNOCS" />
<input type="text" class="form-control w-px-140 text-end" id="gramt--${pageName}" name="gramt" data-map="GRAMT" />
</div>
<!-- 감경 율 -->
<div class="col-md-12">
<label for="advntceRductRt--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">감경율</label>
<input type="text" class="form-control w-px-80 text-end" id="advntceRductRt--${pageName}" name="advntceRductRt" data-map="ADVNTCE_RDUCT_RT" autocomplete="off" required /> %
</div>
<!-- 회계연도 -->
<div class="col-md-12">
<label for="fyr--${pageName}" class="w-px-120 bg-lighter pe-2 col-form-label text-sm-end required">회계연도</label>
@ -83,10 +87,6 @@
, prefixName : "감경부과"
, keymapper : info => info ? info.CRDN_ID : ""
, dataGetter : obj => obj.rductLevyInfo
, urls : {
create : wctx.url(${pageName}PrefixUrl + "/020/create.do") // 등록
, update : wctx.url(${pageName}PrefixUrl + "/020/update.do") // 수정
}
, formats : {
TNOCS : numberFormat
, GRAMT : numberFormat
@ -194,18 +194,21 @@
// 기본 데이터 설정
setFormData${pageName} = () => {
$("#tnocs--${pageName}").prop("readonly", true); // 총건수
$("#gramt--${pageName}").prop("readonly", true); // 총금액
$("#tnocs--${pageName}").prop("readonly", true); // 총건수
$("#gramt--${pageName}").prop("readonly", true); // 총금액
$("#advntceRductRt--${pageName}").prop("readonly", true); // 감경율
if (${pageName}CallPurpose == "view") {
// input 요소들을 disabled
$("#frmEdit--${pageName}").find("input,textarea,select").prop("disabled", true);
// button 요소들을 disabled
$("#btnLevyYmd--${pageName}").prop("disabled", true); // 부과 일자 버튼
$("#btnDudtYmd--${pageName}").prop("disabled", true); // 납기 일자 버튼
$("#btnSave--${pageName}").prop("disabled", true); // 저장 버튼
$("#btnLevyYmd--${pageName}").prop("disabled", true); // 부과 일자 버튼
$("#btnDudtYmd--${pageName}").prop("disabled", true); // 납기 일자 버튼
$("#btnSave--${pageName}").prop("disabled", true); // 저장 버튼
} else if (${pageName}CallPurpose == "create") {
//
// let advntceDayCnt = ${pageName}Control.dataset.getValue("ADVNTCE_DAY_CNT");
// $("#levyYmd--${pageName}").datepicker("setDate", new Date());
// $("#dudtYmd--${pageName}").datepicker("setDate", DateUtil.getDateDay(advntceDayCnt).date);
} else if (${pageName}CallPurpose == "update") {
//
}

@ -325,7 +325,7 @@
initDatepicker("frmEdit--${pageName}");
$("#sndngYmd--${pageName}").datepicker("setDate", new Date());
$("#sndngEndYmd--${pageName}").datepicker("setDate", DateUtil.getDateDay(${advntceDaycnt}).date);
$("#sndngEndYmd--${pageName}").datepicker("setDate", DateUtil.getDateDay(${advntceDayCnt}).date);
}
/**************************************************************************

Loading…
Cancel
Save