diff --git a/src/main/java/com/example/paycheck/domain/workrecord/service/WorkRecordCommandService.java b/src/main/java/com/example/paycheck/domain/workrecord/service/WorkRecordCommandService.java index bd10503..f1f0385 100644 --- a/src/main/java/com/example/paycheck/domain/workrecord/service/WorkRecordCommandService.java +++ b/src/main/java/com/example/paycheck/domain/workrecord/service/WorkRecordCommandService.java @@ -95,12 +95,12 @@ public WorkRecordDto.Response createWorkRecordByEmployer(WorkRecordDto.CreateReq WorkRecord savedRecord = workRecordRepository.save(workRecord); - // COMPLETED 상태면 정확한 휴일 정보와 사업장 규모를 반영하여 재계산 + // 예상 급여 계산 (SCHEDULED, COMPLETED 모두 적용) + calculationService.calculateWorkRecordDetails(savedRecord); if (status == WorkRecordStatus.COMPLETED) { - calculationService.calculateWorkRecordDetails(savedRecord); calculationService.validateWorkRecordConsistency(savedRecord); - workRecordRepository.save(savedRecord); } + workRecordRepository.save(savedRecord); // 도메인 간 협력 처리 if (status == WorkRecordStatus.COMPLETED) { @@ -174,12 +174,12 @@ public WorkRecordDto.Response updateWorkRecord(Long workRecordId, WorkRecordDto. workRecordRepository.save(workRecord); - // COMPLETED 상태면 정확한 휴일 정보와 사업장 규모를 반영하여 재계산 + // 예상 급여 계산 (SCHEDULED, COMPLETED 모두 적용) + calculationService.calculateWorkRecordDetails(workRecord); if (workRecord.getStatus() == WorkRecordStatus.COMPLETED) { - calculationService.calculateWorkRecordDetails(workRecord); calculationService.validateWorkRecordConsistency(workRecord); - workRecordRepository.save(workRecord); } + workRecordRepository.save(workRecord); // 도메인 간 협력 처리 coordinatorService.handleWorkRecordUpdate(workRecord, oldWeeklyAllowance, newWeeklyAllowance); @@ -349,20 +349,16 @@ public WorkRecordDto.BatchCreateResponse createWorkRecordsBatch(WorkRecordDto.Ba // 5. WorkRecord 일괄 저장 (saveAll 사용) List savedRecords = workRecordRepository.saveAll(workRecordsToSave); - // 6. COMPLETED 상태 WorkRecord 상세 일괄 계산 + // 6. 전체 WorkRecord 예상 급여 일괄 계산 (SCHEDULED, COMPLETED 모두) + calculationService.calculateWorkRecordDetailsBatch(savedRecords); + List completedRecords = savedRecords.stream() .filter(wr -> wr.getStatus() == WorkRecordStatus.COMPLETED) .collect(Collectors.toList()); - - calculationService.calculateWorkRecordDetailsBatch(completedRecords); - for (WorkRecord completedRecord : completedRecords) { - calculationService.validateWorkRecordConsistency(completedRecord); - } + completedRecords.forEach(calculationService::validateWorkRecordConsistency); // 7. 계산된 WorkRecord 일괄 업데이트 - if (!completedRecords.isEmpty()) { - workRecordRepository.saveAll(completedRecords); - } + workRecordRepository.saveAll(savedRecords); // 8. 도메인 협력 처리 일괄 수행 (기존 handleBatchWorkRecordCreation 활용) coordinatorService.handleBatchWorkRecordCreation(savedRecords); diff --git a/src/main/java/com/example/paycheck/domain/workrecord/service/WorkRecordGenerationService.java b/src/main/java/com/example/paycheck/domain/workrecord/service/WorkRecordGenerationService.java index 8f90b24..3bebe0c 100644 --- a/src/main/java/com/example/paycheck/domain/workrecord/service/WorkRecordGenerationService.java +++ b/src/main/java/com/example/paycheck/domain/workrecord/service/WorkRecordGenerationService.java @@ -25,6 +25,7 @@ public class WorkRecordGenerationService { private final WorkRecordRepository workRecordRepository; private final ObjectMapper objectMapper; + private final WorkRecordCalculationService calculationService; /** * 계약 생성 시 2개월치 WorkRecord 생성 @@ -93,6 +94,7 @@ public void generateWorkRecordsForPeriod(WorkerContract contract, LocalDate star } if (!workRecords.isEmpty()) { + calculationService.calculateWorkRecordDetailsBatch(workRecords); workRecordRepository.saveAll(workRecords); log.info("WorkRecord 생성 완료: {} 개 생성됨 (Contract ID={})", workRecords.size(), contract.getId()); } diff --git a/src/test/java/com/example/paycheck/domain/workrecord/service/WorkRecordCommandServiceTest.java b/src/test/java/com/example/paycheck/domain/workrecord/service/WorkRecordCommandServiceTest.java index a7c0d95..e6c425b 100644 --- a/src/test/java/com/example/paycheck/domain/workrecord/service/WorkRecordCommandServiceTest.java +++ b/src/test/java/com/example/paycheck/domain/workrecord/service/WorkRecordCommandServiceTest.java @@ -116,7 +116,7 @@ void createWorkRecordByEmployer_Success_Future() { // then assertThat(result).isNotNull(); - verify(workRecordRepository).save(any(WorkRecord.class)); + verify(workRecordRepository, times(2)).save(any(WorkRecord.class)); } @Test diff --git a/src/test/java/com/example/paycheck/domain/workrecord/service/WorkRecordGenerationServiceTest.java b/src/test/java/com/example/paycheck/domain/workrecord/service/WorkRecordGenerationServiceTest.java index 9bdc8d4..a23dd51 100644 --- a/src/test/java/com/example/paycheck/domain/workrecord/service/WorkRecordGenerationServiceTest.java +++ b/src/test/java/com/example/paycheck/domain/workrecord/service/WorkRecordGenerationServiceTest.java @@ -32,6 +32,9 @@ class WorkRecordGenerationServiceTest { @Mock private WorkRecordRepository workRecordRepository; + @Mock + private WorkRecordCalculationService calculationService; + @Spy private ObjectMapper objectMapper = new ObjectMapper();