解释代码:public RespBean addLeave(AttdRecord attdRecord) { if (1 == attdRecordMapper.insert(attdRecord)) { AttdRecord leave = attdRecordMapper.getLeaveById(attdRecord.getId()); // 数据库记录发送的消息(消息落户) String msgId = UUID.randomUUID().toString(); MailLog maillog = new MailLog(); maillog.setMsgId(msgId); maillog.setLeaveId(attdRecord.getId()); maillog.setStatus(0); maillog.setRouteKey(MailConstants.MAIL_ROUTING_KEY_NAME); maillog.setExchange(MailConstants.MAIL_EXCHANGE_NAME); maillog.setCount(0); // 重试时间,加一分钟 maillog.setTryTime(LocalDateTime.now().plusMinutes(MailConstants.MSG_TIMEOUT)); maillog.setCreateTime(LocalDateTime.now()); maillog.setUpdateTime(LocalDateTime.now()); // 数据库插入数据 mailLogMapper.insert(maillog); rabbitTemplate.convertAndSend(MailConstants.MAIL_EXCHANGE_NAME, MailConstants.MAIL_ROUTING_KEY_NAME, leave, new CorrelationData(msgId)); return RespBean.success("申请成功!"); } return RespBean.error("申请失败!"); }
时间: 2024-02-14 16:06:00 浏览: 127
这段代码是一个添加请假记录的方法,并返回一个包含操作结果的 RespBean 对象。
方法的参数是一个 AttdRecord 对象,表示要添加的请假记录。在方法中,首先通过调用 `attdRecordMapper.insert(attdRecord)` 方法将请假记录插入到数据库中。如果插入成功,则继续执行下面的操作;否则直接返回一个失败的 RespBean 对象。
接下来,通过调用 `attdRecordMapper.getLeaveById(attdRecord.getId())` 方法获取刚插入的请假记录,用于后续的消息发送。然后,将消息落户(即将消息记录到数据库中),并生成一个唯一的消息 ID。这里使用了 UUID.randomUUID().toString() 方法生成消息 ID。
接着,创建一个 MailLog 对象,并将消息 ID、请假记录 ID、消息状态、路由键、交换机等信息设置到 MailLog 对象中。并将 MailLog 对象插入到数据库中。
最后,通过 RabbitMQ 的 `rabbitTemplate.convertAndSend()` 方法发送一条消息,并将请假记录作为消息体。这里使用了 MailConstants.MAIL_EXCHANGE_NAME 和 MailConstants.MAIL_ROUTING_KEY_NAME 分别表示消息的交换机和路由键。
如果消息发送成功,则返回一个成功的 RespBean 对象,否则返回一个失败的 RespBean 对象。
需要注意的是,这里使用了 RabbitMQ 实现消息的异步处理,将消息发送到 RabbitMQ 后立即返回,不需要等待消息的处理结果。同时,将消息记录到数据库中,以便在消息发送失败时进行重试。
阅读全文