diff --git a/bootdo/src/main/java/com/bootdo/common/utils/DateUtils.java b/bootdo/src/main/java/com/bootdo/common/utils/DateUtils.java index c89866f8e69e4e66f0dde1cd50981e89ec5bbed4..c651d4d662e7325ba5c3320013823624e14b9cd3 100644 --- a/bootdo/src/main/java/com/bootdo/common/utils/DateUtils.java +++ b/bootdo/src/main/java/com/bootdo/common/utils/DateUtils.java @@ -52,7 +52,7 @@ public class DateUtils { r += hour + "小时"; } else if (min > 0) { r += min + "分"; - } else if (s > 0) { + } else if (s >= 0) { r += s + "秒"; } r += "前"; diff --git a/bootdo/src/main/java/com/bootdo/oa/controller/NotifyController.java b/bootdo/src/main/java/com/bootdo/oa/controller/NotifyController.java index 2a3894cbefc9031e288cefdea7f37ca74d7be97c..7d2fff5a444c9b91c0485f69c3cce9b09e917157 100644 --- a/bootdo/src/main/java/com/bootdo/oa/controller/NotifyController.java +++ b/bootdo/src/main/java/com/bootdo/oa/controller/NotifyController.java @@ -178,7 +178,7 @@ public class NotifyController extends BaseController { notifyRecordDO.setUserId(getUserId()); notifyRecordDO.setReadDate(new Date()); notifyRecordDO.setIsRead(Constant.OA_NOTIFY_READ_YES); - notifyRecordService.changeRead(notifyRecordDO); + notifyService.changeRead(notifyRecordDO); model.addAttribute("notify", notify); return "oa/notify/read"; } diff --git a/bootdo/src/main/java/com/bootdo/oa/service/NotifyRecordService.java b/bootdo/src/main/java/com/bootdo/oa/service/NotifyRecordService.java index 29117ce3b02837cd4732275bc63575e9adb84fa2..12e05da13c51b1ab95353e98bbe314917448c966 100644 --- a/bootdo/src/main/java/com/bootdo/oa/service/NotifyRecordService.java +++ b/bootdo/src/main/java/com/bootdo/oa/service/NotifyRecordService.java @@ -28,9 +28,4 @@ public interface NotifyRecordService { int batchRemove(Long[] ids); - /** - * 更改阅读状态 - * @return - */ - int changeRead(NotifyRecordDO notifyRecord); } diff --git a/bootdo/src/main/java/com/bootdo/oa/service/NotifyService.java b/bootdo/src/main/java/com/bootdo/oa/service/NotifyService.java index a040d17686231cd0a96a55e4cb16fa0a5b76c9c5..35f0837602f8fdbc227a6b83392bf96748007cbe 100644 --- a/bootdo/src/main/java/com/bootdo/oa/service/NotifyService.java +++ b/bootdo/src/main/java/com/bootdo/oa/service/NotifyService.java @@ -2,6 +2,7 @@ package com.bootdo.oa.service; import com.bootdo.common.utils.PageUtils; import com.bootdo.oa.domain.NotifyDO; +import com.bootdo.oa.domain.NotifyRecordDO; import java.util.List; import java.util.Map; @@ -32,4 +33,10 @@ public interface NotifyService { // Map message(Long userId); PageUtils selfList(Map map); + + /** + * 更改阅读状态 + * @return + */ + void changeRead(NotifyRecordDO notifyRecord); } diff --git a/bootdo/src/main/java/com/bootdo/oa/service/impl/NotifyRecordServiceImpl.java b/bootdo/src/main/java/com/bootdo/oa/service/impl/NotifyRecordServiceImpl.java index 0bc6dbe4b1f58376470f8b5a5310fb9b80c4aa8f..73096108fd81166da6725e8fe2d01c33dd6af94f 100644 --- a/bootdo/src/main/java/com/bootdo/oa/service/impl/NotifyRecordServiceImpl.java +++ b/bootdo/src/main/java/com/bootdo/oa/service/impl/NotifyRecordServiceImpl.java @@ -52,9 +52,4 @@ public class NotifyRecordServiceImpl implements NotifyRecordService { return notifyRecordDao.batchRemove(ids); } - @Override - public int changeRead(NotifyRecordDO notifyRecord) { - return notifyRecordDao.changeRead(notifyRecord); - } - } diff --git a/bootdo/src/main/java/com/bootdo/oa/service/impl/NotifyServiceImpl.java b/bootdo/src/main/java/com/bootdo/oa/service/impl/NotifyServiceImpl.java index cd22b86790f9cb7e51007259cf93fd02464073a4..58041f7712829940fd8254bc76f47ef57452545f 100644 --- a/bootdo/src/main/java/com/bootdo/oa/service/impl/NotifyServiceImpl.java +++ b/bootdo/src/main/java/com/bootdo/oa/service/impl/NotifyServiceImpl.java @@ -1,19 +1,5 @@ package com.bootdo.oa.service.impl; -import com.bootdo.system.domain.UserDO; -import com.bootdo.system.service.SessionService; -import org.apache.shiro.session.Session; -import org.apache.shiro.session.mgt.eis.SessionDAO; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.messaging.simp.SimpMessagingTemplate; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import java.util.concurrent.LinkedBlockingDeque; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - import com.bootdo.common.service.DictService; import com.bootdo.common.utils.DateUtils; import com.bootdo.common.utils.PageUtils; @@ -24,6 +10,19 @@ import com.bootdo.oa.domain.NotifyDTO; import com.bootdo.oa.domain.NotifyRecordDO; import com.bootdo.oa.service.NotifyService; import com.bootdo.system.dao.UserDao; +import com.bootdo.system.domain.UserDO; +import com.bootdo.system.service.SessionService; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.*; @Service public class NotifyServiceImpl implements NotifyService { @@ -79,15 +78,15 @@ public class NotifyServiceImpl implements NotifyService { } recordDao.batchSave(records); //给在线用户发送通知 - ThreadPoolExecutor executor = new ThreadPoolExecutor(1,1,0, TimeUnit.MILLISECONDS,new LinkedBlockingDeque<>()); - executor.execute(new Runnable() { - @Override - public void run() { - for (UserDO userDO : sessionService.listOnlineUser()) { - for (Long userId : userIds) { - if (userId.equals(userDO.getUserId())) { - template.convertAndSendToUser(userDO.toString(), "/queue/notifications", "新消息:" + notify.getTitle()); - } + ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("SendNotify-%d").build(); + ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, + 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), threadFactory); + executor.execute(() -> { + for (UserDO userDO : sessionService.listOnlineUser()) { + for (Long userId : userIds) { + if (userId.equals(userDO.getUserId())) { + template.convertAndSendToUser(userDO.toString(), "/queue/notifications", + "新消息:" + notify.getTitle()); } } } @@ -127,4 +126,21 @@ public class NotifyServiceImpl implements NotifyService { return page; } + @Override + public void changeRead(NotifyRecordDO notifyRecord) { + recordDao.changeRead(notifyRecord); + //给在线用户发送通知 + ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("ConsumeNotify-%d").build(); + ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, + 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), threadFactory); + executor.execute(() -> { + for (UserDO userDO : sessionService.listOnlineUser()) { + if (notifyRecord.getUserId().equals(userDO.getUserId())) { + template.convertAndSendToUser(userDO.toString(), "/queue/notifications", "消费新消息"); + } + } + }); + executor.shutdown(); + } + } diff --git a/bootdo/src/main/resources/static/js/appjs/oa/notify/read.js b/bootdo/src/main/resources/static/js/appjs/oa/notify/read.js deleted file mode 100644 index cc21f02a7539af87707d2dc8e066e023a1d4bfc7..0000000000000000000000000000000000000000 --- a/bootdo/src/main/resources/static/js/appjs/oa/notify/read.js +++ /dev/null @@ -1,49 +0,0 @@ -$().ready(function() { - validateRule(); -}); - -$.validator.setDefaults({ - submitHandler : function() { - update(); - } -}); -function update() { - $.ajax({ - cache : true, - type : "POST", - url : "/oa/notify/update", - data : $('#signupForm').serialize(),// 你的formid - async : false, - error : function(request) { - parent.layer.alert("Connection error"); - }, - success : function(data) { - if (data.code == 0) { - parent.layer.msg("操作成功"); - parent.reLoad(); - var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引 - parent.layer.close(index); - - } else { - parent.layer.alert(data.msg) - } - - } - }); - -} -function validateRule() { - var icon = " "; - $("#signupForm").validate({ - rules : { - name : { - required : true - } - }, - messages : { - name : { - required : icon + "请输入名字" - } - } - }) -} \ No newline at end of file diff --git a/bootdo/src/main/resources/static/js/appjs/oa/notify/selfNotify.js b/bootdo/src/main/resources/static/js/appjs/oa/notify/selfNotify.js index ba11741531a6dc19f8a903e5ad3d407507c87f91..d617c1ed845863f5d5ad48300f542e406a2cf764 100644 --- a/bootdo/src/main/resources/static/js/appjs/oa/notify/selfNotify.js +++ b/bootdo/src/main/resources/static/js/appjs/oa/notify/selfNotify.js @@ -155,7 +155,12 @@ function read(id) { maxmin : true, shadeClose : false, // 点击遮罩关闭层 area : [ '800px', '520px' ], - content : prefix + '/read/' + id // iframe的url + content : prefix + '/read/' + id , // iframe的url + cancel : function(){ + reLoad(); + var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引 + layer.close(index); + } }); } function remove(id) { diff --git a/bootdo/src/main/resources/templates/index_v1.html b/bootdo/src/main/resources/templates/index_v1.html index eef180c8663c70bcbe0e9135ca978939b618b934..6bf279ce33c2fc38912b658b7c944a689509a233 100644 --- a/bootdo/src/main/resources/templates/index_v1.html +++ b/bootdo/src/main/resources/templates/index_v1.html @@ -1,5 +1,5 @@ - + @@ -102,7 +102,7 @@