首页 > 其他分享 >jfianl 如何定时某个时间点执行一个任务

jfianl 如何定时某个时间点执行一个任务

时间:2025-01-01 16:09:40浏览次数:7  
标签:交班 记录 System println jfianl 某个 定时 id out

如果我们需要在某个点执行一个任务,可以用使用以下方法,首先在操作之间先明白思路

参考技术来源:https://jfinal.com/doc/9-2

 

第一步,先安装包,因为 这是第三方包:

<dependency>
<groupId>it.sauronsoftware.cron4j</groupId>
<artifactId>cron4j</artifactId>
<version>2.2.5</version>
</dependency>

第二   配置异业执行.如果是tomcat需要置

 

<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>configClass</param-name>
<param-value>com.mock.frbmems.config.EmsConfig</param-value>
</init-param>
</filter>

第三步,增加插件配置

  @Override
    public void configPlugin(Plugins plugins) {
        ProUtil.use("jdbc.properties");
        Prop p = ProUtil.use("jdbc.properties");
        // 配置第一个数据源    
            //这儿是第一个 00是分 第二个00 是小时
        Cron4jPlugin cp = new Cron4jPlugin();
        cp.addTask("00 00 * * *", new Runnable() {
            @Override
            public void run() {
                AutoWorkUtils.handleAutoWork();
            }
        });
        plugins.add(cp);
    }

  第4步,业务参考如下,如果是检测代码就用了System,out   如果是上线的代码不要有这程这个打印,要用日志工具输出

package com.mock.frbmems.util;

import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;

import java.sql.Timestamp;

/**
 * @author rskg
 * @version 1.0
 * @project pc_frbmems
 * @description
 * @date 2025/1/1 11:27:46
 */
public class AutoWorkUtils { /**
 /**
 * 更新交班记录的结束时间、状态和备注信息。
 */
public static void updateShiftRecordEnd() {
    String sqlSelectId = "SELECT id FROM zyb_take_over_shift_record WHERE company_id = 130 AND status = 1 ORDER BY id DESC LIMIT 1";
    String lastShiftId = Db.queryStr(sqlSelectId);

    if (lastShiftId != null) {
        String sqlUpdate = "UPDATE zyb_take_over_shift_record SET end_time = NOW(), status = 2, remark = '系统自动交班' WHERE id = ?";
        int updatedRows = Db.update(sqlUpdate, lastShiftId);
        if (updatedRows > 0) {
            System.out.println("更新交班记录成功,ID: " + lastShiftId);
        } else {
            System.out.println("更新交班记录失败,未找到匹配的记录,ID: " + lastShiftId);
        }
    } else {
        System.out.println("未找到需要更新的交班记录");
    }
}

    /**
     * 插入新的交班记录。
     *
     * @param lastRecord 上一条记录的Record对象,包含班次和日记录ID
     */
    public static void insertNewShiftRecord(Record lastRecord) {
        if (lastRecord != null) {
            String workSeq = lastRecord.getStr("work_seq");
            Long dayRecordId = lastRecord.getLong("day_record_id");

            String sqlInsert = "INSERT INTO zyb_take_over_shift_record (company_id, begin_time, status, work_seq, day_record_id) VALUES (?, ?, ?, ?, ?)";
            int insertedRows = Db.update(sqlInsert, 130, new Timestamp(System.currentTimeMillis()), 1, workSeq, dayRecordId);
            if (insertedRows > 0) {
                System.out.println("插入新的交班记录成功");
            } else {
                System.out.println("插入新的交班记录失败");
            }
        } else {
            System.out.println("未找到需要插入的交班记录信息");
        }
    }

    /**
     * 检查自动交班配置是否启用。
     *
     * @return 如果自动交班配置为1,则返回true,否则返回false。
     */
    public static boolean checkAutoWorkConfig() {
        String autoWorkValue = Db.queryStr("SELECT pvalue FROM fr_system_param WHERE pkey = 'autoWork' AND company_id = 130");
        return "1".equals(autoWorkValue);
    }

    /**
     * 获取最后一条交班记录的详细信息。
     *
     * @return 包含最后一条交班记录详细信息的Record对象,如果没有找到记录,则返回null。
     */
    public static Record getLastShiftRecord() {
        String sqlSelect = "SELECT work_seq, day_record_id FROM zyb_take_over_shift_record WHERE company_id = 130 AND status = 1 ORDER BY id DESC LIMIT 1";
        return Db.findFirst(sqlSelect);
    }

