package kr.wisestone.owl.scheduler; import kr.wisestone.owl.domain.Workspace; import kr.wisestone.owl.service.*; import kr.wisestone.owl.config.websocket.WebSocketService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.List; @Component public class Scheduler { private static final Logger log = LoggerFactory.getLogger(Scheduler.class); @Autowired private PaymentService paymentService; @Autowired private WorkspaceService workspaceService; @Autowired private SystemEmailService systemEmailService; @Autowired private AttachedFileService attachedFileService; @Autowired private UserService userService; @Autowired private IssueService issueService; @Autowired private WebSocketService webSocketService; @Value("${use.scheduler}") private boolean bUseScheduler; // OWL ITS 관련자들에게 회원 가입 정보를 전달한다. @Scheduled(cron = "0 0 17 * * *") public void sendOwlManager() { if (!bUseScheduler) { return; } // OWL ITS 관련자들에게 회원 가입 정보를 전달한다. this.userService.sendUserJoinStatisticsEmail(); // OWL ITS 관련자들에게 시스템 현황 정보를 전달한다. this.userService.sendTotalStatisticsEmail(); } /*@Scheduled(cron = "0 50 23 * * *") // 매 시간 (초, 분, 시, 일, 월, 년) public void updateExchangeRatePayment() { // 변경된 환율 정보를 결제 금액에 업데이트한다. this.paymentService.updateExchangeRatePayment(); }*/ // 자동 결재 - 어제가 만료일인 업무 공간을 찾아서 결제한다. 새벽 1시에 실행 /*@Scheduled(cron = "0 0 01 * * *") // 매 시간 (초, 분, 시, 일, 월, 년) public void subscribePayment() { List workspaces = this.workspaceService.findSubscribeImmediateExpireDate(); for (Workspace workspace : workspaces) { this.paymentService.subscribeImmediate(workspace); } }*/ // 이슈와 연결되지 않은 첨부파일 삭제 - 이슈 생성, 수정에서 에디트 창에 첨부했다가 저장하지 않은 파일들... 새벽 1시 30분에 실행 @Scheduled(cron = "0 30 01 * * *") public void deleteAttachedFileNotIdAndReservationIssue() { if (!bUseScheduler) { return; } // 이슈와 연결되지 않은 첨부파일 삭제 this.attachedFileService.deleteAttachedFileNotId(); // 이슈 예약 발생한 항목을 찾아 이슈를 다시 생성 상태로 변경한다. this.issueService.reservationIssue(); } // 업무 공간 자동 초기화 - 어제가 만료일인 업무 공간을 찾아서 업무 공간 사용자, 사용 용량을 초기화한다. 새벽 2시에 실행 /*@Scheduled(cron = "0 0 02 * * *") public void expireWorkspace() { // 사용 기간이 만료된 업무 공간을 찾아 용량, 최대 사용자, 서비스 유형을 변경한다. this.workspaceService.expireWorkspace(); // 업무 공간 만료 예정 안내 this.workspaceService.expireAlarmWorkspace(); }*/ // 이메일 예약 발송 - 사용자가 설정한 알림 시간에 시스템에서 일어난 이벤트를 이메일로 발송한다. - 매시간 30분에 실행 @Scheduled(cron = "0 0/30 * * * *") public void smartEmailSystem() { if (!bUseScheduler) { return; } // 예약된 이메일 발송 this.systemEmailService.reservationSendEmail(); } // 이메일 실시간 발송 - 1분마다 실행 @Scheduled(cron = "0 * * * * *") public void realTimeEmailSystem() { if (!bUseScheduler) { return; } // 실시간 이메일 발송 this.systemEmailService.realTimeSendEmail(); } // 15초 마다 접속자 확인 /*@Scheduled(fixedDelay = 15000) public void pingUsers() { // 접속 사용자를 확인한다. this.webSocketService.checkActiveUser(); }*/ }