From b7c95e03490d02a399e6839cdda6d43c679dd4f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Thu, 18 Sep 2025 18:00:44 +0900 Subject: [PATCH 1/7] =?UTF-8?q?=EB=B6=80=EA=B3=BC=EC=98=88=EA=B3=A0=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EC=9E=91=EC=97=85=20=EC=A7=84=ED=96=89?= =?UTF-8?q?=EC=A4=91...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/model/LevyPrvntcActInfoVO.java | 3 + .../main/CrdnLevyPrvntcMapper_maria.xml | 3 + .../main/crdnLevyPrvntc/levyPrvntcPopup.jsp | 140 +++++++++--------- 3 files changed, 77 insertions(+), 69 deletions(-) diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java index 774845c..160860a 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java @@ -40,8 +40,10 @@ public class LevyPrvntcActInfoVO extends PagingVO { private String crcLaw1; //시정법 private String impltLaw1; //이행법 private String strctIdxCd; //구조지수코드 + private BigDecimal strctIdx; //구조지수 private String strctIdxCdNm; //구조지수명 private String usgIdxCd; //용도지수코드 + private BigDecimal usgIdx; //용도지수 private String usgIdxCdNm; //용도지수명 private BigDecimal area; //면적 @@ -49,6 +51,7 @@ public class LevyPrvntcActInfoVO extends PagingVO { private BigDecimal bldgNewPrcCrtrAmt; //건물 신축 가격 기준액 private String pstnIdxNo; //위치지수 NO private BigDecimal pstnIdx; //위치지수 + private String elpsYrRdvlrtYr; //경과년수별잔가율-최초위반행위 년도 private BigDecimal elpsYrRdvlrt; //경과년수별잔가율 private BigDecimal bscsCstrnYBdstCmpttnRt; //기초공사율(철콘) private BigDecimal bscsCstrnNBdstCmpttnRt; //기초공사율(철콘 이외) diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml index 7a600b9..21b5b2a 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml @@ -22,13 +22,16 @@ vltn1.CRC_LAW as CRC_LAW_1, t3.STRCT_IDX_CD, strct.STRCT_NM AS STRCT_IDX_CD_NM, + strct.STRCT_IDX, t3.USG_IDX_CD, usg.USG_NM AS USG_IDX_CD_NM, + usg.USG_IDX AS USG_IDX, t3.AREA, bnpca.no, -- 건물기준가액 NO bnpca.BLDG_NEW_PRC_CRTR_AMT, -- 건물기준시가액 pi.PSTN_IDX_NO, -- 위치지수 NO pi.PSTN_IDX, -- 위치지수 + substring(t3.ACT_BGNG_YMD,1,4) as ELPS_YR_RDVLRT_YR, CASE WHEN (CAST(substring(t3.ACT_BGNG_YMD,1,4) as SIGNED)-CAST(t1.CRDN_YR as SIGNED)) >= strct.RDVLRT_CN_YR_CNT THEN strct.LAST_YR_RDVLRT ELSE 1-((CAST(substring(t3.ACT_BGNG_YMD,1,4) as SIGNED)-CAST(t1.CRDN_YR as SIGNED)) * strct.DPRT) end as ELPS_YR_RDVLRT, -- 경과 연도 잔가율 diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp index 225ee89..879f825 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp @@ -160,9 +160,10 @@ + <%-- 해당년도 시가표준액 계산 --%>
- +
@@ -181,25 +182,15 @@ - + - + - + - + - + - - + + - - - - - - + + + + + +
${crdnData.crdnYr} 년도 건물
기준시가액
시가표준액
(1,000원미만절삭)
- - X - - X - - X - - X - - X =
@@ -327,8 +318,10 @@ } }, { header: '구조지수코드', name: 'strctIdxCd', align: 'center', width: 60, hidden: true}, + { header: '구조지수', name: 'strctIdx', align: 'right', width: 150, formatter: function(e){ return e.value != null ? Number(e.value).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) : ''; } }, { header: '구조지수명', name: 'strctIdxCdNm', align: 'left', width: 150}, { header: '용도지수코드', name: 'usgIdxCd', align: 'center', width: 60, hidden: true}, + { header: '용도지수', name: 'usgIdx', align: 'right', formatter: function(e){ return e.value != null ? Number(e.value).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) : ''; } }, { header: '용도지수명', name: 'usgIdxCdNm', align: 'left'}, { header: '건물신축가격기준액NO', name: 'no', hidden: true }, { header: '건물신축가격기준액', name: 'bldgNewPrcCrtrAmt', align: 'right', width: 140, formatter: function(e){ return e.value != null ? Number(e.value).toLocaleString() : ''; } }, @@ -398,18 +391,16 @@ // 렌더링완료 후 check box this.instance.on('onGridUpdated', function() { - var allRows = self.instance.getData(); - var rowKey = null; - allRows.forEach(function(row) { - if (row.selected) { - rowKey = row.rowKey - } - // 1. 체크박스 선택 - self.instance.check(rowKey); - }); }); + this.instance.on('focusChange', function(ev) { + if (ev.rowKey !== undefined && ev.rowKey !== null) { + var rowData = self.instance.getRow(ev.rowKey); + window.handleRowSelection(rowData); + } + }); + }, }, @@ -447,6 +438,27 @@ e.preventDefault(); self.cancel(); }); + + $('#bscsCstrnSeCd').on('change', function() { + var focusedCell = self.grid.instance.getFocusedCell(); + if (focusedCell && focusedCell.rowKey !== null) { + var rowData = self.grid.instance.getRow(focusedCell.rowKey); + if (rowData) { + var selectedValue = $(this).val(); + var rate = 0; + if (selectedValue === '1') { + rate = rowData.bscsCstrnYBdstCmpttnRt; + } else if (selectedValue === '2') { + rate = rowData.bscsCstrnNBdstCmpttnRt; + } else if (selectedValue === '3') { + rate = rowData.dupEtbldgBdstCmpttnRt; + } else { + rate = ""; + } + $('#bscsCstrnRt').val(rate); + } + } + }); }, /** @@ -530,42 +542,6 @@ }; }, - /** - * 그리드에서 선택된 이행 대상자 정보 수집 - * 중요한 로직 주석: 체크박스가 선택된 행의 데이터를 수집하여 이행 대상자 정보 배열을 생성합니다. - */ - collectSelectedTrprInfo: function() { - var selectedTrprInfoList = []; - var checkedRowKeys = this.grid.instance.getCheckedRowKeys(); - - if (checkedRowKeys && checkedRowKeys.length > 0) { - for (var i = 0; i < checkedRowKeys.length; i++) { - var rowKey = checkedRowKeys[i]; - var rowData = this.grid.instance.getRow(rowKey); - - if (rowData) { - // 이행 대상자 정보 객체 생성 - var trprInfo = { - ownrActrInfoId: rowData.ownrActrInfoId, - impltTrprSeCd: rowData.impltTrprSeCd || '1', // 1:소유자, 2:행위자 (기본값: 소유자) - impltTrprFlnm: rowData.impltTrprFlnm, - impltTrprZip: rowData.impltTrprZip, - impltTrprAddr: rowData.impltTrprAddr, - impltTrprDaddr: rowData.impltTrprDaddr, - actNo: rowData.actNo, - actTypeCd: rowData.actTypeCd, - lotnoMno: rowData.lotnoMno, - lotnoSno: rowData.lotnoSno - }; - - selectedTrprInfoList.push(trprInfo); - } - } - } - - return selectedTrprInfoList; - }, - /** * 폼 유효성 검증 */ @@ -593,6 +569,32 @@ }; + /** + * 그리드 행 선택시 실행되는 함수 + * @param rowData + */ + window.handleRowSelection = function(rowData) { + if (!rowData) return; + $('#bscsCstrnRt').val(''); + + $('#bldgNewPrcCrtrAmt_nm').val(rowData.bldgNewPrcCrtrAmt ? parseFloat(rowData.bldgNewPrcCrtrAmt).toLocaleString() : ''); + $('#bldgNewPrcCrtrAmt').val(); + + $('#strctIdx_nm').val(rowData.strctIdxCdNm); + $('#strctIdx').val(rowData.strctIdx); + + $('#usgIdx_nm').val(rowData.usgIdxCdNm); + $('#usgIdx').val(rowData.usgIdx); + + $('#pstnIdx_nm').val(rowData.oalp); + $('#pstnIdx').val(rowData.pstnIdx); + + $('#elpsYrRdvlrt_yr').val(rowData.elpsYrRdvlrtYr); + $('#elpsYrRdvlrt').val(rowData.elpsYrRdvlrt); + + $('#bscsCstrnSeCd').trigger('change'); + }; + /** * 행정처분 간격일 자동 계산 함수 * 중요한 로직 주석: 시작일과 종료일 입력시 자동으로 간격일을 계산한다. From 0d41aa39d3cb11575a65bb502b1b05ecb8bb10a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Fri, 19 Sep 2025 10:00:44 +0900 Subject: [PATCH 2/7] =?UTF-8?q?=EB=B6=80=EA=B3=BC=EC=98=88=EA=B3=A0=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EC=9E=91=EC=97=85=20=EC=9D=BC=EB=8B=A8=20?= =?UTF-8?q?=EC=A4=91=EC=A7=80,=20=ED=96=89=EC=9C=84=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=ED=85=8C=EC=9D=B4=EB=B8=94=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EC=A0=81=EC=9A=A9=20=EB=B0=8F=20=EB=A9=B4=EC=A0=81?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC=20=EC=9A=B0=EC=84=A0=20=EC=A7=84=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/crdnLevyPrvntc/levyPrvntcPopup.jsp | 56 +++++++++++++++---- .../WEB-INF/views/layouts/base/default.jsp | 5 +- .../WEB-INF/views/layouts/popup/default.jsp | 5 +- src/main/webapp/resources/xit/common_util.js | 1 + 4 files changed, 53 insertions(+), 14 deletions(-) diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp index 879f825..cb4cf31 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp @@ -182,7 +182,7 @@ 시가표준액
(1,000원미만절삭) - + X X @@ -201,16 +201,16 @@ = - - + + - - - - - - + + + + + +
@@ -455,10 +455,17 @@ } else { rate = ""; } - $('#bscsCstrnRt').val(rate); + $('#bscsCstrnRt').val(rate).trigger('input'); + + // 자동계산 함수 호출 + calculateAuto(); } } }); + + // 계산에 사용되는 입력 필드 변경 시 자동 계산 호출 + var calculationInputs = '#bldgNewPrcCrtrAmt, #strctIdx, #usgIdx, #pstnIdx, #elpsYrRdvlrt'; + $(document).on('change', calculationInputs, calculateAuto); }, /** @@ -569,6 +576,31 @@ }; + /** + * 자동 계산 + * @description 각 항목의 값을 곱하여 건축물과세시가와 시가표준액을 계산합니다. + * - 건축물과세시가 = 건물기준시가액 * 구조지수 * 용도지수 * 위치지수 * 경과년수별잔가율 * 기초공사율 + * - 시가표준액 = 건축물과세시가에서 1,000원 미만 절사 + */ + function calculateAuto() { + var bldgNewPrcCrtrAmt = parseFloat($('#bldgNewPrcCrtrAmt').inputmask('unmaskedvalue')) || 0; + var strctIdx = parseFloat($('#strctIdx').inputmask('unmaskedvalue')) || 0; + var usgIdx = parseFloat($('#usgIdx').inputmask('unmaskedvalue')) || 0; + var pstnIdx = parseFloat($('#pstnIdx').inputmask('unmaskedvalue')) || 0; + var elpsYrRdvlrt = parseFloat($('#elpsYrRdvlrt').inputmask('unmaskedvalue')) || 0; + var bscsCstrnRt = parseFloat($('#bscsCstrnRt').inputmask('unmaskedvalue')) || 0; + + // 건축물과세시가 계산 + var taxableMarketPrice = bldgNewPrcCrtrAmt * strctIdx * usgIdx * pstnIdx * elpsYrRdvlrt * bscsCstrnRt; + + // 시가표준액 계산: 1,000원 미만 절사 + var standardMarketPrice = Math.floor(taxableMarketPrice / 1000) * 1000; + + // 계산된 값을 input 필드에 설정 + $('#taxableMarketPrice').val(Math.round(taxableMarketPrice)).trigger('focus'); + $('#standardMarketPrice').val(standardMarketPrice).trigger('focus'); + } + /** * 그리드 행 선택시 실행되는 함수 * @param rowData @@ -577,8 +609,8 @@ if (!rowData) return; $('#bscsCstrnRt').val(''); - $('#bldgNewPrcCrtrAmt_nm').val(rowData.bldgNewPrcCrtrAmt ? parseFloat(rowData.bldgNewPrcCrtrAmt).toLocaleString() : ''); - $('#bldgNewPrcCrtrAmt').val(); + $('#bldgNewPrcCrtrAmt_nm').val(rowData.bldgNewPrcCrtrAmt).trigger('focus'); + $('#bldgNewPrcCrtrAmt').val(rowData.bldgNewPrcCrtrAmt).trigger('focus'); $('#strctIdx_nm').val(rowData.strctIdxCdNm); $('#strctIdx').val(rowData.strctIdx); diff --git a/src/main/webapp/WEB-INF/views/layouts/base/default.jsp b/src/main/webapp/WEB-INF/views/layouts/base/default.jsp index 97c611c..68933b4 100644 --- a/src/main/webapp/WEB-INF/views/layouts/base/default.jsp +++ b/src/main/webapp/WEB-INF/views/layouts/base/default.jsp @@ -56,7 +56,10 @@ - + <%----%> + <%-- inputmask 변경 테스트 필요 --%> + <%----%> + <%-- tui grid --%> diff --git a/src/main/webapp/WEB-INF/views/layouts/popup/default.jsp b/src/main/webapp/WEB-INF/views/layouts/popup/default.jsp index 2304a34..87034a8 100644 --- a/src/main/webapp/WEB-INF/views/layouts/popup/default.jsp +++ b/src/main/webapp/WEB-INF/views/layouts/popup/default.jsp @@ -52,7 +52,10 @@ - + <%----%> + <%-- inputmask 변경 테스트 필요 --%> + <%----%> + <%-- tui grid --%> diff --git a/src/main/webapp/resources/xit/common_util.js b/src/main/webapp/resources/xit/common_util.js index 25aa10c..e6a63f4 100644 --- a/src/main/webapp/resources/xit/common_util.js +++ b/src/main/webapp/resources/xit/common_util.js @@ -84,6 +84,7 @@ $(document).ready(function () { }); }); + // 중요로직: Strct_Idx_Cd 전용 마스크 - 숫자 3자리 $("body").on("focus", ".strctIdxCdMask", function () { $(this).inputmask({ From cc10373e32ab8ff0ca6b3d0a2366e9f2c5991896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Fri, 19 Sep 2025 13:03:27 +0900 Subject: [PATCH 3/7] =?UTF-8?q?=ED=96=89=EC=9C=84=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=ED=85=8C=EC=9D=B4=EB=B8=94=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EC=A0=81=EC=9A=A9=20=EB=B0=8F=20=EB=A9=B4=EC=A0=81?= =?UTF-8?q?=20=EC=BB=AC=EB=9F=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DB-DDL/maria/ddl/ibmsdb/tb_act_info.sql | 5 +- .../controller/CrdnActInfoController.java | 16 ++++++ .../crdnActInfo/mapper/CrdnActInfoMapper.java | 6 +++ .../crdnActInfo/model/CrdnActInfoVO.java | 3 ++ .../service/CrdnActInfoService.java | 6 +++ .../service/impl/CrdnActInfoServiceImpl.java | 6 +++ .../crdnActInfo/CrdnActInfoMapper_maria.xml | 47 +++++++++++++--- .../main/CrdnImpltTaskMapper_maria.xml | 8 +-- .../main/CrdnLevyPrvntcMapper_maria.xml | 4 +- .../crdnActInfo/crdnActInfoRegistPopup.jsp | 53 ++++++++++++++++--- .../main/detailView-actInfoGrid.jsp | 6 --- 11 files changed, 134 insertions(+), 26 deletions(-) diff --git a/DB-DDL/maria/ddl/ibmsdb/tb_act_info.sql b/DB-DDL/maria/ddl/ibmsdb/tb_act_info.sql index 434866d..4c963e4 100644 --- a/DB-DDL/maria/ddl/ibmsdb/tb_act_info.sql +++ b/DB-DDL/maria/ddl/ibmsdb/tb_act_info.sql @@ -24,7 +24,10 @@ create table tb_act_info DEL_YN char not null comment '삭제 여부', DEL_DT datetime null comment '삭제 일시', DLTR varchar(11) null comment '삭제자', - ACT_NO varchar(1) null comment '행위 번호' + ACT_NO varchar(1) null comment '행위 번호', + ACTN_YMD varchar(8) null, + ACTN_AREA decimal(10, 2) null, + ACTN_RMRK varchar(1000) null ) comment '행위 정보'; diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java index 692fa74..e9e052d 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/controller/CrdnActInfoController.java @@ -131,6 +131,22 @@ public class CrdnActInfoController { return mav; } + /** + * 전체 위반행위코드 목록 조회 (AJAX) + * @return 전체 위반행위코드 목록 + */ + @Operation(summary = "전체 위반행위코드 조회", description = "전체 위반행위코드 목록을 조회합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "조회 성공"), + @ApiResponse(responseCode = "500", description = "서버 오류") + }) + @PostMapping("/getAllActType.ajax") + public ResponseEntity getAllActType( @ModelAttribute CrdnActTypeVO vo ) { + log.debug("전체 위반행위코드 조회 요청"); + List list = service.getAllActType(vo); + return ApiResponseUtil.success(list); + } + /** * 전체 구조지수 목록 조회 (AJAX) * @return 전체 구조지수 목록 diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/mapper/CrdnActInfoMapper.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/mapper/CrdnActInfoMapper.java index f87c3bf..fbe5ea0 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/mapper/CrdnActInfoMapper.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/mapper/CrdnActInfoMapper.java @@ -54,6 +54,12 @@ public interface CrdnActInfoMapper { */ int deleteActInfo(CrdnActInfoVO vo); + /** + * 전체 위반행위코드 목록 조회 + * @return 전체 위반행위코드 목록 + */ + List getAllActType(CrdnActTypeVO vo); + /** * 전체 구조지수 목록 조회 * @return 전체 구조지수 목록 diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/model/CrdnActInfoVO.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/model/CrdnActInfoVO.java index 798cfe0..37df4bc 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/model/CrdnActInfoVO.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/model/CrdnActInfoVO.java @@ -37,6 +37,9 @@ public class CrdnActInfoVO extends PagingVO { private BigDecimal vrtc; // 세로 private BigDecimal area; // 면적 private String rmrk; // 비고 + private String actnYmd; // 조치 일자 + private BigDecimal actnArea; // 조치 면적 + private String actnRmrk; // 조치 비고 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnActInfoService.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnActInfoService.java index d980105..b4cd8a0 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnActInfoService.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/CrdnActInfoService.java @@ -66,6 +66,12 @@ public interface CrdnActInfoService { */ int deleteActInfos(List actInfoIds); + /** + * 전체 위반행위코드 목록 조회 + * @return 전체 위반행위코드 목록 + */ + List getAllActType(CrdnActTypeVO vo); + /** * 전체 구조지수 목록 조회 * @return 전체 구조지수 목록 diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java index e3464f3..0a2df80 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/service/impl/CrdnActInfoServiceImpl.java @@ -140,6 +140,12 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C return mapper.deleteActInfo(vo); } + @Override + public List getAllActType(CrdnActTypeVO vo) { + log.debug("전체 위반행위코드 조회"); + return mapper.getAllActType(vo); + } + @Override public List getAllStrctIdx(CrdnStrctIdxVO vo) { log.debug("전체 구조지수 조회"); diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml index ecef45e..7c25df7 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnActInfoMapper_maria.xml @@ -16,7 +16,7 @@ a.PSTN_INFO_ID, a.ACT_BGNG_YMD, a.ACT_TYPE_CD, - act.CD_NM AS ACT_TYPE_CD_NM, + act.VLTN_BDST AS ACT_TYPE_CD_NM, a.ACT_NO, a.VLTN_LWRG_CD_1, vltn1.VLTN_LAW AS VLTN_LAW_1, @@ -31,6 +31,9 @@ a.VRTC, a.AREA, a.RMRK, + a.ACTN_YMD, + a.ACTN_AREA, + a.ACTN_RMRK, a.REG_DT, a.RGTR, regUser.USER_ACNT AS RGTR_ACNT, @@ -44,7 +47,7 @@ a.DLTR FROM tb_act_info a LEFT JOIN tb_cd_detail sgg ON sgg.CD_GROUP_ID = 'ORG_CD' AND sgg.CD_ID = a.SGG_CD - LEFT JOIN tb_cd_detail act ON act.CD_GROUP_ID = 'ACT_TYPE_CD' AND act.CD_ID = a.ACT_TYPE_CD + LEFT JOIN TB_ACT_TYPE act ON act.ACT_TYPE_CD = a.ACT_TYPE_CD LEFT JOIN tb_vltn_lwrg vltn1 ON vltn1.VLTN_LWRG_CD = a.VLTN_LWRG_CD_1 AND vltn1.DEL_YN = 'N' LEFT JOIN tb_vltn_lwrg vltn2 ON vltn2.VLTN_LWRG_CD = a.VLTN_LWRG_CD_2 AND vltn2.DEL_YN = 'N' LEFT JOIN tb_strct_idx strct ON strct.STRCT_IDX_CD = a.STRCT_IDX_CD AND strct.DEL_YN = 'N' @@ -96,6 +99,9 @@ VRTC, AREA, RMRK, + ACTN_YMD, + ACTN_AREA, + ACTN_RMRK, REG_DT, RGTR, MDFCN_DT, @@ -123,11 +129,14 @@ #{vrtc}, #{area}, #{rmrk}, + replace(#{actnYmd},'-',''), + #{actnArea}, + #{actnRmrk}, NOW(), #{rgtr}, - NOW(), - #{mdfr}, - 'N' + NOW(), + #{mdfr}, + 'N' ) @@ -143,7 +152,7 @@ a.PSTN_INFO_ID, a.ACT_BGNG_YMD, a.ACT_TYPE_CD, - act.CD_NM AS ACT_TYPE_CD_NM, + act.VLTN_BDST AS ACT_TYPE_CD_NM, a.ACT_NO, a.VLTN_LWRG_CD_1, vltn1.VLTN_LAW AS VLTN_LAW_1, @@ -158,6 +167,9 @@ a.VRTC, a.AREA, a.RMRK, + a.ACTN_YMD, + a.ACTN_AREA, + a.ACTN_RMRK, a.REG_DT, a.RGTR, regUser.USER_ACNT AS RGTR_ACNT, @@ -171,7 +183,7 @@ a.DLTR FROM tb_act_info a LEFT JOIN tb_cd_detail sgg ON sgg.CD_GROUP_ID = 'ORG_CD' AND sgg.CD_ID = a.SGG_CD - LEFT JOIN tb_cd_detail act ON act.CD_GROUP_ID = 'ACT_TYPE_CD' AND act.CD_ID = a.ACT_TYPE_CD + LEFT JOIN TB_ACT_TYPE act ON act.ACT_TYPE_CD = a.ACT_TYPE_CD LEFT JOIN tb_vltn_lwrg vltn1 ON vltn1.VLTN_LWRG_CD = a.VLTN_LWRG_CD_1 AND vltn1.DEL_YN = 'N' LEFT JOIN tb_vltn_lwrg vltn2 ON vltn2.VLTN_LWRG_CD = a.VLTN_LWRG_CD_2 AND vltn2.DEL_YN = 'N' LEFT JOIN tb_strct_idx strct ON strct.STRCT_IDX_CD = a.STRCT_IDX_CD AND strct.DEL_YN = 'N' @@ -197,6 +209,9 @@ VRTC = #{vrtc}, AREA = #{area}, RMRK = #{rmrk}, + ACTN_YMD = #{actnYmd}, + ACTN_AREA = #{actnArea}, + ACTN_RMRK = #{actnRmrk}, MDFCN_DT = NOW(), MDFR = #{mdfr} WHERE ACT_INFO_ID = #{actInfoId} @@ -214,6 +229,24 @@ AND DEL_YN = 'N' + + - - - - - + + @@ -179,6 +175,7 @@ }); // 각 드롭다운 초기화 (XIT 공통 컴포넌트 사용) + initActTypeCdDropdown(); initStrctIdxDropdown(); initVltnLwrgDropdowns(); initUsgIdxDropdown(); @@ -190,11 +187,55 @@ }); // 드롭다운 인스턴스들 + var actTypeCdDropdown; var strctIdxDropdown; var vltnLwrg1Dropdown; var vltnLwrg2Dropdown; var usgIdxDropdown; + /** + * 위반행위 드롭다운 초기화 + * 중요한 로직 주석: XIT 공통 드롭다운 컴포넌트를 사용하여 구조지수 선택 기능을 구현한다. + */ + function initActTypeCdDropdown() { + actTypeCdDropdown = new XitDropdown({ + inputSelector: '#actTypeCdNm', + hiddenSelector: '#actTypeCd', + dataUrl: '', + width: '400px', + maxHeight: '300px', + valueField: 'actTypeCd', + textField: 'vltnBdst', + searchField: 'vltnBdst', + placeholder: '위반행위를 입력하거나 선택하세요', + noResultsText: '검색 결과가 없습니다', + cssClass: 'strct-idx-dropdown', + displayFields: [ + { + name: 'vltnBdst', + label: '위반 건축물', + formatter: function(value) { + return value; + } + }, + { + name: 'lawlprvs', + label: '법조문', + formatter: function(value) { + return value ? value : '-'; + } + }, + { + name: 'cmpttnRt', + label: '산정률', + formatter: function(value) { + return value ? parseFloat(value).toFixed(2) : '-'; + } + } + ] + }); + } + /** * 구조지수 드롭다운 초기화 * 중요한 로직 주석: XIT 공통 드롭다운 컴포넌트를 사용하여 구조지수 선택 기능을 구현한다. diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/detailView-actInfoGrid.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/detailView-actInfoGrid.jsp index 912fa67..20e58d1 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/detailView-actInfoGrid.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/detailView-actInfoGrid.jsp @@ -66,12 +66,6 @@ align: 'center', width: 120 }, - { - header: '행위유형', - name: 'actTypeCdNm', - align: 'center', - width: 120 - }, { header: '행위번호', name: 'actNo', From 2cd68a294ac7b67965de119c4d9ad0e453f5d63c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Fri, 19 Sep 2025 13:03:51 +0900 Subject: [PATCH 4/7] =?UTF-8?q?=ED=96=89=EC=9C=84=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=ED=85=8C=EC=9D=B4=EB=B8=94=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EC=A0=81=EC=9A=A9=20=EB=B0=8F=20=EB=A9=B4=EC=A0=81?= =?UTF-8?q?=20=EC=BB=AC=EB=9F=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DB-DDL/maria/ddl/ibmsdb/tb_act_type.sql | 16 ++++++++ .../crdnActInfo/model/CrdnActTypeVO.java | 39 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 DB-DDL/maria/ddl/ibmsdb/tb_act_type.sql create mode 100644 src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/model/CrdnActTypeVO.java diff --git a/DB-DDL/maria/ddl/ibmsdb/tb_act_type.sql b/DB-DDL/maria/ddl/ibmsdb/tb_act_type.sql new file mode 100644 index 0000000..3f39f21 --- /dev/null +++ b/DB-DDL/maria/ddl/ibmsdb/tb_act_type.sql @@ -0,0 +1,16 @@ +create table tb_act_type +( + ACT_TYPE_CD varchar(3) not null comment '행위 유형 코드' + primary key, + VLTN_BDST varchar(100) null comment '위반 건축물', + LAWLPRVS varchar(100) null comment '법조문', + CMPTTN_RT decimal(3) null comment '산정 률', + VLTN_BDST_DTL varchar(1000) null comment '위반 건축물 상세', + USE_YN char not null comment '사용 여부', + REG_DT datetime null comment '등록 일시', + RGTR varchar(11) null comment '등록자', + MDFCN_DT datetime null comment '수정 일시', + MDFR varchar(11) null comment '수정자' +) + comment '행위 유형'; + diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/model/CrdnActTypeVO.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/model/CrdnActTypeVO.java new file mode 100644 index 0000000..286a08f --- /dev/null +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/crdnActInfo/model/CrdnActTypeVO.java @@ -0,0 +1,39 @@ +package go.kr.project.crdn.crndRegistAndView.crdnActInfo.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.*; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 불법위반행위정보 VO + * 중요한 로직 주석: tb_cmpttn_rt 테이블과 매핑되며, 목록 조회 시 위반행위코드를 함께 제공하기 위해 필드를 포함한다. + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class CrdnActTypeVO { + + // ============ 테이블 컬럼 ============ + private String actTypeCd; + private String vltnBdst; + private String lawlprvs; + private BigDecimal cmpttnRt; + private String vltnBdstDtl; + private String useYn; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") + private LocalDateTime regDt; // 등록 일시 + private String rgtr; // 등록자 + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") + private LocalDateTime mdfcnDt; // 수정 일시 + private String mdfr; // 수정자 + + +} \ No newline at end of file From 6588677d80862161c7fdda0925960bb6cdae3dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Fri, 19 Sep 2025 15:11:09 +0900 Subject: [PATCH 5/7] =?UTF-8?q?=EB=B6=80=EA=B3=BC=EC=98=88=EA=B3=A0=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=EC=8B=9D=20=EC=A4=91=EA=B0=84=EC=A0=80?= =?UTF-8?q?=EC=9E=A5...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GEMINI.md | 3 + .../controller/CrdnLevyPrvntcController.java | 68 ++++++ .../main/model/LevyPrvntcActInfoVO.java | 4 + .../impl/CrdnLevyPrvntcServiceImpl.java | 22 +- .../main/CrdnLevyPrvntcMapper_maria.xml | 3 + .../main/crdnLevyPrvntc/levyPrvntcPopup.jsp | 208 ++++++++++++------ .../WEB-INF/views/layouts/base/default.jsp | 4 +- .../WEB-INF/views/layouts/popup/default.jsp | 4 +- 8 files changed, 242 insertions(+), 74 deletions(-) diff --git a/GEMINI.md b/GEMINI.md index afd72fc..4a307df 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -5,6 +5,9 @@ This project is the "Ilsan Dong-gu Illegal Building Integrated Management System" (일산 동구 건축물 위법행위 통합관리시스템). It appears to be a web application for government officials to manage and track violations related to illegal buildings. ## 기본 중요 가이드 +### **[최우선 원칙] 파일 수정 시 최신 내용 보존** +**파일을 수정(예: `replace`, `write_file`)하기 직전에는 반드시 `read_file`을 통해 파일의 최신 내용을 다시 읽어와야 합니다. 이는 Gemini가 작업하는 동안 사용자가 파일을 수정했을 경우, 해당 내용이 유실되는 것을 방지하기 위함입니다. 이 원칙은 다른 모든 가이드라인에 우선합니다.** + ### 한글로 대화, 한글 필수 ### junie 의 중간 진행상황도 한글로 작성해서 보여줘 ### 테스트소스는 작성 불가!! diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnLevyPrvntcController.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnLevyPrvntcController.java index 5a5ac7a..ba7684b 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnLevyPrvntcController.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnLevyPrvntcController.java @@ -31,7 +31,11 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * packageName : go.kr.project.crdn.crndRegistAndView.controller @@ -168,4 +172,68 @@ public class CrdnLevyPrvntcController { } + /** + * 건축물 과세 시가표준액 계산 (AJAX) + * @param bldgNewPrcCrtrAmt 건물신축가격기준액 + * @param strctIdx 구조지수 + * @param usgIdx 용도지수 + * @param pstnIdx 위치지수 + * @param elpsYrRdvlrt 경과년수잔가율 + * @param bscsCstrnRt 기초공사비율 + * @return 계산된 과세 시가표준액 + */ + @Operation(summary = "건축물 과세 시가표준액 계산", description = "BigDecimal을 사용하여 건축물 과세 시가표준액을 정확하게 계산합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "계산 성공"), + @ApiResponse(responseCode = "400", description = "잘못된 숫자 형식"), + @ApiResponse(responseCode = "500", description = "서버 오류") + }) + @PostMapping("/calculateTaxableMarketPrice.ajax") + @ResponseBody + public ResponseEntity calculateTaxableMarketPrice( + @Parameter(description = "건물신축가격기준액") @RequestParam String bldgNewPrcCrtrAmt, + @Parameter(description = "구조지수") @RequestParam String strctIdx, + @Parameter(description = "용도지수") @RequestParam String usgIdx, + @Parameter(description = "위치지수") @RequestParam String pstnIdx, + @Parameter(description = "경과년수잔가율") @RequestParam String elpsYrRdvlrt, + @Parameter(description = "기초공사비율") @RequestParam String bscsCstrnRt) { + + Map result = new HashMap<>(); + try { + // 중요로직: BigDecimal을 사용하여 정확한 소수점 연산을 수행 + BigDecimal bldgNewPrcCrtrAmtDecimal = new BigDecimal(bldgNewPrcCrtrAmt); + BigDecimal strctIdxDecimal = new BigDecimal(strctIdx); + BigDecimal usgIdxDecimal = new BigDecimal(usgIdx); + BigDecimal pstnIdxDecimal = new BigDecimal(pstnIdx); + BigDecimal elpsYrRdvlrtDecimal = new BigDecimal(elpsYrRdvlrt); + BigDecimal bscsCstrnRtDecimal = new BigDecimal(bscsCstrnRt); + + BigDecimal taxableMarketPrice = bldgNewPrcCrtrAmtDecimal + .multiply(strctIdxDecimal) + .multiply(usgIdxDecimal) + .multiply(pstnIdxDecimal) + .multiply(elpsYrRdvlrtDecimal) + .multiply(bscsCstrnRtDecimal); + + // 최종 계산된 값을 소수점 없이 반올림하여 문자열로 반환 + String finalResult = taxableMarketPrice.setScale(0, RoundingMode.HALF_UP).toPlainString(); + + result.put("success", true); + result.put("taxableMarketPrice", finalResult); + return ApiResponseUtil.success(result, "계산이 수행되었습니다."); + + } catch (NumberFormatException e) { + log.error("숫자 형식 변환 오류", e); + result.put("success", false); + result.put("message", "계산 값 중 잘못된 숫자 형식이 있습니다."); + return ResponseEntity.badRequest().body(result); + } catch (Exception e) { + log.error("과세 시가표준액 계산 중 오류 발생", e); + result.put("success", false); + result.put("message", "계산 중 오류가 발생했습니다."); + return ResponseEntity.internalServerError().body(result); + } + } + + } \ No newline at end of file diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java index 160860a..c9b489b 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java @@ -35,6 +35,7 @@ public class LevyPrvntcActInfoVO extends PagingVO { private String actBgngYmd; //행위시작일자 private String actTypeCd; //행위유형코드 private String actTypeCdNm; //행위유형코드명 + private BigDecimal actCmpttnRt; //행위유형 산정률 (산정률-1) private String vltnLwrgCd1; //위반법규코드 private String vltnLaw1; //위반법 private String crcLaw1; //시정법 @@ -46,6 +47,9 @@ public class LevyPrvntcActInfoVO extends PagingVO { private BigDecimal usgIdx; //용도지수 private String usgIdxCdNm; //용도지수명 private BigDecimal area; //면적 + private String actnYmd; // 조치 일자 + private BigDecimal actnArea; // 조치 면적 + private BigDecimal calcArea; // 면적 - 조치면적 private String no; //건물 신축 가격 기준액 NO private BigDecimal bldgNewPrcCrtrAmt; //건물 신축 가격 기준액 diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnLevyPrvntcServiceImpl.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnLevyPrvntcServiceImpl.java index 2a5eb40..a42fcab 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnLevyPrvntcServiceImpl.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnLevyPrvntcServiceImpl.java @@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.List; /** @@ -38,7 +39,26 @@ public class CrdnLevyPrvntcServiceImpl extends EgovAbstractServiceImpl implement * */ @Override public List selectActInfoList(LevyPrvntcActInfoVO vo) { - return crdnLevyPrvntcMapper.selectActInfoList(vo); + // 중요로직: 행위정보 목록을 조회한 후, 각 항목에 대해 '면적 - 조치면적'을 계산하여 'calcArea' 필드에 설정합니다. + // BigDecimal을 사용하여 정확한 소수점 연산을 보장합니다. + + // 1. DB에서 행위정보 목록 조회 + List actInfoList = crdnLevyPrvntcMapper.selectActInfoList(vo); + + // 2. 각 행위정보에 대해 계산 수행 + for (LevyPrvntcActInfoVO actInfo : actInfoList) { + // null일 경우 0으로 처리하여 NullPointerException 방지 + BigDecimal area = (actInfo.getArea() != null) ? actInfo.getArea() : BigDecimal.ZERO; + BigDecimal actnArea = (actInfo.getActnArea() != null) ? actInfo.getActnArea() : BigDecimal.ZERO; + + // 3. 면적 - 조치면적 계산 + BigDecimal calcArea = area.subtract(actnArea); + + // 4. 계산된 값을 소수점 둘째자리까지 설정하여 VO에 저장 + actInfo.setCalcArea(calcArea.setScale(2, java.math.RoundingMode.HALF_UP)); + } + + return actInfoList; } } \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml index 64c17ae..52a7a17 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml @@ -16,6 +16,7 @@ t3.ACT_BGNG_YMD, t3.ACT_TYPE_CD, act.VLTN_BDST AS ACT_TYPE_CD_NM, + act.CMPTTN_RT AS ACT_CMPTTN_RT, t3.VLTN_LWRG_CD_1, vltn1.VLTN_LAW as VLTN_LAW_1, vltn1.IMPLT_LAW as IMPLT_LAW_1, @@ -27,6 +28,8 @@ usg.USG_NM AS USG_IDX_CD_NM, usg.USG_IDX AS USG_IDX, t3.AREA, + t3.ACTN_YMD, + t3.ACTN_AREA, bnpca.no, -- 건물기준가액 NO bnpca.BLDG_NEW_PRC_CRTR_AMT, -- 건물기준시가액 pi.PSTN_IDX_NO, -- 위치지수 NO diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp index cb4cf31..994f01d 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp @@ -142,17 +142,34 @@ 산정액 - - X - - X - - X - - X - - = - + + + + X + + + + X + + + + X + + + + X + + + + = + + + + + + 부과총액 = 결과값 @@ -188,7 +205,7 @@ X X - + X X @@ -205,12 +222,12 @@ - - - - - - + + + + + + @@ -239,7 +256,7 @@ (function(window, $) { 'use strict'; - var ImpltTaskPopup = { + var LevyPrvntcPopup = { // 팝업 모드 및 기본 정보 mode: '${mode}', crdnYr: '${crdnYr}', @@ -288,6 +305,7 @@ var self = this; return [ { header: '행위유형코드', name: 'actTypeCd', align: 'center', width: 60, hidden: true}, + { header: '행위유형산정률1', name: 'actCmpttnRt', align: 'center', width: 60, hidden: true}, { header: '행위유형명', name: 'actTypeCdNm', align: 'center', width: 180}, { header: '위반법규코드', name: 'vltnLwrgCd1', align: 'center', width: 60, hidden: true}, { header: '위반법', name: 'vltnLaw1', align: 'center', width: 130}, @@ -303,6 +321,11 @@ return e.value ? parseFloat(e.value).toFixed(2) : '-'; } }, + { header: '조치면적', name: 'actnArea', align: 'right', width: 100, formatter: function(e){ + //return e.value != null ? Number(e.value).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }) : ''; + return e.value ? parseFloat(e.value).toFixed(2) : '0'; + } + }, { header: '우편번호', name: 'zip', align: 'center', width: 90, hidden: true }, { header: '지번 전체주소', name: 'lotnoWholAddr', align: 'left', width: 300, hidden: true }, { header: '지번', name: 'lotnoMSno', align: 'center', width: 80, hidden: true, formatter: function(row, col, cellValue, item, rowIndex) { @@ -353,7 +376,7 @@ initialRequest: false, // 초기 데이터 요청 여부 serializer: function(params) { var defaultParams = $.param(params); - var extra = $.param({ "crdnYr": ImpltTaskPopup.crdnYr, "crdnNo": ImpltTaskPopup.crdnNo, "impltInfoId": $("#impltInfoId").val() }); + var extra = $.param({ "crdnYr": LevyPrvntcPopup.crdnYr, "crdnNo": LevyPrvntcPopup.crdnNo, "impltInfoId": $("#impltInfoId").val() }); return defaultParams + '&' + extra; } }; @@ -382,7 +405,6 @@ // 데이터 로딩 완료 이벤트 this.instance.on('successResponse', function(ev) { var responseObj = JSON.parse(ev.xhr.response); - console.log(responseObj); if( responseObj && responseObj.data ){ // 총 개수 업데이트 $('#totalCount').text('총 ' + responseObj.data.contents.length + '건'); @@ -394,10 +416,44 @@ }); + /** + * 중요로직: 행 선택 시 공통 처리 함수 + * rowData를 통해 actInfoId 설정 및 다른 그리드 새로고침 + * @param {Object} rowData - 선택된 행의 데이터 + */ + var handleRowSelection = function(rowData) { + if (!rowData) return; + + var vltnArea = rowData.calcArea; // 면적 - 조치면적 : 위반면적 + $('#vltnArea').val(vltnArea); // 기초공사율 + + rowData.actCmpttnRt; // 행위유형에 따른 산정률1 + + $('#bscsCstrnRt').val(''); // 기초공사율 + $('#bscsCstrnSeCd').val(''); // 기초공사구분 + + $('#bldgNewPrcCrtrAmt_nm').val(rowData.bldgNewPrcCrtrAmt).trigger('focus'); // 건물기준시가액(상단) + $('#bldgNewPrcCrtrAmt').val(rowData.bldgNewPrcCrtrAmt).trigger('focus'); // 건물기준시가액(하단) + + $('#strctIdx_nm').val(rowData.strctIdxCdNm); // 구조지수(상단) + $('#strctIdx').val(rowData.strctIdx); // 구조지수(하단) + + $('#usgIdx_nm').val(rowData.usgIdxCdNm); // 용도지수(상단) + $('#usgIdx').val(rowData.usgIdx); // 용도지수(하단) + + $('#pstnIdx_nm').val(rowData.oalp).trigger('focus'); // 위치지수(상단) + $('#pstnIdx').val(rowData.pstnIdx); // 위치지수(하단) + + $('#elpsYrRdvlrt_yr').val(rowData.elpsYrRdvlrtYr); // 경과년수별잔가율(상단) + $('#elpsYrRdvlrt').val(rowData.elpsYrRdvlrt); // 경과년수별잔가율(하단) + + $('#bscsCstrnSeCd').trigger('change'); // 기초공사구분 변경 이벤트 트리거 + }; + this.instance.on('focusChange', function(ev) { if (ev.rowKey !== undefined && ev.rowKey !== null) { var rowData = self.instance.getRow(ev.rowKey); - window.handleRowSelection(rowData); + handleRowSelection(rowData); } }); @@ -439,7 +495,7 @@ self.cancel(); }); - $('#bscsCstrnSeCd').on('change', function() { + $('#bscsCstrnSeCd').on('change', function() { // 기초공사구분 변경 시 var focusedCell = self.grid.instance.getFocusedCell(); if (focusedCell && focusedCell.rowKey !== null) { var rowData = self.grid.instance.getRow(focusedCell.rowKey); @@ -455,7 +511,7 @@ } else { rate = ""; } - $('#bscsCstrnRt').val(rate).trigger('input'); + $('#bscsCstrnRt').val(rate).trigger('focus'); // 기초공사율 설정 // 자동계산 함수 호출 calculateAuto(); @@ -577,56 +633,67 @@ }; /** - * 자동 계산 - * @description 각 항목의 값을 곱하여 건축물과세시가와 시가표준액을 계산합니다. - * - 건축물과세시가 = 건물기준시가액 * 구조지수 * 용도지수 * 위치지수 * 경과년수별잔가율 * 기초공사율 + * 자동 계산 (서버 API 호출) + * @description 각 항목의 값을 서버로 보내 건축물과세시가를 계산하고, 그 결과를 받아 시가표준액을 계산합니다. + * - 건축물과세시가 = 서버 API를 통해 계산 * - 시가표준액 = 건축물과세시가에서 1,000원 미만 절사 */ function calculateAuto() { - var bldgNewPrcCrtrAmt = parseFloat($('#bldgNewPrcCrtrAmt').inputmask('unmaskedvalue')) || 0; - var strctIdx = parseFloat($('#strctIdx').inputmask('unmaskedvalue')) || 0; - var usgIdx = parseFloat($('#usgIdx').inputmask('unmaskedvalue')) || 0; - var pstnIdx = parseFloat($('#pstnIdx').inputmask('unmaskedvalue')) || 0; - var elpsYrRdvlrt = parseFloat($('#elpsYrRdvlrt').inputmask('unmaskedvalue')) || 0; - var bscsCstrnRt = parseFloat($('#bscsCstrnRt').inputmask('unmaskedvalue')) || 0; - - // 건축물과세시가 계산 - var taxableMarketPrice = bldgNewPrcCrtrAmt * strctIdx * usgIdx * pstnIdx * elpsYrRdvlrt * bscsCstrnRt; - - // 시가표준액 계산: 1,000원 미만 절사 - var standardMarketPrice = Math.floor(taxableMarketPrice / 1000) * 1000; + var bldgNewPrcCrtrAmt = $('#bldgNewPrcCrtrAmt').inputmask('unmaskedvalue') || '0'; // 건물기준시가액 + var strctIdx = $('#strctIdx').inputmask('unmaskedvalue') || '0'; // 구조지수 + var usgIdx = $('#usgIdx').inputmask('unmaskedvalue') || '0'; // 용도지수 + var pstnIdx = $('#pstnIdx').inputmask('unmaskedvalue') || '0'; // 위치지수 + var elpsYrRdvlrt = $('#elpsYrRdvlrt').inputmask('unmaskedvalue') || '0'; // 경과년수별잔가율 + var bscsCstrnRt = $('#bscsCstrnRt').inputmask('unmaskedvalue') || '0'; // 기초공사율 + + // 기초공사율이 선택되지 않았으면 계산을 수행하지 않고 필드를 초기화합니다. + if (!bscsCstrnRt || parseFloat(bscsCstrnRt) === 0) { + $('#taxableMarketPrice').val('').trigger('focus'); // 건축물과세시가 + $('#standardMarketPrice').val('').trigger('focus'); // 시가표준액 + $('#standardMarketPrice_top').val('').trigger('focus'); // 시가표준액(상단) + return; + } - // 계산된 값을 input 필드에 설정 - $('#taxableMarketPrice').val(Math.round(taxableMarketPrice)).trigger('focus'); - $('#standardMarketPrice').val(standardMarketPrice).trigger('focus'); + var params = { + bldgNewPrcCrtrAmt: bldgNewPrcCrtrAmt, + strctIdx: strctIdx, + usgIdx: usgIdx, + pstnIdx: pstnIdx, + elpsYrRdvlrt: elpsYrRdvlrt, + bscsCstrnRt: bscsCstrnRt + }; + + $.ajax({ + url: '', + type: 'POST', + data: params, + success: function(response) { + if (response && response.data && response.success) { + var taxableMarketPrice = parseFloat(response.data.taxableMarketPrice) || 0; + + // 시가표준액 계산: 1,000원 미만 절사 + var standardMarketPrice = Math.floor(taxableMarketPrice / 1000) * 1000; + + // 계산된 값을 input 필드에 설정 + $('#taxableMarketPrice').val(taxableMarketPrice).trigger('focus'); // 건축물과세시가 + $('#standardMarketPrice').val(standardMarketPrice).trigger('focus'); // 시가표준액 + $('#standardMarketPrice_top').val(standardMarketPrice).trigger('focus'); // 시가표준액(상단) + } else { + alert(response.message || '계산 중 오류가 발생했습니다.'); + $('#taxableMarketPrice').val('').trigger('focus'); // 건축물과세시가 + $('#standardMarketPrice').val('').trigger('focus'); // 시가표준액 + $('#standardMarketPrice_top').val('').trigger('focus'); // 시가표준액(상단) + } + }, + error: function() { + alert('서버와 통신 중 오류가 발생했습니다.'); + $('#taxableMarketPrice').val('').trigger('focus'); // 건축물과세시가 + $('#standardMarketPrice').val('').trigger('focus'); // 시가표준액 + $('#standardMarketPrice_top').val('').trigger('focus'); // 시가표준액(상단) + } + }); } - /** - * 그리드 행 선택시 실행되는 함수 - * @param rowData - */ - window.handleRowSelection = function(rowData) { - if (!rowData) return; - $('#bscsCstrnRt').val(''); - - $('#bldgNewPrcCrtrAmt_nm').val(rowData.bldgNewPrcCrtrAmt).trigger('focus'); - $('#bldgNewPrcCrtrAmt').val(rowData.bldgNewPrcCrtrAmt).trigger('focus'); - - $('#strctIdx_nm').val(rowData.strctIdxCdNm); - $('#strctIdx').val(rowData.strctIdx); - - $('#usgIdx_nm').val(rowData.usgIdxCdNm); - $('#usgIdx').val(rowData.usgIdx); - - $('#pstnIdx_nm').val(rowData.oalp); - $('#pstnIdx').val(rowData.pstnIdx); - - $('#elpsYrRdvlrt_yr').val(rowData.elpsYrRdvlrtYr); - $('#elpsYrRdvlrt').val(rowData.elpsYrRdvlrt); - - $('#bscsCstrnSeCd').trigger('change'); - }; - /** * 행정처분 간격일 자동 계산 함수 * 중요한 로직 주석: 시작일과 종료일 입력시 자동으로 간격일을 계산한다. @@ -652,8 +719,11 @@ // 초기화 실행 $(document).ready(function() { - ImpltTaskPopup.init(); + LevyPrvntcPopup.init(); }); + // 전역 네임스페이스에 모듈 노출 + window.LevyPrvntcPopup = LevyPrvntcPopup; + })(window, jQuery); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/layouts/base/default.jsp b/src/main/webapp/WEB-INF/views/layouts/base/default.jsp index 68933b4..5a733f2 100644 --- a/src/main/webapp/WEB-INF/views/layouts/base/default.jsp +++ b/src/main/webapp/WEB-INF/views/layouts/base/default.jsp @@ -56,10 +56,10 @@ - <%----%> + <%-- inputmask 변경 테스트 필요 --%> <%----%> - + <%----%> <%-- tui grid --%> diff --git a/src/main/webapp/WEB-INF/views/layouts/popup/default.jsp b/src/main/webapp/WEB-INF/views/layouts/popup/default.jsp index 87034a8..8fbe42d 100644 --- a/src/main/webapp/WEB-INF/views/layouts/popup/default.jsp +++ b/src/main/webapp/WEB-INF/views/layouts/popup/default.jsp @@ -52,10 +52,10 @@ - <%----%> + <%-- inputmask 변경 테스트 필요 --%> <%----%> - + <%----%> <%-- tui grid --%> From 71686720c17781edd412021d49e311f5f5dd1380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Fri, 19 Sep 2025 16:18:39 +0900 Subject: [PATCH 6/7] =?UTF-8?q?=EB=B6=80=EA=B3=BC=EC=98=88=EA=B3=A0=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=EC=8B=9D=20=EC=A4=91=EA=B0=84=EC=A0=80?= =?UTF-8?q?=EC=9E=A5...=20=EA=B0=80=EA=B0=90=EC=82=B0=EC=8B=9C=ED=96=89?= =?UTF-8?q?=EB=A0=B9=EB=A5=A0=20=EC=8B=9C=EC=9E=91=20=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CrdnLevyPrvntcController.java | 10 +-- .../main/mapper/CrdnLevyPrvntcMapper.java | 3 + .../main/model/CrdnCmpttnRt2VO.java | 69 +++++++++++++++++++ .../main/model/LevyPrvntcActInfoVO.java | 19 ++++- .../main/service/CrdnLevyPrvntcService.java | 3 + .../impl/CrdnLevyPrvntcServiceImpl.java | 6 ++ .../main/CrdnLevyPrvntcMapper_maria.xml | 13 ++++ .../main/crdnLevyPrvntc/levyPrvntcPopup.jsp | 39 +++++++---- 8 files changed, 145 insertions(+), 17 deletions(-) create mode 100644 src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnCmpttnRt2VO.java diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnLevyPrvntcController.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnLevyPrvntcController.java index ba7684b..fe77832 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnLevyPrvntcController.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnLevyPrvntcController.java @@ -10,10 +10,7 @@ import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnActInfoVO; import go.kr.project.crdn.crndRegistAndView.crdnActInfo.service.CrdnActInfoService; import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.model.CrdnPstnInfoVO; import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.service.CrdnPstnInfoService; -import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTaskVO; -import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTrprInfoVO; -import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO; -import go.kr.project.crdn.crndRegistAndView.main.model.LevyPrvntcActInfoVO; +import go.kr.project.crdn.crndRegistAndView.main.model.*; import go.kr.project.crdn.crndRegistAndView.main.service.CrdnImpltTaskService; import go.kr.project.crdn.crndRegistAndView.main.service.CrdnLevyPrvntcService; import go.kr.project.crdn.crndRegistAndView.main.service.CrdnRegistAndViewService; @@ -115,6 +112,11 @@ public class CrdnLevyPrvntcController { CrdnRegistAndViewVO crdnData = crdnRegistAndViewService.selectOne(crdnParamVO); mav.addObject("crdnData", crdnData); + // 산정률2 + List crdnCmpttnRt2List = crdnLevyPrvntcService.getAllCmpttnRt2( new CrdnCmpttnRt2VO() ); + mav.addObject("crdnCmpttnRt2List", crdnCmpttnRt2List); + + // 기초공사구분 코드 List bscsCstrnSeCdList = commonCodeService.selectCodeDetailListByGroupId("BSCS_CSTRN_SE_CD"); mav.addObject("bscsCstrnSeCdList", bscsCstrnSeCdList); diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/mapper/CrdnLevyPrvntcMapper.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/mapper/CrdnLevyPrvntcMapper.java index 35bae33..f15de1f 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/mapper/CrdnLevyPrvntcMapper.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/mapper/CrdnLevyPrvntcMapper.java @@ -1,5 +1,6 @@ package go.kr.project.crdn.crndRegistAndView.main.mapper; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnCmpttnRt2VO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTaskVO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTrprInfoVO; import go.kr.project.crdn.crndRegistAndView.main.model.LevyPrvntcActInfoVO; @@ -25,4 +26,6 @@ public interface CrdnLevyPrvntcMapper { List selectActInfoList(LevyPrvntcActInfoVO vo); + List getAllCmpttnRt2(CrdnCmpttnRt2VO vo); + } \ No newline at end of file diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnCmpttnRt2VO.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnCmpttnRt2VO.java new file mode 100644 index 0000000..119a9b2 --- /dev/null +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnCmpttnRt2VO.java @@ -0,0 +1,69 @@ +package go.kr.project.crdn.crndRegistAndView.main.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import go.kr.project.common.model.PagingVO; +import lombok.*; +import org.apache.poi.hpsf.Decimal; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * packageName : go.kr.project.crdn.crndRegistAndView.main.model + * fileName : CrdnCmpttnRt2VO + * author : 박성영 + * date : 25. 9. 18. + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 25. 9. 18. 박성영 최초 생성 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class CrdnCmpttnRt2VO { + + private String cmpttnRt2Cd; + private String vltnMttr; + private BigDecimal cmpttnRt2; + private BigDecimal cmpttnRt2Rate; + private String useYn; + + /** 등록 일시 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") + private LocalDateTime regDt; + + /** 등록자 */ + private String rgtr; + + /** 수정 일시 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") + private LocalDateTime mdfcnDt; + + /** 수정자 */ + private String mdfr; + + /** + * cmpttnRt2 값을 설정할 때, 100으로 나눈 비율 값을 cmpttnRt2Rate에 자동으로 설정합니다. + * @param cmpttnRt2 원본 비율 값 (예: 90, 70) + */ + public void setCmpttnRt2(BigDecimal cmpttnRt2) { + // 중요로직: cmpttnRt2(산정률)이 설정될 때, cmpttnRt2Rate(계산용 비율)을 자동으로 계산하여 설정합니다. + // 예를 들어 cmpttnRt2가 90이면, cmpttnRt2Rate는 0.90이 됩니다. + this.cmpttnRt2 = cmpttnRt2; + + if (cmpttnRt2 != null) { + // 100으로 나누고, 소수점 2자리까지 반올림하여 설정 + this.cmpttnRt2Rate = cmpttnRt2.divide(new BigDecimal("100"), 2, java.math.RoundingMode.HALF_UP); + } else { + this.cmpttnRt2Rate = null; + } + } + +} diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java index c9b489b..5b724bd 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java @@ -35,7 +35,8 @@ public class LevyPrvntcActInfoVO extends PagingVO { private String actBgngYmd; //행위시작일자 private String actTypeCd; //행위유형코드 private String actTypeCdNm; //행위유형코드명 - private BigDecimal actCmpttnRt; //행위유형 산정률 (산정률-1) + private BigDecimal actCmpttnRt; //행위유형 산정률(%) (산정률-1) + private BigDecimal actCmpttnRtRate; //행위유형 산정률 / 100 실제 곱하기 계산값에 필요한 값 (산정률-1) private String vltnLwrgCd1; //위반법규코드 private String vltnLaw1; //위반법 private String crcLaw1; //시정법 @@ -67,4 +68,20 @@ public class LevyPrvntcActInfoVO extends PagingVO { private String crdnYr; //단속년도 private String crdnNo; //단속번호 + /** + * actCmpttnRt 값을 설정할 때, 100으로 나눈 비율 값을 actCmpttnRtRate에 자동으로 설정합니다. + * @param actCmpttnRt 원본 비율 값 (예: 50) + */ + public void setActCmpttnRt(BigDecimal actCmpttnRt) { + // 중요로직: actCmpttnRt(산정률)이 설정될 때, actCmpttnRtRate(계산용 비율)을 자동으로 계산하여 설정합니다. + this.actCmpttnRt = actCmpttnRt; + + if (actCmpttnRt != null) { + // 100으로 나누고, 소수점 2자리까지 반올림하여 설정 + this.actCmpttnRtRate = actCmpttnRt.divide(new BigDecimal("100"), 2, java.math.RoundingMode.HALF_UP); + } else { + this.actCmpttnRtRate = null; + } + } + } diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/CrdnLevyPrvntcService.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/CrdnLevyPrvntcService.java index e5f65cd..ce2318c 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/CrdnLevyPrvntcService.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/CrdnLevyPrvntcService.java @@ -1,5 +1,6 @@ package go.kr.project.crdn.crndRegistAndView.main.service; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnCmpttnRt2VO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTaskVO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTrprInfoVO; import go.kr.project.crdn.crndRegistAndView.main.model.LevyPrvntcActInfoVO; @@ -25,4 +26,6 @@ public interface CrdnLevyPrvntcService { * */ List selectActInfoList(LevyPrvntcActInfoVO vo); + List getAllCmpttnRt2(CrdnCmpttnRt2VO vo); + } \ No newline at end of file diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnLevyPrvntcServiceImpl.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnLevyPrvntcServiceImpl.java index a42fcab..2eba206 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnLevyPrvntcServiceImpl.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnLevyPrvntcServiceImpl.java @@ -2,6 +2,7 @@ package go.kr.project.crdn.crndRegistAndView.main.service.impl; import go.kr.project.crdn.crndRegistAndView.main.mapper.CrdnImpltTaskMapper; import go.kr.project.crdn.crndRegistAndView.main.mapper.CrdnLevyPrvntcMapper; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnCmpttnRt2VO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO; import go.kr.project.crdn.crndRegistAndView.main.model.LevyPrvntcActInfoVO; import go.kr.project.crdn.crndRegistAndView.main.service.CrdnLevyPrvntcService; @@ -61,4 +62,9 @@ public class CrdnLevyPrvntcServiceImpl extends EgovAbstractServiceImpl implement return actInfoList; } + @Override + public List getAllCmpttnRt2(CrdnCmpttnRt2VO vo) { + return crdnLevyPrvntcMapper.getAllCmpttnRt2(vo); + } + } \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml index 52a7a17..06c67eb 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml @@ -60,4 +60,17 @@ and t1.CRDN_NO = #{crdnNo} + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp index 994f01d..742a42d 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp @@ -128,7 +128,7 @@
- + @@ -151,16 +151,22 @@ @@ -168,11 +174,11 @@ - +
이행강제금산출이행강제금산출 시가표준액 위반면적 X - + X - + + X - + + + + =
- +
부과총액 = 결과값부과총액 = 결과값 계산로직 진행 중
@@ -207,10 +213,10 @@ X X - + X - @@ -425,9 +431,11 @@ if (!rowData) return; var vltnArea = rowData.calcArea; // 면적 - 조치면적 : 위반면적 - $('#vltnArea').val(vltnArea); // 기초공사율 + $('#vltnArea').val(vltnArea); // 위반면적 - rowData.actCmpttnRt; // 행위유형에 따른 산정률1 + // 행위유형에 따른 산정률1 설정 + $('#cmpttnRt').val(rowData.actCmpttnRt+ ' %'); + $('#cmpttnRtRate').val(rowData.actCmpttnRtRate); $('#bscsCstrnRt').val(''); // 기초공사율 $('#bscsCstrnSeCd').val(''); // 기초공사구분 @@ -444,7 +452,7 @@ $('#pstnIdx_nm').val(rowData.oalp).trigger('focus'); // 위치지수(상단) $('#pstnIdx').val(rowData.pstnIdx); // 위치지수(하단) - $('#elpsYrRdvlrt_yr').val(rowData.elpsYrRdvlrtYr); // 경과년수별잔가율(상단) + $('#elpsYrRdvlrt_yr').val(rowData.elpsYrRdvlrtYr+' 년'); // 경과년수별잔가율(상단) $('#elpsYrRdvlrt').val(rowData.elpsYrRdvlrt); // 경과년수별잔가율(하단) $('#bscsCstrnSeCd').trigger('change'); // 기초공사구분 변경 이벤트 트리거 @@ -519,6 +527,13 @@ } }); + // 산정률2 선택 시 산정률2 input에 값 설정 + $('#cmpttnRt2Cd').on('change', function() { + var selectedOption = $(this).find('option:selected'); + var rateValue = selectedOption.attr('rateValueAttribute'); + $('#actCmpttnRt').val(rateValue || '').trigger('focus'); + }); + // 계산에 사용되는 입력 필드 변경 시 자동 계산 호출 var calculationInputs = '#bldgNewPrcCrtrAmt, #strctIdx, #usgIdx, #pstnIdx, #elpsYrRdvlrt'; $(document).on('change', calculationInputs, calculateAuto); From fd02efbb5b9df64e91ce4c276afb790f5818fe19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Fri, 19 Sep 2025 17:41:15 +0900 Subject: [PATCH 7/7] =?UTF-8?q?=EB=B6=80=EA=B3=BC=EC=98=88=EA=B3=A0=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=EC=8B=9D=20=EC=A4=91=EA=B0=84=EC=A0=80?= =?UTF-8?q?=EC=9E=A5...=20=EA=B0=80=EA=B0=90=EC=82=B0=EC=8B=9C=ED=96=89?= =?UTF-8?q?=EB=A0=B9=EB=A5=A0=20=EC=8B=9C=EC=9E=91=20=EC=8A=A4=ED=83=80?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/crdnLevyPrvntc/levyPrvntcPopup.jsp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp index 742a42d..efaeff7 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp @@ -150,8 +150,9 @@ X - - + + + X @@ -173,6 +174,9 @@ + + +