    /**
     * 处理自动交班逻辑。
     */
    public static void handleAutoWork() {
        System.out.println("开始处理自动交班逻辑");
        if (checkAutoWorkConfig()) {
            Record lastShiftRecord = getLastShiftRecord();
            if (lastShiftRecord != null) {
                updateShiftRecordEnd();
                insertNewShiftRecord(lastShiftRecord);
            } else {
                System.out.println("未找到有效的交班记录");
            }
        } else {
            System.out.println("自动交班未配置或已禁用");
        }
        System.out.println("自动交班逻辑处理结束");
    }
}

  

 

标签:交班,记录,System,println,jfianl,某个,定时,id,out
From: https://www.cnblogs.com/ZzwWan/p/18646034

相关文章

  • 使用js写一个方法获取某个元素中所有class和id
    在JavaScript中,你可以通过元素的className和id属性来获取一个元素的所有class和id。但需要注意,className返回的是一个包含所有class名的字符串,而不是一个数组。如果你需要一个数组,你需要自己进行分割。以下是一个简单的函数,它接受一个元素作为参数,并返回一个对象,该对象包含该元素......
  • 绝对不能错过的:Air201看门狗定时器!
    看门狗技术(WatchdogTimer)是嵌入式系统中一种重要的稳定性增强技术,用于监测和恢复系统的正常运行状态。当系统因程序跑飞、死机或受到电磁干扰而无法正常工作时,看门狗能够及时检测并采取相应措施,从而避免系统长时间处于故障状态。本文将带你了解看门狗的工作原理、应用架构、定时......
  • 安利给所有人!Air201定时器
    Air201定时器的基本知识与操作方法。无论是控制家电设备还是其他应用场景,Air201定时器都能为您提供便捷的定时服务。快来试试吧!感兴趣的朋友们一起探讨。在Air201模组搭载的LuatOS系统中,定时器(timer)是一项基础且关键的服务。它允许开发者在特定的时间点或周期性地执行代码段,为物......
  • 蓝牙设备过多导致Win11出现不定时死机现象
    10月份之后发现自己的ROGFLOWX16笔记本开始不定时死机了。具体表现是正常使用过程突然死机(哪怕是轻负载),各种地方点不动,不能注销,不能重启,不能关机,我的电脑打不开,任务管理器打开是一片空白。仅有一些窗口最大化和最小化之类的功能可以点击。并且没有任何预兆,就是突然给你出现死机,......
  • C# 定时任务
    C#定时任务|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-------------|------------......
  • Python定时任务
    @目录几种方法schedulerepeat多个取消一次标记与识别截止调试运行APScheduler几种方法scheduleimportscheduleimporttimedefdoLoops(): print(1)schedule.every(1).seconds.do(doLoops)schedule.every(1).minutes.do(doLoops)schedule.every().hour.do(doLoops)......
  • SpringBoot 定时任务
    1、应用程序执行入口类,添加类注解,启用定时器@EnableScheduling2、新建定时器类添加组件注解,确保被Spring容器扫描到@Component创建定时器执行方法,添加方法注解@Scheduled(fixedRate=6900*1000)3、参数说明fixedRate表示多久执行一次,单位是毫秒更多使用方式,请搜索:@......
  • 两个定时任务的并发问题,导致数据处理的顺序和状态变得混乱
    1.背景:有两个定时任务在特定时间触发,同时对数据进行操作,且任务之间存在并发执行的场景。主要涉及的表为lingyejun_task,涉及到的操作有:数据插入、推送、状态更新和错误处理。定时任务A负责生成数据,定时任务B负责将生成好的数据处理并推送到第三方系统,由于出问题的时候定时任务A......
  • 【江协STM32】6-1/2 TIM定时中断、定时器定时中断&定时器外部时钟
    1. TIM定时中断1.1TIM简介TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器(执行计数定时的一个寄存器,每来一个时钟,计数器加1)、预分频器(可以对计数器的时钟进行分频,使计数更灵活)、自动重装寄存器(计数的目标值,就是想要计多少个时钟申......
  • 24.11.19 定时任务
    定时任务1、什么是定时任务? 闹钟/每天定时7点半8点 在固定的时间做什么事情2、定时任务作用 国定时间同步时间 数据备份(备份的服务器)重要的数据备份3份公司备份服务器笔记本移动硬盘网盘一份 先打包然后再备份(代码文件上百个上千个)占用磁盘io降低传输速度iin......