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/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/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/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/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 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/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..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; @@ -31,7 +28,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 @@ -111,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); @@ -168,4 +174,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/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 774845c..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,20 +35,28 @@ public class LevyPrvntcActInfoVO extends PagingVO { private String actBgngYmd; //행위시작일자 private String actTypeCd; //행위유형코드 private String actTypeCdNm; //행위유형코드명 + private BigDecimal actCmpttnRt; //행위유형 산정률(%) (산정률-1) + private BigDecimal actCmpttnRtRate; //행위유형 산정률 / 100 실제 곱하기 계산값에 필요한 값 (산정률-1) private String vltnLwrgCd1; //위반법규코드 private String vltnLaw1; //위반법 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; //면적 + private String actnYmd; // 조치 일자 + private BigDecimal actnArea; // 조치 면적 + private BigDecimal calcArea; // 면적 - 조치면적 private String no; //건물 신축 가격 기준액 NO private BigDecimal bldgNewPrcCrtrAmt; //건물 신축 가격 기준액 private String pstnIdxNo; //위치지수 NO private BigDecimal pstnIdx; //위치지수 + private String elpsYrRdvlrtYr; //경과년수별잔가율-최초위반행위 년도 private BigDecimal elpsYrRdvlrt; //경과년수별잔가율 private BigDecimal bscsCstrnYBdstCmpttnRt; //기초공사율(철콘) private BigDecimal bscsCstrnNBdstCmpttnRt; //기초공사율(철콘 이외) @@ -60,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 2a5eb40..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; @@ -10,6 +11,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 +40,31 @@ 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; + } + + @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/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' + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp index 5a32b42..5fe314f 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup.jsp @@ -43,12 +43,8 @@ * 행위유형 - + + @@ -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/crdnLevyPrvntc/levyPrvntcPopup.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp index 225ee89..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 @@ -128,7 +128,7 @@
- + @@ -142,27 +142,55 @@ - - - - - - - - - - - + + + + + + + + + + + - + + + + +
이행강제금산출이행강제금산출 시가표준액 위반면적산정액
XXXX= + + X + + X + + + X + + + X + + =
부과총액 = 결과값 + + + +
부과총액 = 결과값 계산로직 진행 중
+ <%-- 해당년도 시가표준액 계산 --%>
- +
@@ -181,28 +209,18 @@ - + - + - + - + - + - - + + - - - - - - + + + + + +
${crdnData.crdnYr} 년도 건물
기준시가액
시가표준액
(1,000원미만절삭)
- - X - - X - - X - - X - - X - @@ -210,16 +228,16 @@ =
@@ -248,7 +266,7 @@ (function(window, $) { 'use strict'; - var ImpltTaskPopup = { + var LevyPrvntcPopup = { // 팝업 모드 및 기본 정보 mode: '${mode}', crdnYr: '${crdnYr}', @@ -297,6 +315,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}, @@ -312,6 +331,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) { @@ -327,8 +351,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() : ''; } }, @@ -360,7 +386,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; } }; @@ -389,7 +415,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 + '건'); @@ -398,18 +423,52 @@ // 렌더링완료 후 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); - }); }); + /** + * 중요로직: 행 선택 시 공통 처리 함수 + * rowData를 통해 actInfoId 설정 및 다른 그리드 새로고침 + * @param {Object} rowData - 선택된 행의 데이터 + */ + var handleRowSelection = function(rowData) { + if (!rowData) return; + + var vltnArea = rowData.calcArea; // 면적 - 조치면적 : 위반면적 + $('#vltnArea').val(vltnArea); // 위반면적 + + // 행위유형에 따른 산정률1 설정 + $('#cmpttnRt').val(rowData.actCmpttnRt+ ' %'); + $('#cmpttnRtRate').val(rowData.actCmpttnRtRate); + + $('#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); + handleRowSelection(rowData); + } + }); + }, }, @@ -447,6 +506,41 @@ 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).trigger('focus'); // 기초공사율 설정 + + // 자동계산 함수 호출 + calculateAuto(); + } + } + }); + + // 산정률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); }, /** @@ -530,42 +624,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 +651,68 @@ }; + /** + * 자동 계산 (서버 API 호출) + * @description 각 항목의 값을 서버로 보내 건축물과세시가를 계산하고, 그 결과를 받아 시가표준액을 계산합니다. + * - 건축물과세시가 = 서버 API를 통해 계산 + * - 시가표준액 = 건축물과세시가에서 1,000원 미만 절사 + */ + function calculateAuto() { + 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; + } + + 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'); // 시가표준액(상단) + } + }); + } + /** * 행정처분 간격일 자동 계산 함수 * 중요한 로직 주석: 시작일과 종료일 입력시 자동으로 간격일을 계산한다. @@ -618,8 +738,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/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', 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..5a733f2 100644 --- a/src/main/webapp/WEB-INF/views/layouts/base/default.jsp +++ b/src/main/webapp/WEB-INF/views/layouts/base/default.jsp @@ -57,6 +57,9 @@ + <%-- 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..8fbe42d 100644 --- a/src/main/webapp/WEB-INF/views/layouts/popup/default.jsp +++ b/src/main/webapp/WEB-INF/views/layouts/popup/default.jsp @@ -53,6 +53,9 @@ + <%-- 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({