From 42bb0dd2442e1b2ebfe9d27982da3b4b5ed0dd68 Mon Sep 17 00:00:00 2001 From: dyhj625 Date: Wed, 19 Mar 2025 17:45:46 +0900 Subject: [PATCH] =?UTF-8?q?=ED=9C=B4=EA=B0=80=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/VacationController.java | 21 +++++++----- .../localhost/mapper/localvacaMapper.java | 8 +++-- .../localhost/service/localvacaService.java | 34 +++++++++++++++++-- src/main/resources/mapper/localvacaMapper.xml | 23 +++++++++++-- 4 files changed, 70 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/company/localhost/controller/api/VacationController.java b/src/main/java/io/company/localhost/controller/api/VacationController.java index c1eb988..5b279df 100644 --- a/src/main/java/io/company/localhost/controller/api/VacationController.java +++ b/src/main/java/io/company/localhost/controller/api/VacationController.java @@ -99,20 +99,23 @@ public class VacationController { Long user = AuthUtil.getUser().getId(); List addRequests = map.getList("add", MapDto.class); List deleteIds = map.getList("delete", Long.class); - - if (addRequests != null) { + + // 1️⃣ 삭제 먼저 처리 + if (deleteIds != null && !deleteIds.isEmpty()) { + localVacaService.deleteVacation(deleteIds); + } + + // 2️⃣ 추가 또는 업데이트 처리 + if (addRequests != null && !addRequests.isEmpty()) { for (MapDto addRequest : addRequests) { addRequest.put("employeeId", user); - localVacaService.insertVacation(addRequest); + localVacaService.upsertVacation(addRequest); } - } - if (deleteIds != null) { - for (Long deleteId : deleteIds) { - localVacaService.deleteVacation(deleteId); - } - } + } + return ApiResponse.ok("휴가 변경이 성공적으로 처리되었습니다."); } + /** * 전체 사원의 휴가 조회 diff --git a/src/main/java/io/company/localhost/mapper/localvacaMapper.java b/src/main/java/io/company/localhost/mapper/localvacaMapper.java index c90a248..ad7643b 100644 --- a/src/main/java/io/company/localhost/mapper/localvacaMapper.java +++ b/src/main/java/io/company/localhost/mapper/localvacaMapper.java @@ -25,8 +25,8 @@ import io.company.localhost.common.dto.MapDto; @Mapper public interface localvacaMapper { void insertVacation(MapDto map); - - void deleteVacation(Long vacationId); + + void deleteVacation(@Param("vacationIds") List vacationIds); List selectVacations(@Param("year") int year, @Param("month") int month); @@ -37,6 +37,10 @@ public interface localvacaMapper { List selectEmployeeRemainingVacation(); List selectSentVacationCount(MapDto map); + + Long findVacationIdByDate(@Param("userId") Long employeeId, @Param("date") String date); + + void updateVacation(MapDto vacation); } diff --git a/src/main/java/io/company/localhost/service/localvacaService.java b/src/main/java/io/company/localhost/service/localvacaService.java index 616f91e..bb061b5 100644 --- a/src/main/java/io/company/localhost/service/localvacaService.java +++ b/src/main/java/io/company/localhost/service/localvacaService.java @@ -34,6 +34,7 @@ import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; import io.company.localhost.common.dto.MapDto; import io.company.localhost.mapper.localvacaMapper; @@ -53,10 +54,39 @@ public class localvacaService { localvacaMapper.insertVacation(vacation); } - public void deleteVacation(Long vacationId) { - localvacaMapper.deleteVacation(vacationId); + /** + * 여러 개의 휴가를 삭제 + */ + @Transactional + public void deleteVacation(List vacationIds) { + if (vacationIds != null && !vacationIds.isEmpty()) { + localvacaMapper.deleteVacation(vacationIds); + } } + /** + * 휴가 추가 또는 업데이트 (중복 검사 후 처리) + */ + @Transactional + public void upsertVacation(MapDto vacation) { + String date = vacation.getString("date"); + Long employeeId = vacation.getLong("employeeId"); + + // 기존 데이터 확인 + Long existingId = localvacaMapper.findVacationIdByDate(employeeId, date); + + if (existingId != null) { + // 기존 휴가가 존재하면 업데이트 + vacation.put("id", existingId); + localvacaMapper.updateVacation(vacation); + } else { + System.out.println(vacation); + // 기존 휴가가 없으면 새롭게 추가 + localvacaMapper.insertVacation(vacation); + } + } + + public List selectVacationList(int year, int month) { return localvacaMapper.selectVacations(year, month); } diff --git a/src/main/resources/mapper/localvacaMapper.xml b/src/main/resources/mapper/localvacaMapper.xml index 8a16d2c..cf3bb35 100644 --- a/src/main/resources/mapper/localvacaMapper.xml +++ b/src/main/resources/mapper/localvacaMapper.xml @@ -8,10 +8,27 @@ VALUES (#{employeeId}, #{date}, #{type}, NOW(), #{receiverId}) - - + + + + + + UPDATE localvaca + SET LOCVACTYP = #{type} + WHERE LOCVACSEQ = #{id} + + + + DELETE FROM localvaca - WHERE LOCVACSEQ = #{vacationId} + WHERE LOCVACSEQ IN + + #{id} +