diff --git a/DB-DDL/maria/ddl/ibmsdb/seq_actn_info_id.sql b/DB-DDL/maria/ddl/ibmsdb/seq_actn_info_id.sql new file mode 100644 index 0000000..0ff73f6 --- /dev/null +++ b/DB-DDL/maria/ddl/ibmsdb/seq_actn_info_id.sql @@ -0,0 +1,7 @@ +CREATE SEQUENCE seq_actn_info_id + START WITH 1 + INCREMENT BY 1 + MINVALUE 1 + MAXVALUE 9999999999 + CACHE 1000 + NOCYCLE; diff --git a/DB-DDL/maria/ddl/ibmsdb/tb_act_info.sql b/DB-DDL/maria/ddl/ibmsdb/tb_act_info.sql index 4c963e4..c51a8a5 100644 --- a/DB-DDL/maria/ddl/ibmsdb/tb_act_info.sql +++ b/DB-DDL/maria/ddl/ibmsdb/tb_act_info.sql @@ -17,6 +17,9 @@ create table tb_act_info VRTC decimal(10, 2) null comment '세로', AREA decimal(10, 2) null comment '면적', RMRK varchar(1000) null comment '비고', + ACTN_LAST_YMD varchar(8) null comment '조치 최종 일자', + ACTN_WHOL_AREA decimal(10, 2) null comment '조치 총 면적', + ACTN_PRCS_STTS_CD varchar(1) null comment '조치 처리 상태 코드', REG_DT datetime null comment '등록 일시', RGTR varchar(11) null comment '등록자', MDFCN_DT datetime null comment '수정 일시', diff --git a/DB-DDL/maria/ddl/ibmsdb/tb_actn_info.sql b/DB-DDL/maria/ddl/ibmsdb/tb_actn_info.sql new file mode 100644 index 0000000..7ea974b --- /dev/null +++ b/DB-DDL/maria/ddl/ibmsdb/tb_actn_info.sql @@ -0,0 +1,20 @@ +create table tb_actn_info +( + ACTN_INFO_ID varchar(10) not null comment '조치 정보 ID' + primary key, + SGG_CD varchar(5) not null comment '시군구 코드', + CRDN_YR char(4) null comment '단속 연도', + CRDN_NO varchar(6) null comment '단속 번호', + ACT_INFO_ID varchar(10) not null comment '행위 정보 ID', + ACTN_YMD varchar(8) null comment '조치 일자', + ACTN_AREA decimal(10, 2) null comment '조치 면적', + ACTN_RMRK varchar(1000) null comment '조치 비고', + REG_DT datetime null comment '등록 일시', + RGTR varchar(11) null comment '등록자', + MDFCN_DT datetime null comment '수정 일시', + MDFR varchar(11) null comment '수정자', + DEL_YN char not null comment '삭제 여부', + DEL_DT datetime null comment '삭제 일시', + DLTR varchar(11) null comment '삭제자' +) + comment '조치 정보'; diff --git a/DB-DDL/maria/ddl/ibmsdb/tb_crdn_photo.sql b/DB-DDL/maria/ddl/ibmsdb/tb_crdn_photo.sql index a003e79..0f7ecea 100644 --- a/DB-DDL/maria/ddl/ibmsdb/tb_crdn_photo.sql +++ b/DB-DDL/maria/ddl/ibmsdb/tb_crdn_photo.sql @@ -8,6 +8,7 @@ create table tb_crdn_photo CRDN_PHOTO_PATH varchar(100) null comment '단속 사진 경로', CRDN_PHOTO_NM varchar(500) null comment '단속 사진 명', CRDN_PHOTO_SE_CD char not null comment '단속 사진 구분 코드', + AACTN_INFO_ID varchar(10) null comment '조치 정보 ID'; ORGNL_PHOTO_NM varchar(500) null comment '원본 사진 명', REG_DT datetime null comment '등록 일시', RGTR varchar(11) null comment '등록자', diff --git a/DB-DDL/maria/dml/tb_cd_detail.sql b/DB-DDL/maria/dml/tb_cd_detail.sql index dce9be9..f664db8 100644 --- a/DB-DDL/maria/dml/tb_cd_detail.sql +++ b/DB-DDL/maria/dml/tb_cd_detail.sql @@ -118,4 +118,9 @@ INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, US -- 가감산율 구분 (ADSBMTN_RT_SE_CD) INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ADSBMTN_RT_SE_CD', '1', '가산율', '가산율', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NOW(), 'SYSTEM', NULL, NULL); -INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ADSBMTN_RT_SE_CD', '2', '감산율', '감산율', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NOW(), 'SYSTEM', NULL, NULL); \ No newline at end of file +INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ADSBMTN_RT_SE_CD', '2', '감산율', '감산율', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NOW(), 'SYSTEM', NULL, NULL); + +-- 조치 처리 상태 (ACTN_PRCS_STTS_CD) +INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ACTN_PRCS_STTS_CD', '1', '미조치', '미조치', 1, 'Y', NULL, NULL, NULL, NULL, NULL, NOW(), 'SYSTEM', NULL, NULL); +INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ACTN_PRCS_STTS_CD', '2', '부분조치', '부분조치', 2, 'Y', NULL, NULL, NULL, NULL, NULL, NOW(), 'SYSTEM', NULL, NULL); +INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ACTN_PRCS_STTS_CD', '3', '조치완료', '조치완료', 3, 'Y', NULL, NULL, NULL, NULL, NULL, NOW(), 'SYSTEM', NULL, NULL); diff --git a/DB-DDL/maria/dml/tb_cd_group.sql b/DB-DDL/maria/dml/tb_cd_group.sql index fd478ea..718c3f6 100644 --- a/DB-DDL/maria/dml/tb_cd_group.sql +++ b/DB-DDL/maria/dml/tb_cd_group.sql @@ -3,7 +3,7 @@ INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, R INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ORG_CD', '조직', '조직을 나타내는 코드', 'Y', NOW(), 'SYSTEM', NULL, NULL); INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('USER_STATUS_CD', '사용자 상태', '사용자의 상태 코드', 'Y', NOW(), 'SYSTEM', NULL, NULL); --- 신규 코드그룹 추가 (이슈: 적발방법/지목/지종/행정동/소유자구분/지역구분/단속처리상태/단속사진구분/이행업무구분/이행대상자구분/기초공사구분/가감산율구분) +-- 신규 코드그룹 추가 (이슈: 적발방법/지목/지종/행정동/소유자구분/지역구분/단속처리상태/단속사진구분/이행업무구분/이행대상자구분/기초공사구분/가감산율구분/조치처리상태) -- 중요: 기존 라인 보존, 맨 하단에 추가 (한글 주석) INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('DSCL_MTHD_CD', '적발 방법', '적발(인지) 방법 코드', 'Y', NOW(), 'SYSTEM', NULL, NULL); INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '지목', '토지 대표 지목 코드', 'Y', NOW(), 'SYSTEM', NULL, NULL); @@ -16,4 +16,5 @@ INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, R INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('IMPLT_TASK_SE_CD', '이행 업무 구분', '이행 업무 구분 코드', 'Y', NOW(), 'SYSTEM', NULL, NULL); INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('IMPLT_TRPR_SE_CD', '이행 대상자 구분', '이행 대상자 구분 코드', 'Y', NOW(), 'SYSTEM', NULL, NULL); INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BSCS_CSTRN_SE_CD', '기초공사 구분', '기초 공사 구분 코드', 'Y', NOW(), 'SYSTEM', NULL, NULL); -INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ADSBMTN_RT_SE_CD', '가감산율 구분', '가감산율 구분 코드', 'Y', NOW(), 'SYSTEM', NULL, NULL); \ No newline at end of file +INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ADSBMTN_RT_SE_CD', '가감산율 구분', '가감산율 구분 코드', 'Y', NOW(), 'SYSTEM', NULL, NULL); +INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ACTN_PRCS_STTS_CD', '조치 처리 상태', '조치 처리 상태 코드', 'Y', NOW(), 'SYSTEM', NULL, NULL); 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 e9e052d..6029d06 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 @@ -111,14 +111,14 @@ public class CrdnActInfoController { // 수정 모드인 경우 기존 데이터 및 사진 목록 조회 if ("U".equals(mode) && actInfoId != null) { data = service.selectActInfoByPk(actInfoId); - // 중요한 로직 주석: 수정 모드에서 기존 등록된 사진 목록을 조회하여 화면에 표시한다. + // 중요한 로직 주석: 수정 모드에서 기존 등록된 모든 사진 목록(단속+조치)을 조회하여 화면에 표시한다. photoList = photoService.selectPhotoListByActInfoIdAndPhotoSeCd( - CrdnPhotoVO.builder().actInfoId(actInfoId).crdnPhotoSeCd("1").build()); + CrdnPhotoVO.builder().actInfoId(actInfoId).build()); // 사진구분코드 없이 전체 조회 } ModelAndView mav = new ModelAndView("crdn/crndRegistAndView/crdnActInfo/crdnActInfoRegistPopup" + TilesConstants.POPUP); mav.addObject("data", data); - mav.addObject("photoList", photoList); + mav.addObject("crdnPhotoList", photoList); // 변수명을 JSP에서 사용하는 crdnPhotoList로 변경 mav.addObject("mode", mode); mav.addObject("crdnYr", crdnYr); mav.addObject("crdnNo", crdnNo); @@ -213,13 +213,13 @@ public class CrdnActInfoController { /** * 불법위반행위정보 등록 (파일 포함 가능, AJAX) - * 중요한 로직 주석: 행위정보 등록과 함께 사진 파일도 처리한다. 모든 로직은 service 단에서 한 트랜잭션으로 처리된다. + * 중요한 로직 주석: 행위정보 등록과 함께 단속/조치 사진 파일도 처리한다. 모든 로직은 service 단에서 한 트랜잭션으로 처리된다. * @param vo 등록할 불법위반행위정보 - * @param photoFiles 업로드할 사진 파일 목록 (선택사항) - * @param crdnPhotoSeCd 사진 구분 코드 + * @param crdnPhotoFiles 업로드할 단속 사진 파일 목록 (선택사항) + * @param actnPhotoFiles 업로드할 조치 사진 파일 목록 (선택사항) * @return 등록 결과 */ - @Operation(summary = "불법위반행위정보 등록", description = "불법위반행위정보를 등록합니다. 사진 파일도 함께 처리 가능합니다.") + @Operation(summary = "불법위반행위정보 등록", description = "불법위반행위정보를 등록합니다. 단속/조치 사진 파일도 함께 처리 가능합니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "등록 성공"), @ApiResponse(responseCode = "500", description = "서버 오류") @@ -227,11 +227,12 @@ public class CrdnActInfoController { @PostMapping("/insert.ajax") public ResponseEntity insertAjax( @ModelAttribute CrdnActInfoVO vo, - @RequestParam(value = "photoFiles", required = false) List photoFiles, - @RequestParam(value = "crdnPhotoSeCd", required = false) String crdnPhotoSeCd) { - - log.debug("불법위반행위정보 등록 요청: {}, 파일 개수: {}", vo, - photoFiles != null ? photoFiles.size() : 0); + @RequestParam(value = "crdnPhotoFiles", required = false) List crdnPhotoFiles, + @RequestParam(value = "actnPhotoFiles", required = false) List actnPhotoFiles) { + + log.debug("불법위반행위정보 등록 요청: {}, 단속 사진 개수: {}, 조치 사진 개수: {}", + vo, crdnPhotoFiles != null ? crdnPhotoFiles.size() : 0, + actnPhotoFiles != null ? actnPhotoFiles.size() : 0); CrdnRegistAndViewVO crdnVO = new CrdnRegistAndViewVO(); @@ -243,8 +244,8 @@ public class CrdnActInfoController { vo.setRgtr(SessionUtil.getUserId()); vo.setMdfr(SessionUtil.getUserId()); - // 중요한 로직 주석: service 단에서 행위정보 등록과 사진 파일 처리를 한 트랜잭션으로 처리 - int result = service.insertActInfoWithFiles(vo, photoFiles, crdnPhotoSeCd); + // 중요한 로직 주석: service 단에서 행위정보 등록과 단속/조치 사진 파일 처리를 한 트랜잭션으로 처리 + int result = service.insertActInfoWithFiles(vo, crdnPhotoFiles, actnPhotoFiles); if (result > 0) { return ApiResponseUtil.success(MessageConstants.Common.SAVE_SUCCESS); @@ -256,13 +257,13 @@ public class CrdnActInfoController { /** * 불법위반행위정보 수정 (파일 포함 가능, AJAX) - * 중요한 로직 주석: 행위정보 수정과 함께 사진 파일도 처리한다. 모든 로직은 service 단에서 한 트랜잭션으로 처리된다. + * 중요한 로직 주석: 행위정보 수정과 함께 단속/조치 사진 파일도 처리한다. 모든 로직은 service 단에서 한 트랜잭션으로 처리된다. * @param vo 수정할 불법위반행위정보 - * @param photoFiles 업로드할 사진 파일 목록 (선택사항) - * @param crdnPhotoSeCd 사진 구분 코드 + * @param crdnPhotoFiles 업로드할 단속 사진 파일 목록 (선택사항) + * @param actnPhotoFiles 업로드할 조치 사진 파일 목록 (선택사항) * @return 수정 결과 */ - @Operation(summary = "불법위반행위정보 수정", description = "불법위반행위정보를 수정합니다. 사진 파일도 함께 처리 가능합니다.") + @Operation(summary = "불법위반행위정보 수정", description = "불법위반행위정보를 수정합니다. 단속/조치 사진 파일도 함께 처리 가능합니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "수정 성공"), @ApiResponse(responseCode = "500", description = "서버 오류") @@ -270,17 +271,18 @@ public class CrdnActInfoController { @PostMapping("/update.ajax") public ResponseEntity updateAjax( @ModelAttribute CrdnActInfoVO vo, - @RequestParam(value = "photoFiles", required = false) List photoFiles, - @RequestParam(value = "crdnPhotoSeCd", required = false) String crdnPhotoSeCd) { - - log.debug("불법위반행위정보 수정 요청: {}, 파일 개수: {}", vo, - photoFiles != null ? photoFiles.size() : 0); + @RequestParam(value = "crdnPhotoFiles", required = false) List crdnPhotoFiles, + @RequestParam(value = "actnPhotoFiles", required = false) List actnPhotoFiles) { + + log.debug("불법위반행위정보 수정 요청: {}, 단속 사진 개수: {}, 조치 사진 개수: {}", + vo, crdnPhotoFiles != null ? crdnPhotoFiles.size() : 0, + actnPhotoFiles != null ? actnPhotoFiles.size() : 0); vo.setMdfr(SessionUtil.getUserId()); vo.setSggCd(SessionUtil.getSessionVO().getUser().getOrgCd()); // 업데이트 화면에서 신규파일 등록 시 필요 - // 중요한 로직 주석: service 단에서 행위정보 수정과 사진 파일 처리를 한 트랜잭션으로 처리 - int result = service.updateActInfoWithFiles(vo, photoFiles, crdnPhotoSeCd); + // 중요한 로직 주석: service 단에서 행위정보 수정과 단속/조치 사진 파일 처리를 한 트랜잭션으로 처리 + int result = service.updateActInfoWithFiles(vo, crdnPhotoFiles, actnPhotoFiles); if (result > 0) { return ApiResponseUtil.success(MessageConstants.Common.SAVE_SUCCESS); @@ -324,14 +326,15 @@ public class CrdnActInfoController { public String photoView( @Parameter(description = "행위정보ID") @RequestParam String actInfoId, @Parameter(description = "사진순번") @RequestParam String crdnPhotoSn, + @Parameter(description = "단속조치사진구분") @RequestParam String crdnPhotoSeCd, Model model) { - log.debug("단속 사진 보기 요청 - actInfoId: {}, crdnPhotoSn: {}", actInfoId, crdnPhotoSn); + log.debug("단속 사진 보기 요청 - actInfoId: {}, crdnPhotoSn: {}, crdnPhotoSeCd: {}", actInfoId, crdnPhotoSn, crdnPhotoSeCd); // 중요한 로직 주석: 해당 행위정보의 모든 사진 목록 조회 CrdnPhotoVO searchVO = CrdnPhotoVO.builder() .actInfoId(actInfoId) - .crdnPhotoSeCd("1") // 단속 사진 + .crdnPhotoSeCd(crdnPhotoSeCd) // 단속 사진 .build(); List photoList = photoService.selectPhotoListByActInfoIdAndPhotoSeCd(searchVO); 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 b4cd8a0..93437ed 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 @@ -27,13 +27,13 @@ public interface CrdnActInfoService { /** * 불법위반행위정보 등록 (파일 포함) - * 중요한 로직 주석: 행위정보 등록과 함께 사진 파일도 처리한다. 모든 로직은 한 트랜잭션으로 처리된다. + * 중요한 로직 주석: 행위정보 등록과 함께 단속/조치 사진 파일도 처리한다. 모든 로직은 한 트랜잭션으로 처리된다. * @param vo 등록할 불법위반행위정보 - * @param photoFiles 업로드할 사진 파일 목록 (선택사항) - * @param crdnPhotoSeCd 사진 구분 코드 + * @param crdnPhotoFiles 업로드할 단속 사진 파일 목록 (선택사항) + * @param actnPhotoFiles 업로드할 조치 사진 파일 목록 (선택사항) * @return 등록 결과 */ - int insertActInfoWithFiles(CrdnActInfoVO vo, List photoFiles, String crdnPhotoSeCd); + int insertActInfoWithFiles(CrdnActInfoVO vo, List crdnPhotoFiles, List actnPhotoFiles); /** * 불법위반행위정보 상세 조회 (PK 기준) @@ -44,13 +44,13 @@ public interface CrdnActInfoService { /** * 불법위반행위정보 수정 (파일 포함) - * 중요한 로직 주석: 행위정보 수정과 함께 사진 파일도 처리한다. 모든 로직은 한 트랜잭션으로 처리된다. + * 중요한 로직 주석: 행위정보 수정과 함께 단속/조치 사진 파일도 처리한다. 모든 로직은 한 트랜잭션으로 처리된다. * @param vo 수정할 불법위반행위정보 - * @param photoFiles 업로드할 사진 파일 목록 (선택사항) - * @param crdnPhotoSeCd 사진 구분 코드 + * @param crdnPhotoFiles 업로드할 단속 사진 파일 목록 (선택사항) + * @param actnPhotoFiles 업로드할 조치 사진 파일 목록 (선택사항) * @return 수정 결과 */ - int updateActInfoWithFiles(CrdnActInfoVO vo, List photoFiles, String crdnPhotoSeCd); + int updateActInfoWithFiles(CrdnActInfoVO vo, List crdnPhotoFiles, List actnPhotoFiles); /** * 불법위반행위정보 삭제 (논리삭제) 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 9d62e46..f6ccb9b 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 @@ -54,9 +54,10 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C @Override @Transactional - public int insertActInfoWithFiles(CrdnActInfoVO vo, List photoFiles, String crdnPhotoSeCd) { - log.debug("불법위반행위정보 등록 (파일 포함): {}, 파일 개수: {}", vo, - photoFiles != null ? photoFiles.size() : 0); + public int insertActInfoWithFiles(CrdnActInfoVO vo, List crdnPhotoFiles, List actnPhotoFiles) { + log.debug("불법위반행위정보 등록 (파일 포함): {}, 단속 사진 개수: {}, 조치 사진 개수: {}", + vo, crdnPhotoFiles != null ? crdnPhotoFiles.size() : 0, + actnPhotoFiles != null ? actnPhotoFiles.size() : 0); try { // 중요한 로직 주석: 먼저 행위정보를 등록한다 (insertActInfo 메서드에서 actInfoId가 자동 설정됨) @@ -65,10 +66,16 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C if (result > 0) { log.debug("행위정보 등록 완료: actInfoId={}", vo.getActInfoId()); - // 중요한 로직 주석: 파일이 있는 경우에만 사진 처리를 진행한다 - if (photoFiles != null && !photoFiles.isEmpty()) { - int photoResult = photoService.insertPhotosWithFiles(photoFiles, vo.getActInfoId(), crdnPhotoSeCd, vo); - log.debug("사진 파일 처리 완료: actInfoId={}, 등록된 사진 수={}", vo.getActInfoId(), photoResult); + // 중요한 로직 주석: 단속 사진이 있는 경우 처리 (CRDN_PHOTO_SE_CD = '1') + if (crdnPhotoFiles != null && !crdnPhotoFiles.isEmpty()) { + int crdnPhotoResult = photoService.insertPhotosWithFiles(crdnPhotoFiles, vo.getActInfoId(), "1", vo); + log.debug("단속 사진 파일 처리 완료: actInfoId={}, 등록된 단속 사진 수={}", vo.getActInfoId(), crdnPhotoResult); + } + + // 중요한 로직 주석: 조치 사진이 있는 경우 처리 (CRDN_PHOTO_SE_CD = '2') + if (actnPhotoFiles != null && !actnPhotoFiles.isEmpty()) { + int actnPhotoResult = photoService.insertPhotosWithFiles(actnPhotoFiles, vo.getActInfoId(), "2", vo); + log.debug("조치 사진 파일 처리 완료: actInfoId={}, 등록된 조치 사진 수={}", vo.getActInfoId(), actnPhotoResult); } } else { log.error("행위정보 등록 실패: {}", vo); @@ -91,9 +98,10 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C @Override @Transactional - public int updateActInfoWithFiles(CrdnActInfoVO vo, List photoFiles, String crdnPhotoSeCd) { - log.debug("불법위반행위정보 수정 (파일 포함): {}, 파일 개수: {}", vo, - photoFiles != null ? photoFiles.size() : 0); + public int updateActInfoWithFiles(CrdnActInfoVO vo, List crdnPhotoFiles, List actnPhotoFiles) { + log.debug("불법위반행위정보 수정 (파일 포함): {}, 단속 사진 개수: {}, 조치 사진 개수: {}", + vo, crdnPhotoFiles != null ? crdnPhotoFiles.size() : 0, + actnPhotoFiles != null ? actnPhotoFiles.size() : 0); try { // 중요한 로직 주석: 먼저 행위정보를 수정한다 @@ -102,11 +110,17 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C if (result > 0) { log.debug("행위정보 수정 완료: actInfoId={}", vo.getActInfoId()); - // 중요한 로직 주석: 새로운 파일이 있는 경우에만 사진 추가 처리를 진행한다 + // 중요한 로직 주석: 새로운 단속 사진이 있는 경우 추가 처리 (CRDN_PHOTO_SE_CD = '1') // 기존 사진의 개별 삭제는 별도의 Ajax 호출로 처리되므로 여기서는 신규 추가만 한다 - if (photoFiles != null && !photoFiles.isEmpty()) { - int photoResult = photoService.insertPhotosWithFiles(photoFiles, vo.getActInfoId(), crdnPhotoSeCd, vo); - log.debug("사진 파일 추가 완료: actInfoId={}, 추가된 사진 수={}", vo.getActInfoId(), photoResult); + if (crdnPhotoFiles != null && !crdnPhotoFiles.isEmpty()) { + int crdnPhotoResult = photoService.insertPhotosWithFiles(crdnPhotoFiles, vo.getActInfoId(), "1", vo); + log.debug("단속 사진 파일 추가 완료: actInfoId={}, 추가된 단속 사진 수={}", vo.getActInfoId(), crdnPhotoResult); + } + + // 중요한 로직 주석: 새로운 조치 사진이 있는 경우 추가 처리 (CRDN_PHOTO_SE_CD = '2') + if (actnPhotoFiles != null && !actnPhotoFiles.isEmpty()) { + int actnPhotoResult = photoService.insertPhotosWithFiles(actnPhotoFiles, vo.getActInfoId(), "2", vo); + log.debug("조치 사진 파일 추가 완료: actInfoId={}, 추가된 조치 사진 수={}", vo.getActInfoId(), actnPhotoResult); } } else { log.error("행위정보 수정 실패: {}", vo); @@ -130,7 +144,10 @@ public class CrdnActInfoServiceImpl extends EgovAbstractServiceImpl implements C if (vo.getActInfoId() != null) { try { photoService.deletePhotosByActInfoIdAndCrdnPhotoSecd(vo.getActInfoId(), "1", vo.getDltr()); - log.debug("행위정보 관련 사진 삭제 완료: actInfoId={}", vo.getActInfoId()); + log.debug("행위정보 단속 사진 삭제 완료: actInfoId={}, crdnPhotoSeCd={}", vo.getActInfoId(), "1"); + + photoService.deletePhotosByActInfoIdAndCrdnPhotoSecd(vo.getActInfoId(), "2", vo.getDltr()); + log.debug("행위정보 조치 사진 삭제 완료: actInfoId={}, crdnPhotoSeCd={}", vo.getActInfoId(), "2"); } catch (Exception e) { log.warn("행위정보 관련 사진 삭제 중 오류 발생: actInfoId={}", vo.getActInfoId(), e); // 사진 삭제 실패해도 행위정보 삭제는 진행 diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 0c94a3f..0baaa36 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,5 +1,9 @@ # Local profile spring: + servlet: + multipart: + max-file-size: 15MB # 개별 파일 최대 크기를 15MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. + max-request-size: 150MB # 전체 요청 최대 크기를 150MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. config: activate: on-profile: dev diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 374859b..a398cf7 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -1,5 +1,9 @@ # Local profile spring: + servlet: + multipart: + max-file-size: 15MB # 개별 파일 최대 크기를 15MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. + max-request-size: 150MB # 전체 요청 최대 크기를 150MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. config: activate: on-profile: local @@ -94,7 +98,7 @@ file: path: d:/data/@projectName@/file max-size: 10 # 단일 파일 최대 크기 (MB) max-total-size: 100 # 총 파일 최대 크기 (MB) - max-files: 10 # 최대 파일 개수 + max-files: 20 # 최대 파일 개수 allowed-extensions: hwp,jpg,jpeg,png,gif,pdf,doc,docx,xls,xlsx,ppt,pptx,txt,zip real-file-delete: true # 실제 파일 삭제 여부 sub-dirs: diff --git a/src/main/resources/application-prd.yml b/src/main/resources/application-prd.yml index ec70b86..68a9ce6 100644 --- a/src/main/resources/application-prd.yml +++ b/src/main/resources/application-prd.yml @@ -1,5 +1,9 @@ # Local profile spring: + servlet: + multipart: + max-file-size: 15MB # 개별 파일 최대 크기를 15MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. + max-request-size: 150MB # 전체 요청 최대 크기를 150MB로 증가, multipart 를 이용시 header, type 등 정보가 붙어서 over head 가 발생할 수 있다고 함. config: activate: on-profile: prd diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f5a6a40..0088dea 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -7,9 +7,7 @@ server: charset: UTF-8 enabled: true force: true # 서버가 지정한 인코딩(UTF-8)을 항상 강제로 적용, 클라이언트의 요청과 상관없이 서버 인코딩이 우선 - multipart: - max-file-size: 10MB - max-request-size: 50MB + Globals: DbType: maria 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 d1c7197..88189e4 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 @@ -209,7 +209,7 @@ VRTC = #{vrtc}, AREA = #{area}, RMRK = #{rmrk}, - ACTN_YMD = #{actnYmd}, + ACTN_YMD = replace(#{actnYmd},'-',''), ACTN_AREA = #{actnArea}, ACTN_RMRK = #{actnRmrk}, MDFCN_DT = NOW(), diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnPhotoMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnPhotoMapper_maria.xml index bc3dbfb..b1ddda1 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnPhotoMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/crdnActInfo/CrdnPhotoMapper_maria.xml @@ -25,7 +25,9 @@ FROM tb_crdn_photo p LEFT JOIN tb_cd_detail cd ON cd.CD_GROUP_ID = 'CRDN_PHOTO_SE_CD' AND cd.CD_ID = p.CRDN_PHOTO_SE_CD WHERE p.ACT_INFO_ID = #{actInfoId} + AND p.CRDN_PHOTO_SE_CD = #{crdnPhotoSeCd} + AND p.DEL_YN = 'N' ORDER BY p.CRDN_PHOTO_SN ASC 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 fe570e4..b6d1b58 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 @@ -45,7 +45,7 @@ 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 + CASE WHEN ( CAST(t1.CRDN_YR as SIGNED) - CAST(substring(t3.ACT_BGNG_YMD,1,4) as SIGNED) ) >= strct.RDVLRT_CN_YR_CNT THEN strct.LAST_YR_RDVLRT ELSE 1-( (CAST(t1.CRDN_YR as SIGNED) - CAST(substring(t3.ACT_BGNG_YMD,1,4) as SIGNED)) * strct.DPRT 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 5fe314f..0a42edc 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 @@ -20,15 +20,15 @@