基于jeecgboot的OA日程安排开发(二)

简介: 基于jeecgboot的OA日程安排开发(二)

 前面界面基本功能做好了,但需要进行定时进行发送消息给使用者,这样才能做到提醒功能。

所以用到了jeecgboot的定时任务,首先建立下面的websocket发送任务类

代码如下:

package org.jeecg.modules.message.job;
import java.util.List;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.message.entity.SysMessage;
import org.jeecg.modules.message.handle.ISendMsgHandle;
import org.jeecg.modules.message.handle.enums.SendMsgStatusEnum;
import org.jeecg.modules.message.handle.enums.SendMsgTypeEnum;
import org.jeecg.modules.message.service.ISysMessageService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
/**
 * @Description: 发送websocket消息job
 * @author: nbacheng
 * @date: 2023-05-08
 * @version: V1.0
 */
@Slf4j
public class SendWebMsgJob implements Job {
  @Autowired
  private ISysMessageService sysMessageService;
  
  @Override
  public void execute(JobExecutionContext context) throws JobExecutionException {
    log.info(String.format(" Nbcio-Boot 发送消息任务 SendWebMsgJob !  时间:" + DateUtils.getTimestamp()));
    // 1.读取消息中心数据,只查询未发送的和发送失败不超过次数的
    QueryWrapper<SysMessage> queryWrapper = new QueryWrapper<SysMessage>();
    queryWrapper.eq("es_send_status", SendMsgStatusEnum.WAIT.getCode())
        .or(i -> i.eq("es_send_status", SendMsgStatusEnum.FAIL.getCode()).lt("es_send_num", 6));
    List<SysMessage> sysMessages = sysMessageService.list(queryWrapper);
    System.out.println(sysMessages);
    // 2.根据不同的类型走不通的发送实现类
    for (SysMessage sysMessage : sysMessages) {
      ISendMsgHandle sendMsgHandle = null;
      try {
        if (sysMessage.getEsType().equals(SendMsgTypeEnum.WEBMSG.getType())) {//目前只发送websocket消息
          sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.WEBMSG.getImplClass()).newInstance();
        } 
      } catch (Exception e) {
        log.error(e.getMessage(),e);
      }
      Integer sendNum = sysMessage.getEsSendNum();
      try {
        sendMsgHandle.SendMsg(sysMessage.getEsReceiver(), sysMessage.getEsTitle(),
            sysMessage.getEsContent().toString(),sysMessage.getCreateBy());
        // 发送消息成功
        sysMessage.setEsSendStatus(SendMsgStatusEnum.SUCCESS.getCode());
      } catch (Exception e) {
        e.printStackTrace();
        // 发送消息出现异常
        sysMessage.setEsSendStatus(SendMsgStatusEnum.FAIL.getCode());
      }
      sysMessage.setEsSendNum(++sendNum);
      // 发送结果回写到数据库
      sysMessageService.updateById(sysMessage);
    }
  }
}

上面用到了下面的实现类,实现websocket的消息发送

package org.jeecg.modules.message.handle.impl;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.message.handle.ISendMsgHandle;
@Slf4j
public class WebMsgSendMsgHandle implements ISendMsgHandle {
  @Override
  public void SendMsg(String es_receiver, String es_title, String es_content, String es_fromuser) {
    log.info("WebMsgSendMsgHandle 发websocket消息");
    ISysBaseAPI sysBaseAPI = (ISysBaseAPI) SpringContextUtils.getBean(ISysBaseAPI.class);
    MessageDTO messagedto = new MessageDTO();
    messagedto.setContent(es_content);
    messagedto.setCategory("1"); //放到通知通告了
    messagedto.setFromUser(es_fromuser);
    messagedto.setTitle(es_title);
    messagedto.setToUser(es_receiver);
    sysBaseAPI.sendSysAnnouncement(messagedto);
    
  }
}

这样启动定时任务后,就会根据规定的时间进行发送了。

