From 616d76059d929650113f8a4ec750d86c4647b064 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 목, 02 12월 2021 14:39:20 +0900
Subject: [PATCH] Home>사용자>DropDown>OWL 프로필>정보 수정 실시간 기능 추가 완료

---
 src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java         |   16 ++++++++
 src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java  |   37 ++++++++++++++++--
 src/main/webapp/scripts/app/user/userModify.controller.js                |   13 ++++++
 src/main/java/kr/wisestone/owl/mapper/UserMapper.java                    |    2 +
 src/main/java/kr/wisestone/owl/scheduler/Scheduler.java                  |   23 +++++++----
 src/main/java/kr/wisestone/owl/service/SystemEmailService.java           |    2 +
 src/main/resources/mybatis/query-template/user-template.xml              |   10 ++++-
 src/main/webapp/views/user/userModify.html                               |    7 +++
 src/main/java/kr/wisestone/owl/constant/MsgConstants.java                |    1 
 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties                   |    1 
 src/main/java/kr/wisestone/owl/service/UserService.java                  |    2 +
 src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java |    6 ++
 12 files changed, 103 insertions(+), 17 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
index 4aff444..a2ff548 100644
--- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
+++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -192,6 +192,7 @@
     public static final String QNA_EMPTY_CONTENT = "QNA_EMPTY_CONTENT";   //  QNA �젣紐� 諛� �궡�슜 以� �엯�젰 媛믪씠 �뾾�뒗 �븘�뱶媛� �엳�뒿�땲�떎.
 
     public static final String RESERVATION_EMAIL_TITLE = "RESERVATION_EMAIL_TITLE"; //  [OWL ITS] �뼱�젣 �씠�뒋 諛� �솢�룞 �쁽�솴�엯�땲�떎.
+    public static final String REALTIME_EMAIL_TITLE = "REALTIME_EMAIL_TITLE"; //  [OWL ITS] �뼱�젣 �씠�뒋 諛� �솢�룞 �쁽�솴�엯�땲�떎.
     public static final String FILE_TYPE_NOT_ALLOW = "FILE_TYPE_NOT_ALLOW"; //  �뿀�슜�릺吏� �븡�� �뙆�씪 �쑀�삎�엯�땲�떎.
 
 
diff --git a/src/main/java/kr/wisestone/owl/mapper/UserMapper.java b/src/main/java/kr/wisestone/owl/mapper/UserMapper.java
index 6ed585e..28e4818 100644
--- a/src/main/java/kr/wisestone/owl/mapper/UserMapper.java
+++ b/src/main/java/kr/wisestone/owl/mapper/UserMapper.java
@@ -24,6 +24,8 @@
 
     List<Map<String, Object>> findByReservationNotifyTime(Map<String, Object> conditions);
 
+    List<Map<String, Object>> findByRealTimeNotifyTime(Map<String, Object> conditions);
+
     List<Map<String, Object>> findByAllWorkspace(UserCondition userCondition);
 
     Long countByAllWorkspace(UserCondition userCondition);
