【JAVA】Timed task borrowing due automatic reminder

This article mainly focuses on timing tasks, and the notice is slightly recorded

1. Timing task logic code

  1. cron job file
    insert image description here
  2. TaskScheduling.java
package org.springblade.modules.task;

import lombok.extern.slf4j.Slf4j;
import org.springblade.modules.archiveAdvantage.service.IArchiveBorrowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
@EnableAsync
@Slf4j
public class TaskScheduling {
    
    

    @Autowired
    private IArchiveBorrowService borrowService;

    /**
     * 档案借阅自动催还处理,每天凌晨1点执行一次
     */
    @Scheduled(cron = "0 0 1 * * ?")
    public synchronized void automaticReminder(){
    
    
        log.info(new Date() + "...>>cron....档案借阅自动催还处理");
        borrowService.automaticReminderNotice();
        log.info(new Date() + "...>>cron....档案借阅自动催还处理...完成!!!");
    }
}

  1. ArchiveBorrowService.java
void automaticReminderNotice();
  1. ArchiveBorrowServiceImpl.java
    (1) Method 1
// 引入通知
import org.springblade.common.utils.NoticeUtil;

@Service
public class ArchiveBorrowServiceImpl extends BaseServiceImpl<ArchiveBorrowMapper, ArchiveBorrowEntity> implements IArchiveBorrowService {
    
    
	private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	
	@Override
	public void automaticReminderNotice() {
    
    
		try{
    
    
			// 查询已借阅未归还的实体档案
			LambdaQueryWrapper<ArchiveBorrowEntity> wrapper = new LambdaQueryWrapper<>();
			wrapper.eq(ArchiveBorrowEntity::getBorrowType, "0").eq(ArchiveBorrowEntity::getBorrowState, "23");
			List<ArchiveBorrowEntity> archiveBorrowList = this.list(wrapper);
			if(archiveBorrowList.size() > 0 ){
    
    
				for(ArchiveBorrowEntity archiveBorrow:archiveBorrowList){
    
    
					// 计算归还日期:借阅时间 + 借阅天数
					Calendar calenDar = Calendar.getInstance();
					calenDar.setTime(archiveBorrow.getBorrowTime());
					calenDar.add(calenDar.DATE,archiveBorrow.getBorrowDays());
					// 间隔差:归还时间-当前时间
					Calendar cal = Calendar.getInstance();
                    cal.setTime(returnDateFomat.parse(sdf.format(new Date())));
					long currentTime = cal.getTimeInMillis();
					cal.setTime(returnDateFomat.parse(sdf.format(calenDar.getTime())));
					long returnTime = cal.getTimeInMillis();
					long days = (returnTime - currentTime) / (1000 * 3600 * 24);
					int endDays = Integer.parseInt(String.valueOf(days));
					// 到期归还通知提醒
					if(endDays == 1){
    
    
						NoticeUtil.NoticeReturnMsg(archiveBorrow.getBorrowerUser(),"借阅待归还提醒","您于" + sdf.format(new Date()) + "接收到来自管理员的催还通知,请尽快到[我的借阅]画面确认。",1);
					}
				}
			}
		} catch (Exception e){
    
    
			e.printStackTrace();
			System.out.println("档案借阅催还失败");
		}
	}
}

(2) Method 2

	@Override
	public R automaticReminderNotice() {
    
    
		// 查询已借阅未归还的档案
		LambdaQueryWrapper<ArchiveBorrowEntity> wrapper = new LambdaQueryWrapper<>();
		// 0 代表实体档案
		wrapper.eq(ArchiveBorrowEntity::getBorrowType, "0").eq(ArchiveBorrowEntity::getBorrowState, "23");
		List<ArchiveBorrowEntity> archiveBorrowList = this.list(wrapper);
		if(archiveBorrowList.size() > 0 ){
    
    
			for(ArchiveBorrowEntity archiveBorrow:archiveBorrowList){
    
    
				// 计算归还日期(1)获取借阅时间并转为毫秒数(2)将借阅天数转为毫秒数(3)归还时间 = 系统时间 + 借阅天数
				long borrowTime = archiveBorrow.getBorrowTime().getTime();
				int borrowDays = archiveBorrow.getBorrowDays() * 24 * 60 * 60 * 1000;
				// String returnTime = sdf.format(borrowTime + borrowDays);
				long returnTime = borrowTime + borrowDays;
				// 归还时间和当前时间相隔的天数(1)获取当前时间(2)当前时间和归还时间像个天数
				long currentTime = new Date().getTime();
				long compare = (currentTime - returnTime) / (24 * 60 * 60 * 1000);
				if(compare == 7){
    
    
					// 给用户发通知
					NoticeUtil.notifyMsg(archiveBorrow.getBorrowerUser(),"档案借阅催还提醒","请尽快归还档案",1);
				}
			}
		}
	}

2. References

insert image description here

3. Notice in the station (simple understanding)

  1. NoticeUtil.java
  public static void NoticeReturnMsg(Long userId, String title, String content,Integer type) {
    
    
        try {
    
    
            IMessageService messageClient = SpringUtil.getBean("messageService");
            MessageParams message = MessageParams.builder().title(title)
                    .content(content)
                    .receiveUser((userId))
                    .type(type)
                    .build();

            messageClient.sendMessage(message);
        } catch (Exception e) {
    
    
            e.printStackTrace();
            System.out.println("通知发送失败:" + title);
        }
    }

Guess you like

Origin blog.csdn.net/weixin_47375144/article/details/131414507
Recommended