来,你们想要的打卡功能( 二 )


clockin_count:统计表 , 统计日志表中用户的打卡信息 , 数据相对比较少 , 提取出来更加直观 , 查询数据用的比较频繁
实现思路首先进行判断项目是否存在 , 存在才能进行打卡 , 接着判断今天是否已打卡 , 如果今天没打卡则插入数据 , 然后判断昨天是否打卡 ,
昨天如果打卡了则连续天数 , 总天数都加一 , 若昨天没打卡 , 则连续天数设为一 , 总天数加一 , 思维导图如下
来,你们想要的打卡功能文章插图
这里主要就是sql语句的编写 , 我这里主要用到了sql中的 LEFT语法, 对应了oracle中的substr() , 主要是用来判断今天昨天是否打卡
语法: ==LEFT (ARG,LENGTH)== ARG源数据 , LENGTH个字符串 , ARG可以是CHAR或BINARY STRING
例如:left('12345',2) --> 12
SELECT * FROM clockin_log where name = #{name} and pid = #{pid}and LEFT(dtime,10) = LEFT(NOW(),10)SELECT * FROM clockin_log where name = #{name} and pid = #{pid}and LEFT(dtime,10)=LEFT(#{dtime},10)既由 2020-10-10T10:30:51得到2020-10-10主要代码这里我用到了 MybatisPlus , 具体使用可以参照
【来,你们想要的打卡功能】这里的Result是我定义了一个结果集包含 code —— 状态码 , msg —— 返回消息, data —— 数据信息
// name 用户名 pid 项目编号public Result clock(String name,String pid){// 返回的数据类型Result result = new Result<>();// 得到昨天的日期Calendar cal= Calendar.getInstance();cal.add(Calendar.DATE,-1);Date yesterday=cal.getTime();// 判断今天是否打卡Boolean isexit = clockinLogService.selectClockinIsexit(name, Integer.parseInt(pid));LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();wrapper.eq(ClockinCount::getName,name).eq(ClockinCount::getPid,Integer.parseInt(pid));ClockinCount one = clockinCountService.getOne(wrapper);LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>();wrapper1.eq(ClockinProject::getPid,Integer.parseInt(pid));ClockinProject project = clockinProjectService.getOne(wrapper1);//打卡项目是否存在if (!StringUtils.isEmpty(project)){if (isexit){// 判断今天是否打卡result.setRetCode(Result.ERROR);result.setRetMsg("今日已打卡");result.setRowData(one);return result;}else {// 记录打卡信息ClockinLog clockinLog = new ClockinLog();clockinLog.setName(name).setPid(Integer.parseInt(pid)).setDtime(LocalDateTime.now());boolean save = clockinLogService.save(clockinLog);if(save){//是否插入数据成功Boolean yesterdayIsexit = clockinLogService.selectClockinYesterdayIsexit(name, Integer.parseInt(pid), yesterday);System.err.println("yesterdayIsexit->"+yesterdayIsexit);if (yesterdayIsexit){//判断昨天有没有打卡System.err.println("昨天打卡了");// 更新打卡次数ClockinCount cc = new ClockinCount();LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();updateWrapper.eq(ClockinCount::getPid,Integer.parseInt(pid)).eq(ClockinCount::getName, name);cc.setSum(one.getSum()+1).setCloop(one.getCloop()+1);clockinCountService.update(cc,updateWrapper);}else {if (!StringUtils.isEmpty(one)){// 统计表中用户存在否// 更新打卡次数ClockinCount cc = new ClockinCount();LambdaUpdateWrapper


推荐阅读