OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-12-02 616d76059d929650113f8a4ec750d86c4647b064
src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java
@@ -7,6 +7,7 @@
import com.google.common.collect.Lists;
import com.sun.mail.smtp.SMTPAddressFailedException;
import kr.wisestone.owl.config.CommonConfiguration;
import kr.wisestone.owl.constant.ElasticSearchConstants;
import kr.wisestone.owl.constant.MailConstants;
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.domain.Department;
@@ -17,10 +18,7 @@
import kr.wisestone.owl.repository.SystemEmailRepository;
import kr.wisestone.owl.service.SystemEmailService;
import kr.wisestone.owl.service.UserService;
import kr.wisestone.owl.util.CommonUtil;
import kr.wisestone.owl.util.DateUtil;
import kr.wisestone.owl.util.MapUtil;
import kr.wisestone.owl.util.StringTemplateUtil;
import kr.wisestone.owl.util.*;
import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -378,6 +376,37 @@
        }
    }
    //  실시간 이메일 발송
    @Override
    @Transactional
    public void realTimeSendEmail() {
        List<String> sendUsers = this.userService.findByRealTimeNotifyTime();
        for (String sendUser : sendUsers) {
            //  사용자 별로 아직 발송되지 않은 이메일을 조회한다.
            List<SystemEmail> systemEmails = this.findBySendAddressAndSendYn(sendUser);
            StringBuilder emailBuilder = new StringBuilder();
            User user = this.userService.findByAccount(sendUser);
            if (user != null) {
                Locale locale = CommonUtil.getUserLanguage(user.getLanguage());    //  메일을 받는 사용자가 사용하고 있는 언어 정보를 가져온다.
                for (SystemEmail systemEmail : systemEmails) {
                    //  받는 사람의 언어로 변경하여 예약된 이메일을 발송한다.
                    this.makeReservationContextEmail(emailBuilder, systemEmail, locale);
                    systemEmail.setSendYn(true);
                }
                //  내용이 있으면 발송
                if (!StringUtils.isEmpty(emailBuilder.toString())) {
                    //  이메일을 발송한다.
                    this.sendEmail(this.messageAccessor.message(MsgConstants.REALTIME_EMAIL_TITLE, locale), emailBuilder.toString(), new String[]{CommonUtil.decryptAES128(sendUser)}, null);
                    this.systemEmailRepository.saveAll(systemEmails);
                }
            }
        }
    }
    //  받는 사람의 언어로 변경하여 예약된 이메일을 발송한다.
    private void makeReservationContextEmail(StringBuilder emailBuilder, SystemEmail systemEmail, Locale locale) {
        MailConstants mailConstants;