基于siyucms的信息系统开发(一)历时天数的设置

2024-02-07 20:50

本文主要是介绍基于siyucms的信息系统开发(一)历时天数的设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:做一个项目管理模块,其中有“开始时间”、“结束时间”、“历时天数”三个字段,要使:

历时天数=结束时间-开始时间

假如项目正在进行中,结束时间未明确,则

历时天数=现在时间-开始时间

在数据库中,时间每过0:00,历时天数就应该往前进一天,那么还应在数据库中设施定时事件,定时更新该字段值。因为本系统主要在本地运行,可能会经常关机,那么还应该设置mysql数据库启动时,自动更新该字段值。

实现步骤如下:

一、首先对通用的添加、修改保存方法进行修改

原有的添加保存方法:

 public function addPost(){if (Request::isPost()) {$data   = MakeBuilder::changeFormData(Request::except(['file'], 'post'), $this->tableName);$result = $this->validate($data, $this->validate);if (true !== $result) {// 验证失败 输出错误信息$this->error($result);} else {$model  = '\app\common\model\\' . $this->modelName;$result = $model::addPost($data);if ($result['error']) {$this->error($result['msg']);} else {$this->success($result['msg'], 'index');}}}}

修改为:

  public function addPost(){if (Request::isPost()) {$data   = MakeBuilder::changeFormData(Request::except(['file'], 'post'), $this->tableName);$result = $this->validate($data, $this->validate);if (true !== $result) {// 验证失败 输出错误信息$this->error($result);} else {if($data['end_date']>0)//如果添加记录的时候设置了结束日期//直接存储历时天数{$timediff=$data['end_date']-$data['start_date'];$days=intval($timediff/86400);//转换成天数$data['took_days']=$days;}else{//否则以当前时间为截止计算日期$timediff=time()-$data['start_date'];$days=intval($timediff/86400);$data['took_days']=$days;}$model  = '\app\common\model\\' . $this->modelName;$result = $model::addPost($data);if ($result['error']) {$this->error($result['msg']);} else {$this->success($result['msg'], 'index');}}}}

原有的通用修改保存的方法:

 // 修改保存public function editPost(){if (Request::isPost()) {$data   = MakeBuilder::changeFormData(Request::except(['file'], 'post'), $this->tableName);$result = $this->validate($data, $this->validate);if (true !== $result) {// 验证失败 输出错误信息$this->error($result);} else {$model  = '\app\common\model\\' . $this->modelName;$result = $model::editPost($data);if ($result['error']) {$this->error($result['msg']);} else {$this->success($result['msg'], 'index');}}}}

修改为如下方法:

  public function editPost(){if (Request::isPost()) {$data   = MakeBuilder::changeFormData(Request::except(['file'], 'post'), $this->tableName);$result = $this->validate($data, $this->validate);if (true !== $result) {// 验证失败 输出错误信息$this->error($result);} else {//如果已填写实际完成时间if($data['end_date']>0)//如果添加记录的时候设置了结束日期//直接存储历时天数{$timediff=$data['end_date']-$data['start_date'];$days=intval($timediff/86400);//转换成天数$data['took_days']=$days;}else{//否则以当前时间为截止计算日期$timediff=time()-$data['start_date'];$days=intval($timediff/86400);$data['took_days']=$days;}$model  = '\app\common\model\\' . $this->modelName;$result = $model::editPost($data);if ($result['error']) {$this->error($result['msg']);} else {$this->success($result['msg'], 'index');}}}}

需要注意的是,“历时天数”这个字段是后台计算得出,不要显示在添加、修改页面,以避免人为输入。

 二、对数据库设置定时事件:

可以先查看定时任务的是否开启。通过以下命令:

show variables like '%sche%'

如果其设置值为为 OFF 或 0 ,通过执行下列语句,来开启event_scheduler

set global event_scheduler =1

把设置为设为ON 或 1。

在配置文件中添加event_scheduler=ON,保持事件开启。

 添加如下代码,即需定时执行的代码:

UPDATE tp_product SET took_days = DATEDIFF(NOW(),FROM_UNIXTIME(start_date)) WHERE project_status='2';

其中“project_satus”字段意为“项目状态”,2对应的是“正在推进”状态,也就是说对所有项目中状态为“正在推进”项目进行更新。已经完结的项目不更新。

设置运行方式为“从2011-11-05零点开始,每天运行一次”。

 三、对数据库设置启动时运行脚本文件:

找到数据库配置文件,我这里是Windows下的my.ini文件,添加代码设置自动运行的文件脚本目录:

在updatetime.sql中添加如下代码:

USE lmsite;
UPDATE tp_business SET elapsed_time = concat(DATEDIFF(NOW(),FROM_UNIXTIME(start_time)),'天') WHERE work_status='2';
UPDATE tp_project SET took_days = DATEDIFF(NOW(),FROM_UNIXTIME(start_date)) WHERE project_status='2';

 注意要保存为UTF-8编码格式。即可。

这篇关于基于siyucms的信息系统开发(一)历时天数的设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/688898

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做