diff --git a/src/main/java/kr/wisestone/owl/scheduler/Scheduler.java b/src/main/java/kr/wisestone/owl/scheduler/Scheduler.java
index e4306e1..e855cfc 100644
--- a/src/main/java/kr/wisestone/owl/scheduler/Scheduler.java
+++ b/src/main/java/kr/wisestone/owl/scheduler/Scheduler.java
@@ -15,7 +15,7 @@
 @Component
 public class Scheduler {
 
-    /*private static final Logger log = LoggerFactory.getLogger(Scheduler.class);
+    private static final Logger log = LoggerFactory.getLogger(Scheduler.class);
 
     @Autowired
     private PaymentService paymentService;
@@ -48,21 +48,21 @@
         this.userService.sendTotalStatisticsEmail();
     }
 
-    @Scheduled(cron = "0 50 23 * * *")    //  留� �떆媛� (珥�, 遺�, �떆, �씪, �썡, �뀈)
+    /*@Scheduled(cron = "0 50 23 * * *")    //  留� �떆媛� (珥�, 遺�, �떆, �씪, �썡, �뀈)
     public void updateExchangeRatePayment() {
         //  蹂�寃쎈맂 �솚�쑉 �젙蹂대�� 寃곗젣 湲덉븸�뿉 �뾽�뜲�씠�듃�븳�떎.
         this.paymentService.updateExchangeRatePayment();
-    }
+    }*/
 
     //   �옄�룞 寃곗옱 - �뼱�젣媛� 留뚮즺�씪�씤 �뾽臾� 怨듦컙�쓣 李얠븘�꽌 寃곗젣�븳�떎. �깉踰� 1�떆�뿉 �떎�뻾
-    @Scheduled(cron = "0 0 01 * * *")    //  留� �떆媛� (珥�, 遺�, �떆, �씪, �썡, �뀈)
+    /*@Scheduled(cron = "0 0 01 * * *")    //  留� �떆媛� (珥�, 遺�, �떆, �씪, �썡, �뀈)
     public void subscribePayment() {
         List<Workspace> workspaces = this.workspaceService.findSubscribeImmediateExpireDate();
 
         for (Workspace workspace : workspaces) {
             this.paymentService.subscribeImmediate(workspace);
         }
-    }
+    }*/
 
     //  �씠�뒋�� �뿰寃곕릺吏� �븡�� 泥⑤��뙆�씪 �궘�젣 - �씠�뒋 �깮�꽦, �닔�젙�뿉�꽌 �뿉�뵒�듃 李쎌뿉 泥⑤��뻽�떎媛� ���옣�븯吏� �븡�� �뙆�씪�뱾... �깉踰� 1�떆 30遺꾩뿉 �떎�뻾
     @Scheduled(cron = "0 30 01 * * *")
@@ -74,13 +74,13 @@
     }
 
     //  �뾽臾� 怨듦컙 �옄�룞 珥덇린�솕 - �뼱�젣媛� 留뚮즺�씪�씤 �뾽臾� 怨듦컙�쓣 李얠븘�꽌 �뾽臾� 怨듦컙 �궗�슜�옄, �궗�슜 �슜�웾�쓣 珥덇린�솕�븳�떎. �깉踰� 2�떆�뿉 �떎�뻾
-    @Scheduled(cron = "0 0 02 * * *")
+    /*@Scheduled(cron = "0 0 02 * * *")
     public void expireWorkspace() {
         //  �궗�슜 湲곌컙�씠 留뚮즺�맂 �뾽臾� 怨듦컙�쓣 李얠븘 �슜�웾, 理쒕� �궗�슜�옄, �꽌鍮꾩뒪 �쑀�삎�쓣 蹂�寃쏀븳�떎.
         this.workspaceService.expireWorkspace();
         //  �뾽臾� 怨듦컙 留뚮즺 �삁�젙 �븞�궡
         this.workspaceService.expireAlarmWorkspace();
-    }
+    }*/
 
     //  �씠硫붿씪 �삁�빟 諛쒖넚 - �궗�슜�옄媛� �꽕�젙�븳 �븣由� �떆媛꾩뿉 �떆�뒪�뀥�뿉�꽌 �씪�뼱�궃 �씠踰ㅽ듃瑜� �씠硫붿씪濡� 諛쒖넚�븳�떎. - 留ㅼ떆媛� 30遺꾩뿉 �떎�뻾
     @Scheduled(cron = "0 0/30 * * * *")
@@ -89,8 +89,15 @@
         this.systemEmailService.reservationSendEmail();
     }
 
+    //  �씠硫붿씪 �떎�떆媛� 諛쒖넚 - 10珥덈쭏�떎 �떎�뻾
+    @Scheduled(fixedDelay = 10000)
+    public void realTimeEmailSystem() {
+        //  �떎�떆媛� �씠硫붿씪 諛쒖넚
+        this.systemEmailService.realTimeSendEmail();
+    }
+
     //  15珥� 留덈떎 �젒�냽�옄 �솗�씤
