当前位置: 首页 > news >正文

宝塔+fastadmin:给项目添加定时任务

一、定时任务脚本编写

1. 使用 shebang 声明执行器

#!/usr/bin/env php
  • 这是 Unix/Linux 系统中脚本文件的标准开头。
  • 表示这个脚本使用系统环境变量中的 php 来执行。

2. 定义 ThinkPHP 入口路径并加载框架

define('APP_PATH', __DIR__ . '/../../application/');
require __DIR__ . '/../../thinkphp/start.php';
  • APP_PATH:定义了项目的入口目录。
  • 加载 ThinkPHP 框架,使你可以使用 Db 类、模型等功能。

3. 引入 ThinkPHP 的数据库类

use think\Db;
  • 方便后续操作数据库。

4. 判断是否是周一的方法

function isMonday() {return date('w') == 1;
}
  • 使用 date('w') 获取当前星期几:
    • 0 = 周日
    • 1 = 周一 ✅
  • 所以这个函数返回 true 表示今天是 周一

5. 获取上周的周标识(格式如:2025-W20)

function getLastWeekIdentifier() {$last_week = strtotime("-1 week");$year = date("Y", $last_week);$week = date("W", $last_week);return "{$year}-W{$week}";
}
  • strtotime("-1 week"):获取上周同一时间的时间戳
  • date("W", ...):ISO-8601 周数(从 1 开始)
  • 返回值示例:2025-W20

6. 日志记录函数

function logMessage($message) {$logFile = __DIR__ . "/update_log.txt";file_put_contents($logFile, "【" . date('Y-m-d H:i:s') . "】" . $message . "\n",     FILE_APPEND);
}
  • 把每次运行的信息写入日志文件 update_log.txt
  • 便于调试和查看执行情况

🧱 主逻辑部分(try-catch 包裹)

try {

用 try-catch 包裹整个逻辑,确保出错时能捕获异常并记录日志。


7. 判断是否是周一

if (!isMonday()) {logMessage("不是周一,跳过任务");exit("不是周一,跳过任务\n");
}
  • 如果不是周一,直接退出程序,不执行更新操作

8. 获取上周标识并记录日志

$lastWeek = getLastWeekIdentifier();
logMessage("🔍正在处理上周周标识:{$lastWeek}");
  • 获取上周的周标识(如 2025-W20
  • 记录日志方便后续查看

9. 查询上周的数据

$records = Db::table('weekly_emitem_apply_setting')
->where('week', $lastWeek)
->select();
  • 查询所有 week = '2025-W20' 的记录
  • 准备进行字段更新

10. 遍历每条记录并处理

foreach ($records as $record) {$id = $record['id'];$employee_num = $record['employee_num'];$item_no = $record['item_no'];$actual_total = $record['actual_total_qty'];$week_apply = $record['week_apply_qty'];
  • 提取每条记录的关键字段
  • 如员工编号、料号、累计数量、本周申请量等

11. 计算新的累计数量

$newTotal = $actual_total + $week_apply;
  • 将本周申请量累加到累计数量中

12. 获取当前周标识(如:2025-W21)

$currentWeek = date("Y") . "-W" . str_pad((int)date("W"), 2, 

相关文章:

  • 汽车区域电子电气架构(Zonal E/E)的统一
  • CentOS 7上BIND9配置DNS服务器指南
  • SpringSecurity基础入门
  • 使用Mathematica绘制一类矩阵的特征值图像
  • 使用F5-tts复刻音色
  • CVE-2017-4971源码分析与漏洞复现
  • Linux 特权管理与安全——从启用 Root、Sudo 提权到禁用与防护的全景解析
  • idea如何让文件夹分层显示,而不是圆点分割
  • 【牛客-输入输出练习】
  • 安全工具配置
  • STM32外设应用详解——从基础到高级应用的全面指南
  • 基于NLP技术的客户投诉与需求文本分类方法研究
  • 大语言模型的评估指标
  • 差动讯号(2):奇模与偶模
  • RedissonClient主要功能概述
  • 公路水运安全员C证用途及重要性
  • MySQL:to many connections连接数过多
  • 【数据结构 -- AVL树】用golang实现AVL树
  • 商标撤三要求越来越高,一些注意!
  • 73.矩阵置零
  • 翻越高山,成为高山!浙江广厦成CBA历史第八支夺冠球队
  • 凤阳文旅局长回应鼓楼瓦片脱落:楼宇是否属于文物?施工经费用在何处?
  • 巴西商业农场首次确诊高致病性禽流感,中国欧盟暂停进口巴西禽肉产品
  • 2025年新季夏粮收购量将达到2000亿斤左右
  • 央企通号建设集团有限公司原党委常委、副总经理叶正兵被查
  • 揭秘拜登退选内幕新书引争议,“垃圾信息在四处传播”?