파견 관리 UX 고도화, 비동기 알림 트리거 연동 보강, 스마트 라우팅 반영 작업

This commit is contained in:
pray4skylark
2026-10-02 11:32:37 +09:00
parent db5ac3317d
commit 8fbd3d3d2e
7 changed files with 670 additions and 22 deletions
@@ -26,6 +26,7 @@ public class DispatchHistoryService {
private final DispatchHistoryRepository dispatchHistoryRepository;
private final EmployeeRepository employeeRepository;
private final ProjectRepository projectRepository;
private final NotificationPublisher notificationPublisher;
public List<DispatchHistory> findByEmployeeId(Long empId) {
employeeRepository.findById(empId)
@@ -78,7 +79,22 @@ public class DispatchHistoryService {
.startDate(request.startDate() != null ? request.startDate() : LocalDate.now())
.build();
return dispatchHistoryRepository.save(history);
DispatchHistory saved = dispatchHistoryRepository.save(history);
// Update employee dispatch status to DISPATCHED
employee.setDispatchStatus(com.srsystem.entity.enums.DispatchStatus.DISPATCHED);
employeeRepository.save(employee);
// Send notification
notificationPublisher.publish(new com.srsystem.dto.NotificationEvent(
"DISPATCH_ASSIGNED",
"신규 파견 발령: " + project.getProjectName(),
String.format("'%s' 프로젝트에 %s 역할로 파견 등록되었습니다.", project.getProjectName(), request.roleTitle()),
"/dispatch",
employee.getEmpId()
));
return saved;
}
@Transactional
@@ -86,6 +102,16 @@ public class DispatchHistoryService {
DispatchHistory history = dispatchHistoryRepository.findById(dispatchId)
.orElseThrow(() -> new BusinessException(ErrorCode.DISPATCH_NOT_FOUND));
history.setEndDate(LocalDate.now());
return dispatchHistoryRepository.save(history);
DispatchHistory saved = dispatchHistoryRepository.save(history);
// Check active dispatches remaining
List<DispatchHistory> active = dispatchHistoryRepository.findByEmployee_EmpIdAndEndDateIsNull(history.getEmployee().getEmpId());
if (active.isEmpty()) {
Employee emp = history.getEmployee();
emp.setDispatchStatus(com.srsystem.entity.enums.DispatchStatus.WAITING);
employeeRepository.save(emp);
}
return saved;
}
}