NotifyServiceImpl.java
4.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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;
import com.bootdo.oa.dao.NotifyDao;
import com.bootdo.oa.dao.NotifyRecordDao;
import com.bootdo.oa.domain.NotifyDO;
import com.bootdo.oa.domain.NotifyDTO;
import com.bootdo.oa.domain.NotifyRecordDO;
import com.bootdo.oa.service.NotifyService;
import com.bootdo.system.dao.UserDao;
@Service
public class NotifyServiceImpl implements NotifyService {
@Autowired
private NotifyDao notifyDao;
@Autowired
private NotifyRecordDao recordDao;
@Autowired
private UserDao userDao;
@Autowired
private DictService dictService;
@Autowired
private SessionService sessionService;
@Autowired
private SimpMessagingTemplate template;
@Override
public NotifyDO get(Long id) {
NotifyDO rDO = notifyDao.get(id);
rDO.setType(dictService.getName("oa_notify_type", rDO.getType()));
return rDO;
}
@Override
public List<NotifyDO> list(Map<String, Object> map) {
List<NotifyDO> notifys = notifyDao.list(map);
for (NotifyDO notifyDO : notifys) {
notifyDO.setType(dictService.getName("oa_notify_type", notifyDO.getType()));
}
return notifys;
}
@Override
public int count(Map<String, Object> map) {
return notifyDao.count(map);
}
@Transactional(rollbackFor = Exception.class)
@Override
public int save(NotifyDO notify) {
notify.setUpdateDate(new Date());
int r = notifyDao.save(notify);
// 保存到接受者列表中
Long[] userIds = notify.getUserIds();
Long notifyId = notify.getId();
List<NotifyRecordDO> records = new ArrayList<>();
for (Long userId : userIds) {
NotifyRecordDO record = new NotifyRecordDO();
record.setNotifyId(notifyId);
record.setUserId(userId);
record.setIsRead(0);
records.add(record);
}
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());
}
}
}
}
});
executor.shutdown();
return r;
}
@Override
public int update(NotifyDO notify) {
return notifyDao.update(notify);
}
@Transactional
@Override
public int remove(Long id) {
recordDao.removeByNotifbyId(id);
return notifyDao.remove(id);
}
@Transactional
@Override
public int batchRemove(Long[] ids) {
recordDao.batchRemoveByNotifbyId(ids);
return notifyDao.batchRemove(ids);
}
@Override
public PageUtils selfList(Map<String, Object> map) {
List<NotifyDTO> rows = notifyDao.listDTO(map);
for (NotifyDTO notifyDTO : rows) {
notifyDTO.setBefore(DateUtils.getTimeBefore(notifyDTO.getUpdateDate()));
notifyDTO.setSender(userDao.get(notifyDTO.getCreateBy()).getName());
}
PageUtils page = new PageUtils(rows, notifyDao.countDTO(map));
return page;
}
}