今天把写的一个调度器的内容 从sql中给提取了出来,记录一下

本文介绍了一个基于Java的宿舍晚归自动记录系统,通过定时任务动态获取晚归时间设置,实现对晚归学生的打卡记录及状态更新。系统能够根据预设规则,区分正常归寝与晚归情况,自动调整记录逻辑,确保数据准确性。
摘要由CSDN通过智能技术生成
****
 * 晚归归寝
 * @author Administrator
 */
@Configuration
public class DormScheduleStayUp implements SchedulingConfigurer {

   @Autowired(required = false)
   private DormParamSettingMapper settingMapper;

   @Autowired(required = false)
   private DormClockRecordService dormClockRecordService;
   //实时记录表
   @Autowired(required = false)
   AccEventRecordHelpMapper accEventRecordHelpMapper;
   //job   trigger  scheduler
   @Override
   public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
      taskRegistrar.addTriggerTask(
            ()->{
               System.err.println("++++++++++++++++++++>晚归的人员:"+LocalDateTime.now().toLocalTime());
               dormClockRecordService.dormClockRecordPushMessageTask("2");
            }, triggerContext->{ // 设置 执行的周期 trigger  也就是触发器
               //设置trigger执行的周期   动态获取设置的时间
               String corn = settingMapper.getTimeByType("2");
               System.out.println("晚归cron=========>"+corn);
               String randomCorn = "0 "+corn+" * * ?";
               return new CronTrigger(randomCorn).nextExecutionTime(triggerContext);
            });
   }
 @SuppressWarnings("all")
@Override
public void dormClockRecordPushMessageTask(String type) {

    DormParamSetting dormParamSetting = settingMapper.selectByCountType(type);
    String countTimeStart = dormParamSetting.getCountTimeStart();//开始时间
    String countTimeEnd = dormParamSetting.getCountTimeEnd();//结束时间
    if("1".equals(type)){/**正常归寝*/
         countTimeStart=format.format(new Date()) +" "+countTimeStart;
         countTimeEnd= format.format(new Date()) +" "+countTimeEnd;
        //(1)查询出在归寝时间段内的人员打卡的时间设置一下
        List<AccEventRecordHelp> accEventRecordHelps = accEventRecordHelpMapper.selectAllNormal(Integer.valueOf(type),countTimeStart,countTimeEnd);
      //更新人员相关的时间和状态
      accEventRecordHelps.forEach(res->{//更新状态
         dormClockRecordMapper.update_info(res.getUserPin(), type, res.getEventTime(),DateUtil.getDateFormat(DateUtil.getCurrenetDateString()));
      });
   }else if("2".equals(type)){/**晚归的*/
      if(dormParamSetting.getTimeEndType()==1){/**晚归不跨天*/
         countTimeStart=format.format(new Date()) +" "+countTimeStart;
         countTimeEnd= format.format(new Date()) +" "+countTimeEnd;
      }else{/**晚归跨天*/
         countTimeStart=DateUtil.getYestaday() +" "+countTimeStart;
         countTimeEnd= format.format(new Date()) +" "+countTimeEnd;
      }
      List<AccEventRecordHelp> accEventRecordHelps = accEventRecordHelpMapper.selectAllNormal(Integer.valueOf(type),countTimeStart,countTimeEnd);
      //更新人员相关的时间和状态
      accEventRecordHelps.forEach(res->{//更新状态   date 始终是今天的  time可以代表明天的数据
         dormClockRecordMapper.update_info(res.getUserPin(), type, res.getEventTime(),DateUtil.getDateFormat(DateUtil.getCurrenetDateString()));
      });
      //把状态为0的人员的状态更新为3
      String status ="3";
      dormClockRecordMapper.update_zero_to_three(DateUtil.getDateFormat(DateUtil.getCurrenetDateString()),status);
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值