-    @Scheduled(fixedDelay = 15000)
+    /*@Scheduled(fixedDelay = 15000)
     public void pingUsers() {
         //  �젒�냽 �궗�슜�옄瑜� �솗�씤�븳�떎.
         this.webSocketService.checkActiveUser();
diff --git a/src/main/java/kr/wisestone/owl/service/SystemEmailService.java b/src/main/java/kr/wisestone/owl/service/SystemEmailService.java
index d74e2f7..0abfdc4 100644
--- a/src/main/java/kr/wisestone/owl/service/SystemEmailService.java
+++ b/src/main/java/kr/wisestone/owl/service/SystemEmailService.java
@@ -25,5 +25,7 @@
 
     void reservationSendEmail();
 
+    void realTimeSendEmail();
+
     void information(Map<String, Object> params);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/UserService.java b/src/main/java/kr/wisestone/owl/service/UserService.java
index c36d4f1..fc41945 100644
--- a/src/main/java/kr/wisestone/owl/service/UserService.java
+++ b/src/main/java/kr/wisestone/owl/service/UserService.java
@@ -64,6 +64,8 @@
 
     List<String> findByReservationNotifyTime();
 
+    List<String> findByRealTimeNotifyTime();
+
     List<Map<String, Object>> findProjectMember(Project project);
 
     void updateLanguage(String language);
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
index d0624c9..b6b4725 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
@@ -523,7 +523,11 @@
     public void detectSendIssueMail(IssueHistoryType type, IssueForm issueForm, StringBuilder description) {
         if (type == IssueHistoryType.SEND) {
             description.append("<span translate=\"issue.sendIssueMailHistory\">�씠�뒋 硫붿씪 �쟾�넚�쓣 �셿猷뚰뻽�뒿�땲�떎. </span>");
-            description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + CommonUtil.decryptAES128(issueForm.getSendEmails().toString()) + "</span>");
+            if(issueForm.getSendEmails() != null && issueForm.getSendEmails().size() > 0){
+                for (String sendEmail : issueForm.getSendEmails()){
+                    description.append("<span class=\"text-primary bold\">&nbsp;>&nbsp;" + CommonUtil.decryptAES128(sendEmail) + "</span>");
+                }
+            }
         }
     }
 
diff --git a/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java
index 377b12e..7e6ecaa 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java
+++ b/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;
diff --git a/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
index e906deb..0001712 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
@@ -1237,6 +1237,22 @@
         return results;
     }
 
+    //  �씠硫붿씪 �븣由� �삁�젙 �떆媛꾩쓣 �떎�떆媛꾩쑝濡� �꽕�젙�븳 �궗�슜�옄瑜� 議고쉶�븳�떎.
+    @Override
+    @Transactional(readOnly = true)
+    public List<String> findByRealTimeNotifyTime() {
+        Map<String, Object> conditions = new HashMap<>();
+
+        List<Map<String, Object>> users = this.userMapper.findByRealTimeNotifyTime(conditions);
+        List<String> results = Lists.newArrayList();
+
+        for (Map<String, Object> user : users) {
+            results.add(MapUtil.getString(user, "account"));
+        }
+
+        return results;
+    }
+
     //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄 �젙蹂대�� 議고쉶�븳�떎.
     @Override
     @Transactional(readOnly = true)
diff --git a/src/main/resources/mybatis/query-template/user-template.xml b/src/main/resources/mybatis/query-template/user-template.xml
index 0ab56f2..d335214 100644
--- a/src/main/resources/mybatis/query-template/user-template.xml
+++ b/src/main/resources/mybatis/query-template/user-template.xml
@@ -113,8 +113,14 @@
 
     <!--    �씠硫붿씪 �삁�빟 �떆媛� 李얘린    -->
     <select id="findByReservationNotifyTime" resultType="java.util.HashMap" parameterType="java.util.HashMap">
-        select account from user where reservation_notify_time between
-        #{startTime} and #{endTime}
+        select account from user
+        where reservation_notify_time between #{startTime} and #{endTime}
+    </select>
+
+    <!--    �씠硫붿씪 �떎�떆媛� 李얘린    -->
+    <select id="findByRealTimeNotifyTime" resultType="java.util.HashMap" parameterType="java.util.HashMap">
+        select account from user
+        where reservation_notify_time = "realTime"
     </select>
 
     <select id="findByAllWorkspace" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.UserCondition">
diff --git a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
index f56fd09..0e421b3 100644
--- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
+++ b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -177,6 +177,7 @@
 EXCEL_IMPORT_PERIOD_NOT_VALIDITY_EMPTY=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uD55C \uC2DC\uC791\uC77C, \uC885\uB8CC\uC77C\uC5D0 \uBB38\uC81C\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uACF5\uBC31\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uB294\uC9C0 \uD655\uC778 \uD6C4 \uACF5\uBC31\uC744 \uC81C\uAC70\uD558\uC138\uC694. \n \uB77C\uC778 \uC815\uBCF4 : {0}
 EXCEL_IMPORT_MAX_ROWS_OVER = \uC5D1\uC140 \uC5C5\uB85C\uB4DC\uB85C \uC774\uC288 \uB4F1\uB85D\uC740 \uCD5C\uB300 1,000 \uAC74\uAE4C\uC9C0\uB9CC \uAC00\uB2A5\uD569\uB2C8\uB2E4. \uB9CC\uC57D \uC791\uC131\uB41C \uC5D1\uC140\uC774 1,000 \uAC74 \uC774\uD558\uC77C \uACBD\uC6B0 \uC774 \uBA54\uC2DC\uC9C0\uAC00 \uD45C\uC2DC\uB418\uBA74 \uB9C8\uC9C0\uB9C9 \uC791\uC131\uB41C \uD589\uC774\uD6C4\uC758 \uBAA8\uB4E0 \uD589\uC744 \uC0AD\uC81C\uD55C \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uC8FC\uC138\uC694.
 RESERVATION_EMAIL_TITLE=[OWL ITS] \uC5B4\uC81C \uC774\uC288 \uBC0F \uD65C\uB3D9 \uD604\uD669\uC785\uB2C8\uB2E4.
+REALTIME_EMAIL_TITLE=[OWL ITS] \uC2E4\uC2DC\uAC04 \uC774\uC288 \uBC0F \uD65C\uB3D9 \uD604\uD669\uC785\uB2C8\uB2E4.
 
 ISSUE_RESERVATION_VALUE_INVALID=\uC774\uC288 \uBC1C\uC0DD \uC608\uC57D\uC77C\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
 ISSUE_RESERVATION_NOT_EXIST=\uC774\uC288 \uBC1C\uC0DD \uC608\uC57D \uC815\uBCF4\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
diff --git a/src/main/webapp/scripts/app/user/userModify.controller.js b/src/main/webapp/scripts/app/user/userModify.controller.js
index 6647595..8f71f34 100644
--- a/src/main/webapp/scripts/app/user/userModify.controller.js
+++ b/src/main/webapp/scripts/app/user/userModify.controller.js
@@ -27,6 +27,7 @@
                         name: "",
                         phone: "",
                         reservationNotifyTime : "", //  �씠硫붿씪 �븣由� �떆媛�
+                        realtimeNotify : "", // �씠硫붿씪 �떎�떆媛�
                         profileImage : null, //   �뾽濡쒕뱶�븯�뒗 �봽濡쒗븘
                         profileImageName : null  //  �봽濡쒗븘 紐�
                     }
@@ -83,7 +84,12 @@
                             $scope.vm.form.name = result.data.data.name;
                             $scope.vm.form.account = result.data.data.account;
                             $scope.vm.form.phone = result.data.data.phone;
-                            $scope.vm.form.reservationNotifyTime = result.data.data.reservationNotifyTime;
+                            if(result.data.data.reservationNotifyTime === "realTime"){
+                                $scope.vm.form.reservationNotifyTime = "";
+                                $scope.vm.form.realtimeNotify = true;
+                            }else{
+                                $scope.vm.form.reservationNotifyTime = result.data.data.reservationNotifyTime;
+                            }
                         }
                         else {
                             SweetAlert.swal($filter("translate")("users.failedToSelectUserDetail"), result.data.message.message, "error"); // "�궗�슜�옄 �긽�꽭 �젙蹂� 議고쉶 �떎�뙣"
@@ -120,6 +126,11 @@
                     content.name = $rootScope.preventXss(content.name);
                     content.phone = $rootScope.preventXss(content.phone);
                     content.profile = $scope.vm.form.profileImageName;
+                    if(content.realtimeNotify){
+                        content.reservationNotifyTime = "realTime";
+                    }else {
+                        content.reservationNotifyTime = $scope.vm.form.reservationNotifyTime;
+                    }
 
                     User.modify({
                             method : "POST",
diff --git a/src/main/webapp/views/user/userModify.html b/src/main/webapp/views/user/userModify.html
index 0fc73c9..d2649d3 100644
--- a/src/main/webapp/views/user/userModify.html
+++ b/src/main/webapp/views/user/userModify.html
@@ -36,12 +36,17 @@
                 <div class="col-sm-6">
                     <div class="form-group">
                         <label for="userModifyForm3"><span translate="users.setEmailNotificationTime">�씠硫붿씪 �븣由� �떆媛� �꽕�젙</span> <code class="highlighter-rouge">*</code></label>
+                        &nbsp;&nbsp;
+                        <input class="form-control"
+                               type="checkbox"
+                               ng-model="vm.form.realtimeNotify"> �떎�떆媛� �븣由�
                         <input class="form-control"
                                type="text"
                                id="userModifyForm3"
                                date-time-picker
                                option="Y"
-                               required
+                               ng-disabled="vm.form.realtimeNotify"
+                               ng-required="!vm.form.realtimeNotify"
                                ng-model="vm.form.reservationNotifyTime">
                     </div>
                 </div>

--
Gitblit v1.8.0