From 58bff37e5efeb00bfa6440a42948ca0aa70217bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Fri, 28 Nov 2025 15:57:24 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B2=98=EB=A6=AC=EC=83=81=ED=83=9C,=20?= =?UTF-8?q?=EB=B9=84=EA=B3=A0=20=EC=88=98=EC=A0=95=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CarFfnlgTrgtController.java | 30 +++++ .../mapper/CarFfnlgTrgtMapper.java | 9 +- .../model/CarFfnlgTrgtModifiedDataVO.java | 31 +++++ .../service/CarFfnlgTrgtService.java | 10 ++ .../service/impl/CarFfnlgTrgtServiceImpl.java | 62 +++++++++ .../registration/CarFfnlgTrgtMapper_maria.xml | 11 +- .../registration/list.jsp | 127 +++++++++++++++++- 7 files changed, 272 insertions(+), 8 deletions(-) create mode 100644 src/main/java/go/kr/project/carInspectionPenalty/registration/model/CarFfnlgTrgtModifiedDataVO.java diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/controller/CarFfnlgTrgtController.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/controller/CarFfnlgTrgtController.java index 3978f2b..2bbabab 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/controller/CarFfnlgTrgtController.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/controller/CarFfnlgTrgtController.java @@ -4,6 +4,7 @@ import egovframework.constant.MessageConstants; import egovframework.constant.TilesConstants; import egovframework.util.ApiResponseUtil; import egovframework.util.SessionUtil; +import go.kr.project.carInspectionPenalty.registration.model.CarFfnlgTrgtModifiedDataVO; import go.kr.project.carInspectionPenalty.registration.model.CarFfnlgTrgtVO; import go.kr.project.carInspectionPenalty.registration.service.CarFfnlgTrgtService; import go.kr.project.common.model.CmmnCodeSearchVO; @@ -404,6 +405,35 @@ public class CarFfnlgTrgtController { } } + /** + * 과태료 대상 정보를 일괄 저장하는 AJAX 메소드 + * 생성, 수정, 삭제된 데이터를 처리합니다. + * + * @param modifyData 생성/수정/삭제할 데이터를 담은 VO 객체 + * @return 저장 결과 메시지와 성공/실패 상태를 담은 ResponseEntity 객체 + */ + @PostMapping("/saveAll.ajax") + @ResponseBody + @Operation(summary = "과태료 대상 정보 일괄 저장", description = "생성, 수정, 삭제된 과태료 대상 데이터를 일괄 처리합니다.") + public ResponseEntity saveAllAjax(@RequestBody CarFfnlgTrgtModifiedDataVO modifyData) { + log.info("과태료 대상 일괄 저장 요청 - 수정: {}건, 생성: {}건, 삭제: {}건", + modifyData.getUpdatedRows() != null ? modifyData.getUpdatedRows().size() : 0, + modifyData.getCreatedRows() != null ? modifyData.getCreatedRows().size() : 0, + modifyData.getDeletedRows() != null ? modifyData.getDeletedRows().size() : 0); + + try { + int result = service.saveCarFfnlgTrgts(modifyData); + if (result > 0) { + return ApiResponseUtil.success("과태료 대상 정보가 저장되었습니다."); + } else { + return ApiResponseUtil.error("저장할 데이터가 없습니다."); + } + } catch (Exception e) { + log.error("과태료 대상 일괄 저장 중 오류 발생", e); + return ApiResponseUtil.error("저장 중 오류가 발생했습니다: " + e.getMessage()); + } + } + /** * UTF-8 인코딩된 MultipartFile을 EUC-KR 인코딩으로 변환 * diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/mapper/CarFfnlgTrgtMapper.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/mapper/CarFfnlgTrgtMapper.java index 2963cca..694f02e 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/mapper/CarFfnlgTrgtMapper.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/mapper/CarFfnlgTrgtMapper.java @@ -45,7 +45,14 @@ public interface CarFfnlgTrgtMapper { * @return 수정 건수 */ int update(CarFfnlgTrgtVO vo); - + + /** + * 과태료 대상의 처리상태와 비고만 수정 + * @param vo 수정할 데이터 (carFfnlgTrgtId, taskPrcsSttsCd, rmrk) + * @return 수정 건수 + */ + int updateTaskPrcsSttsCdAndRmrk(CarFfnlgTrgtVO vo); + /** * 과태료 대상 삭제 (논리삭제) * @param vo 삭제할 데이터 (carFfnlgTrgtId, dltr) diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/model/CarFfnlgTrgtModifiedDataVO.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/model/CarFfnlgTrgtModifiedDataVO.java new file mode 100644 index 0000000..676630b --- /dev/null +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/model/CarFfnlgTrgtModifiedDataVO.java @@ -0,0 +1,31 @@ +package go.kr.project.carInspectionPenalty.registration.model; + +import go.kr.project.common.model.PagingVO; +import lombok.*; + +import java.util.List; + +/** + * packageName : go.kr.project.carInspectionPenalty.registration.model + * fileName : CarFfnlgTrgtModifiedDataVO + * author : 시스템 관리자 + * date : 2025-11-28 + * description : 과태료 대상 수정 데이터를 담는 VO 클래스 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-11-28 시스템 관리자 최초 생성 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class CarFfnlgTrgtModifiedDataVO extends PagingVO { + + private List createdRows; + private List updatedRows; + private List deletedRows; + +} diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/CarFfnlgTrgtService.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/CarFfnlgTrgtService.java index 44d85e2..ef286e0 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/CarFfnlgTrgtService.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/CarFfnlgTrgtService.java @@ -1,5 +1,6 @@ package go.kr.project.carInspectionPenalty.registration.service; +import go.kr.project.carInspectionPenalty.registration.model.CarFfnlgTrgtModifiedDataVO; import go.kr.project.carInspectionPenalty.registration.model.CarFfnlgTrgtVO; import org.springframework.web.multipart.MultipartFile; @@ -77,4 +78,13 @@ public interface CarFfnlgTrgtService { * @return 비교 결과 (compareResults, totalCount, successCount, failCount) */ Map compareWithApi(List> targetList); + + /** + * 과태료 대상 정보를 일괄 저장 + * 생성, 수정, 삭제된 데이터를 처리합니다. + * + * @param modifyData 생성/수정/삭제할 데이터를 담은 VO 객체 + * @return 저장 건수 + */ + int saveCarFfnlgTrgts(CarFfnlgTrgtModifiedDataVO modifyData); } diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/CarFfnlgTrgtServiceImpl.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/CarFfnlgTrgtServiceImpl.java index 75960a8..c50c081 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/CarFfnlgTrgtServiceImpl.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/CarFfnlgTrgtServiceImpl.java @@ -2,9 +2,11 @@ package go.kr.project.carInspectionPenalty.registration.service.impl; import egovframework.constant.TaskPrcsSttsConstants; import egovframework.exception.MessageException; +import egovframework.util.SessionUtil; import go.kr.project.api.service.ExternalVehicleApiService; import go.kr.project.carInspectionPenalty.registration.config.CarFfnlgTxtParseConfig; import go.kr.project.carInspectionPenalty.registration.mapper.CarFfnlgTrgtMapper; +import go.kr.project.carInspectionPenalty.registration.model.CarFfnlgTrgtModifiedDataVO; import go.kr.project.carInspectionPenalty.registration.model.CarFfnlgTrgtVO; import go.kr.project.carInspectionPenalty.registration.service.CarFfnlgTrgtService; import go.kr.project.carInspectionPenalty.registration.service.ComparisonService; @@ -1008,4 +1010,64 @@ public class CarFfnlgTrgtServiceImpl extends EgovAbstractServiceImpl implements return resultData; } + /** + * 과태료 대상 정보를 일괄 저장 + * 생성, 수정, 삭제된 데이터를 처리합니다. + * + * @param modifyData 생성/수정/삭제할 데이터를 담은 VO 객체 + * @return 저장 건수 + */ + @Override + @Transactional + public int saveCarFfnlgTrgts(CarFfnlgTrgtModifiedDataVO modifyData) { + int result = 0; + + // 1. 삭제된 행 처리 (논리 삭제) + List deletedRows = modifyData.getDeletedRows(); + if (deletedRows != null && !deletedRows.isEmpty()) { + for (CarFfnlgTrgtVO vo : deletedRows) { + // 삭제자 정보 설정 + String dltr = SessionUtil.getUserId(); + if (dltr == null || dltr.isEmpty()) { + throw new MessageException("로그인 정보가 없습니다."); + } + vo.setDltr(dltr); + + // 논리 삭제 처리 + result += mapper.delete(vo); + } + } + + // 2. 추가된 행 처리 + List createdRows = modifyData.getCreatedRows(); + if (createdRows != null && !createdRows.isEmpty()) { + for (CarFfnlgTrgtVO vo : createdRows) { + // 등록자 정보 설정 + String rgtr = SessionUtil.getUserId(); + if (rgtr == null || rgtr.isEmpty()) { + throw new MessageException("로그인 정보가 없습니다."); + } + vo.setRgtr(rgtr); + + // 기본값 설정 + if (vo.getTaskPrcsSttsCd() == null || vo.getTaskPrcsSttsCd().isEmpty()) { + vo.setTaskPrcsSttsCd(TaskPrcsSttsConstants.TASK_PRCS_STTS_CD_01_RCPT); + } + + result += mapper.insert(vo); + } + } + + // 3. 수정된 행 처리 (처리상태, 비고만 수정) + List updatedRows = modifyData.getUpdatedRows(); + if (updatedRows != null && !updatedRows.isEmpty()) { + for (CarFfnlgTrgtVO vo : updatedRows) { + result += mapper.updateTaskPrcsSttsCdAndRmrk(vo); + } + } + + log.info("과태료 대상 일괄 저장 완료 - 처리 건수: {}", result); + return result; + } + } diff --git a/src/main/resources/mybatis/mapper/carInspectionPenalty/registration/CarFfnlgTrgtMapper_maria.xml b/src/main/resources/mybatis/mapper/carInspectionPenalty/registration/CarFfnlgTrgtMapper_maria.xml index e98f8bf..d837350 100644 --- a/src/main/resources/mybatis/mapper/carInspectionPenalty/registration/CarFfnlgTrgtMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/carInspectionPenalty/registration/CarFfnlgTrgtMapper_maria.xml @@ -243,7 +243,16 @@ WHERE CAR_FFNLG_TRGT_ID = #{carFfnlgTrgtId} AND DEL_DT IS NULL - + + + + UPDATE tb_car_ffnlg_trgt + SET TASK_PRCS_STTS_CD = #{taskPrcsSttsCd}, + RMRK = #{rmrk} + WHERE CAR_FFNLG_TRGT_ID = #{carFfnlgTrgtId} + AND DEL_DT IS NULL + + UPDATE tb_car_ffnlg_trgt diff --git a/src/main/webapp/WEB-INF/views/carInspectionPenalty/registration/list.jsp b/src/main/webapp/WEB-INF/views/carInspectionPenalty/registration/list.jsp index de54693..d789efd 100644 --- a/src/main/webapp/WEB-INF/views/carInspectionPenalty/registration/list.jsp +++ b/src/main/webapp/WEB-INF/views/carInspectionPenalty/registration/list.jsp @@ -10,8 +10,7 @@
과태료 대상 목록
- - +
@@ -59,8 +58,11 @@
  • 과태료 대상 목록
  • - + + + + 총 0건