我做的是每天早上八点,查询数据库过期的任务,然后在页面内向用户发送通知(类似钉钉的企业办公软件)
两个表:
1.通知目标表。
2.消息通知表
数据库通知模板
1.Controller类
import org.springframework.scheduling.annotation.Scheduled;
//过期任务通知:每天早上八点定时发送
// @RequestMapping(value = "/pushWorkNotification", method = RequestMethod.POST)--测试用
@Scheduled(cron = "0 0 8 * * ?")
public void pushWorkNotification(){
this.service.pushWorkNotification();
}
2.service类
public void pushWorkNotification() {
//先查询要过期的工作任务,以及去掉已经发送过的任务,然后遍历发送通知
ArrayList<WorkTaskEntity> a = service.workTaskMybatisDao.findPushWorkNotificationList();
//存发送目标的id
ArrayList<MessageAimEntity> sendEmpIds = new ArrayList<>();
for (WorkTaskEntity b : a) {
List<Integer> workMembers = service.workTaskMybatisDao.findWorkMembers(b.getId());
b.setMemberId(workMembers);
List<Integer> prjMembers = service.workTaskMybatisDao.findPrjMembers(b.getSourceProjectId());
b.setPrjSourceEmp(prjMembers);
List<Integer> prjMembers1 = service.workTaskMybatisDao.findPrjMembers(b.getTargetProjectId());
b.setPrjTargetEmp(prjMembers1);
}
for (WorkTaskEntity b : a) {
if (b.getCreateEmpId() != null) {
MessageAimEntity messageAimEntity = new MessageAimEntity();
messageAimEntity.setEmpId(b.getCreateEmpId());
messageAimEntity.setTitle(b.getTitle());
messageAimEntity.setWorkId(b.getId());
sendEmpIds.add(messageAimEntity);
}
if (b.getPrjSourceCreateEmp() != null) {
MessageAimEntity messageAimEntity = new MessageAimEntity();
messageAimEntity.setEmpId(b.getPrjSourceCreateEmp());
messageAimEntity.setTitle(b.getTitle());
messageAimEntity.setWorkId(b.getId());
sendEmpIds.add(messageAimEntity);
}
if (b.getPrjTargetCreateEmp() != null) {
MessageAimEntity messageAimEntity = new MessageAimEntity();
messageAimEntity.setEmpId(b.getPrjTargetCreateEmp());
messageAimEntity.setTitle(b.getTitle());
messageAimEntity.setWorkId(b.getId());
sendEmpIds.add(messageAimEntity);
}
if (b.getMemberId().size() != 0) {
for (int i = 0; i < b.getMemberId().size(); i++) {
MessageAimEntity messageAimEntity = new MessageAimEntity();
messageAimEntity.setEmpId(b.getMemberId().get(i));
messageAimEntity.setTitle(b.getTitle());
messageAimEntity.setWorkId(b.getId());
sendEmpIds.add(messageAimEntity);
}
}
if (b.getPrjSourceEmp().size() != 0) {
for (int i = 0; i < b.getPrjSourceEmp().size(); i++) {
MessageAimEntity messageAimEntity = new MessageAimEntity();
messageAimEntity.setEmpId(b.getPrjSourceEmp().get(i));
messageAimEntity.setTitle(b.getTitle());
messageAimEntity.setWorkId(b.getId());
sendEmpIds.add(messageAimEntity);
}
}
if (b.getPrjTargetEmp().size() != 0) {
for (int i = 0; i < b.getPrjTargetEmp().size(); i++) {
MessageAimEntity messageAimEntity = new MessageAimEntity();
messageAimEntity.setEmpId(b.getPrjTargetEmp().get(i));
messageAimEntity.setTitle(b.getTitle());
messageAimEntity.setWorkId(b.getId());
sendEmpIds.add(messageAimEntity);
}
}
}
System.out.println();
for (MessageAimEntity c :
sendEmpIds) {
HashMap<String, Object> map = new HashMap<>();
ArrayList<MessageAimEntity> messageAimEntities = new ArrayList<>();
messageAimEntities.add(c);
map.put("title", c.getTitle());
map.put("id", c.getWorkId());
//自动通知
PushTemplateService.pushAutoMessage(service, JSON.parseObject(JSON.toJSONString(map), HashMap.class),
"任务过期", null, null, messageAimEntities);
}
}
3.自定义通知工具类
/**
* 发送自动通知
*
* @param service 数据持久层
* @param map 发送内容
* @param type 模板类型
* @param empId 发送人
* @param depId 发送部门或公司
* @param sendEmpIds 发送目标
*/
public static void pushAutoMessage(ServiceDao service, HashMap<String, Object> map, String type, Integer empId,
Integer depId, ArrayList<MessageAimEntity> sendEmpIds) {
LoggerUtils.infoData("/pushMessage", type);
var pushTemplateEntity = service.pushTemplateJpaDao.findFirstByTitle(type);
if (pushTemplateEntity != null) {
var time = new Timestamp(System.currentTimeMillis());
LoggerUtils.infoData("发送通知:", type);
//生成内容
var p = compile("\\$\\{(.*?)\\}");
var content = pushTemplateEntity.getTemplate();
var m = p.matcher(content);
while (m.find()) {
content = content.replace("${" + m.group(1) + "}", map.get(m.group(1)) + "");
}
var messagesEntity = new MessagesEntity();
messagesEntity.setTitle(type + "通知");
messagesEntity.setContent(content);
messagesEntity.setSendEmpId(empId);
messagesEntity.setSendDepId(depId);
messagesEntity.setSendTime(time);
messagesEntity.setCategory("系统通知");
messagesEntity.setPriority(1L);
messagesEntity.setApproveState("已审核");
if(map.containsKey("id")){
messagesEntity.setRelateId(Long.parseLong(map.get("id").toString()));
messagesEntity.setRelateType(type);
messagesEntity.setRelateTitle(map.get("title") + "");
}
messagesEntity = service.messageJpaDao.save(messagesEntity);
for (var e : sendEmpIds) {
e.setMsgId(messagesEntity.getId());
}
service.messageAimJapDao.saveAll(sendEmpIds);
}
}
效果