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

本文展示了如何在日程管理中添加、删除和更新日程时同步处理消息推送。代码包括日程添加、删除和更新的完整实现,涉及到事务处理确保数据一致性。此外,还提及了一个用于发送WebSocket消息的任务执行类,用于消息中心的数据同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天主要是增加日程安排的消息推送功能,同时对增加修改删除等都对相应的消息推送数据进行更新。

    1、日程添加完整代码

@Override
	@Transactional(rollbackFor=Exception.class)
	public void saveAndAddSchedule(OaSchedule oaSchedule) {
		SysUser loginUser = iEstarThirdService.getLoginUser();
        String userId = loginUser.getUsername();
        if(StringUtils.isEmpty(oaSchedule.getTaker())){
        	oaSchedule.setTaker(userId);
        }
        if(StringUtils.isEmpty(oaSchedule.getOwner())){
        	oaSchedule.setOwner(userId);
        }
		oaScheduleService.save(oaSchedule);
		if (oaSchedule.getRemind() != 0) {//要提醒
			SysMessageVo sysMessageVo= new SysMessageVo();
			sysMessageVo.setEsContent(oaSchedule.getContent());
			sysMessageVo.setEsTitle(oaSchedule.getTitle());
			sysMessageVo.setEsReceiver(oaSchedule.getTaker());
			sysMessageVo.setEsType(oaSchedule.getRemindType());
			String reminddate = DateUtil.getPreTime(DateUtil.getDateString(oaSchedule.getStartTime(), "yyyy-MM-dd HH:mm:ss") ,String.valueOf(0-oaSchedule.getRemind()));
			sysMessageVo.setEsSendTime(DateUtil.stringToDate(reminddate));
			sysMessageVo.setEsSendStatus("0"); //SendMsgStatusEnum.WAIT.getCode()
			sysMessageVo.setEsSendNum(0); 	
			String sysMsgId = iEstarThirdService.saveSysMessage(sysMessageVo);
			oaSchedule.setMsgId(sysMsgId);
			oaScheduleService.updateById(oaSchedule);
		}
		
	}

   2、日程删除

@Override
	@Transactional(rollbackFor=Exception.class)
	public boolean removeSchedule(String id) {
		OaSchedule oaSchedule = oaScheduleService.getById(id);
		String msgId = oaSchedule.getMsgId();
		String sendStatus = iEstarThirdService.getMsgSendStatus(msgId);
		if (oaSchedule.getRemind() != 0 ) {//有消息提醒
			if(StringUtils.equals(sendStatus,"0")) {
				oaScheduleService.removeById(id);
				iEstarThirdService.removeSysMessage(msgId);
				return true;
			}
			else {
				return false;
			}	
		}
		else {
			oaScheduleService.removeById(id);
			return true;
		}
		
	}

3、日程更新

@Override
	@Transactional(rollbackFor=Exception.class)
	public boolean updateSchedule(OaSchedule oaSchedule) {
		String msgId = oaSchedule.getMsgId();
		String sendStatus = iEstarThirdService.getMsgSendStatus(msgId);
		if (oaSchedule.getRemind() != 0) {//有消息提醒
			if(StringUtils.equals(sendStatus,"0")) {
				oaScheduleService.updateById(oaSchedule);
				SysMessageVo sysMessageVo= new SysMessageVo();
				sysMessageVo.setId(msgId);
				sysMessageVo.setEsContent(oaSchedule.getContent());
				sysMessageVo.setEsTitle(oaSchedule.getTitle());
				sysMessageVo.setEsReceiver(oaSchedule.getTaker());
				sysMessageVo.setEsType(oaSchedule.getRemindType());
				String reminddate = DateUtil.getPreTime(DateUtil.getDateString(oaSchedule.getStartTime(), "yyyy-MM-dd HH:mm:ss") ,String.valueOf(0-oaSchedule.getRemind()));
				sysMessageVo.setEsSendTime(DateUtil.stringToDate(reminddate));
				iEstarThirdService.updateSysMessage(sysMessageVo);
				return true;
			}
			else {
				return false;
			}
		}
		return true;
	}

4、发送消息调整如下:

/**
 * @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);
		}
	}
}

5、效果图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁波阿成

你的支持,是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值