基于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

相关文章

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis