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\"> > " + 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\"> > " + 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> + + <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