2023-05-10 14:32:50.052 [MyScheduler_Worker-10] INFO  org.jeecg.modules.message.job.SendWebMsgJob:35 -  Nbcio-Boot 发送消息任务 SendWebMsgJob !  时间:2023-05-10 14:32:50.052
[SysMessage(esContent=日程安排消息发送测试, esParam=null, esReceiver=admin, esResult=null, esSendNum=0, esSendStatus=0, esSendTime=Mon May 08 14:43:00 CST 2023, esTitle=日程安排消息发送测试, esType=4, remark=null)]
2023-05-10 14:32:50.073 [MyScheduler_Worker-10] INFO  o.j.m.message.handle.impl.WebMsgSendMsgHandle:15 - WebMsgSendMsgHandle 发websocket消息
2023-05-10 14:32:50.177 [redisContainer-3] INFO  org.jeecg.modules.message.websocket.SocketHandler:23 - 【SocketHandler消息】Redis Listerer:{handlerName=socketHandler, message={"msgId":"1656185507556954114","cmd":"user","msgTxt":"日程安排消息发送测试","userId":"e9ca23d68d884d4ebb19d07889727dae"}, userId=e9ca23d68d884d4ebb19d07889727dae}
2023-05-10 14:32:50.187 [redisContainer-3] INFO  org.jeecg.modules.message.websocket.WebSocket:85 - 【websocket消息】 单点消息:{"msgId":"1656185507556954114","cmd":"user","msgTxt":"日程安排消息发送测试","userId":"e9ca23d68d884d4ebb19d07889727dae"}

这样就定时发送了,效果图如下:

 


相关文章
|
22天前
|
移动开发 前端开发
基于jeecg-boot的OA日程安排开发(五)
基于jeecg-boot的OA日程安排开发(五)
19 0
|
22天前
|
移动开发 前端开发
基于jeecg-boot的OA日程安排开发(四)
基于jeecg-boot的OA日程安排开发(四)
14 0
|
22天前
基于jeecgboot的OA日程安排开发(三)
基于jeecgboot的OA日程安排开发(三)
14 0
|
22天前
|
前端开发 API 数据库
基于jeecgboot的OA日程安排开发(一)
基于jeecgboot的OA日程安排开发(一)
10 0
|
6月前
|
JSON 小程序 JavaScript
微信小程序开发的OA会议之会议,个人中心的页面搭建及模板以及自定义组件
微信小程序开发的OA会议之会议,个人中心的页面搭建及模板以及自定义组件
46 0
|
7月前
|
JSON 小程序 前端开发
微信小程序开发之会议OA首页后台数据交互(内带新知识点分享)
微信小程序开发之会议OA首页后台数据交互(内带新知识点分享)
72 0
|
22天前
|
安全 网络安全 数据安全/隐私保护
OA办公系统选购注意的事项
随着数字化时代的到来,越来越多的企业开始选择使用OA办公系统来提高工作效率和管理效果。然而,在选购OA办公系统时,需要注意以下几点的事项,希望能对企业选购OA办公系统有所帮助。
33 4
|
22天前
|
UED
点晴OA办公系统如何实现业务表单的自定义设计
在点晴OA办公系统中,业务表单的自定义设计是一项重要的功能,它能够满足企业不同的业务需求,提高工作效率和协作能力。 随着企业的发展,不同的业务部门需要处理各种类型的表单,如人事表单、财务表单、项目表单等。如果这些表单无法根据实际需求进行自定义设计,就会导致工作效率低下、信息不准确、协作困难等问题。因此,实现业务表单的自定义设计是提高企业办公效率和协作能力的重要手段。
28 0
|
22天前
|
BI
四款OA办公系统快速提高企业效率
拥有合适企业的OA系统不仅可以实现办公自动化而且还能提高企业效率,今天盘点以下几家的OA办公系统。
33 0
|
22天前
|
数据安全/隐私保护
免费OA办公系统,提升工作效率与协作的智能选择
在当今快节奏的时代中,企业需要一种高效、智能的办公系统来提升工作效率,促进团队协作,并实现更好的信息管理。点晴OA办公系统是真正免费使用的,成为现在企业管理的重要工具之一。
36 2