SpringBoot本地判定判定工作日节假日及工作时段解决方案

SpringBoot本地判定判定工作日节假日及工作时段解决方案

文章目录

  • SpringBoot本地判定判定工作日节假日及工作时段解决方案
    • 主要思路
    • 建立数据库表,存储节假日及工作日
    • 通过代码生成增删改查Java后端代码及前端代码
    • 引入 hutool maven 依赖
    • 编写工具类,进行判定

主要思路

正常来说周一到周五为工作日,但是由于国家法定节假日规定;
如周一到周五,可能为休息日;周末可能为工作日,
这个时候就需要额外进行判定。

so:

数据库存储需额外判定的日期:工作日和节假日。
查询数据库存储的日期,进行判定

也有很多付费的公网api可调用:

拓展坞节假日接口
万年历

建立数据库表,存储节假日及工作日

CREATE TABLE `tb_extra_day` (`id` bigint NOT NULL AUTO_INCREMENT,`day_specific` date DEFAULT NULL COMMENT '日期',`day_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '日期类型,1工作日,0节假日',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',`create_by` bigint DEFAULT NULL COMMENT '创建者',`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '禁用启用状态',`update_by` bigint DEFAULT NULL COMMENT '更新者',PRIMARY KEY (`id`) USING BTREE,KEY `create_by_idx` (`create_by`) USING BTREE,KEY `update_by_idx` (`update_by`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT COMMENT='额外工作节假日';

通过代码生成增删改查Java后端代码及前端代码

示例存储数据

-- ----------------------------
-- Records of tb_extra_day
-- ----------------------------
INSERT INTO `tb_extra_day` VALUES (2, '2024-02-04', '1', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (3, '2024-02-18', '1', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (4, '2024-04-07', '1', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (5, '2024-04-28', '1', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (6, '2024-05-11', '1', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (7, '2024-09-14', '1', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (8, '2024-09-29', '1', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (9, '2024-10-12', '1', '2023-11-16 10:56:28', '2023-11-30 17:04:45', NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (10, '2024-01-01', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (11, '2024-02-12', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (12, '2024-02-13', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (13, '2024-02-14', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (14, '2024-02-15', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (15, '2024-02-16', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (16, '2024-04-04', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (17, '2024-04-05', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (18, '2024-05-01', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (19, '2024-05-02', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (20, '2024-05-03', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (21, '2024-06-10', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (22, '2024-09-16', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (23, '2024-09-17', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (24, '2024-10-01', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (25, '2024-10-02', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (26, '2024-10-03', '0', '2023-11-16 10:56:28', '2023-11-23 10:13:24', NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (27, '2024-10-04', '0', '2023-11-16 10:56:28', NULL, NULL, '0', NULL, '0', NULL);
INSERT INTO `tb_extra_day` VALUES (28, '2024-10-07', '0', '2023-11-16 10:56:28', '2023-11-23 10:11:35', NULL, '0', NULL, '0', NULL);

引入 hutool maven 依赖

        <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.22</version></dependency>

编写工具类,进行判定

工具类返回布尔值,业务根据返回值自行处理
自行查询数据库存储的数据
可根据年份查询指定数据,提供查询效率


import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;/*** 功能描述: 判断工作日、工作时间工具类** @author : yzd e-mail: 121665820@qq.com* @create : 2023/11/10 10:12*/
@Component
public class HolidayUtil {/*** 上午 上班时间*/private static final String MORNING_WORK_TIME = "9:00:00";/*** 上午 下班时间*/private static final String MORNING_REST_TIME = "12:00:00";/*** 下午 上班时间*/private static final String AFTERNOON_WORK_TIME = "14:00:00";/*** 下午 下班时间*/private static final String AFTERNOON_REST_TIME = "18:00:00";/*** 额外节假日,需要手动录入当年放假调休的日期*/private static List<String> HOLIDAY = new ArrayList<>(100);/*** 额外加班日, 需要手动录入当年额外的上班日*/private static List<String> EXTRA_WORK_DAY = new ArrayList<>(100);/*** 额外日期查询服务*/private static IExtraDayService iExtraDayService;/*** 初始化*/@PostConstructprivate void initialize() {iExtraDayService = SpringUtil.getBean(IExtraDayService.class);}/*** 功能描述: 判断当前日期是否为工作日 工作时间段** @param date 日期* @return : java.lang.Boolean* @author : yzd e-mail: 121665820@qq.com* @create : 2023/11/10 9:26*/public static Boolean isWorkingDay(Date date) {initDay();// 初始值不是工作日String formatDate = DateUtil.formatDate(date);// 是否额外节假日if (HOLIDAY.contains(formatDate)) {return Boolean.FALSE;}// 不是 额外工作日 ; 是周末if (!EXTRA_WORK_DAY.contains(formatDate) && DateUtil.isWeekend(date)) {return Boolean.FALSE;}// 今日上午 上班时间段DateTime morningWorkTime = DateUtil.parseDateTime(DateUtil.today() + " " + MORNING_WORK_TIME);DateTime morningRestTime = DateUtil.parseDateTime(DateUtil.today() + " " + MORNING_REST_TIME);// 今日下午 上班时间段DateTime afternoonWorkTime = DateUtil.parseDateTime(DateUtil.today() + " " + AFTERNOON_WORK_TIME);DateTime afternoonRestTime = DateUtil.parseDateTime(DateUtil.today() + " " + AFTERNOON_REST_TIME);// 在上午 上班时间段if (date.after(morningWorkTime) && date.before(morningRestTime)) {return Boolean.TRUE;}if (DateUtil.isSameTime(date, morningWorkTime) || DateUtil.isSameTime(date, morningRestTime)) {return Boolean.TRUE;}// 在下午午 上班时间段if (date.after(afternoonWorkTime) && date.before(afternoonRestTime)) {return Boolean.TRUE;}if (DateUtil.isSameTime(date, afternoonWorkTime) || DateUtil.isSameTime(date, afternoonRestTime)) {return Boolean.TRUE;}return Boolean.FALSE;}public static void main(String[] args) {DateTime dateTime = DateUtil.parseDateTime(DateUtil.today() + " " + "9:00:00");Boolean workingDay = isWorkingDay(dateTime);if (workingDay) {System.out.println("工作日,加油,打工人");} else {System.out.println("开开心心过节,高高兴兴干饭!!!");}}/*** 初始话节假日,需要手动录入当年放假调休的上班时间 初始化额外加班日,,需要手动录入当年放假调休的休息时间**/public static void initDay() {// 查询数据库,自行初始化常量 TODO }}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/199181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决PHPExcel导出一万行以上数据变空白的问题

上午同事突然反馈导出异常&#xff0c;导出少量数据正常&#xff0c;1万行以上就不行了&#xff0c; 开始以为又是mysql查询性能不足导致&#xff0c;经稍微研究测试&#xff0c;判定是php运行内存不足导致&#xff0c;经过下面的处理问题消失 修改内存限制 在PHP.ini文件中&…

从零开始学习 JS APL(一):完整指南和实例解析

本章内容主要是按一下来&#xff1a; 操作DOM BOM 比如 控制网页元 素交互等各种网页 交互效果 以下是我总结笔记&#xff08;仅供参考&#xff09; webAPL 获取DOM对象 变量声明有三个 var let 和 const 我们应该用那个呢&#xff1f; 首先var 先排除&#xff0c;老派写法…

JOSEF约瑟 同步检查继电器DT-13/200 100V柜内安装,板前接线

系列型号 DT-13/200同步检查继电器; DT-13/160同步检查继电器; DT-13/130同步检查继电器; DT-13/120同步检查继电器; DT-13/90同步检查继电器; DT-13/254同步检查继电器; 同步检查继电器DT-13/200 100V柜内板前接线 一、用途 DT-13型同步检查继电器用于两端供电线路的…

linux系统下农场种菜小游戏!

linux系统下农场种菜小游戏&#xff01; 今天给大家分享一个linux系统下一个简单的小游戏 源码如下&#xff0c;在linux系统下创建一个.sh的脚本文件&#xff0c;复制粘贴进去即可&#xff01; #!/bin/bash# 初始化变量 vegetables("生菜" "西兰花" &qu…

SpringBoot启动流程

SpringBoot启动流程 文章目录 SpringBoot启动流程SpringBoot启动流程 SpringBoot启动流程 视频链接&#xff1a; https://www.bilibili.com/video/BV15b4y1a7yG/?p174&spm_id_frompageDriver&vd_sourcef6debc5a79e3f424f9dde2f13891b158 看李老师讲的吧&#xff0c;特…

服务器数据恢复—服务器断电导致XenServer数据文件丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌720服务器搭配该品牌某型号RAID卡&#xff0c;使用4块STAT硬盘组建了一组RAID10阵列。服务器上部署XenServer虚拟化平台&#xff0c;系统盘 数据盘两个虚拟机磁盘。虚拟机上安装的是Windows Server操作系统&#xff0c;作为Web服务器使用…

虾皮助手:提升Shopee卖家运营效率的必备辅助工具

随着电商市场的快速发展&#xff0c;越来越多的卖家选择在Shopee平台上开设在线商店。然而&#xff0c;随之而来的是更多的竞争和挑战。为了在这个竞争激烈的市场中脱颖而出&#xff0c;卖家们需要寻找一种工具来帮助他们更高效地管理和运营他们的店铺。虾皮助手&#xff08;Sh…

CSS特效026:扇骨打开关闭的动画

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

数据结构的一些结论

任何一颗二叉树的叶子结点在先序、中序、后序遍历中的相对位置不变。最后一趟排序前仍可能没有在最终位置上的排序是插入排序。 B − B^- B−树第一层最少有1个节点&#xff0c;第二层最少有2个&#xff0c;第3层最少有 2 m 2 2 \frac{m}{2} 22m​,第4层最少有 2 ( m 2 ) 2 2 …

vue创建项目,使用可视化界面安装插件

安装项目&#xff1a; vue create vue-app 选择默认配置就行&#xff0c;也可以按需选择自定义配置 vue ui通过可视化管理项目 通过可视化安装全家桶插件

android 13.0 Camera2去掉前置摄像头闪光灯功能

1.概述 在13.0定制化开发中,对于Camera2前置摄像头拍照时闪光灯闪烁一下的问题,是必须要去除的明显影响到使用的功能, 所以根据代码来去掉前置摄像头闪光灯的问题,接下来看具体实现相关功能 2.Camera2去掉前置摄像头闪光灯的核心代码 /packages/apps/Camera2/src/com/andr…

连接池打满,导致页面夯住

连接池打满&#xff0c;导致页面夯住 1、背景生产环境中访问系统&#xff0c;页面延迟卡顿 2、排产思路 1&#xff09;、查看日志是排查问题的第一要素&#xff08;个人认为&#xff09;&#xff1b;查看日志发现使用com.alibaba.druid.pool设置最大连接数为100&#xff0c;已…

【android开发-15】android中广播broadcast用法详解

1&#xff0c;broadcast类型 在Android中&#xff0c;Broadcast是一种用于在应用程序组件之间传递消息的机制。它允许一个组件&#xff08;发送者&#xff09;将消息发送给其他组件&#xff08;接收者&#xff09;&#xff0c;即使它们之间不存在直接的联系。 Android中的Bro…

挑战音频爬虫的技术迷宫:Watir和Ruby的奇妙合作

概述 音频爬虫是一种可以从网站上抓取音频文件的程序。音频爬虫的应用场景很多&#xff0c;比如语音识别、音乐推荐、声纹分析等。然而&#xff0c;音频爬虫也面临着很多技术挑战&#xff0c;比如音频文件的格式、编码、加密、隐藏、动态加载等。如何突破这些技术障碍&#xf…

人工智能和程序员

一、介绍人工智能和程序员 人工智能&#xff08;AI&#xff09;是一种模拟人类智能的计算机系统&#xff0c;其目的是让计算机具备类似人类的学习、推理、规划和理解能力。人工智能致力于创建能够感知、适应环境并作出决策的智能体&#xff0c;以解决各种复杂的问题。程序员是…

代码随想录算法训练营第五十六天 | 583. 两个字符串的删除操作,72. 编辑距离

目录 583. 两个字符串的删除操作 72. 编辑距离 583. 两个字符串的删除操作 题目链接&#xff1a;583. 两个字符串的删除操作 看到这一题就感觉很熟悉&#xff0c;实际上就是求最长公共子序列。 但这题出在这里的原因是为了给下一题做铺垫&#xff0c;所以还是换一种思路&#x…

整数和浮点数在内存中的存储​(大小端详解)

目录 一、整数在内存中的存储 二、大小端字节序和字节序判断 2.1为什么有大小端?​ 2.2请简述大端字节序和小端字节序的概念&#xff0c;设计一个小程序来判断当前机器的字节序。&#xff08;10分&#xff09;-百度笔试题 方法一&#xff08;char*强制类型转换&#xff09…

迅为RK3588开发板定制Ubuntu和Debian系统-系统定制(无法联网)

在上一个小节中讲解了 ubuntu 和 debian 文件系统的定制&#xff0c;但那是在可以运行脚本正常构 建系统的前提下&#xff0c;而本小节则是针对部分特殊用户无法联网的情况。 在 source 目录下存放了已经构建完成的压缩包&#xff0c;如下图所示 然后使用以下命令将该压缩包解…

Hive SQL的各种join总结

说明 Hive join语法有6中连接 inner join&#xff08;内连接&#xff09;、left join&#xff08;左连接&#xff09;、right join&#xff08;右连接&#xff09;、full outer join&#xff08;全外连接&#xff09;、left semi join&#xff08;左半开连接&#xff09;、cr…

Java 为什么叫 Java?

Java 为什么叫 Java &#xff1f; JavaWorld 于 1996 年出版的 Java 小组访谈中提及了 Java 这个名称的由来&#xff0c;外媒 coderoasis 对此进行了整理和介绍。 诞生于 Sun Microsystems 时&#xff0c;这门语言还不叫 Java&#xff0c;而是叫 OAK 。然而 OAK 团队去注册商标…