小程序(十四)后端-签到成功
文章目录
- 一、持久层
- 1、CheckinMapper.xml
- 2、CheckinMapper.java
- 3、TbHolidaysDao.xml
- 4、TbHolidaysDao.java
- 5、TbWorkdayDao.xml
- 6、TbWorkdayDao.java
- 二、业务层
- 1、 CheckinService.java
- 三、conroller层
- 1、编写 TbUserDao.xml 文件,查询员工的入职日期。
- 2、编写 TbUserDao.java 接口,定义抽象方法。
- 3、在 UserService.java
- 4、实现查询考勤结果的Web方法
一、持久层
1、CheckinMapper.xml
<select id="searchTodayCheckin" parameterType="int" resultType="HashMap">SELECTu.name,u.photo,d.dept_name AS deptName,ck.address,CASEWHEN ck.status=1 THEN '正常'WHEN ck.status=2 THEN '迟到'END AS status,DATE_FORMAT(ck.create_time,'%H:%i') AS checkinTime,ck.dateFROM tb_user AS uLEFT JOIN tb_dept AS d ON u.dept_id = d.idLEFT JOIN tb_checkin AS ck ON u.id = ck.user_id AND ck.date = CURRENT_DATEWHERE u.id = #{userId} AND u.status=1</select><select id="searchCheckinDays" parameterType="int" resultType="long">SELECT COUNT(*) AS countFROM tb_checkinWHERE user_id=#{userId}</select><select id="searchWeekCheckin" parameterType="HashMap" resultType="HashMap">SELECTCAST(date AS CHAR) AS date,IF(status=1,'正常','迟到') AS statusFROM tb_checkinWHERE user_id=#{userId} AND date BETWEEN #{startDate} AND #{endDate}</select>
2、CheckinMapper.java
@Mapper
public interface TbCheckinDao {public HashMap searchTodayCheckin(int userId);public long searchCheckinDays(int userId);public ArrayList<HashMap> searchWeekCheckin(HashMap param);}
3、TbHolidaysDao.xml
<select id="searchHolidaysInRange" parameterType="HashMap" resultType="String">SELECT dateFROM tb_holidaysWHERE date BETWEEN #{startDate} AND #{endDate}</select>
4、TbHolidaysDao.java
public interface TbHolidaysDao {
……public ArrayList<String> searchHolidaysInRange(HashMap param);}
5、TbWorkdayDao.xml
<select id="searchWorkdayInRange" parameterType="HashMap" resultType="String">SELECT dateFROM tb_workdayWHERE date BETWEEN #{startDate} AND #{endDate}</select>
6、TbWorkdayDao.java
public interface TbWorkdayDao {……
public ArrayList<String> searchWorkdayInRange(HashMap param);
}
二、业务层
1、 CheckinService.java
public class CheckinServiceImpl{……public HashMap searchTodayCheckin(int userId) {HashMap map = checkinDao.searchTodayCheckin(userId);return map;}public long searchCheckinDays(int userId) {long days = checkinDao.searchCheckinDays(userId);return days;}public ArrayList<HashMap> searchWeekCheckin(HashMap param) {ArrayList<HashMap> checkinList = checkinDao.searchWeekCheckin(param);ArrayList<String> holidaysList = holidaysDao.searchHolidaysInRange(param);ArrayList<String> workdayList = workdayDao.searchWorkdayInRange(param);DateTime startDate = DateUtil.parseDate(param.get("startDate").toString());DateTime endDate = DateUtil.parseDate(param.get("endDate").toString());DateRange range = DateUtil.range(startDate, endDate, DateField.DAY_OF_MONTH);ArrayList list = new ArrayList();range.forEach(one -> {String date = one.toString("yyyy-MM-dd");//查看今天是不是假期或者工作日String type = "工作日";if (one.isWeekend()) {type = "节假日";}if (holidaysList != null && holidaysList.contains(date)) {type = "节假日";} else if (workdayList != null && workdayList.contains(date)) {type = "工作日";}String status = "";//如果date1 < date2,返回数小于0,date1==date2返回0,date1 > date2 大于0if (type.equals("工作日") && DateUtil.compare(one, DateUtil.date()) <= 0) {status = "缺勤";boolean flag=false;for (HashMap<String, String> map : checkinList) {if (map.containsValue(date)) {status = map.get("status");flag=true;break;}DateTime endTime=DateUtil.parse(DateUtil.today()+""+constants.attendanceEndTime);String today=DateUtil.today();if(date.equals(today)&&DateUtil.date().isBefore(endTime)&&flag==false)
{status="";}}}HashMap map = new HashMap();map.put("date", date);map.put("status", status);map.put("type", type);map.put("day", one.dayOfWeekEnum().toChinese("周"));list.add(map);});return list;}}
三、conroller层
1、编写 TbUserDao.xml 文件,查询员工的入职日期。
<select id="searchUserHiredate" parameterType="int" resultType="String">SELECT hiredate FROM tb_user WHERE id=#{userId} AND status = 1
</select>
2、编写 TbUserDao.java 接口,定义抽象方法。
public interface TbUserDao {……public String searchUserHiredate(int userId);}
3、在 UserService.java
public class UserServiceImpl implements UserService {……@Overridepublic String searchUserHiredate(int userId) {String hiredate = userDao.searchUserHiredate(userId);return hiredate;}}
4、实现查询考勤结果的Web方法
public class CheckinController {……@Autowiredprivate UserService userService;@Autowiredprivate SystemConstants constants;@GetMapping("/searchTodayCheckin")@ApiOperation("查询用户当日签到数据")public Result searchTodayCheckin(@RequestHeader("token") String token) {int userId = jwtUtil.getUserId(token);HashMap map = checkinService.searchTodayCheckin(userId);map.put("attendanceTime", constants.attendanceTime);map.put("closingTime", constants.closingTime);long days = checkinService.searchCheckinDays(userId);map.put("checkinDays", days);//判断日期是否在用户入职之前DateTime hiredate = DateUtil.parse(userService.searchUserHiredate(userId));DateTime startDate = DateUtil.beginOfWeek(DateUtil.date());if (startDate.isBefore(hiredate)) {startDate = hiredate;}DateTime endDate = DateUtil.endOfWeek(DateUtil.date());HashMap param = new HashMap();param.put("startDate", startDate.toString());param.put("endDate", endDate.toString());param.put("userId", userId);ArrayList<HashMap> list = checkinService.searchWeekCheckin(param);map.put("weekCheckin", list);return Result.ok().put("result", map);}}
相关文章:
小程序(十四)后端-签到成功
文章目录一、持久层1、CheckinMapper.xml2、CheckinMapper.java3、TbHolidaysDao.xml4、TbHolidaysDao.java5、TbWorkdayDao.xml6、TbWorkdayDao.java二、业务层1、 CheckinService.java三、conroller层1、编写 TbUserDao.xml 文件,查询员工的入职日期。2、编写 TbU…...

X264简介-Android使用(一)
X264 简介及使用 1、简介 2、环境搭建 3、使用 4、小结 简介 官网连接:https://www.videolan.org/developers/x264.html 官方文档:https://wiki.videolan.org/Category:X264/ x264是用于编码H.264/MPEG-4 AVC视频流的免费软件库。它世界上最流行的…...

DetectGPT:使用概率曲率的零样本机器生成文本检测
DetectGPT的目的是确定一段文本是否由特定的llm生成,例如GPT-3。为了对段落 x 进行分类,DetectGPT 首先使用通用的预训练模型(例如 T5)对段落 ~xi 生成较小的扰动。然后DetectGPT将原始样本x的对数概率与每个扰动样本~xi进行比较。…...

【深度学习】BERT变体—BERT-wwm
1.BERT-wwm 1-1 Whole Word Masking Whole Word Masking (wwm)是谷歌在2019年5月31日发布的一项BERT的升级版本,主要更改了原预训练阶段的训练样本生成策略。 原有基于WordPiece的分词方式会把一个完整的词切分成若干个子词,在生成训练样本时ÿ…...
【华为OD机试真题 java、python、c++】优秀学员统计【2022 Q4 100分】(100%通过)
代码请进行一定修改后使用,本代码保证100%通过率。本文章提供java、python、c++三种代码 题目描述 公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。 每个员工会对应一个id,每天的打卡记录记录当…...
JavaScript里的循环方法:forEach,for-in,for-of
文章目录forEach循环for–in循环for-of循环for-of循环使用例子:循环一个数组(Array):循环一个字符串:循环一个类型化的数组(TypedArray):循环一个Map:循环一个 Set:循环一个 DOM collection循环一个拥有enumerable属性的对象循环一个生成器(g…...

汽车标定知识整理(二):CCP报文基本命令介绍
目录 一、基本命令 CRO命令报文的基本命令表: 二、基本命令与可选命令帧格式介绍 1、CONNECT——建立连接(0x01) 2、GET_CPP_VERSION——获取CCP版本(0x1B) 3、SET_MTA——设置内存传输地址(0x02&#…...

windows系统安装Linux虚拟机教程
虚拟机的安装首先要下载虚拟机的安装包,当前最新版本是VMware 16.2.1。软件我都已经给大家准备好了(含序列号),大家在这里下载就好。虚拟机安装包下载完毕之后,将它安装到电脑里。这个安装过程很简单,一路下…...
“基于Spring Cloud Alibaba的微服务架构实战:Nacos配置管理“
引言 Spring Cloud Alibaba 是 Spring Cloud 和 Alibaba 集团联合推出的开源微服务框架,旨在为 Java 开发者提供一种简单、易用、高效的微服务解决方案。Nacos 是一个面向云原生应用的动态服务发现、配置管理和服务管理平台,提供了服务注册与发现、配置管…...
【Linux】常见面试题
1. 查看文件内容 cat tail head less more 2. 几个查看文件内容的命令有什么区别 cat 文件名 # 将文件内的内容全部打印出来,cat 文件1 文件2 先将文件1全部法印,然后在打印文件2 more 文件名 # 分屏查看 less 文件名 # 上下分页查看 head 文件…...

【数据结构】顺序表:尾部操作我很行,随机访问我超快!!!
顺序表的模拟实现 文章目录顺序表的模拟实现1.线性表2.顺序表2.1概念结构2.2顺序表的模拟实现2.2.1顺序表的初始化2.2.2顺序表的销毁2.2.3尾插数据2.2.4尾删数据2.2.5头插数据2.2.6头删数据2.2.7中间插入数据2.2.8中间删除数据2.2.9打印顺序表2.2.10查找数据2.2.11复用Insert和…...
SQL优化
SQL优化 SQL优化的方法: sql查询语句尽不使用select * ,而是具体的字段。 节约资源,减少网络开销。减少回表,提高查询效率。 避免在where子句中使用or来连接条件。 or可能会使索引失效,从而进行全表查询。 尽量使用…...
Java ArrayList 和 LinkList 原理对比
Java 中的 ArrayList 和 LinkedList 都是实现了 List 接口的集合类它们都允许添加、删除和修改元素。但是它们的底层实现原理不同导致它们在不同的场景下拥有不同的优劣势。 ArrayListArrayList 的底层是通过数组实现的因此它具有数组的特性。它允许快速随机访问元素但是在插入…...

【Spring】入门概述(一)
🚗Spring学习第一站~ 🚩本文已收录至专栏:Spring家族学习之旅 👍希望您能有所收获 一.初识 Spring并不是单一的一个技术,而是一个大家族,发展到今天已经形成了一种开发的生态圈,Spring提供了若…...

十二、面向切面编程AOP
IoC使软件组件松耦合。AOP让你能够捕捉系统中经常使用的功能,把它转化成组件。 AOP(Aspect Oriented Programming):面向切面编程,面向方面编程。(AOP是一种编程技术) AOP是对OOP的补充延伸。 …...
Mybatis 处理 CLOB/BLOB 类型数据
Mybatis 处理 CLOB/BLOB 类型数据 BLOB 和 CLOB 都是大型字段类型。 BLOB通过二进制存储,而CLOB可以直接存储文本。 通常,图片、文件、音乐等信息存储在 BLOB 字段中。首先,文件是转换为二进制,然后存储在。文章或较长的文本存…...

【NLP经典论文阅读】Efficient Estimation of Word Representations in Vector Space(附代码)
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...
Spring bean生命周期分为几个阶段?
bean 的生命周期从调用 beanFactory 的 getBean 开始,到这个 bean 被销毁,可以总结为以下七个阶段:处理名称,检查缓存→处理父子容器→处理 dependsOn→选择 scope 策略→创建 bean→类型转换处理→销毁 bean划分的阶段和名称并不…...

【基础算法】单链表的OJ练习(4) # 分割链表 # 回文链表 #
文章目录前言分割链表回文链表写在最后前言 本章的OJ练习相对前面的难度加大了,但是换汤不换药,还是围绕单链表的性质来出题的。我相信,能够过了前面的OJ练习,本章的OJ也是轻轻松松。 对于OJ练习(3):-> 传送门 <…...

SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊)
SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊) 目录SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊)1.概述2.最佳实践2.1创建项目引入依赖(mail)2.2 修改yml配置文件2.3 启动类添加EnableScheduling注解2.4 执行的…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...